Почему KVM периодически вызывает 100% загрузку ЦП из-за «системных прерываний» на виртуальной машине Windows 10?

Почему KVM периодически вызывает 100% загрузку ЦП из-за «системных прерываний» на виртуальной машине Windows 10?

Я использую сотню серверов Ubuntu 16.04 LTS с практически идентичным оборудованием, распределенным по всему миру. (Я работаю над обновлением их до 20.04 LTS, но некоторые неудачные решения по проектированию со стороны Ubuntu все еще блокируют это.) На каждом из этих серверов запущена виртуальная машина KVM с Windows 10 Enterprise. На трех из них наблюдается следующая проблема:

Без какой-либо видимой причины мониторинг показывает, что средняя загрузка Linux сервера подпрыгнула выше 2. topпоказывает, что загрузка ЦП от qemu-system-x86процесса, запускающего виртуальную машину Windows, составляет 200%, что соответствует 2 ядрам, назначенным виртуальной машине. Рабочий стол Windows, доступ к которому осуществляется через VNC, выглядит крайне вялым. Диспетчер задач Windows показывает процесс «Системные прерывания», потребляющий 100% ЦП.

Перезагрузка виртуальной машины Windows не исправляет ситуацию. Она сохраняется в течение нескольких часов или даже дней, а затем возвращается к норме сама по себе, опять же без какой-либо видимой причины или повода.

Исследование причин высокой загрузки ЦП «системными прерываниями» в Windows приводит к общему мнению, что это проблема оборудования. Оборудование, на котором работает Windows в этом случае, является виртуальным, а именно гипервизором KVM. Физическое оборудование хостов не менялось до или после эпизодов высокой нагрузки, и оно не сильно отличается между серверами, на которых эти эпизоды наблюдаются, и теми, на которых они отсутствуют. Хост-система Linux не показывает никаких признаков неисправности, за исключением чрезмерной нагрузки со стороны гостя Windows. Проверка журналов 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

Связанный контент