目前主流的第三方IO测试工具有fio、iometer和Orion,这三种工具各有千秋。
fio(Flexible I/O Tester)是一个强大的开源 IO 测试工具,用于评估和性能测试存储系统的性能。它可以在 Linux 系统上模拟各种 I/O 工作负载,并提供丰富的配置选项来满足不同的测试需求。fio 允许通过配置文件或命令行参数来定义各种复杂的 I/O 工作负载。可以设置顺序读写、随机读写、混合读写、随机大小、多线程等不同的测试场景。fio 支持多种 I/O 引擎,包括 sync、mmap、libaio、pvsync、posixaio 等。可以根据需要选择最适合的引擎。
fio 提供丰富的输出结果和统计信息,包括吞吐量、IOPS、延迟、带宽、CPU 使用率等。可以通过这些信息来评估和比较不同存储系统的性能。io 的配置选项非常丰富,可以设置并发数、队列深度、时间间隔、块大小、文件大小等参数,以满足不同的测试需求。
将SD卡插入开发板之后出现下面的log,SD卡自动挂载在mmcblk1的p1上,卡的类型为SDHC接口的32G内存卡。
你可以从 fio 的官方网站(https://github.com/axboe/fio)下载源代码,并按照官方文档提供的编译和安装步骤进行操作。请根据你的需求选择适合的安装方法,并按照上述步骤在 Linux 系统中安装 fio。
可以使用fio -help查看每个参数,具体的参数左右可以在官网查看how to文档,如下为几个常见的参数描述
filename=/dev/mmcblk1支持文件系统或者裸设备,
direct=1 测试过程绕过机器自带的buffer,使测试结果更真实
rw=randwread 测试随机读的I/O
rw=randwrite 测试随机写的I/O
rw=randrw 测试随机混合写和读的I/O
rw=read 测试顺序读的I/O
rw=write 测试顺序写的I/O
rw=rw 测试顺序混合写和读的I/O
bs=4k 单次io的块文件大小为4k
bsrange=512-2048 同上,提定数据块的大小范围
size=1g 本次的测试文件大小为1g,以每次4k的io进行测试
numjobs=30 本次的测试线程为30
runtime=18 测试时间为18秒,如果不写则一直将1g文件分4k每次写完为止
ioengine=psync io引擎使用pync方式,如果要使用libaio引擎,需要yum install libaio-devel包
rwmixwrite=30 在混合读写的模式下,写占30%
group_reporting 关于显示结果的,汇总每个进程的信息
lockmem=1g 只使用1g内存进行测试
zero_buffers 用0初始化系统buffer
nrfiles=8 每个进程生成文件的数量
测试场景:
100%随机,100%读, 4K
fio -filename=/dev/mmcblk1 -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=4k -size=1G -numjobs=50 -runtime=18 -group_reporting -name=rand_100read_4k
100%随机,100%写, 4K
fio -filename=/dev/mmcblk1 -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=1G -numjobs=50 -runtime=18 -group_reporting -name=rand_100write_4k
100%顺序,100%读 ,4K
fio -filename=/dev/mmcblk1 -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=4k -size=1G -numjobs=50 -runtime=18 -group_reporting -name=sqe_100read_4k
100%顺序,100%写 ,4K
fio -filename=/dev/mmcblk1 -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=4k -size=1G -numjobs=50 -runtime=18 -group_reporting -name=sqe_100write_4k
100%随机,70%读,30%写 4K
fio -filename=/dev/mmcblk1 -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=4k -size=1G -numjobs=50 -runtime=18 -group_reporting -name=randrw_70read_4k
io=执行了多少M的IO
bw=平均IO带宽
iops=IOPS
runt=线程运行时间
slat=提交延迟
clat=完成延迟
lat=响应时间
bw=带宽
cpu=利用率
IO depths=io队列
IO submit=单个IO提交要提交的IO数
IO complete=Like the above submit number, but for completions instead.
IO issued=The number of read/write requests issued, and how many of them were short.
IO latencies=IO完延迟的分布
io=总共执行了多少size的IO
aggrb=group总带宽
minb=最小.平均带宽.
maxb=最大平均带宽.
mint=group中线程的最短运行时间.
maxt=group中线程的最长运行时间.
ios=所有group总共执行的IO数.
merge=总共发生的IO合并数.
ticks=Number of ticks we kept the disk busy.
io_queue=花费在队列上的总共时间.
util=磁盘利用率