我一直在研究我们组织中集群虚拟机的一些性能问题。实际上这个问题似乎影响了我看过的大多数虚拟机。主机和虚拟机都是带有 SP1 的 2008R2。
我相信——从我在各种文章中读到的内容和我得到的建议——I/O 延迟是最重要的指标。我在三个不同的地方查看了这个指标:
- 存储设备上的 LUN 延迟
- Hyper-v 主机上的逻辑磁盘平均秒/写入和平均秒/读取
- 与上面相同,但在虚拟机本身上
这是为了缩小可能发生的任何延迟的来源。果然,这就是我发现的......
我所看到的是我认为在 LUN 上可接受的延迟(3-15 毫秒),在 Hyper-V 主机上高达 20 毫秒(仍然可以接受)。当我查看 VM 上的相同指标时,我会看到高达 300 毫秒的常规峰值,每次长达 10 秒,平均约为 20-30 毫秒。
这个特定的 VM 是 SQL 服务器,但同样适用于非 SQL 服务器。相关的例外被添加到我们的 AV 解决方案中,以避免对 DB 文件进行访问扫描。此外,我们的 VHD 具有固定大小,而不是动态扩展。
所以对于我的问题:
这种延迟的可能原因是什么,和/或我可以在 VM(甚至主机上)使用哪些其他指标来缩小范围?
在 VM 中测量时间可能会出现问题,因为虚拟处理器不会连续执行。如果您想清楚地了解实际发生的情况,请使用管理操作系统中的性能监视器。查找 Hyper-V 虚拟存储设备。您也可以将其与来自 Resource Monitor 的数据相关联,以查看哪些内容正在争夺对磁盘的访问权限。
通常,特定 VHD 的响应时间与托管该 VHD 的卷上发生的其他情况有关。
您在 VM 上的“磁盘延迟”可能是主机上的 CPU 延迟,因为主机必须使用 CPU 周期来处理 IO 请求。
主机整体负载很重吗?还是只是运行了很多虚拟机?不确定 hyper-v 等价物是什么,但 VMWare 指标是 CPU 就绪时间 - 基本上是虚拟机在主机上等待运行的频率。