有两个常用命令来测试磁盘IO性能:dd和fio
dd命令测试磁盘io性能
1. 测试磁盘写能力
dd if=/dev/zero of=/test1.img bs=100M count=1 oflag=dsync status=progress
if=文件名:输入文件名
of=文件名:输出文件名
因为/dev/zero是一个伪设备(只产生空字符流),对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。
bs表示读块和写块的大小都为100M
oflag=dsync表示输出文件不经过缓冲区,来一块,写入一块
status=progress输出所有信息
2. 测试磁盘读能力
dd if=/test1.img of=/dev/null bs=100M count=1 oflag=dsync status=progress
/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以,这个命令的IO只发生在/test1.img上,也相当于测试磁盘的读能力
fio测试磁盘性能
1 顺序读
# fio -name iops -rw=read -bs=4k -runtime=60 -iodepth 16 -filename /dev/sdf
-ioengine libaio -direct=1
2 顺序写
# fio -name iops -rw=write -bs=4k -runtime=60 -iodepth 16 -filename /dev/vdb
-ioengine libaio -direct=1
3 随机读
# fio -name iops -rw=randread -bs=4k -runtime=60 -iodepth 16 -filename
/dev/sdf -ioengine libaio -direct=1
4 随机写
# fio -name iops -rw=randwrite -bs=4k -runtime=60 -iodepth 16 -filename
/dev/sdf -ioengine libaio -direct=1
filename=/root/test 测试文件名称,通常选择需要测试的盘的data目录。
direct=1 测试过程绕过机器自带的buffer。使测试结果更真实。
rw=randwrite 测试随机写的 I/O
rw=randrw 测试随机写和读的 I/O
bs=4k 单次io的块文件大小为 4k
size=1g 每个线程读写的数据量是1GB, 以每次4k的io进行测试。
numjobs=64 本次的测试线程为64.
runtime=20 测试时间为20秒,如果不写则一直将2g文件分4k每次写完为止。
iodepth=16 队列的深度为16.在异步模式下,CPU不能一直无限的发命令到SSD。
ioengine=libaio 指定io引擎使用libaio方式 libaio:Linux本地异步I/O