您的位置:首页 > 运维架构 > Linux

Linux IO性能测试工具: FIO之初见

2015-04-05 22:37 399 查看

0. 前言

对于存储系统,人们最为关注“三高”问题: 高性能,高可扩展性,高可靠性。尝尝会听到某司宣称自己的存储系统能够达到6个9(99.9999%99.9999\%),其指存储系统十分可靠,在一年中最多出现十几秒的宕机时间; 而对于高可扩展性,主要是指系统对存储设备(硬盘,闪存)数量增加的支持。而高性能则是指IOPS高,响应延迟低。

说远了,我们回到主题,为了测试系统IO性能的高低,在实际开发中,需要使用IO性能测试工具进行测试。今天在这里介绍一款测试工具“FIO”,它功能十分强大,能够对测试环境进行精密的配置,当然,可配置参数多,也导致想完全掌握有难度。不过,我们先来初见FIO的真面目。

1. Fio简介

简单来说,Fio是用来测试系统IO性能的工具,它的强大之处在与提供了一套测试框架,能够支持多线程多进程的IO测试,用户只需进行参数的配置,便能够方便地定制不同的IO行为(顺序读写,随机读写等),并对其性能进行监测。其作者Jens Axboe是linux内核IO部分的maintainer。而gfio则是Fio的图形监测工具,它提供了图形界面的参数配置,和性能监测图像。

2. Fio安装

Fio的安装,根据其在github上的项目安装说明,进行操作即可。

特别说明:

2.1 异步IO引擎

为了使用异步IO引擎,需要安装libaio-dev

[code]sudo apt-get install libaio-dev


2.2 安装步骤

gfio是基于gdk实现,因此需要首先安装gdk,官方文档说,gdk版本要求在2.18及其以上,但没有找到如何安装2.0以上的版本,目前使用下面的命令安装通过了,并且能够运行gfio。

[code]sudo apt-get install libgtk2.0-dev


接下来就可以正式安装Fio了。

源代码下载

[code]git clone git://git.kernel.dk/fio.git


运行configure

[code]./configure  --enable-gfio


注:如果希望不支持
gfio
,只需去掉后面的
--enable-gfio
参数

make

make install

经过这几步,Fio的安装已经全部完成,为了测试是否安装成功,这里使用examples中的例子进行测试:

[code]fio  examples/ssd-test.fio


修正出现的错误:目录设置问题

[code]fio: /mount-point-of-ssd is not a directory
fio: failed parsing directory=/mount-point-of-ssd
fio: job global dropped


修改后,如果成功执行,说明FIO安装成功。

3. 运行参数配置

Fio的运行参数配置支持“命令行模式”或者“Job File模式”,简单来讲,前者是将所有配置参数写在一个配置文件当中,然后使用
fio config_file
方式运行;而另外一种是以命令的形式进行设置。

3.1 配置实例

命令行

[code]fio  --name=first_job --ioengine=libaio --iodepth=4 \
     --size=10m       --bs=4k          --rw=write   \
     --direct=1       --filename=/devdata/1.txt


命令行模式,以 “ - - ”+参数名+“=”的方式,对参数进行配置。具体参数的意义见后面介绍。

Job File

[code][global]
    ioengine=libaio
    iodepth=4
    size=10m
    bs=4k
    rw=write
    direct=1
    filename=/devdata/1.txt
[first_job]


说明:

配置文件划分为多个区域,每个区域的参数设置均作用于其下方的区域。

“global”区域进行全局的参数配置。

非特定名字的区域(first_job)则被视为一个运行任务。

运行结果:



3.2 配置参数解释

Fio的配置参数高达上百种,要完全了解每个参数,实属不易,在这里,我只介绍几个重要的参数。

通过
fio --cmdhelp
命令,我们可以查看所有参数的意义,比如,查看“bs”的意义:

[code]$fio --cmdhelp | grep bs
  bs           : Block size unit
  bsrange      : Set block size range (in more detail than bs)
  bssplit      : Set a specific mix of block sizes
  bs_unaligned : Don't sector align IO buffer sizes
  numjobs      : Duplicate this job this many times
  exitall      : Terminate all jobs when one exits


可以得知:“bs”表示块大小。

在github的HOWTO文档中,作者对所有的配置参数做了详细的解释,当遇到不熟悉的参数时,可以进行查阅。

[code]bs      :  设置IO请求的块大小,可以给出上下限
           支持对read,write,trim分别进行设置,以逗号隔开
           比如:bs=1k-2k,3k-4k,5k-6k
size    :  文件请求的大小,控制job结束
rw      :  控制读写类型:  read/write/rw/randread/randwrite/randrw
direct  :  1表示绕过buffer,直接作用于设备
ioengine:  io引擎:libaio(异步IO),syslet等 
iodepth :  异步IO情况下,IO队列的长度
runtime :  执行时间限制,控制job结束
filename:  输出文件或者设备名,eg:/dev/sba


参考资料

Fio github主页– fio源代码及文档

GTK安装参考文档–GTK安装参考文档

FIO优秀文章–关于FIO使用的介绍
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: