Назад | Перейти на главную страницу

Почему моя виртуальная машина Windows 7, работающая под управлением Linux KVM, не использует все виртуальные процессоры?

Все

У меня возникла проблема на моем сервере с тех пор, как я перенес одну из своих виртуальных машин с Windows 2008 Server на Windows 7 (последняя версия): хотя я назначил виртуальной машине четыре ядра, и она даже, кажется, их видит, кажется, что это имеет два ядра!

Кто-нибудь может сказать мне, что здесь происходит? Я думал, что это могла быть некоторая несовместимость между KVM и Windows 7, но, поскольку он видит виртуальные процессоры, я начинаю думать, что нет ... никаких подсказок?

Вот скриншот диспетчера процессов, на котором показаны только два ядра на одном корпусе:

В libvirt 0.8.3, если вы наберете:

virsh capabilities | grep topology

он перечислит топологию хоста:

<topology sockets='1' cores='4' threads='1'/>

Цифры относятся к сокетам, ядрам на сокет и потокам на ядро. Добавьте эту строку в запись cpu в файле xml, чтобы окна могли использовать все 4 ядра, например:

 <vcpu>4</vcpu>
 <cpu>
     <topology sockets='1' cores='4' threads='1'/>
 </cpu>

Я подозреваю, что процессоры представлены как одноядерные процессоры в отдельных сокетах. Windows 7 Ultimate поддерживает до двух сокетных систем, поэтому будет использовать 2 процессора.

Я не знаю, можете ли вы настроить KVM для представления процессоров как одноядерного четырехъядерного процессора или двух двухъядерных процессоров, что должно решить проблему.

Настройки топологии полностью поддерживаются в virt-manager начиная с Ubuntu 15.04.

Из virt-manager> CPU> Topology:

  • Проверка: настройка топологии ЦП вручную
  • Розетки: 2
  • Ядра: 2
  • Тем: 2

Следующее создается из вышеуказанных настроек в virt-manager. Вам не нужно вводить их с помощью virsh edit.

<vcpu placement='static'>8</vcpu>
<cpu mode='host-model'>
  <model fallback='allow'/>
  <topology sockets='2' cores='2' threads='2'/>
</cpu>

Топология перестала распознаваться Windows после обновления и снова ограничивает виртуальный процессор до 2 сокетов.

Чтобы исправить это, используйте virsh edit, чтобы скрыть функцию kvm, и добавьте функции Hyperv. После полного выключения и перезагрузки виртуальная машина Windows снова распознает несколько процессоров.

Почему моя виртуальная машина Windows 7, работающая под управлением Linux KVM, не использует все виртуальные процессоры?

<features>
  <acpi/>
  <apic/>
  <hyperv>
    <relaxed state='on'/>
    <vapic state='on'/>
    <spinlocks state='on' retries='8191'/>
  </hyperv>
  <kvm>
    <hidden state='on'/>
  </kvm>
</features>

В RHEL / CentOS 5.5 (kvm> = 83-164.el5) двоичный файл kvm также поддерживает параметр "-smp N, cores = N" (в пакете есть исправления для обратного порта); однако версия libvirt не поддерживает элемент <topology> в доменном XML. Обходной путь - создать сценарий-оболочку для / usr / libexec / kvm, который добавляет соответствующий параметр и указывает этот сценарий в элементе <emulator> вместо пути по умолчанию.

Стоит отметить, что Ubuntu 10.4 (Lucid) имеет версию 0.7.5 libvirt, а поддержка топологии был добавлен в libvirt в версии 0.7.6. Ubuntu 10.10 (Maverick) имеет libvirt 0.8.3, поэтому должна иметь возможность напрямую поддерживать спецификацию топологии в XML без оболочки.