用正确的工具,做正确的事情
FIO是一款非常不错的IO加压测试工具,可用于块设备性能测试。
iodepth
IO 队列深度,等待被调度和执行的IO任务数。
iodepth_batch
一次提交的IO数,默认值为iodepth。
iodepth_batch_complete
一次系统调用收割的IO任务数量。
iodepth_low
当没有完成的IO任务数小于或等于这个值时,IO引擎开始提交新的IO任务。
direct
是否绕过page cache进行直接IO。
fsync
执行fsync操作前,执行的IO数
在libaio引擎下这些参数的作用及IO请求流程 (转):
libaio引擎会用这个iodepth值来调用io_setup准备个可以一次提交iodepth个IO的上下文,同时申请个io请求队列用于保持IO。 在压测进行的时候,系统会生成特定的IO请求,往io请求队列里面扔,当队列里面的IO个数达到iodepth_batch值的时候,就调用io_submit批次提交请求,然后开始调用io_getevents开始收割已经完成的IO。 每次收割多少呢?由于收割的时候,超时时间设置为0,所以有多少已完成就算多少,最多可以收割iodepth_batch_complete值个。随着收割,IO队列里面的IO数就少了,那么需要补充新的IO。 什么时候补充呢?当IO数目降到iodepth_low值的时候,就重新填充,保证OS可以看到至少iodepth_low数目的io在电梯口排队着。
[global]
bs=512 ## 单次IO的块文件大小,direct io 块大小必须为扇区的倍数
ioengine=libaio ## io引擎为libaio, native 异步IO
userspace_reap ## 提高异步IO收割的速度,具体如何提高的?待进一步研究
rw=randrw ## io方式为随机读写
rwmixwrite=20 ## 混合IO读写比例 80/20
time_based ## 脚本基于时间终止
runtime=180 ## fio IO加压总时间
direct=1 ## direct IO
group_reporting ## 显示进程汇总结果
randrepeat=0 ## 与 norandommap共同决定每次产生的数据缓冲区的内容不同
norandommap ##
ramp_time=6 ## 霸爷博客中解释为了减少日志对告诉IO的影响,待进一步研究
iodepth=16 ## IO队列深度
iodepth_batch=8 ## 一次提交的IO数
iodepth_low=8 ## 未收割的IO数小于或等于8时开始提交新的IO
iodepth_batch_complete=8 ## 一次收割的IO任务数为8
exitall
[test]
filename=/dev/dfa1 ## 块设备文件
numjobs=1 ## 测试过程执行的IO线程数
执行:
fio fio-test --debug=io
开始执行压力测试。
玩得开心!!!