一、SSD稳态的重要性
SSD出厂为空盘状态,该阶段写性能可以达到峰值性能(因无需GC任务释放空闲空间)。随着非重复数据的不断写入,SSD的可写空间变小,当降低到一定阈值时就会触发SSD的垃圾回收(GC)任务释放空闲空间。该阶段性能下降较多,波动也较大,下降的幅度,取决于GC回收空闲空间的负载。当GC回收的负载和主机写入负载趋于平衡时,SSD的性能会逐渐平稳下来,并长期维持在这个状态,称为稳态。所以在测试SSD IO性能时,为了获取真实的性能结果,建议先进行预处理,使盘达到稳态后,再进行后续的测试。SSD阶段性能状态如下图所示:
二、稳态实例
Raid卡配置:
型号 | BCM 9560 -E4x8 8i SE 4GB Tri-Mode RAID卡 |
RAID级别 | raid10(1.92T SSD *8;span数量4个、每个span 2块SSD) |
读/写策略 | No Read Ahead/WriteThrough |
测试raid10(7T)的读写吞吐量,包括顺序读写、随机读写
顺序写稳态:
1、使用fio创建测试文件完成文件系统布局
fio -name=test -thread -ioengine=libaio -direct=1 -directory=/data -rw=read -bs=128K -numjobs=1 -iodepth=256 -size=7000G -group_reporting
2、顺序写预处理
fio -name=test -thread -ioengine=libaio -direct=1 -directory=/data -rw=write -bs=128K -numjobs=1 -iodepth=256 -runtime=10800 -time_based -size=7000G -group_reporting
稳态完成后,无需清空测试数据,直接进行正式的顺序读写测试。后续测试命令中和预处理保持一致-name=test、-numjobs=1,例如:
fio -directory=/data -ioengine=libaio -direct=1 -iodepth=1 -numjobs=1 -group_reporting -allow_mounted_read=1 -rw=read -bs=4k -size=10G -runtime=120 -name=test
fio -directory=/data -ioengine=libaio -direct=1 -iodepth=1 -numjobs=1 -group_reporting -allow_mounted_read=1 -rw=write -bs=4k -size=10G -runtime=120 -name=test
------------------顺序读写测试完成后,清空测试数据,准备进行随机读写测试------------------
随机写稳态:
1、使用fio创建测试文件完成文件系统布局
fio -name=test -thread -ioengine=libaio -direct=1 -directory=/data -rw=randread -bs=4K -numjobs=32 -iodepth=256 -size=220G -group_reporting -norandommap=1
2、随机写预处理
fio -name=test -thread -ioengine=libaio -direct=1 -directory=/data -rw=randwrite -bs=4K -numjobs=32 -iodepth=256 -runtime=10800 -time_based -size=220G -group_reporting -norandommap=1
稳态完成后,无需清空测试数据,直接进行正式的随机读写测试。后续测试命令中和预处理保持一致-name=test、-numjobs=32,例如:
fio -directory=/data -ioengine=libaio -direct=1 -iodepth=1 -numjobs=32 -group_reporting -allow_mounted_read=1 -rw=randread -bs=4k -size=10G -runtime=120 -name=test -norandommap=1
fio -directory=/data -ioengine=libaio -direct=1 -iodepth=1 -numjobs=32 -group_reporting -allow_mounted_read=1 -rw=randwrite -bs=4k -size=10G -runtime=120 -name=test -norandommap=1
fio -directory=/data -ioengine=libaio -direct=1 -iodepth=1 -numjobs=32 -group_reporting -allow_mounted_read=1 -rw=randrw -bs=4k -size=10G -runtime=120 -name=test -norandommap=1