本文共 3040 字,大约阅读时间需要 10 分钟。
专业的测试磁盘IO性能的软件:
1、fio 【推荐使用】
2、iometer
fio的使用:
参考博客: http://lilinji.blog.51cto.com/5441000/1569623
https://linux.die.net/man/1/fio
http://elf8848.iteye.com/blog/2168876 【讲的比较好】
注意,我先使用yum安装的fio,测试时候报错,建议使用最新版的fio工具编译安装。方法如下:
yum install libaio libaio-devel 需要先安装2个包
新版的 fio-2.1.4 源码包下载 http://brick.kernel.dk/snaps/
tar xf fio-2.1.4.tar.gz
cd fio-2.1.4
./configure
make 即可在当前目录下生成fio可执行文件。
fio的几个参数:
filename=/bdata/test.big 测试文件名称,通常选择需要测试的盘所在的目录。
direct=1 测试过程绕过机器自带的buffer。使测试结果更真实。
rw=randwrite 测试随机写的I/O
rw=randrw 测试随机写和读的I/O
bs=4k 单次io的块文件大小为4k
size=2g 本次的测试文件大小为2g,以每次4k的io进行测试。
numjobs=64 本次的测试线程为64. 【建议设置为CPU的CORE数量一致】
runtime=20 测试时间为20秒,如果不写则一直将2g文件分4k每次写完为止。
ioengine=psync io引擎使用pync方式 ,此外还有libaio 异步方式。
rwmixwrite=30 在混合读写的模式下,写占30%
group_reporting 关于显示结果的,汇总每个进程的信息。
sync=1 设置异步io
fsync=1 一个io就同步数据
帮助命令:
fio --help
fio --cmdhelp 等等
# 准备个2GB的测试用的文件
dd if=/dev/zero of=/bdata/test.big bs=4k count=524288 # 通常在需要测试的那个磁盘下面生成一个这种测试用的大文件
测试随机读写:
fio --filename=/bdata/test.big -iodepth=64 -ioengine=libaio -direct=1 -rw=randwrite -bs=4k -size=2G -numjobs=64 -runtime=20-group_reporting -name=test-rand-write
测试顺序读取:
fio --filename=/bdata/test.big -iodepth=64 -ioengine=libaio --direct=1 --rw=read --bs=1m --size=2g --numjobs=4 --runtime=10 --group_reporting --name=test-read
测试顺序写性能
fio --filename=/bdata/test.big -iodepth=64 -ioengine=libaio -direct=1 -rw=write -bs=1m -size=2g -numjobs=4 -runtime=20 -group_reporting -name=test-write
测试随机读:
fio --filename=/root/test -iodepth=64 -ioengine=libaio -direct=1 -rw=randread -bs=4k -size=2G -numjobs=64 -runtime=20 -group_reporting -name=test-rand-read
测试随机写:
fio --filename=/root/test -iodepth=64 -ioengine=libaio -direct=1 -rw=randwrite -bs=4k -size=2G -numjobs=64 -runtime=20-group_reporting -name=test-rand-write
采用同步IO的随机写:
fio --filename=/root/rndwrite -iodepth=64 -ioengine=psync -direct=1 -rw=randwrite -bs=4k -size=2G -numjobs=32 -runtime=20 -group_reporting -name=test-rand-write
其他:
# 4k,100%读写:
fio --filename=/dev/sdx --direct=1 --rw=randrw --refill_buffers --norandommap --randrepeat=0 --ioengine=libaio --bs=4k --rwmixread=100 --iodepth=16 --numjobs=16 --runtime=60 --group_reporting --name=4ktest
# 8k,70%读取,30%写入:
fio --filename=/dev/sdx --direct=1 --rw=randrw --refill_buffers --norandommap --randrepeat=0 --ioengine=libaio --bs=8k --rwmixread=70 --iodepth=16 --numjobs=16 --runtime=60 --group_reporting --name=8k7030test
在阿里云SSD测试时候,使用libaio方式能达到较高的IOPS,使用psync的话,IOPS下降的很严重。从网上其他测试数据来看,异步的libaio比同步的psync方式性能高15倍左右。
附带一个MySQL DELL物理机的测试情况:
1 aio异步模式随机写入5G数据
测试命令:
fio --filename=/root/rndwrite -iodepth=64-ioengine=libaio -direct=1 -rw=randwrite -bs=4k -size=5G -numjobs=64-runtime=20 -group_reporting -name=test-rand-write
Samsung SSD 750 EVO 500GB盘为例,测试截图
2 psync同步模式随机写入5G数据
测试命令:
fio --filename=/root/rndwrite -iodepth=64-ioengine=psync -direct=1 -rw=randwrite -bs=4k -size=5G -numjobs=64 -runtime=20-group_reporting -name=test-rand-write
10.0.36.4 Samsung SSD 750 EVO 500GB盘为例,测试截图