FIO 是一个功能强大的工具,用于模拟和测试不同类型的磁盘 I/O 工作负载。
centos 系统执行:yum install fio -y
ubuntu 系统执行:apt install fio -y
执行下面的指令创建一个1G大小的测试文件
sudo fallocate -l 1G testfile
vi test.fio
[global]
ioengine=libaio
direct=1
runtime=10s
time_based
[read_test]
filename=/data/testfile
rw=read
bs=200k
numjobs=1
[write_test]
filename=/data/testfile
rw=write
bs=200k
numjobs=1
配置文件指定了两个测试部分:read_test 和 write_test,分别用于读取和写入测试。
上述配置文件中,指定了读写的配置,如果只测试读或者只测试写,可以用#把不需要的配置注释掉。
在global中,指定了ioengine 为libaio;runtime=10s指定测试的时间为10s。
在读取测试部分(read_test)中,指定了以下参数:
filename:指定要读取的文件路径为 /data/testfile。
rw:指定操作类型为 read,表示进行读取操作。
bs:指定块大小为 200k,即每次读取的数据块大小为 200 KB。
numjobs:指定并发作业数为 1,测试时查看io如果没有到达最大,可以增加并发数。
在写入测试部分(write_test)中,和read_test含义相同。
这个配置文件将使用 libaio 引擎进行 I/O 操作,并且使用 direct=1 来进行直接 I/O 操作,而不是通过操作系统缓存。
测试前先查看目录挂载的磁盘,例如我们要测试/data目录挂载的磁盘,执行:
df -h /data
可以看到/data目录挂载的磁盘为/dev/md0
执行:fio test.fio
执行完毕后可以看到下图:括号中就是我们磁盘的读写tps。
执行:iostat -mx 2 查看磁盘的io情况
上图主要关注红框中的数据,md0是我们测试的磁盘,nvme0n1 和 nvme1n1是NVMe 设备,NVMe(Non-Volatile Memory Express)是一种高性能、低延迟的存储接口协议,用于连接闪存设备到计算机系统。
右侧的%util可以看到我们的Nvme设备利用率已经快到100%了,如果测试时这个值低于90%,需要调大test.fio配置文件中的numjobs数。
rMb/s 和wMb/s 为每秒读和写的磁盘速率。
一般测试三种场景:读写混合、只读、只写。