一、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
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
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)
[root@localhost]
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```
|