Чому мій VM Windows 7, що працює під управлінням KVM Linux, не використовує всі віртуальні процесори?


12

Усі

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

Він розпізнає мої процесори, але не використовує їх!

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

Ось скріншот менеджера процесів, що показує лише два ядра в одному полі:

Менеджер завдань


Ви впевнені, що це не відображає двох двоядерних програм?
фоекс

@phoebus: Мені це було цікаво, але потім на всіх версіях Windows, де я запустив цю установку, перш ніж я бачу чотири ядра при пошуку монітора процесора, якого я тут не маю.
jkp

Коли ви говорите монітор процесора, ви маєте на увазі розділ моніторингу продуктивності диспетчера завдань? Оскільки ви базуєтесь виключно на знімках екрана, ви показуєте докази двох, двоядерних процесорів. Якщо це так, ви повинні побачити всі 4 ядра на моніторі продуктивності. Якщо ви цього не зробите, то так, щось вибагливе.
фоекс

@phoebus: так, я маю на увазі розділ моніторингу ефективності диспетчера завдань. Однозначно мені здається непростим ...
jkp

Відповіді:


17

Я підозрюю, що процесори представлені як одноядерні процесори в окремих сокетах. Windows 7 Ultimate підтримує до 2 розеткових систем, тому він буде використовувати 2 процесори.

Я не знаю, чи можна налаштувати KVM, щоб представити процесори як один чотириядерний процесор, або 2 двоядерні процесори, що має вирішити проблему.


1
Це правильно. У банкоматі немає можливості змінити топологію.
Лука Теттаманті

1
Нічого собі, я цього не знав. Дякуємо, що правильно поставили палець на проблему. @Luca: чи знаєте ви, чи планується така підтримка? Я фактично використовую додаткові два ядра чи вони збираються витрачати?
jkp

2
@Luca: насправді з qemu 0,12 ви можете змінити топологію. Я оновив свої компоненти kvm простору користувача, але, думаю, мені потрібен новий модуль ядра, щоб він працював .... все одно, це можна зробити :)
jkp

Ах, круто ... Я теж повинен тоді оновити :)
Лука Теттаманті

Майте на увазі, що ви можете запустити найновіший модуль ядра kvm на вашому поточному старшому ядрі. Можливо, вам доведеться самостійно скласти модуль, якщо ви не зможете знайти сховище для вашого дистрибутива, яке має для вас двійковий код. Але побудувати модуль не надто складно.
3вплив

21

Якщо набрати: libvirt 0.8.3

virsh capabilities | grep topology

в ньому буде перерахована топологія хоста:

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

Цифри стосуються розеток, ядер на сокет і ниток на ядро. Додайте цей рядок до записи CPU у файлі xml, щоб дозволити Windows використовувати всі 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'/>. КРИТИЧНИЙ: виконується kill -HUP nnnnnде nnnnn - PID мого процесу libvirtd. Почав ВМ. Це спрацювало. +1! Дякую! ... Але не забудьте натиснути libvirtd або сигналом HUP, або перезапуском!
Майк S

4

Налаштування топології повністю підтримуються у virt-менеджері з Ubuntu 15.04.

Від virt-менеджера> Процесори> Топологія:

  • Перевірка: Вручну встановлена ​​топологія процесора
  • Розетки: 2
  • Сердечники: 2
  • Нитки: 2

З наведених вище параметрів у virt-менеджері створюється наступне. Не потрібно їх вводити за допомогою редагування virsh.

<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 VM знову розпізнає кілька процесорів.

Чому мій VM Windows 7, що працює під управлінням KVM Linux, не використовує всі віртуальні процесори?

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

2

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


1

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.