FIO安装使用及iostat使用

 

1、安装

官网:http://freecode.com/projects/fio

wget http://brick.kernel.dk/snaps/fio-2.2.5.tar.gz
yum install libaio-devel
yum install gcc
tar -zxvf fio-2.2.5.tar.gz
./configure
cd fio-2.2.5
make
make install

2、语法

–name= 字符串 测试项目名称

–filename= 测试文件,也可以制定到裸设备上
-direct=1 或者0 ,1为绕过文件系统的缓存。   测试过程绕过机器自带的buffer。使测试结果更真实。
–size= 测试文件大小   eg:size=5g    本次的测试文件大小为5g,以每次4k的io进行测试。
–filesize= 单独的文件大小,也可以是一个范围,fio在设定的size只内随机的选择大小,如果没有指定,每个子文件大小相同。
–blocksize= 
  –bs= 测试块大小,4K 8K 1M 等     rg:bs=4k   单次io的块文件大小为4k
–readwrite= # 读写相关的参数 

  read 顺序读

  write 顺序写

  rw,readwrite 顺序混合读写

  randwrite 随机写

  randread 随机读

  randrw 随机混合读写  如果是混合读写,默认是 50/50 即50%读加50%的写,对于特定的类型,结果会有些出入,因为速度可能不一样。可以在测试的指定一个数字
-numjobs=30               本次的测试线程为30.
-runtime=1000             测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止。
-ioengine=psync           io引擎使用pync方式
-rwmixwrite=30            在混合读写的模式下,写占30%
-group_reporting          关于显示结果的,汇总每个进程的信息。
 

io总的输入输出量 

bw:带宽   KB/s 

iops:每秒钟的IO数

runt:总运行时间

lat (msec):延迟(毫秒)

msec: 毫秒

usec: 微秒

3、执行

每次测试前执行 echo 3 > /proc/sys/vm/drop_caches 清理缓存。

顺序写:

fio --filename=fio.tmp --direct=1 --rw=write --bs=4k --size=1G --numjobs=64 --runtime=100 --group_reporting --name=test-write

随机写:

fio --filename=fio.tmp --direct=1 --rw=randwrite --bs=4k --size=1G --numjobs=64 --runtime=100 --group_reporting --name=test-randwrite

顺序读:

fio --filename=fio.tmp --direct=1 --rw=read --bs=4k --size=1G --numjobs=64 --runtime=100 --group_reporting --name=test-read

随机读:

fio --filename=fio.tmp --direct=1 --rw=randread --bs=4k --size=1G --numjobs=64 --runtime=100 --group_reporting --name=test-randread

100%随机,70%读,30%写 4K

fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=randrw_70read_4k

 

 

4、执行

IO状态监控:

进行磁盘测试的时候,我们可以使用iostat 等监控工具,查看所有磁盘当前的读写状态(fedora 系统上 sysstat-11.7.3-2.fc29.x86_64 收录了此工具)。

监控磁盘IO命令:iostat –mx 1

Iostat介绍
iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。

语法

iostat [ -c ] [ -d ] [ -h ] [ -N ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -z ] [ device [...] | ALL ] [ -p [ device [,...] | ALL ] ] [ interval [ count ] ]

iostat使用范例:

iostat -d -x -k 1 10
Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda          1.56  28.31  7.80 31.49   42.51    2.92    21.26     1.46     1.16     0.03    0.79   2.62  10.28
Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda          2.00  20.00 381.00  7.00 12320.00  216.00  6160.00   108.00    32.31     1.75    4.50   2.17  84.20

-d: 显示该设备的状态的参数;

-x:是一个比较常用的选项,该选项将用于显示和io相关的扩展数据。

-k:  静态显示每秒的统计(单位kilobytes )

1: 第一个数字表示每隔1秒刷新一次数据显示。

10:第二个数字表示总共的刷新次数

 

输出信息的含义

rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);
wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。
r/s: 该设备的每秒完成的读请求数(merge合并之后的)
w/s:  该设备的每秒完成的写请求数(merge合并之后的)
rsec/s:每秒读取的扇区数;
wsec/:每秒写入的扇区数。
rKB/s:每秒发送给该设备的总读请求数 
wKB/s:每秒发送给该设备的总写请求数 
avgrq-sz 平均请求扇区的大小
avgqu-sz 是平均请求队列的长度。毫无疑问,队列长度越短越好。    
await:  每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
svctm:    表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢。
%util: 在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。

 

参考以下链接:

原文链接:https://blog.csdn.net/don_chiang709/article/details/92628623

原文链接:https://www.cnblogs.com/shiyiwen/p/5407896.html

posted on 2022-09-07 21:11  studyAppStore  阅读(605)  评论(0编辑  收藏  举报