我试图找出我们是否获得了从 SCSI 或 SAN LUN 写入和/或读取数据的预期 I/O?
在这个测试环境中,我有一个 Ubuntu 14.04.5 LTS 服务器,并且从 FC 端口上的 SAN 存储团队获得了单个路径上的单个 LUN。
我们请求了 6000 个 I/O,然而,问题在于我们强烈感觉到请求的 I/O 没有在该 SAN LUN 上收到,但存储团队表示他们已经给出了那么多 I/O。
因此,为了向他们证明他们这边出了问题,我需要知道如何捕获或检查实际收到的 I/O 数量与请求的数量相比是多少?
有人能帮我吗?提前谢谢大家,抱歉我的英语不好。
答案1
要实时监控特定磁盘或分区的读/写吞吐量,可以使用该工具nmon
。它显示每个分区/磁盘的绝对数据速率,并估计每个分区/磁盘的繁忙程度(百分比),包括一个漂亮的条形图。
您可以使用以下方式安装:
sudo apt install nmon
之后,可以按 调用它,然后nmon
按D显示磁盘监视器,也可以按 运行它,NMON=d nmon
直接显示磁盘监视器而无需进一步输入。默认情况下,刷新率为 2 秒,但您可以使用参数手动更改-s
,例如nmon -s 1
1 秒。要退出nmon
,请按Q或Ctrl+ C。
以下是其样例:
┌nmon─14g─────────────────────Hostname=type40mark3──Refresh= 6secs ───16:26.08─┐
│ Disk I/O ──/proc/diskstats────mostly in KB/s─────Warning:contains duplicates─│
│DiskName Busy Read WriteMB|0 |25 |50 |75 100|│
│sda 0% 0.0 0.0|> |│
│sda1 0% 0.0 0.0|> |│
│sda2 0% 0.0 0.0|> |│
│sda3 0% 0.0 0.0|> |│
│sda4 0% 0.0 0.0|> |│
│sda5 0% 0.0 0.0|> |│
│sdb 49% 230.5 0.0|RRRRRRRRRRRRRRRRRRRRRRRRR >│
│sdb1 15% 75.0 0.0|RRRRRRRR > |│
│sdb2 4% 16.7 0.0|RR > |│
│sdb3 0% 2.7 0.0|R> |│
│sdb4 30% 135.9 0.0|RRRRRRRRRRRRRRR > |│
│sdb5 0% 0.0 0.0|> |│
│sdb6 0% 0.0 0.0|> |│
│dm-0 0% 0.0 0.0|> |│
│Totals Read-MB/s=460.7 Writes-MB/s=0.1 Transfers/sec=469.0 │
└──────────────────────────────────────────────────────────────────────────────┘
或者,如果您只是想对任何磁盘进行“速度测试”,您可以使用该hdparm
工具:
sudo hdparm -t /dev/sda
这将从指定设备(此处/dev/sda
)读取约 3 秒,然后显示数据速率。请注意,它执行“缓冲读取”,但不使用磁盘缓存。使用-T
代替 来-t
测试从磁盘缓存读取的速度。
但是您无法通过这种方式测试或确定写入速度。
答案2
I/O 性能将受到块设备配置的影响。有关块设备调优的一个很好的参考是这里其中包括队列深度、I/O 调度程序、预读和分区对齐等设置。请注意,该页面显示的是其存储阵列的默认值;您的默认值可能大不相同。
获取块设备配置,以便您可以在测试后重置它们:
cat /sys/block/lun0/queue/nr_requests
cat /sys/block/lun0/queue/scheduler
cat /sys/block/lun0/queue/read_ahead_kb
设置块设备参数进行测试:
echo noop > /sys/block/lun0/queue/scheduler
队列深度是块设备所宣传的任何内容,对于顺序读取测试来说并不重要,简单的 NOOP FIFO I/O 调度程序,我们不关心提前读取远程流读取。
以非破坏性的方式检查 IOPS:
dd if=/dev/lun0 of=/dev/null bs=4k iflag=direct status=progress
其中 /dev/lun0 是多路径虚拟磁盘设备。iflags=direct 绕过服务器的缓存。
6,000 IOPS 和 4k 块大小应提供 24.57 MiB/秒的吞吐量。实际 IOPS 是吞吐量/块大小。在任何具有寻道时间的介质上,随机读取 IOPS 都会更差。使用 4k 块大小,因为测试的是 IOPS,而不是吞吐量,
6,000 IOPS @ 4k 应该是 24.57 MiB/秒(6,000 * 4 KiB)。