测试功能
- 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