什么会导致 SAN 上的 IO 等待?

Rob*_*ean 6 storage-area-network iowait

当我在服务器上看到它时,我理解 IO 等待,这意味着在我等待 IO 赶上时 CPU 被阻塞[source]

我试图理解为什么 SAN 统计数据会显示高 IO 等待 - 这是否表明 SAN CPU 被 SAN 磁盘阻塞还是其他原因?

Den*_*ker 8

由于基本物理定律,SAN 的 IO 延迟比本地磁盘高得多。因此,如果您的应用程序正在执行大量小写操作,并且fsync()每次写完之后,您都会看到很多 iowait。

例如,这里有包含许多小事务的同一数据集的两个 mysql 复制者,您会看到 SAN 上的从属服务器花费更多的时间进行 IO。

桑: 在此处输入图片说明

当地的:

在此处输入图片说明


Bas*_*sil 5

SAN 等待时间可能意味着您的存储是瓶颈。它也可能是服务器设置或服务器与存储之间的连接,但更常见的是,当我看到 SAN 磁盘的等待时间时,它只是一个繁忙的 SAN。

首先,检查支持卷的磁盘的性能。您正在寻找 IO/s 或 MB/s 读取或写入的峰值,以及缓存利用率的潜在峰值。尝试仅查看您正在调查的卷中涉及的硬件。此外,及时回顾一下,看看是否有更高的峰值没有引起问题。如果是这样,那么存储硬件不太可能是问题所在。存储硬件瓶颈的纠正措施可能包括将此卷迁移到另一个池或 RAID,或增加心轴或缓存的数量。

其次,检查服务器上的队列深度设置。如果您有一个非常高的队列深度,您的服务器将在高利用率期间看到更高的延迟。队列深度是存储告诉服务器限制其 IO 以允许存储跟上的一种方式。32 是一个很好的平均数字,我见过的大多数服务器操作系统和大多数存储设备都支持它。我也看到了更高和更低的工作,但如果它设置为 1024 或其他什么,这可以解释高等待时间。在队列深度非常高的情况下,服务器将它想做的所有事情都排队,然后存储会以队列深度低得多的速度完成它。由于服务器从进入队列和离开队列开始测量等待时间,因此等待时间会增加。

最后,检查服务器的错误日志。确保没有传输级别问题(如磁盘超时或路径故障)。如果有,你会想看看开关。