QEMU не сохраняет закрепление ЦП для виртуальной машины
Я установил виртуальную машину Windows 10 и Windows Server 2019 под свой KVM-гипервизор Rocky Linux 9.1. Мой план в отношении этой установки — попрактиковаться в системном администрировании, и я хотел бы иметь возможность запускать несколько виртуальных машин одновременно.
Я обнаружил, что обе виртуальные машины Windows работали довольно медленно (по сути непригодно для использования), поэтому я попробовал некоторые исправления для улучшения производительности гостевых виртуальных машин . Windows Server 2019 теперь работает немного лучше благодаря закреплению ЦП, но проблема, с которой я столкнулся, заключается в том, что виртуальная машина Windows 10 не сохраняет закрепление ЦП.
Вот изображение того, как устроен мой компьютер. Хост Windows 10, работающий под управлением Rocky Linux KVM в Virtualbox, затем Windows Server и Windows 10 в QEMU.
Эта проблема у меня уже больше месяца, и я перепробовал много вещей.
Изначально я назначил моей виртуальной машине Rocky Linux 9.1 8 ядер, но теперь для устранения неполадок я использую 10 ядер. Для Windows Server я назначил ему 4 ядра и закрепил ядра от 0 до 3, и все работает нормально. Для Windows 10 я назначаю ему 4 ядра и пытаюсь закрепить ядра с 4 по 7, но это никогда не сохраняет. Пробовал притыкать разные комбинации ядер, не спасает. Как ни странно, если я прикреплю те же ядра, которые используются в Windows Server, к виртуальной машине Windows 10, это ДЕЙСТВИТЕЛЬНО сохранит закрепление ЦП. Но в Windows Server нет закрепленных ядер.
И чтобы убедиться, что я использую правильные ядра, вот вывод lscpu -e:
[admin@localhost ~]$ lscpu -e
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
0 0 0 0 0:0:0:0 yes
1 0 0 1 1:1:1:1 yes
2 0 0 2 2:2:2:2 yes
3 0 0 3 3:3:3:3 yes
4 0 0 4 4:4:4:4 yes
5 0 0 5 5:5:5:5 yes
6 0 0 6 6:6:6:6 yes
7 0 0 7 7:7:7:7 yes
8 0 0 8 8:8:8:8 yes
9 0 0 9 9:9:9:9 yes
Первое, что я попытался сделать, это установить драйверы VirtIO и гостевые инструменты Spice. Драйверы VirtIO, возможно, и помогли, но разница едва заметна. Spice Guest Tools был удален из RHEL 9, поэтому я даже не могу их использовать.
Далее я прочитал, что в текстовом редакторе может быть проблема с сохранением изменений. Я переключился с vim на nano (отредактировал /etc/environment и добавилexport EDITOR=nano
), побежалsudo virsh edit win10
, закрепил ядра ЦП, сохраните, выйдите, затем проверьте файл конфигурации XML, и изменения не сохраняются. Могу подтвердить, что это не редактор, потому что он отлично работает на других виртуальных машинах и читаетDomain: 'win10' XML configuration edited.
после выхода.
Еще я прочитал, чтоsudo virsh edit
не сохранит никаких изменений, если виртуальная машина работает. Я редактирую XML-файл виртуальной машины только тогда, когда она выключена, так что это не причина.
Я только что обнаружил что-то странное: я могу закрепить ЦП на виртуальной машине Windows 10 ТОЛЬКО ЕСЛИ я добавляю 4 дополнительных ядра. Если я назначу виртуальной машине только 4 ядра и закреплю эти 4 ядра, то после сохранения и выхода строки закрепления ЦП исчезнут. Это выглядит так:
<vcpu placement="static">4</vcpu>
<iothreads>1</iothreads>
<cputune>
<emulatorpin cpuset="4"/>
<iothreadpin iothread="1" cpuset="4"/>
</cputune>
Однако, если я назначу 8 ядер (дополнительные 4 ядра поверх уже имеющихся 4) и закреплю 4 ядра, то после сохранения и выхода эти 4 ядра все равно будут закреплены. Это выглядит так:
<vcpu placement="static">8</vcpu>
<iothreads>1</iothreads>
<cputune>
<vcpupin vcpu="4" cpuset="4"/>
<vcpupin vcpu="5" cpuset="5"/>
<vcpupin vcpu="6" cpuset="6"/>
<vcpupin vcpu="7" cpuset="7"/>
<emulatorpin cpuset="4"/>
<iothreadpin iothread="1" cpuset="4"/>
</cputune>
Проблема с приведенной выше конфигурацией заключается в том, что виртуальная машина будет использовать 8 ядер вместо 4. См. ниже:
Я не совсем уверен, что еще попробовать. Моя цель — создать виртуальные машины Windows, которые быстро загружаются, работают достаточно быстро и не допускают постоянного скачка загрузки ЦП на 100%. Я создал отдельную виртуальную машину Windows 10, используя образ .raw вместо .qcow2, и думаю, это немного быстрее.
Я постарался включить как можно больше деталей. Если вам нужна дополнительная информация, дайте мне знать, и я обновлю свой пост.