对 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
为了测试磁盘延迟,我使用了两个实用程序:ioping
和fio
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 和其他因素的强烈依赖,是一项相当复杂的任务。