• EXT4参数优化及测试---转载


    原文链接:https://blog.csdn.net/helloanthea/article/details/50464774
    (一)测试环境
    硬件环境

    Inspur NF5270M3, CPU E5-2650 v2@2.60GHz(2Sockect * 8Core * 2HT)
    8 * 16GB of DDR3@1.33G RAM (NUMA)
    ASPEED Graphics Family (rev 21)(used in text-only mode)
    HGST HUS724030ALA640 7200 RPM 2.7TB SATA HDD

    软件环境

    操作系统:CentOS Linux release 7.1.1503
    kernel版本:3.10.0-229.el7.x86_64

    (二)系统配置
    系统分区

    /boot /dev/sda1 500M ext4
    / /dev/sda2(lv: bclinux-root) 292G xfs
    /mnt /dev/sdm1 40G ext4 (测试分区)
    /dev/sdk1 4G jdb (外部日志设备)
    1
    2
    3
    4
    测试均在测试分区/sdm1上进行,默认不采用外部日志。
    外部日志仅在测试外部日志分区时作为对比测试项。

    其他配置

    关闭CPU frequency/voltage scaling
    系统工作在文本模式,没有启动X图形界面

    (三)参数调优及结论分析
    mkfs惰性初始化
    使用time工具计算命令的执行时间。

    测试一:惰性初始化

    $ time mke2fs -t ext4 /dev/sdm1 //惰性初始化(默认)
    1
    测试二:关闭惰性初始化

    $ time mke2fs -t ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/sdm1 //关闭惰性初始化
    1
    如图,惰性初始化的好处就是能迅速的创建文件系统,尽量把初始化的工作推迟到挂载后进行。
    不建议在benchmark的时候打开该选项,尤其是与其他文件系统做性能测试对比时,会影响测试结果的公允性。


    三种日志模式
    /dev/sdm1 on /mnt type ext4

    测试一:data=writeback

    $ mke2fs -t ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/sdm1
    $ mount -t ext4 -o data=writeback /dev/sdm1 /mnt/
    $ mount | grep mnt
    /dev/sdm1 on /mnt type ext4
    (rw,relatime,seclabel,data=writeback)
    1
    2
    3
    4
    5
    测试二:data=ordered

    $ mke2fs -t ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/sdm1
    $ mount -t ext4 /dev/sdm1 /mnt/
    $ mount | grep mnt
    /dev/sdm1 on /mnt type ext4
    (rw,relatime,seclabel,data=ordered)
    1
    2
    3
    4
    5
    测试二:data=journal

    $ mke2fs -t ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/sdm1
    $ mount -t ext4 -o data=journal /dev/sdm1 /mnt/
    $ mount | grep mnt
    /dev/sdm1 on /mnt type ext4
    (rw,relatime,seclabel,nodelalloc,data=journal) //journal与delalloc不能同时使能。
    1
    2
    3
    4
    5
    采用fs_mark这个测试工具,测试写文件系统的速度。

    fs_mark -n 10000 -s 100 -L 1 -S 0 -D 100 -N 100 -d /mnt/test -t 32
    1
    如图,可以看到写journal模式最差,writeback略好于ordered。如果你的硬盘有电池备份,你大可使用writeback,或者ordered也可以。


    journal_async_commit
    /dev/sdm1 on /mnt type ext4

    测试一:data=writeback,^journal_checksum,^journal_async_commit

    $ mount -t ext4 -o data=writeback /dev/sdm1 /mnt/
    $ mount | grep mnt
    /dev/sdm1 on /mnt type ext4
    (rw,relatime,seclabel,data=writeback)
    1
    2
    3
    4
    测试二:data=writeback,journal_checksum,^journal_async_commit

    $ mount -t ext4 -o data=writeback,journal_checksum /dev/sdm1 /mnt/
    $ mount | grep mnt
    /dev/sdm1 on /mnt type ext4
    (rw,relatime,seclabel,journal_checksum,data=writeback)
    1
    2
    3
    4
    测试三:data=writeback,journal_checksum,journal_async_commit

    $ mount -t ext4 -o data=writeback,journal_async_commit /dev/sdm1 /mnt/
    $ mount | grep mnt
    /dev/sdm1 on /mnt type ext4(rw,relatime,seclabel,journal_checksum,journal_async_commit,data=writeback)
    1
    2
    3
    fs_mark,32个线程(-t 32),fsync(缺省打开)

    fs_mark -n 10000 -s 100 -L 1 -D 100 -N 100 -d /mnt/test -t 32
    1
    如图,journal_async_commit虽然能够提高性能,由于journal_async_commit打开的同时也必须打开journal_checksum,我们另外测试了两组来衡量journal_checksum对性能的影响(这两组默认没有打开journal_async_commit)只测journal_checksum,从我们的测试结果来看,journal_checksum对性能影响不大,第三组打开了journal_async_commit的同时也打开了journal_checksum,性能明显提升,所以建议打开journal_async_commit。


    journal_dev
    测试组一:^journal_dev

    $ mke2fs -t ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/sdm1
    $ mount -t ext4 -o data=writeback,journal_async_commit /dev/sdm1 /mnt
    $ tune2fs -l /dev/sdm1
    Journal inode: 8
    $ mount | grep mnt
    /dev/sdm1 on /mnt type ext4 (rw,relatime,seclabel,journal_checksum,journal_async_commit,data=writeback)
    // Filebench Version 1.4.9.1
    $ filebench
    filebench> load fileserver
    filebench> set $dir=/mnt/test
    filebench> run 60
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    测试组二:journal_dev

    $ mke2fs -O journal_dev /dev/sdk1
    $ mke2fs -t ext4 -J device=/dev/sdk1 -E lazy_itable_init=0,lazy_journal_init=0 /dev/sdm1
    $ tune2fs -l /dev/sdm1
    Journal device: 0x08a2
    $ mount -t ext4 -o data=writeback,journal_async_commit /dev/sdm1 /mnt
    $ mount | grep mnt
    /dev/sdm1 on /mnt type ext4 (rw,relatime,seclabel,journal_checksum,journal_async_commit,data=writeback)
    // Filebench Version 1.4.9.1
    $ filebench
    filebench> load fileserver
    filebench> set $dir=/mnt/test
    filebench> run 60
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    从测试结果来看,外部设备是普通HDD的话,对性能提升不大,推荐使用SSD/Flash设备作为外部设备。


    barrier
    测试组一:barrier

    $ mke2fs -t ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/sdm1
    $ mount -t ext4 -o data=writeback,journal_async_commit /dev/sdm1 /mnt
    $ mount | grep mnt
    $ fs_mark -n 10000 -s 100 -L 1 -S 1 -D 100 -N 100 -d /sdm1 -t 32
    /dev/sdm1 on /mnt type ext4 (rw,relatime,seclabel,journal_checksum,journal_async_commit,data=writeback)
    1
    2
    3
    4
    5
    测试组二:nobarrier

    $ mke2fs -t ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/sdm1
    $ mount -t ext4 -o data=writeback,journal_async_commit,nobarrier /dev/sdm1 /mnt
    $ fs_mark -n 10000 -s 100 -L 1 -S 1 -D 100 -N 100 -d /sdm1 -t 32
    $ mount | grep mnt
    /dev/sdm1 on /mnt type ext4 (rw,relatime,seclabel,journal_checksum,journal_async_commit,nobarrier,data=writeback)
    1
    2
    3
    4
    5
    有电池备份可以禁用该选项以提高性能,


    inode_readahead_blks
    测试组一:inode_readahead_blks=32

    $ mke2fs -t ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/sdm1
    $ mount -t ext4 -o data=writeback,journal_async_commit /dev/sdm1 /mnt
    $ cat /proc/fs/ext4/sdm1/options
    inode_readahead_blks=32
    $ filebench
    filebench> load fileserver
    filebench> set $dir=/mnt/test
    filebench> run 60
    1
    2
    3
    4
    5
    6
    7
    8
    测试组二:inode_readahead_blks=4096

    $ mke2fs -t ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/sdm1
    $ mount -t ext4 -o data=writeback,journal_async_commit,inode_readahead_blks=4096 /dev/sdm1 /mnt
    $ cat /proc/fs/ext4/sdm1/options
    inode_readahead_blks=4096
    $ filebench
    filebench> load fileserver
    filebench> set $dir=/mnt/test
    filebench> run 60
    1
    2
    3
    4
    5
    6
    7
    8
    调整预读索引表块大小,默认是32,调整为4096,可以看到IO吞吐量得到极大提升。


    noatime
    测试一:reltime

    $ mke2fs -t ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/sdm1
    $ mount -t ext4 -o data=writeback,journal_async_commit /dev/sdm1 /mnt
    $ mount | grep mnt
    /dev/sdm on /mnt type ext4 (rw,relatime,seclabel,journal_checksum,journal_async_commit,data=writeback)
    $ filebench
    filebench> load filemicro_seqread
    filebench> set $dir=/mnt/test
    filebench> run 60
    1
    2
    3
    4
    5
    6
    7
    8
    测试二:noatime

    $ mke2fs -t ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/sdm1
    $ mount -t ext4 -o data=writeback,journal_async_commit,noatime /dev/sdm1 /mnt
    $ mount | grep mnt
    /dev/sdm1 on /sdm1 type ext4 (rw,noatime,seclabel,journal_checksum,journal_async_commit,data=writeback)
    $ filebench
    filebench> load filemicro_seqread
    filebench> set $dir=/mnt/test
    filebench> run 60
    1
    2
    3
    4
    5
    6
    7
    8
    对文件系统读操作进行优化,不记录读文件的访问时间,可以看到在小文件顺序读测试中,效果明显,noatime能减轻读操作对磁盘的频繁写入。


    其他选项
    dax
    对于数据库这类自身设计了缓存的应用,不需要文件系统级别的缓存,可以打开dax。
    sunit
    swidth
    用于调整RAID的条带宽度,适配RAID。
    block-size
    如果在你的文件系统中是一些比较大的文件的话,使用较大的块大小将得到较好的性能。使用多大的块大小,需要根据你的系统综合考虑,如果系统用作邮件或者新闻服务器,使用较大的块大小,虽然性能有所提高,但会造成磁盘空间较大的浪费。
    commit
    内容同步到磁盘的时间间隔,有电池备份可适当调大。
    ————————————————
    版权声明:本文为CSDN博主「张卓豫」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/helloanthea/article/details/50464774

  • 相关阅读:
    数据库维护单数据修改(入库单月份更改)
    Git下载GitHub上的文件
    水晶报表的步骤
    html表格及列表
    html中的a标签
    了解html标签
    常见编码方式(码表)
    了解html
    Odoo官方翻译网站
    postgresql性能的几个重要参数
  • 原文地址:https://www.cnblogs.com/doufy/p/11848866.html
Copyright © 2020-2023  润新知