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

12

Все

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

Он распознает мои процессоры, но не использует их!

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

Вот снимок экрана диспетчера процессов, показывающий только два ядра на одной коробке:

Диспетчер задач

JKP
источник
Вы уверены, что он не показывает двух двухъядерных процессоров?
Феб
@phoebus: Мне было интересно, но тогда на всех версиях Windows, где я запускал эту настройку, прежде чем я вижу четыре ядра, когда смотрю в монитор процессора, чего у меня нет.
2010 года
Когда вы говорите «монитор процессора», вы имеете в виду раздел мониторинга производительности диспетчера задач? Потому что, основываясь исключительно на ваших скриншотах, вы демонстрируете наличие двухъядерных процессоров. Если это так, вы должны увидеть все 4 ядра в мониторе производительности. Если нет, то да, что-то шаткое.
Феб
@phoebus: да, я имею в виду раздел мониторинга производительности диспетчера задач. Определенно кажется мне
вялым

Ответы:

17

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

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

xenny
источник
1
Правильно. В банкомате нет возможности изменить топологию.
Лука Теттаманти
1
Вау, я этого не знал. Спасибо, что правильно указали на вопрос. @ Лука: вы знаете, планируется ли такая поддержка? Я на самом деле использую лишние два ядра или они собираются тратить?
2010 года
2
@Luca: фактически, начиная с версии qemu 0.12, вы можете изменить топологию. Я обновил свои компоненты kvm для пользовательского пространства, но я думаю, что мне нужен новый мод ядра, чтобы он работал ... в любом случае, это можно сделать :)
jkp
Ах, круто ... Я тоже должен обновить :)
Luca Tettamanti
Имейте в виду, что вы можете запустить новейший модуль ядра kvm в своем более старом ядре. Возможно, вам придется скомпилировать модуль самостоятельно, если вы не сможете найти репозиторий для вашего дистрибутива, в котором есть бинарный файл. Но построить модуль не так уж сложно.
3dinfluence
21

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

virsh capabilities | grep topology

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

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

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

 <vcpu>4</vcpu>
 <cpu>
     <topology sockets='1' cores='4' threads='1'/>
 </cpu>
Марк Дайел
источник
знал это, но забыл об этом - ну, опять же, есть ошибка сервера и все те люди, пишущие все эти удивительные вещи. Спасибо за чаевые!
фены
1
Я попробовал это на моей машине RHEL 7.2. Добавлено <topology sockets='1' cores='4' threads='1'/>в мой XML. virsh capabilities | grep topologyпоказывает <topology sockets='1' cores='6' threads='2'/>. CRITICAL: выполнил a, kill -HUP nnnnnгде nnnnn - PID моего процесса libvirtd. Запустил ВМ. Это сработало. +1! Благодарность! ... Но не забудьте пнуть libvirtd с помощью сигнала HUP или перезапуска!
Майк С.
4

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

От virt-manager> Процессоры> Топология:

  • Проверьте: вручную установите топологию процессора
  • Розетки: 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>

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

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

Почему моя виртуальная машина 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>
rickfoosusa
источник
2

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

Сергей Власов
источник
1

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

user67327
источник