Linux使用Fio测试磁盘性能

一、简介

Fio 由 Jens Axboe < [email protected] > 编写,用于灵活地测试 Linux i/o 子系统和调度器。作者厌倦了编写特定的测试应用程序来对磁盘的工作负载性能进行测试,并发现现有的 i/o 基准测试/测试工具不够灵活,无法完成他想要的任务,故自己实现了Fio。Fio 是一个免费的开源工具,可用于基准测试和硬件验证,是IOPS的非常好用的工具,它还支持许多发行版,例如 Linux、OpenBSD、OpenSolaris、HP-UX、Android 和 Windows。

二、安装

2.1 系统版本

在安装系统之前我们需要使用命令先查看我们系统的版本。

命令如下: cat /proc/version

2.2 安装Fio工具

默认情况下,Fio 在 UbuntuDebian 9 默认存储库中,因此您可以通过运行以下命令轻松安装它:

sudo apt-get install fio -y

2.3 其他系统安装方式

默认情况下,Fio 在 CentOS 默认存储库中不可用。我们可以将 EPEL 存储库安装到你的系统中。你可以通过运行以下命令来安装它:

sudo yum install epel-release -y

安装 EPEL 存储库后,您可以通过运行以下命令来安装 Fio:

sudo yum install fio -y

三、参数介绍

执行测试案例:

测试路径为/mnt 采用常用的写方式,不使用缓存,每个任务命名为iotest,测试文件系统为4k,每写一次就进行同步,写入文件的大小为2g,的性能。

sudo fio --rw=write --ioengine=sync --fdatasync=1 --direct=1 --directory=/mnt  --size=2g --bs=4k --name=iotest

参数说明:

  • filename: 为该测试用例设置生成的文件名,方便各个jobs共享,如/dev/sdb;

  • directory: 测试路径;和filename对应;

  • direct:是否使用io缓存,相当于直接io或者裸io,文件内容直接写到磁盘设备上,不经过缓存,direct=1;

  • iodepth:队列深度,在异步io模式模拟一次丢给系统处理的io请求数量;同步系统由于串行,一般小于1;

  • iodepth_batch:io队列请求丢过来后,攒积到这些请求后,立即提交,默认是iodepth的值;

  • iodepth_batch_complete:io请求过来后,能retrieve获得的最多请求数;

  • ipdepth_low:io请求达到这个水平线后,开始尝试去补充和获取请求,默认是iodepth的值;

  • rw:模拟当前的读写模式,模式有randread,randwrite,randrw(可以指定rwmixread或者rwmixwrite来指定比例,默认50),read,write,rw;

  • thread:fio默认会使用fork()创建job,如果这个选项设置的话,fio将使用pthread_create来创建线程;

  • ioengine:说明job处理io请求的调度方式

    libaio - Linux 原生的异步 I/O,这也是通常用的最多的测试盘吞吐和延迟的方法 sync - 也就是最通常的 read / write 操作 vsync - 使用 readv / writev,主要是会将相邻的 I/O 进行合并 psync - 对应的 pread / pwrite pvsync / pvsync2 - 对应的 preadv / pwritev,以及 preadv2 / p writev2

  • bs:一次io的实际块大小;

  • size:每个job的测试大小,到这里才会结束io请求测试;

  • numjobs:同时并行运行的工作jobs数,相当于一个job克隆,具有相同workload(负载);

  • runtime:运行的时间(s); 如果不设置time_based,runtime设置的就算很大,那么io大小到size后就会立即停止,而不是到runtime设置的时间;

  • group_reporting:当设置这个值的时候,会把所有的jobs一起统计汇总平均值等信息,否则会按照每个jobs分别统计;

  • time_based: -time_based:如果设置这个值,即使io大小到达size后还未结束的情况,仍然会继续模拟相同的负载,直至这个时间runtime结束;

  • ramp_time:ramp本意是坡度,相当于预热,意思是跑每个job之前会跑多久的预热,预热时间不算进runtime;

  • name:给job起这个名字而不是使用默认的名称;

  • fsync=int 如果写一个文件的话,每n次IO传输完block后,都会进行一次同步脏数据的操作。

  • fdatasync=int 同fsync,但是采用fdatasync()来同步数据,但不同步元数据

四、参考

  1. fio - Flexible I/O tester rev. 3.27 1. 1. fio - Flexible I/O tester rev. 3.27 — fio 3.27-169-g1953e1-dirty documentation

你可能感兴趣的:(Linux,测试工具,服务器,运维)