fio工具测试硬盘读写

本文详细解读了硬盘性能测试中的关键指标,如IOPS(每秒读写次数)、吞吐量、随机读写、顺序读写以及延迟。重点介绍了如何使用fio工具进行测试,包括块大小设置、读写模式选择,以及针对不同应用场景(如Hadoop离线计算和数据库)的性能优化建议。
摘要由CSDN通过智能技术生成

测试功能

  • IOPS:每秒的读写次数,单位为次(计数)。存储设备的底层驱动类型决定了不同的IOPS
    总IOPS:每秒执行的I/O操作总次数
    随机读IOPS:每秒指定的随机读I/O操作的平均次数
    随机写IOPS 每秒指定的随机写I/O操作的平均次数
    顺序读IOPS 每秒指定的顺序读I/O操作的平均次数
    顺序写IOPS 每秒指定的顺序写I/O操作的平均次数
  • 吞吐量:每秒的读写数据量,单位为MB/S
    吞吐量市值单位时间内可以成功传输的数据数量。
    如果需要部署大量顺序读写的应用,典型场景比如hadoop离线计算型业务,需要关注吞吐量
  • 时延:IO操作的发送时间到接收确认所经过的时间,单位为秒
    如果应用对时延比较敏感,比如数据库(过高时延会导致应用性能下降或报错),建议使用SSD存储

-bs=4k 表示单次I/O的块文件大小为4k。未指定该参数时的默认大小也是4k。测试IOPS时,建议将bs设置为一个比较小的值,如本示例中的4k。测试吞吐量时,建议将bs设置为一个较大的值,如本示例中的1024k。

使用顺序IO和较大的blocksize测试吞吐量和延迟
使用随机IO和较小的blocksize测试IOPS和延迟

在配置numjobs和iodeph前,建议深入了解应用采用的是同步IO还是异步IO(是多进程并发IO还是一次提交一批IO请求)
备注

磁盘的 IOPS,也就是在一秒内,磁盘进行多少次 I/O 读写。
磁盘的吞吐量,也就是每秒磁盘 I/O 的流量,即磁盘写入加上读出的数据的大小。
每秒 I/O 吞吐量= IOPS* 平均 I/O SIZE。
 

fio配置文件及参数说明

config-file.ini

[global]
size=500g
direct=1
thread
runtime=${TIME}
bs=${BS}
rw=${MODE}
numjobs=1
[job1]
filename=/dev/sda
  • [global]:这是全局配置部分,其中包含通用的测试参数设置。

  • size=500g:这指定了测试数据的总大小为500GB。这是一个相当大的测试数据集。

  • direct=1:这表明您正在执行直接I/O,这意味着数据不会通过文件系统缓存,而是直接写入/读取硬盘。

  • thread:这是一个启用多线程模式的标志,它使fio在测试中使用多个线程。

  • runtime=${TIME}:使用了一个变量${TIME},它似乎用于指定测试的运行时间。您可以在执行fio命令时将${TIME}替换为实际的运行时间值。

  • bs=${BS}:使用了一个变量${BS},它似乎用于指定块大小。您可以在执行fio命令时将${BS}替换为实际的块大小值。

  • rw=${MODE}:使用了一个变量${MODE},它似乎用于指定读写模式。您可以在执行fio命令时将${MODE}替换为实际的读写模式(例如,"randread"或"randwrite")。

  • [job1]:这是一个具体的测试作业的定义部分,它包含了特定的作业参数。

  • filename=/dev/sda:这指定了测试作业将在/dev/sda上执行,这是一个硬盘设备的路径。

测试指令:

BS=4k MODE=read TIME=100 fio /path/to/your/config-file.ini

BS=4k MODE=write TIME=100 fio /path/to/your/config-file.ini

输出打印如下:

root@b:/usr/local/bin$ BS=4k MODE=read TIME=100 fio /etc/dvx_config/config-f
ile.ini
job1: (g=0): rw=read, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1
fio-3.32
Starting 1 thread
Jobs: 1 (f=1): [R(1)][100.0%][r=71.8MiB/s][r=18.4k IOPS][eta 00m:00s]
job1: (groupid=0, jobs=1): err= 0: pid=1410: Mon Sep 11 06:59:11 2023
  read: IOPS=18.4k, BW=71.7MiB/s (75.2MB/s)(7171MiB/100001msec)
    clat (usec): min=47, max=3989, avg=51.94, stdev= 5.29
     lat (usec): min=47, max=3989, avg=52.21, stdev= 5.30
    clat percentiles (usec):
     |  1.00th=[   49],  5.00th=[   51], 10.00th=[   51], 20.00th=[   52],
     | 30.00th=[   52], 40.00th=[   52], 50.00th=[   52], 60.00th=[   52],
     | 70.00th=[   52], 80.00th=[   52], 90.00th=[   53], 95.00th=[   54],
     | 99.00th=[   61], 99.50th=[   62], 99.90th=[   80], 99.95th=[   91],
     | 99.99th=[  145]
   bw (  KiB/s): min=70298, max=74106, per=100.00%, avg=73495.85, stdev=539.40, samples=197
   iops        : min=17574, max=18526, avg=18373.65, stdev=134.83, samples=197
  lat (usec)   : 50=3.05%, 100=96.91%, 250=0.03%, 500=0.01%, 750=0.01%
  lat (msec)   : 2=0.01%, 4=0.01%
  cpu          : usr=7.38%, sys=25.18%, ctx=1835975, majf=0, minf=1
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 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.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=1835656,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
   READ: bw=71.7MiB/s (75.2MB/s), 71.7MiB/s-71.7MiB/s (75.2MB/s-75.2MB/s), io=7171MiB (7519MB), run=100001-100001msec

Disk stats (read/write):
  sda: ios=1831411/0, merge=0/0, ticks=81477/0, in_queue=76440, util=76.68%
root@b:/usr/local/bin$
root@b:/usr/local/bin$
root@b:/usr/local/bin$
root@b:/usr/local/bin$ BS=4k MODE=write TIME=100 fio /etc/dvx_config/config-
file.ini
job1: (g=0): rw=write, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1
fio-3.32
Starting 1 thread
Jobs: 1 (f=1): [W(1)][100.0%][w=77.3MiB/s][w=19.8k IOPS][eta 00m:00s]
job1: (groupid=0, jobs=1): err= 0: pid=1417: Mon Sep 11 07:35:42 2023
  write: IOPS=19.6k, BW=76.4MiB/s (80.2MB/s)(7645MiB/100001msec); 0 zone resets
    clat (usec): min=45, max=166220, avg=47.81, stdev=213.40
     lat (usec): min=46, max=166221, avg=48.51, stdev=213.40
    clat percentiles (usec):
     |  1.00th=[   47],  5.00th=[   47], 10.00th=[   47], 20.00th=[   47],
     | 30.00th=[   47], 40.00th=[   47], 50.00th=[   48], 60.00th=[   48],
     | 70.00th=[   48], 80.00th=[   48], 90.00th=[   48], 95.00th=[   48],
     | 99.00th=[   53], 99.50th=[   58], 99.90th=[   79], 99.95th=[   93],
     | 99.99th=[  174]
   bw (  KiB/s): min=40952, max=79486, per=100.00%, avg=78361.34, stdev=4111.67, samples=198
   iops        : min=10238, max=19871, avg=19590.08, stdev=1027.89, samples=198
  lat (usec)   : 50=97.32%, 100=2.64%, 250=0.03%, 500=0.01%, 750=0.01%
  lat (usec)   : 1000=0.01%
  lat (msec)   : 2=0.01%, 4=0.01%, 50=0.01%, 100=0.01%, 250=0.01%
  cpu          : usr=8.97%, sys=21.14%, ctx=1957498, majf=0, minf=0
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 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.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=0,1957118,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
  WRITE: bw=76.4MiB/s (80.2MB/s), 76.4MiB/s-76.4MiB/s (80.2MB/s-80.2MB/s), io=7645MiB (8016MB), run=100001-100001msec

Disk stats (read/write):
  sda: ios=0/1954938, merge=0/0, ticks=0/77170, in_queue=74870, util=75.02%

总结:

根据提供的fio输出,这是一个读取性能测试的结果。以下是关于测试结果的详细解释:

  • READ:这表示这是一个读取测试。

  • bw=71.7MiB/s (75.2MB/s):带宽(Bandwidth)表示数据传输速率。在这个测试中,读取带宽为71.7MiB/s(或75.2MB/s),这表示每秒从磁盘读取的平均速度。

  • io=7171MiB (7519MB):这是总的I/O操作量,表示测试期间总共读取了7171MiB(或7519MB)的数据。

  • run=100001-100001msec:这是测试运行的时间范围,以毫秒表示。在这个测试中,运行时间为100,001毫秒,或约100秒。

这些数据提供了关于硬盘读取性能的重要信息。带宽表示数据传输速率,而I/O操作量表示测试期间的数据读取量。运行时间显示了测试的持续时间。

写数据测试结果的详细解释:

  • WRITE:这表示这是一个写入测试。

  • bw=76.4MiB/s (80.2MB/s):带宽(Bandwidth)表示数据传输速率。在这个测试中,写入带宽为76.4MiB/s(或80.2MB/s),这表示每秒向磁盘写入的平均速度。

  • io=7645MiB (8016MB):这是总的I/O操作量,表示测试期间总共写入了7645MiB(或8016MB)的数据。

  • run=100001-100001msec:这是测试运行的时间范围,以毫秒表示。在这个测试中,运行时间为100,001毫秒,或约100秒。

这些数据提供了关于硬盘写入性能的重要信息。带宽表示数据传输速率,而I/O操作量表示测试期间的数据写入量。运行时间显示了测试的持续时间。

参考链接:https://blog.csdn.net/Hehuyi_In/article/details/105321480

参考链接:https://www.cnblogs.com/hrers/p/13299443.html

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值