mongdb数据库

mongodb使用总结

标签


fio 使用

2015年04月17日

用正确的工具,做正确的事情

FIO是一款非常不错的IO加压测试工具,可用于块设备性能测试。

异步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在电梯口排队着。

一个FIO测试实例

[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

开始执行压力测试。

玩得开心!!!