磁盘测试工具FIO工具安装和使用教程
一、FIO工具安装:
1、查看fio是否安装
rpm –qa|grep fio
2、源码安装(2、3、4任选一个,推荐方法:3、rpm 的二进制安装)
官网地址:http://freecode.com/projects/fio/
github地址:https://github.com/axboe/fio
安装
wget https://github.com/axboe/fio/archive/refs/tags/fio-3.14.tar.gz
tar -zxvf fio-3.14.tar.gz
./configure
make
make install
3、如果未成功就用 rpm 安装 (推荐)
官网地址:https://pkgs.org/download/fio
获取fio的rpm安装包:http://mirror.centos.org/centos/7/os/x86_64/Packages/fio-3.7-2.el7.x86_64.rpm
4、yum安装(不推荐)
yum install fio
5、测试
fio
二、FIO工具使用方法:
参数说明:
-rw=randwrite:定义测试时的读写策略,可选值如下:随机读:randread,随机写:randwrite,顺序读: read,顺序写:write,混合随机读写:randrw0
-ioengine=libaio:libaio指的是异步模式,如果是同步就要用sync。定义fio如何下发IO请求,通常有同步IO和异步IO:同步IO一次只能发出一个IO请求, 等待内核完成后才返回。这样对于单个线程IO队列深度总是小于1,但是可以透过多个线程并发执行来解决。通常会用16~32个线程同时工作把IO队列深度塞满。异步IO则通常使用libaio这样的方式一次提交一批IO 请求,然后等待一批的完成,减少交互的次 数,会更有效率
-direct=1:定义是否使用direct IO,可选值如下:值为0,表示使用buffered IO;值为1,表示使用 direct IO
-thread:使用pthread_create创建线程,另一种是fork创建进程。进程的开销比线程要大,一般都采用thread测试。
–numjobs=1:定义测试的并发线程数
-iodepth=64:定义测试时的IO队列深度,默认为1。此处定义的队列深度是指每个线程的队列深度, 如果有多个线程测试,意味着每个线程都是此处定义的队列深度。fio总的IO并发数 =iodepth * numjobs。
-filename:定义测试文件(设备)的名称。此处选择文件,则代表测试文件系统的性能,例如:- filename=/opt/fiotest/fiotest.txt;此处选择设备名称,则代表测试裸盘的性能,例:-filename=/dev/vdb1
。如果在已经分区、并创建文件系统,且已写入数据的磁盘上进行性能测试,请注意
filename选择指定文件,以避免覆盖文件系统和原有数据。
-size=100M:定义测试IO操作的数据量,若未指定runtime这类参数,fio会将指定大小的数据量全部 读/写完成,然后才停止测试。该参数的值,可以是带单位的数字,比如size=10G,表
示读/写的数据量为10GB;也可是百分数,比如size=20%,表示读/写的数据量占该设
备总文件的20%的空间。建议测试数据量为内存两倍大,尽量避免缓存影响。
-name=job1:定义测试任务名称。
-bs=4k:定义IO的块大小(block size),单位是k、K、m和M等,默认IO块大小为4 KB。
–output TestResult.log:日志输出到TestResult.log。
-runtime:定义测试时间。如果未配置,则持续将size指定的文件大小,以每次bs值为分块大小读/ 写完。
-group_reporting:定义测试结果显示模式,group_reporting 表示汇总每个进程的统计信息,而非以不同 job汇总展示信息。
其它信息:
lockmem=1g 只使用1g内存进行测试。
zero_buffers 用0初始化系统buffer。
nrfiles=8 每个进程生成文件的数量。
磁盘读写常用测试点:
Read=100% Ramdon=100% rw=randread (100%随机读)
Read=100% Sequence=100% rw=read (100%顺序读)
Write=100% Sequence=100% rw=write (100%顺序写)
Write=100% Ramdon=100% rw=randwrite (100%随机写)
Read=70% Sequence=100% rw=rw, rwmixread=70, rwmixwrite=30
(70%顺序读,30%顺序写)
Read=70% Ramdon=100% rw=randrw, rwmixread=70, rwmixwrite=30
(70%随机读,30%随机写)
每次测试前执行 echo 3 > /proc/sys/vm/drop_caches 清理缓存。
-ioengine=libaio、-iodepth=32可选/可不选
1)顺序写:
fio -direct=1 -iodepth=32 -rw=write -ioengine=libaio -bs=4M -size=128G -numjobs=1 \
-runtime=600 -group_reporting -filename=/dev/[device] -name=Write_BandWidth_Test
2)随机写:
fio -direct=1-iodepth=128 -rw=randwrite -ioengine=libaio -bs=4K -size=128G - numjobs=1 \
-runtime=600 -group_reporting -filename=/dev/[device] -name=Rand_Write_IOPS_Test
3)顺序读:
fio -direct=1 -iodepth=32 -rw=read -ioengine=libaio -bs=4M -size=128G -numjobs=1 \
-runtime=600 -group_reporting -filename=/dev/[device] -name=Read_BandWidth_Test
4)随机读:
fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4K -size=128G - numjobs=1 \
-runtime=600 -group_reporting -filename=/dev/[device] -name=Rand_Read_IOPS_Test
5)混合随机读写:
描述:70%随机读,30%随机写,以2M块文件大小向/dev/sdb:/dev/sdc:/dev/sdd三个分区存储上随机读写300s时间
fio -output=/tmp/100S100W -name=100S100W -filename=/dev/sdb:/dev/sdc:/dev/sdd -ioengine=libaio -direct=1 -blocksize=2M -runtime=300 -rw=randrw -rwmixread=70 -rwmixwrite=30 -iodepth=32 -numjobs=1
三、监控磁盘IO命令
iostat –mx 1 (iostat的安装方法:yum install sysstat)
1、查看fio是否安装
rpm –qa|grep fio
2、源码安装(2、3、4任选一个,推荐方法:3、rpm 的二进制安装)
官网地址:http://freecode.com/projects/fio/
github地址:https://github.com/axboe/fio
安装
wget https://github.com/axboe/fio/archive/refs/tags/fio-3.14.tar.gz
tar -zxvf fio-3.14.tar.gz
./configure
make
make install
3、如果未成功就用 rpm 安装 (推荐)
官网地址:https://pkgs.org/download/fio
获取fio的rpm安装包:http://mirror.centos.org/centos/7/os/x86_64/Packages/fio-3.7-2.el7.x86_64.rpm
- wget http://mirror.centos.org/centos/7/os/x86_64/Packages/fio-3.7-2.el7.x86_64.rpm
- yum install libaio-devel
- yum install libibverbs -y
- yum install libpmem -y
- yum install librados2 -y
- yum install librbd1
- rpm -ivh fio-3.7-2.el7.x86_64.rpm
yum install fio
5、测试
fio
二、FIO工具使用方法:
参数说明:
-rw=randwrite:定义测试时的读写策略,可选值如下:随机读:randread,随机写:randwrite,顺序读: read,顺序写:write,混合随机读写:randrw0
-ioengine=libaio:libaio指的是异步模式,如果是同步就要用sync。定义fio如何下发IO请求,通常有同步IO和异步IO:同步IO一次只能发出一个IO请求, 等待内核完成后才返回。这样对于单个线程IO队列深度总是小于1,但是可以透过多个线程并发执行来解决。通常会用16~32个线程同时工作把IO队列深度塞满。异步IO则通常使用libaio这样的方式一次提交一批IO 请求,然后等待一批的完成,减少交互的次 数,会更有效率
-direct=1:定义是否使用direct IO,可选值如下:值为0,表示使用buffered IO;值为1,表示使用 direct IO
-thread:使用pthread_create创建线程,另一种是fork创建进程。进程的开销比线程要大,一般都采用thread测试。
–numjobs=1:定义测试的并发线程数
-iodepth=64:定义测试时的IO队列深度,默认为1。此处定义的队列深度是指每个线程的队列深度, 如果有多个线程测试,意味着每个线程都是此处定义的队列深度。fio总的IO并发数 =iodepth * numjobs。
-filename:定义测试文件(设备)的名称。此处选择文件,则代表测试文件系统的性能,例如:- filename=/opt/fiotest/fiotest.txt;此处选择设备名称,则代表测试裸盘的性能,例:-filename=/dev/vdb1
。如果在已经分区、并创建文件系统,且已写入数据的磁盘上进行性能测试,请注意
filename选择指定文件,以避免覆盖文件系统和原有数据。
-size=100M:定义测试IO操作的数据量,若未指定runtime这类参数,fio会将指定大小的数据量全部 读/写完成,然后才停止测试。该参数的值,可以是带单位的数字,比如size=10G,表
示读/写的数据量为10GB;也可是百分数,比如size=20%,表示读/写的数据量占该设
备总文件的20%的空间。建议测试数据量为内存两倍大,尽量避免缓存影响。
-name=job1:定义测试任务名称。
-bs=4k:定义IO的块大小(block size),单位是k、K、m和M等,默认IO块大小为4 KB。
–output TestResult.log:日志输出到TestResult.log。
-runtime:定义测试时间。如果未配置,则持续将size指定的文件大小,以每次bs值为分块大小读/ 写完。
-group_reporting:定义测试结果显示模式,group_reporting 表示汇总每个进程的统计信息,而非以不同 job汇总展示信息。
其它信息:
lockmem=1g 只使用1g内存进行测试。
zero_buffers 用0初始化系统buffer。
nrfiles=8 每个进程生成文件的数量。
磁盘读写常用测试点:
Read=100% Ramdon=100% rw=randread (100%随机读)
Read=100% Sequence=100% rw=read (100%顺序读)
Write=100% Sequence=100% rw=write (100%顺序写)
Write=100% Ramdon=100% rw=randwrite (100%随机写)
Read=70% Sequence=100% rw=rw, rwmixread=70, rwmixwrite=30
(70%顺序读,30%顺序写)
Read=70% Ramdon=100% rw=randrw, rwmixread=70, rwmixwrite=30
(70%随机读,30%随机写)
每次测试前执行 echo 3 > /proc/sys/vm/drop_caches 清理缓存。
-ioengine=libaio、-iodepth=32可选/可不选
1)顺序写:
fio -direct=1 -iodepth=32 -rw=write -ioengine=libaio -bs=4M -size=128G -numjobs=1 \
-runtime=600 -group_reporting -filename=/dev/[device] -name=Write_BandWidth_Test
2)随机写:
fio -direct=1-iodepth=128 -rw=randwrite -ioengine=libaio -bs=4K -size=128G - numjobs=1 \
-runtime=600 -group_reporting -filename=/dev/[device] -name=Rand_Write_IOPS_Test
3)顺序读:
fio -direct=1 -iodepth=32 -rw=read -ioengine=libaio -bs=4M -size=128G -numjobs=1 \
-runtime=600 -group_reporting -filename=/dev/[device] -name=Read_BandWidth_Test
4)随机读:
fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4K -size=128G - numjobs=1 \
-runtime=600 -group_reporting -filename=/dev/[device] -name=Rand_Read_IOPS_Test
5)混合随机读写:
描述:70%随机读,30%随机写,以2M块文件大小向/dev/sdb:/dev/sdc:/dev/sdd三个分区存储上随机读写300s时间
fio -output=/tmp/100S100W -name=100S100W -filename=/dev/sdb:/dev/sdc:/dev/sdd -ioengine=libaio -direct=1 -blocksize=2M -runtime=300 -rw=randrw -rwmixread=70 -rwmixwrite=30 -iodepth=32 -numjobs=1
三、监控磁盘IO命令
iostat –mx 1 (iostat的安装方法:yum install sysstat)
- [root@localhost]# iostat -mx 1
- Linux 2.6.32-220.el6.x86_64 (localhost.localdomain) XXXX年XX月XX日 _x86_64_ (32 CPU)
- avg-cpu: %user %nice %system %iowait %steal %idle
- 12.74 0.00 8.95 0.04 0.00 78.27
- Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
- sda 0.18 10.05 0.31 7.67 0.01 0.07 18.77 0.00 0.28 0.14 0.11
- sdb 0.69 0.10 15.74 11.21 0.17 2.45 190.77 0.34 12.10 0.23 0.63
- sdc 0.43 0.06 9.58 5.94 0.13 1.20 176.32 0.03 1.70 0.16 0.25```