我们有一个 Hyper-V 客户机,它有 4 个虚拟核心,报告所有虚拟核心的总使用率为 50%。也就是说,这 50% 是 atop 和 top 报告的,还有 350% 的“空闲”状态。这至少在理论上意味着总虚拟 CPU 容量使用率为 12.5%。然而,当同一台服务器承受这种压力时,它会报告 TCP 堆栈中的网络往返时间(即单向 SYN 数据包,返回 SYN-ACK 数据包),这是其他情况下的四倍。请注意,TCP 连接的这一部分不会影响机器中的其他 I/O,例如磁盘。此外,我还测量了到另一台服务器的往返时间,以排除网络中的本地问题。我们没有看到数据包丢失。
因此,有两种可能性:要么是虚拟机管理程序正在限制虚拟机的内核,要么是某处的网络队列增加了数据包的延迟。
我在这里的问题是为了排除第一种可能性:从客户机内部来看,虚拟客户机的 CPU 使用率报告是否相当准确?