为什么 KVM 会因 Windows 10 VM 中的“系统中断”间歇性地导致 CPU 负载达到 100%?

为什么 KVM 会因 Windows 10 VM 中的“系统中断”间歇性地导致 CPU 负载达到 100%?

我运行着一百台 Ubuntu 16.04 LTS 服务器,这些服务器的硬件基本相同,分布在世界各地。(我正在努力将它们升级到 20.04 LTS,但 Ubuntu 的某些设计决策仍然阻碍了这一进程。)每台服务器都运行着搭载 Windows 10 Enterprise 的 KVM VM。其中三台服务器出现以下问题:

监控显示服务器的 Linux 平均负载在没有任何明显原因的情况下突然上升到 2 以上。top显示运行 Windows VM 的进程的 CPU 负载qemu-system-x86稳定在 200%,与分配给 VM 的 2 个核心相匹配。通过 VNC 访问的 Windows 桌面显得非常迟缓。Windows 任务管理器显示进程“系统中断”消耗了 100% 的 CPU。

重新启动 Windows VM 无法解决问题。该问题会持续几个小时甚至几天,然后自行恢复正常,同样没有任何明显的原因或理由。

研究 Windows 中“系统中断”导致 CPU 使用率过高的原因,得出的普遍共识是这是一个硬件问题。在这种情况下,运行 Windows 的硬件是虚拟的,即 KVM 虚拟机管理程序。主机的物理硬件在高负载事件之前或之后没有变化,在出现这些事件的服务器和没有出现这些事件的服务器之间也没有显著差异。除了 Windows 客户机的过载外,Linux 主机系统没有显示任何故障迹象。检查受影响系统的 Linux 日志没有发现任何异常。Windows 事件日志显示了高负载事件期间明显的大量次要错误,例如服务没有响应,但没有表明可能的原因。

我应该从哪里开始寻找导致该行为的可能原因?

为了完整起见,这是我的 KVM 调用:

kvm \
        -daemonize \
        -name "$vmname64-$(hostname)" \
        -drive file="/srv/kvm/${vmname64}.qcow2",if=virtio \
        -net nic,model=virtio,macaddr=$macaddr64 -net tap \
        -vga std \
        -rtc base=localtime \
        -usb -usbdevice tablet \
        -nodefaults \
        -runas srvadmin \
        -chroot /home/srvadmin \
        -k de \
        -smp 2 \
        -m 4096 \
        -vnc :1,password \
        -monitor mon:telnet:127.0.0.1:4445,server,nowait

相关内容