Все
У меня возникла проблема на моем сервере с тех пор, как я перенес одну из своих виртуальных машин с 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:
Следующее создается из вышеуказанных настроек в 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 снова распознает несколько процессоров.
<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 без оболочки.