Warum würde KVM durch „Systemunterbrechungen“ in einer Windows 10-VM zeitweise eine CPU-Auslastung von 100 % verursachen?

Warum würde KVM durch „Systemunterbrechungen“ in einer Windows 10-VM zeitweise eine CPU-Auslastung von 100 % verursachen?

Ich betreibe hundert Ubuntu 16.04 LTS-Server mit im Wesentlichen identischer Hardware, die weltweit verteilt sind. (Ich arbeite daran, sie auf 20.04 LTS zu aktualisieren, aber bestimmte unglückliche Designentscheidungen seitens Ubuntu verhindern dies immer noch.) Auf jedem dieser Server läuft eine KVM-VM mit Windows 10 Enterprise. Drei davon weisen das folgende Problem auf:

Ohne ersichtlichen Grund zeigt die Überwachung, dass die durchschnittliche Linux-Last des Servers auf über 2 steigt. topDie CPU-Last des qemu-system-x86Prozesses, der die Windows-VM ausführt, liegt bei stabilen 200 %, was den 2 Kernen entspricht, die der VM zugewiesen sind. Der über VNC aufgerufene Windows-Desktop erscheint extrem träge. Der Windows Task-Manager zeigt einen Prozess „Systemunterbrechungen“, der 100 % der CPU verbraucht.

Ein Neustart der Windows-VM behebt das Problem nicht. Es bleibt mehrere Stunden oder sogar Tage bestehen und kehrt dann von selbst zum Normalzustand zurück, wiederum ohne ersichtlichen Grund oder Anlass.

Bei der Suche nach Gründen für eine hohe CPU-Auslastung durch „Systeminterrupts“ in Windows kommt man allgemein zu dem Schluss, dass es sich um ein Hardwareproblem handelt. Die Hardware, auf der Windows in diesem Fall läuft, ist virtuell, nämlich der KVM-Hypervisor. Die physische Hardware der Hosts hat sich vor oder nach den Hochlastepisoden nicht geändert, und auch unterscheidet sie sich nicht wesentlich zwischen den Servern, die diese Episoden aufweisen, und denen, die sie nicht aufweisen. Das Linux-Hostsystem zeigt außer der übermäßigen Belastung durch den Windows-Gast keine Anzeichen einer Fehlfunktion. Die Überprüfung der Linux-Protokolle auf den betroffenen Systemen hat nichts Ungewöhnliches ergeben. Die Windows-Ereignisprotokolle zeigen die offensichtlichen Haufen sekundärer Fehler während der Hochlastepisoden, z. B. nicht reagierende Dienste, aber nichts, was auf eine mögliche Ursache hinweist.

Wo würde ich anfangen, nach möglichen Ursachen für dieses Verhalten zu suchen?

Der Vollständigkeit halber ist dies mein KVM-Aufruf:

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

verwandte Informationen