[转帖]FIO使用说明

fio,使用,说明 · 浏览次数 : 0

小编点评

## 存储性能分析工具 iostat iostat 是一种监控系统设备 I/O 性能的工具,可以用于分析存储设备的性能,包括读取速度、写入速度、队列长度等。 **主要功能:** * 显示每秒的 I/O 请求数和响应数。 * 显示每秒的 I/O 等待队列长度。 * 显示存储设备的平均读取和写入速度。 * 显示 I/O 队列等待时间。 * 显示平均每个 I/O 操作的响应时间。 * 显示 I/O 队列等待时间占总时间的比例。 **使用 iostat 的优点:** * 简单易用,可以用于分析存储设备的性能。 * 可用于分析多个存储设备的性能。 * 可用于分析存储设备的性能在不同时间段。 **使用 iostat 的缺点:** * iostat 的性能可能与存储设备的性能有关,在一些情况下,可能性能较低。 * iostat 的监控结果可能对存储设备的性能有影响,在一些情况下,可能需要修改 iostat 的监控参数。 **使用 iostat 的建议:** * 在分析存储设备的性能时,选择使用 iostat 工具。 * 在选择 iostat 工具时,可以选择使用性能参数。 * 在使用 iostat 工具时,注意性能结果的稳定性。 **其他信息:** * iostat 是一个开源工具,可以免费下载。 * iostat 的文档可以参考在官方网站上。 * iostat 的使用教程可以在博客中找到。 **总结:** iostat 是一个非常 useful 的工具,可以用于分析存储设备的性能。但是,在使用 iostat 工具时,需要注意性能结果的稳定性,并选择使用性能参数。

正文

FIO介绍:


FIO是测试IOPS的非常好的工具,用来对磁盘进行压力测试和验证。磁盘IO是检查磁盘性能的重要指标,可以按照负载情况分成照顺序读写,随机读写两大类。FIO是一个可以产生很多线程或进程并执行用户指定的特定类型I/O操作的工具,FIO的典型用途是编写和模拟的I/O负载匹配的作业文件。也就是说FIO 是一个多线程io生成工具,可以生成多种IO模式,用来测试磁盘设备的性能(也包含文件系统:如针对网络文件系统 NFS 的IO测试)。

另外还有GFIO则是FIO的图形监测工具,它提供了图形界面的参数配置,和性能监测图像。

fio在github上的坐标:https://github.com/axboe/fio 。

 

FIO安装说明:

1.可以到网站:http://freshmeat.sourceforge.net/projects/fio获取FIO安装包:fio-2.1.10.tar.gz

2.为了使用异步IO引擎,需要在安装FIO前先安装libaio-dev(apt-get install libaio-dev),顺序不能反,否则会出现以下错误:

 fio: engine libaio not loadable
 fio: failed to load engine

如果顺序反了可以使用 make clean清理编译文件后重新安装FIO 

3.如需要安装gfio:gfio是基于gdk实现,因此需要首先安装gdk:apt-get install libgtk2.0-dev

4.安装FIO:解压FIO压缩包,进入FIO目录

  • ./configure  --enable-gfio (注:如果希望不支持gfio,只需去掉后面的--enable-gfio参数)

  • make

  • make install

5.经过这几步,Fio的安装已经全部完成,为了测试是否安装成功,这里使用examples中的例子进行测试:

fio  examples/ssd-test.fio 

修正示例测试文件出现的错误:目录设置问题

  1. fio: /mount-point-of-ssd is not a directory
  2. fio: failed parsing directory=/mount-point-of-ssd
  3. fio: job global dropped

修改后,如果成功执行,说明FIO安装成功。



FIO 工具常用参数:

  1. 参数说明:
  2. filename=/dev/sdb1 测试文件名称,通常选择需要测试的盘的data目录。
  3. direct=1 是否使用directIO,测试过程绕过OS自带的buffer,使测试磁盘的结果更真实。Linux读写的时候,内核维护了缓存,数据先写到缓存,后面再后台写到SSD。读的时候也优先读缓存里的数据。这样速度可以加快,但是一旦掉电缓存里的数据就没了。所以有一种模式叫做DirectIO,跳过缓存,直接读写SSD。
  4. rw=randwrite 测试随机写的I/O
  5. rw=randrw 测试随机写和读的I/O
  6. bs=16k 单次io的块文件大小为16k
  7. bsrange=512-2048 同上,提定数据块的大小范围
  8. size=5G 每个线程读写的数据量是5GB。
  9. numjobs=1 每个job(任务)开1个线程,这里用了几,后面每个用-name指定的任务就开几个线程测试。所以最终线程数=任务数(几个name=jobx)* numjobs。
  10. name=job1: 一个任务的名字,重复了也没关系。如果fio -name=job1 -name=job2,建立了两个任务,共享-name=job1之前的参数。-name之后的就是job2任务独有的参数。
  11. thread 使用pthread_create创建线程,另一种是fork创建进程。进程的开销比线程要大,一般都采用thread测试。
  12. runtime=1000 测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止。
  13. ioengine=libaio 指定io引擎使用libaio方式。libaio:Linux本地异步I/O。请注意,Linux可能只支持具有非缓冲I/O的排队行为(设置为“direct=1”或“buffered=0”);rbd:通过librbd直接访问CEPH Rados
  14. iodepth=16 队列的深度为16.在异步模式下,CPU不能一直无限的发命令到SSD。比如SSD执行读写如果发生了卡顿,那有可能系统会一直不停的发命令,几千个,甚至几万个,这样一方面SSD扛不住,另一方面这么多命令会很占内存,系统也要挂掉了。这样,就带来一个参数叫做队列深度。
  15. Block Devices(RBD) 无需使用内核RBD驱动程序(rbd.ko)。该参数包含很多ioengine,如:libhdfs/rdma等
  16. rwmixwrite=30 在混合读写的模式下,写占30%
  17. group_reporting 关于显示结果的,汇总每个进程的信息。
  18. 此外
  19. lockmem=1g 只使用1g内存进行测试。
  20. zero_buffers 用0初始化系统buffer。
  21. nrfiles=8 每个进程生成文件的数量。
  22. 磁盘读写常用测试点:
  23. 1. Read=100% Ramdon=100% rw=randread (100%随机读)
  24. 2. Read=100% Sequence=100% rw=read100%顺序读)
  25. 3. Write=100% Sequence=100% rw=write100%顺序写)
  26. 4. Write=100% Ramdon=100% rw=randwrite (100%随机写)
  27. 5. Read=70% Sequence=100% rw=rw, rwmixread=70, rwmixwrite=30
  28. 70%顺序读,30%顺序写)
  29. 6. Read=70% Ramdon=100% rw=randrw, rwmixread=70, rwmixwrite=30
  30. (70%随机读,30%随机写)

FIO命令实例:

  1. 100%随机,100%读, 4K
  2. fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=rand_100read_4k
  3. 100%随机,100%写, 4K
  4. fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=rand_100write_4k
  5. 100%顺序,100%读 ,4K
  6. fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=sqe_100read_4k
  7. 100%顺序,100%写 ,4K
  8. fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=sqe_100write_4k
  9. 100%随机,70%读,30%写 4K
  10. 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

FIO测试实例:

  1. [root@docker sda]# fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=read -filename=/dev/sda -name="BS 4KB read test" -iodepth=16 -runtime=60
  2. BS 4KB read test: (g=0): rw=read, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=16
  3. fio-3.7
  4. Starting 1 thread
  5. Jobs: 1 (f=1): [R(1)][100.0%][r=89.3MiB/s,w=0KiB/s][r=22.9k,w=0 IOPS][eta 00m:00s]
  6. BS 4KB read test: (groupid=0, jobs=1): err= 0: pid=18557: Thu Apr 11 13:08:11 2019
  7. read: IOPS=22.7k, BW=88.5MiB/s (92.8MB/s)(5313MiB/60001msec)
  8. slat (nsec): min=901, max=168330, avg=6932.34, stdev=1348.82
  9. clat (usec): min=90, max=63760, avg=698.08, stdev=240.83
  10. lat (usec): min=97, max=63762, avg=705.17, stdev=240.81
  11. clat percentiles (usec):
  12. | 1.00th=[ 619], 5.00th=[ 627], 10.00th=[ 627], 20.00th=[ 635],
  13. | 30.00th=[ 635], 40.00th=[ 685], 50.00th=[ 717], 60.00th=[ 725],
  14. | 70.00th=[ 725], 80.00th=[ 725], 90.00th=[ 734], 95.00th=[ 816],
  15. | 99.00th=[ 1004], 99.50th=[ 1020], 99.90th=[ 1057], 99.95th=[ 1057],
  16. | 99.99th=[ 1860]
  17. bw ( KiB/s): min=62144, max=91552, per=100.00%, avg=90669.02, stdev=3533.77, samples=120
  18. iops : min=15536, max=22888, avg=22667.27, stdev=883.44, samples=120
  19. lat (usec) : 100=0.01%, 250=0.01%, 500=0.01%, 750=93.85%, 1000=5.14%
  20. lat (msec) : 2=0.99%, 4=0.01%, 10=0.01%, 50=0.01%, 100=0.01%
  21. cpu : usr=5.35%, sys=23.17%, ctx=1359692, majf=0, minf=17
  22. IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=100.0%, 32=0.0%, >=64=0.0%
  23. submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
  24. complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0%
  25. issued rwts: total=1360097,0,0,0 short=0,0,0,0 dropped=0,0,0,0
  26. latency : target=0, window=0, percentile=100.00%, depth=16
  27. Run status group 0 (all jobs):
  28. READ: bw=88.5MiB/s (92.8MB/s), 88.5MiB/s-88.5MiB/s (92.8MB/s-92.8MB/s), io=5313MiB (5571MB), run=60001-60001msec
  29. Disk stats (read/write):
  30. sda: ios=1357472/0, merge=70/0, ticks=949141/0, in_queue=948776, util=99.88%

FIO结果解读:

  1. 结果解读:
  2. test: (g=0): rw=write, bs=1M-1M/1M-1M/1M-1M, ioengine=libaio, iodepth=16
  3. fio-2.8
  4. Starting 1 process
  5. Jobs: 1 (f=1): [W(1)] [100.0% done] [0KB/68198KB/0KB /s] [0/66/0 iops] [eta 00m:00s]
  6. test: (groupid=0, jobs=1): err= 0: pid=4676: Thu Apr 7 17:22:37 2016
  7. write: io=20075MB, bw=68464KB/s, iops=66, runt=300255msec #执行多少IO,平均带宽,线程运行时间
  8. slat (usec): min=51, max=5732, avg=291.11, stdev=262.47 #提交延迟
  9. clat (usec): min=1, max=2235.8K, avg=239043.28, stdev=153384.41 #完成延迟
  10. lat (usec): min=367, max=2235.9K, avg=239337.72, stdev=153389.57 #响应时间
  11. clat percentiles (usec):
  12. | 1.00th=[ 221], 5.00th=[ 442], 10.00th=[ 1004], 20.00th=[108032],
  13. | 30.00th=[228352], 40.00th=[248832], 50.00th=[257024], 60.00th=[268288],
  14. | 70.00th=[280576], 80.00th=[301056], 90.00th=[342016], 95.00th=[477184],
  15. | 99.00th=[806912], 99.50th=[864256], 99.90th=[1122304], 99.95th=[1171456],
  16. | 99.99th=[1646592]
  17. bw (KB /s): min= 170, max=204800, per=100.00%, avg=68755.07, stdev=27034.84
  18. lat (usec) : 2=0.01%, 4=0.13%, 50=0.06%, 100=0.26%, 250=1.04%
  19. lat (usec) : 500=4.53%, 750=2.61%, 1000=1.33%
  20. lat (msec) : 2=1.18%, 4=0.15%, 10=0.77%, 20=0.77%, 50=1.50%
  21. lat (msec) : 100=4.43%, 250=23.48%, 500=53.23%, 750=3.09%, 1000=1.30%
  22. lat (msec) : 2000=0.19%, >=2000=0.01%
  23. cpu : usr=0.03%, sys=2.11%, ctx=19066, majf=0, minf=7
  24. IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=103.8%, 32=0.0%, >=64=0.0% #io队列
  25. submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% #单个IO提交要提交的IO数
  26. complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0%
  27. issued : total=r=0/w=20060/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
  28. latency : target=0, window=0, percentile=100.00%, depth=16 #IO完延迟的分布
  29. Run status group 0 (all jobs):
  30. WRITE: io=20075MB, aggrb=68464KB/s(group总带宽), minb=68464KB/s(最小平均带宽), maxb=68464KB/s(最大平均带宽), mint=300255msec(group中线程的最短运行时间), maxt=300255msec(group中线程的最长运行时间)
  31. Disk stats (read/write):
  32. sda: ios=23/41769(所有group总共执行的IO数), merge=0/149(总共发生的IO合并数), ticks=706/9102766(Number of ticks we kept the disk busy), in_queue=9105836(花费在队列上的总共时间), util=100.00%(磁盘利用率)
  33. io=执行了多少M的IO
  34. bw=平均IO带宽
  35. iops=IOPS
  36. runt=线程运行时间
  37. slat=提交延迟,提交该IO请求到kernel所花的时间(不包括kernel处理的时间)
  38. clat=完成延迟, 提交该IO请求到kernel后,处理所花的时间
  39. lat=响应时间
  40. bw=带宽
  41. cpu=利用率
  42. IO depths=io队列
  43. IO submit=单个IO提交要提交的IO数
  44. IO complete=Like the above submit number, but for completions instead.
  45. IO issued=The number of read/write requests issued, and how many of them were short.
  46. IO latencies=IO完延迟的分布
  47. io=总共执行了多少size的IO
  48. aggrb=group总带宽
  49. minb=最小.平均带宽.
  50. maxb=最大平均带宽.
  51. mint=group中线程的最短运行时间.
  52. maxt=group中线程的最长运行时间.
  53. ios=所有group总共执行的IO数.
  54. merge=总共发生的IO合并数.
  55. ticks=Number of ticks we kept the disk busy.
  56. io_queue=花费在队列上的总共时间.
  57. util=磁盘利用率

IO状态监控工具Iostat介绍

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

进行磁盘测试的时候,我们可以使用iostat 等监控工具,查看所有磁盘当前的读写状态

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

语法:

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

iostat使用范例:

  1. iostat -d -x -k 1 10
  2. Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
  3. 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
  4. Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
  5. 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:第二个数字表示总共的刷新次数

输出信息的含义:

  1. rrqm/s: 每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);
  2. wrqm/s: 每秒这个设备相关的写入请求有多少被Merge了。
  3. r/s: 该设备的每秒完成的读请求数(merge合并之后的)
  4. w/s:   该设备的每秒完成的写请求数(merge合并之后的)
  5. rsec/s: 每秒读取的扇区数;
  6. wsec/: 每秒写入的扇区数。
  7. rKB/s: 每秒发送给该设备的总读请求数
  8. wKB/s: 每秒发送给该设备的总写请求数
  9. avgrq-sz 平均请求扇区的大小
  10. avgqu-sz 是平均请求队列的长度。毫无疑问,队列长度越短越好。
  11. await: 每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
  12. svctm: 表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢。
  13. %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

</article>

与[转帖]FIO使用说明相似的内容:

[转帖]FIO使用说明

FIO介绍: FIO是测试IOPS的非常好的工具,用来对磁盘进行压力测试和验证。磁盘IO是检查磁盘性能的重要指标,可以按照负载情况分成照顺序读写,随机读写两大类。FIO是一个可以产生很多线程或进程并执行用户指定的特定类型I/O操作的工具,FIO的典型用途是编写和模拟的I/O负载匹配的作业文件。也就是

[转帖]FIO 存储性能压测

测试环境 3台服务器:ceph配置内外网分离,外网使用万兆线,内网使用千兆线,osd共21个。 1台客户端:安装fio工具、内核客户端,使用万兆线。 测试目的 针对fio工具中的iodepth(队列深度)和numjobs(线程数)参数,分析使用fio工具时,哪个参数对带宽值测试结果影响比较大。 测试

[转帖]fio工具中的iodepth参数与numjobs参数-对测试结果的影响

测试环境 3台服务器:ceph配置内外网分离,外网使用万兆线,内网使用千兆线,osd共21个。 1台客户端:安装fio工具、内核客户端,使用万兆线。 测试目的 针对fio工具中的iodepth(队列深度)和numjobs(线程数)参数,分析使用fio工具时,哪个参数对带宽值测试结果影响比较大。 测试

[转帖]fio测试硬盘性能

FIO 是测试磁盘性能的工具,用来对硬件进行压力测试和验证。 使用 FIO 时,建议配合使用 libaio 的 I/O 引擎进行测试。 软件安装 编译安装 fio各版本下载地址如下: https://github.com/axboe/fio/releases 以“fio-2.1.10”版本为例,下载

[转帖]【详细齐全】FIO使用方法 及参数解析(文章末尾)

linux 使用FIO测试磁盘iops 方法详解 FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎, 包括:sync,mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi,

[转帖]使用FIO工具对系统进行存储压力测试

https://www.modb.pro/db/495753 安装fio yum -y install fio.x86_64[root@localhost ~]# rpm -qa|grep fio #为了测试异步I/O , 需要安装libaio 。安装libaio-devel包可以直接使用如下命令[

[转帖]FIO磁盘性能测试工具

https://www.cnblogs.com/lyhabc/p/16708771.html 简介 一般我们测试硬盘或者存储的性能的时候,会用Linux系统自带的dd命令,因为是自带命令,简单易使用,因此一些客户喜欢使用dd命令来测试磁盘的读写性能。 但是用dd命令来测试性能,有如下问题: 1. d

[转帖]FIO磁盘性能测试工具

https://www.cnblogs.com/lyhabc/p/16708771.html 简介 一般我们测试硬盘或者存储的性能的时候,会用Linux系统自带的dd命令,因为是自带命令,简单易使用,因此一些客户喜欢使用dd命令来测试磁盘的读写性能。 但是用dd命令来测试性能,有如下问题: 1. d

[转帖]关于iostat的问题,svctm数据不可信

使用FIO对磁盘进行压力测试,使用1个线程对磁盘进行随机读,设置单次read的数据块分别为128KB和1M,数据如下: (1)单次IO数据块为128KB (2)单次IO数据块为1M 从上面的数据可以看出,当单次IO的数据块变大,服务时间svctm反而变短,这明显不符合常规认知。 查阅到fio的相关资

[转帖]Windows磁盘性能压测(2)-Fio

http://www.manongjc.com/detail/59-qftscgqzitmxpaw.html 目录 一、腾讯云官网硬盘性能指标 二、使用fio测试硬盘性能指标 1. 测试工具相关 2. 单路随机读写时延测试 2.1测试硬盘的随机读时延 2.2测试硬盘的随机写时延 2.3测试硬盘的随机