我们有一个 NetApp 存储系统,它向几个 Hyper-V 集群提供 LUN。在 2008 R2 上运行系统性能跟踪(在 perfmon 中)时,会出现有关“高水平的 I/O 拆分”的警告。阅读有关 I/O 拆分的文章后发现,这很可能是由碎片驱动器引起的。
我很难相信驱动器在传统意义上是碎片化的,因为一切都是虚拟的(LUN 上的虚拟硬盘、卷上的虚拟硬盘、聚合上的虚拟硬盘、存储系统上的虚拟硬盘,存储系统会将数据写入任何合适的位置并删除重复数据)。那么我应该为此担心吗?我看不到任何存储问题的证据,例如延迟过大。
顺便说一句,在我们的一台虚拟机上运行碎片整理分析显示约 50% 的碎片数据。我记得我读过一篇文章,如果检测到碎片率超过 20%,Windows 会自动拆分 I/O,这是真的吗?碎片整理任务已禁用,那么它怎么知道呢?
答案1
虚拟机中的磁盘碎片化是现实生活中的现象,原因如上所述。在大多数工作负载中,这并不是需要担心的事情。如果您的工作负载执行大量顺序 IO,这可能是导致性能不佳的原因,但对于随机读/写工作负载则不是。
虚拟机有时被称为 I/O 混合器是有原因的 :)
答案2
多次 I/O 总是效率较低。您需要确定它是否表现为性能问题。有些文件从定义上来说很大,并且数据随机组织,因此需要进行一些拆分 I/O。
分割 I/O 也可能是另一个潜在瓶颈的症状,例如磁盘队列长度。
您可能需要确保测量 storport 延迟。这隐藏在 perfmon 中,可以按照以下“更多信息”部分中的说明进行测量:
http://support.microsoft.com/kb/978000
众所周知,在相同硬件上,2008 R2 SP1 storport SAN 性能比 Windows 2003 慢。
如果存在性能问题,您可能需要确保操作系统已更新相关的非安全修补程序。
答案3
对于 Netapp 来说,拆分 IO 通常意味着对齐不良。如果您的 MBR 偏移了 VM 的磁盘块,以至于它们跨越了 Netapp 块的边界,那么每次您从操作系统对单个块执行 IO 时,您都必须两次访问存储。