怎样使用 fio 和 IOPing 测量磁盘性能

介绍

无论是服务器还是工作 PC,通常限制性能的是磁盘速度。 即使使用SSD,其速度也无法与RAM和CPU相提并论。
有带或不带图形界面的不同工具,用于测试磁盘速度。 还有人用

, 为了 example:

dd if=/dev/zero of=test_file bs=64k count=16k conv=fdatasync

 

然而,在我们看来,dd 是测试 I/O 性能最差的软件。

实际上:

  • 它是一个单线程、顺序写入的测试。 当然,如果运行 web 服务器,服务不会做长时间运行的顺序写入,而是使用多个线程
  • 它写入少量数据,因此结果可能会受到缓存或 RAID 控制器的影响
  • 它只执行几秒钟,每个人都知道这样不可能得到一致的结果
  • 没有阅读速度测试

所有这些点只得出一个结论:最好使用其他任何东西。 对于磁盘基准测试,有两种参数可以提供完整的概览:IOPS(每秒 I/O)和延迟。 本教程解释了怎样测量 IOPS

菲奥

,以及磁盘延迟

眼压

在 RHEL 7 系统上。

安装 fio

首先,安装 EPEL 存储库:

# wget https://mirrors.n-ix.net/fedora-epel/epel-release-latest-7.noarch.rpm
# yum localinstall epel-release-latest-7.noarch.rpm

接下来,使用 yum 安装 fio:

# yum install fio

使用 fio 测试 IOPS

读写性能

第一个测试用于测量随机读/写性能。 在终端中,执行以下命令:

# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=random_read_write.fio --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75

在测试过程中,终端窗口将显示如下输出:

test: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=64
fio-2.2.8
Starting 1 process
test: Laying out IO file(s) (1 file(s) / 4096MB)
Jobs: 1 (f=1): [m(1)] [0.1% done] [447KB/131KB/0KB /s] [111/32/0 iops] [eta 01h:Jobs: 1 (f=1): [m(1)] [0.1% done] [383KB/147KB/0KB /s] [95/36/0 iops] [eta 01h:4Jobs: 1 (f=1): [m(1)] [0.1% done] [456KB/184KB/0KB /s] [114/46/0 iops] [eta 01h:Jobs: 1 (f=1): [m(1)] [0.1% done] [624KB/188KB/0KB /s] [156/47/0 iops] [eta 01h:Jobs: 1 (f=1): [m(1)] [0.1% done] [443KB/115KB/0KB /s] [110/28/0 iops] [eta 01h:Jobs: 1 (f=1): [m(1)] [0.1% done] [515KB/95KB/0KB /s] [128/23/0 iops] [eta 01h:4Jobs: 1 (f=1): [m(1)] [0.1% done] [475KB/163KB/0KB /s] [118/40/0 iops] [eta 01h:Jobs: 1 (f=1): [m(1)] [0.2% done] [451KB/127KB/0KB /s] [112/31/0 iops]

因此,程序将创建一个 4GB 的文件(

–大小=4G

),并使用每个写入比率 (75%/25%,由选项指定) 使用三个读取执行 4KB 读取和写入

–rwmixread=75

),在文件内拆分,一次运行 64 个操作。 可以调整 RW 比率以模拟各种使用场景。
最后,它会显示最终结果:

test: (groupid=0, jobs=1): err= 0: pid=4760: Thu Mar  2 13:23:28 2017
  read : io=7884.0KB, bw=864925B/s, iops=211, runt=  9334msec
  write: io=2356.0KB, bw=258468B/s, iops=63, runt=  9334msec
  cpu          : usr=0.46%, sys=2.35%, ctx=2289, majf=0, minf=29
  IO depths    : 1=0.1%, 2=0.1%, 4=0.2%, 8=0.3%, 16=0.6%, 32=1.2%, >=64=97.5%
     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.1%, >=64=0.0%
     issued    : total=r=1971/w=589/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=64

Run status group 0 (all jobs):
   READ: io=7884KB, aggrb=844KB/s, minb=844KB/s, maxb=844KB/s, mint=9334msec, maxt=9334msec
  WRITE: io=2356KB, aggrb=252KB/s, minb=252KB/s, maxb=252KB/s, mint=9334msec, maxt=9334msec

Disk stats (read/write):
    dm-2: ios=1971/589, merge=0/0, ticks=454568/120101, in_queue=581406, util=98.44%, aggrios=1788/574, aggrmerge=182/15, aggrticks=425947/119120, aggrin_queue=545252, aggrutil=98.48%
  sda: ios=1788/574, merge=182/15, ticks=425947/119120, in_queue=545252, util=98.48%

作者注:我在我的笔记本电脑上运行了 fio,所以最后的输出是用 10MB 的文件运行测试获得的; 如上所示,4GB 选项需要 1 个多小时。

随机读取性能

在这种情况下,命令是:

# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=random_read.fio --bs=4k --iodepth=64 --size=4G --readwrite=randread

输出将类似于 RW 情况,只是专门用于读取情况。

随机写入性能

# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=random_write.fio --bs=4k --iodepth=64 --size=4G --readwrite=randwrite

如上所述,在随机写入的情况下。

使用 IOPing 的延迟测量

正如介绍中所述,基准测试的第二部分是延迟测量。 要完成此任务,请安装 EPEL 存储库中的 IOPing。

# yum install ioping

执行它:

# ioping -c 100 .

-c 100

option 是 ioping 将发出的号码请求。 该程序还将要检查的文件和/或设备作为参数。 在这种情况下,实际工作目录。 程序输出为:

4 KiB <<< . (xfs /dev/dm-2): request=1 time=16.3 ms (warmup)
4 KiB <<< . (xfs /dev/dm-2): request=2 time=253.3 us
4 KiB <<< . (xfs /dev/dm-2): request=3 time=284.0 ms
...
4 KiB <<< . (xfs /dev/dm-2): request=96 time=175.6 us (fast)
4 KiB <<< . (xfs /dev/dm-2): request=97 time=258.7 us (fast)
4 KiB <<< . (xfs /dev/dm-2): request=98 time=277.6 us (fast)
4 KiB <<< . (xfs /dev/dm-2): request=99 time=242.3 us (fast)
4 KiB <<< . (xfs /dev/dm-2): request=100 time=36.1 ms (fast)

--- . (xfs /dev/dm-2) ioping statistics ---
99 requests completed in 3.99 s, 396 KiB read, 24 iops, 99.3 KiB/s
generated 100 requests in 1.65 min, 400 KiB, 1 iops, 4.04 KiB/s
min/avg/max/mdev = 163.5 us / 40.3 ms / 760.0 ms / 118.5 ms

最后一行显示了磁盘的延迟度量。

结论

所以这里有两个有用的工具可以提供有关磁盘速度和延迟状态的信息,具有非常清晰的输出,并且可以针对各种测试用例进行定制。

相关阅读:

Posted in: LinuxTags: ,