如何在 Linux 上测试磁盘延迟?

如何在 Linux 上测试磁盘延迟?

对 RAID 固件进行了升级,因为延迟似乎有所增加。

您能否建议检查磁盘读写延迟的最准确方法?

答案1

IO区域伟大的基准。

运行随机读取、随机写入、随机混合测试来检查延迟。

答案2

我建议使用fio我在答案中描述的方法https://askubuntu.com/a/991311/50254

fio允许您获得有关不同工作负载(单线程巨大顺序写入 QD32 与多线程混合随机读写 4k QD1 之间的任何内容)的延迟分布的更多信息。

我认为,如果您假设硬件的延迟比以前更高,那么您应该测试单线程随机 4k 读取 QD1(这是我能想到的最对延迟敏感的操作):

fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting

这将fio-tempfile.dat在当前工作目录中创建测试文件,因此请确保首先更改为要测试的设备。(如果您想测试原始设备性能而不是文件系统性能,则可以使用原始设备作为filename。但是,您将丢失该设备的当前内容。)

您还可以通过写入而不是读取数据来测试同一件事:

fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randwrite --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting

如果您发现写入延迟大幅增加,那么您可以肯定旧固件允许写回缓存,而新固件不允许这样做。除非您有电池供电的 RAID 控制器或正确配置的 UPS,否则如果您认为数据很重要,则不要写回缓存。

答案3

Linux 硬盘调优和基本性能监控中常用的工具是hdparm

答案4

为了测试磁盘延迟,我使用了两个实用程序:iopingfio

ioping是 的磁盘 I/O 等效项ping。它对于快速首次检查磁盘子系统非常有用。运行ioping -C -D -G /your/dir结果为以下输出,其中<<<表示读取,>>>表示写入:

4 KiB >>> /root/test/ (xfs /dev/dm-0 32.0 GiB): request=1 time=2.90 ms (warmup)
4 KiB <<< /root/test/ (xfs /dev/dm-0 32.0 GiB): request=2 time=278.4 us
4 KiB >>> /root/test/ (xfs /dev/dm-0 32.0 GiB): request=3 time=23.2 ms
4 KiB <<< /root/test/ (xfs /dev/dm-0 32.0 GiB): request=4 time=283.5 us
4 KiB >>> /root/test/ (xfs /dev/dm-0 32.0 GiB): request=5 time=6.29 ms

对于更深入的测试(即:类似于 ping 泛洪),请添加-R上面的命令。要测试同步写入,请删除-C

fio对于深入分析非常有用。用于fio --name=test --filename=/your/file --rw=randrw --size=256M --direct=1 --runtime=15快速进行首次检查。添加--sync=1用于测试同步写入。示例输出:

...
read: IOPS=3708, BW=14.5MiB/s (15.2MB/s)(128MiB/8828msec)
  clat (usec): min=90, max=12403, avg=200.61, stdev=385.19
   lat (usec): min=90, max=12403, avg=200.79, stdev=385.20
...
write: IOPS=3715, BW=14.5MiB/s (15.2MB/s)(128MiB/8828msec); 0 zone resets
  clat (usec): min=32, max=16906, avg=65.05, stdev=317.08
   lat (usec): min=32, max=16906, avg=65.33, stdev=317.09
...

加分点:ZFS 不支持真正的O_DIRECT读/写,因此非同步写入将被缓存。除非primarycache=none在测试数据集上设置,否则读取将被缓存。无论如何,ZFS 性能测试,由于其对 ARC 和其他因素的强烈依赖,是一项相当复杂的任务。

相关内容