您现在的位置:首页 > 系统运维 > Linux运维

Linux通过fio工具测试硬盘时延、带宽、IOPS性能

FIO是一种较为专业且通用的存储性能测试工具,可用来对硬件进行压力测试,支持13种不同的IO引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio 等。 fio 官网地址:http://freshmeat.net/projects/fio/ 一、Fio工具安装 yum -

FIO是一种较为专业且通用的存储性能测试工具,可用来对硬件进行压力测试,支持13种不同的IO引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio 等。

fio 官网地址:http://freshmeat.net/projects/fio/

一、Fio工具安装

yum -y install wget gcc libaio-devel
wget http://brick.kernel.dk/snaps/fio-2.2.10.tar.gz
tar -xzvf fio-2.2.10.tar.gz
cd fio-2.2.10
make
make install

 

二、Fio测试

1、可以测试的内容共有6种:
read:顺序读
write:顺序写
rw或readwrite:顺序混合读写
randwrite:随机写
randread:随机读
randrw:随机混合读写,使用混合读写方式时,需要配合--rwmixread或--rwmixwrite参数使用;其中--rwmixread为混合读写中读所占比例,其中--rwmixwrite为混合读写中写所占比例

2、对文件系统的测试
测试文件存储直接配置块设备路径如:--filename=/dev/vdb
测试已经挂载的文件系统直接写入文件路径如--filename=/root/dsik_test

①使用libaio引擎,测试1024k顺序读,测试时间10分钟,并设置ramp_time=100s:
fio --name=test --rw=read --size=90G --numjobs=2 --iodepth=16 --ioengine=libaio --bs=1024k --ramp_time=100 --runtime=600 --time_based --direct=1 --sync=1 --group_reporting --filename=/dev/vdb
表示进行1024k顺序读,线程数为2,I/O深度为16,先进行100s的预读,运行测试的时间为600s,绕过机器自带的buffer,使用基于read、write的同步IO。

②使用libaio引擎,测试4k随机写,测试时间10分钟,并设置ramp_time=100s:
fio --name=test --rw=randwrite --size=90G --numjobs=2 --iodepth=16 --ioengine=libaio --bs=4k --ramp_time=100 --runtime=600 --time_based --direct=1 --sync=1 --group_reporting --filename=/dev/vdb
表示进行4k随机写,线程数为2,IO深度为16,先进行100s的预读,运行测试的时间为600s,绕过机器自带的buffer,使用基于read、write的同步IO。

具体性能测试可以根据现场需求进行修改。
fio命令说明:
filename=/dev/sdb1    测试文件名称,通常选择需要测试的盘的data目录。
direct=1                         测试过程绕过机器自带的buffer。使测试结果更真实。
rw=randwrite                测试随机写的I/O
rw=randrw                    测试随机写和读的I/O
bs=16k                          单次io的块文件大小为16k
bsrange=512-2048     同上,提定数据块的大小范围
size=5g                         本次的测试文件大小为5g,以每次4k的io进行测试。
numjobs=30                本次的测试线程为30.
runtime=1000             测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止。
ioengine=psync          io引擎使用pync方式
rwmixwrite=30            在混合读写的模式下,写占30%
group_reporting         关于显示结果的,汇总每个进程的信息。
lockmem=1g               只使用1g内存进行测试。
zero_buffers                用0初始化系统buffer。
nrfiles=8                      每个进程生成文件的数量。

 

测试结果信息(重点信息已经标红):

[root@home ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    0   80G  0 disk
├─sda1        8:1    0    1G  0 part /boot
└─sda2        8:2    0   79G  0 part
├─cl-root 253:0    0   50G  0 lvm  /
├─cl-swap 253:1    0  3.9G  0 lvm  [SWAP]
└─cl-home 253:2    0 25.1G  0 lvm  /home
sr0          11:0    1  4.1G  0 rom

[root@home ~]# fio --name=test --rw=randwrite --size=10G --numjobs=2 --iodepth=16 --ioengine=libaio --bs=4k --ramp_time=100 --runtime=100 --time_based --direct=1 --sync=1 --group_reporting --filename=/dev/sda

test: (g=0): rw=randwrite, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=16
...
fio-2.2.10
Starting 2 processes
Jobs: 2 (f=2): [w(2)] [100.0% done] [0KB/101.5MB/0KB /s] [0/25.1K/0 iops] [eta 00m:00s]
test: (groupid=0, jobs=2): err= 0: pid=4421: Mon Aug 12 17:35:14 2019
write: io=9850.9MB, bw=100870KB/s, iops=25217, runt=100002msec
    slat (usec): min=3, max=348, avg=11.15, stdev= 6.76
clat (usec): min=202, max=20095, avg=1254.61, stdev=419.02
lat (usec): min=227, max=20104, avg=1266.12, stdev=418.48
clat percentiles (usec):
|  1.00th=[  652],  5.00th=[  820], 10.00th=[  892], 20.00th=[  996],
| 30.00th=[ 1096], 40.00th=[ 1208], 50.00th=[ 1304], 60.00th=[ 1352],
| 70.00th=[ 1416], 80.00th=[ 1480], 90.00th=[ 1544], 95.00th=[ 1576],
| 99.00th=[ 1832], 99.50th=[ 1928], 99.90th=[ 2448], 99.95th=[ 4128],
| 99.99th=[18816]
bw (KB  /s): min=    0, max=52096, per=49.77%, avg=50200.63, stdev=3632.67
lat (usec) : 250=0.01%, 500=0.19%, 750=2.42%, 1000=17.88%
lat (msec) : 2=79.25%, 4=0.22%, 10=0.02%, 20=0.04%, 50=0.01%
cpu          : usr=9.95%, sys=29.82%, ctx=655138, majf=0, minf=63
IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=178.6%, 32=0.0%, >=64=0.0%
submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0%
issued    : total=r=0/w=2521774/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
latency   : target=0, window=0, percentile=100.00%, depth=16

Run status group 0 (all jobs):
WRITE: io=9850.9MB, aggrb=100870KB/s, minb=100870KB/s, maxb=100870KB/s, mint=100002msec, maxt=100002msec

Disk stats (read/write):
sda: ios=0/4500088, merge=0/2, ticks=0/5940482, in_queue=5939557, util=100.00%

版权所有
侵权必究

上一篇
Linux配置NTP客户端与阿里云同步时间
下一篇
CentOS7 RedHat安装PHP7.2环境