fio简介

fio可以测试顺序读写,随机读写,顺序混合读写,随机混合读写,并且可以调整io并发数,在测试后会生成测试报告。比dd命令更加专业,而且dd命令也只能支持顺序读写的测试。

fio同时也是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio 等等。

安装fio的相关问题

我选择了很多中版本的fio,但是在Ubuntu14.10中编译时很多版本编译失败了(报错为:recipe for target ‘crc/crc32c-arm64.o’ failed),最后使用fio-2.1.10版本终于编译成功了,不过其中也遇到了很多问题。

Ubuntu中apt-get install无法使用

遇到这个问题需要软件包,执行 sudo apt-get update

而如果update也失败的话,就需要换一个镜像源了,这里使用清华镜像。

https://mirrors.tuna.tsinghua.edu.cn/

进入上面的网址,往下翻找到ubuntu,点击ubuntu后面的小问号,注意是问号!

1618194595090.png

得到下面的页面,可以自由选择ubuntu版本

1618194670182.png

将这里的内容复制一份。

然后在Ubuntu中执行以下命令,备份原来的源,并且将源更新为清华源。

1
2
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
sudo gedit /etc/apt/sources.list

然后会跳出一个文本编辑框,将里面的内容全删掉,更换为之前复制的内容,保存。

接下来对apt-get进行更新:sudo apt-get udpate 就可以了。

fio工具的安装

注意!一定要在fio工具编译之前安装一个libaio-dev库,否则即使fio编译成功了也会应为libaio无法加载而不能使用(会报错:engine libaio not loadable)。

  1. 先安装libaio-dev

    1
    sudo apt-get install libaio-dev -y
  2. 下载fio-2.1.10

    1
    wget http://brick.kernel.dk/snaps/fio-2.1.10.tar.gz

    或者直接到这个网址里面去下载压缩文件。

  3. 编译安装

    1
    2
    3
    tar zxf fio-2.1.10.tar.gz
    cd fio-2.1.10
    make && make install

这样就能成功安装了。

使用fio进行测试

  • 顺序写性能

    1
    fio --filename=/data/test --iodepth=64 --ioengine=libaio --direct=1 --rw=write --bs=4k --size=500m --numjobs=4 --runtime=10 --group_reporting --name=test-write
  • 顺序读性能

    1
    fio --filename=/data/test --iodepth=64 --ioengine=libaio --direct=1 --rw=read --bs=4k --size=500m --numjobs=4 --runtime=10 --group_reporting --name=test-read
  • 随机写性能

    1
    fio --filename=/data/test --iodepth=64 --ioengine=libaio --direct=1 --rw=randwrite --bs=4k --size=500M --numjobs=64 --runtime=20 --group_reporting --name=test-rand-write
  • 随机读性能

    1
    fio --filename=/data/test -iodepth=64 --ioengine=libaio --direct=1 --rw=randread --bs=4k --size=500M --numjobs=64 --runtime=20 --group_reporting --name=test-rand-read
  • 随机读写性能

    1
    fio --filename=/data/test --iodepth=64 --ioengine=libaio --direct=1 --rw=randrw --bs=4k --size=500M --numjobs=64 --runtime=20 --group_reporting --name=test-rand-readwrite

IMRSim实际测试样例

随机写

1618146204677.png

随机读

1618146433867.png

顺序写

1618145945372.png

顺序读

1618146130395.png