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