Dlaczego moja maszyna wirtualna z systemem Windows 7 działająca pod Linuksem KVM nie używa wszystkich procesorów wirtualnych?

12

Wszystko

Wystąpił problem na moim serwerze od czasu migracji jednej maszyny wirtualnej z systemu Windows 2008 Server do systemu Windows 7 (wersja ostateczna): chociaż przypisałem cztery rdzenie do maszyny wirtualnej i wydaje się, że je widzi, wydaje się, że tak ma dwa rdzenie!

Rozpoznaje moje procesory, ale ich nie używa!

Czy ktoś może mi powiedzieć, co się tutaj dzieje? Myślałem, że może to być jakaś niezgodność między KVM i Windows 7, ale ponieważ widzi wirtualne procesory, zaczynam myśleć, że nie ... żadnych wskazówek?

Oto zrzut ekranu menedżera procesów pokazującego tylko dwa rdzenie na tym samym pudełku:

Menadżer zadań

jkp
źródło
Czy jesteś pewien, że nie pokazuje ci dwóch dwurdzeniowych procesorów?
phoebus
@ phoebus: Zastanawiałem się nad tym, ale potem we wszystkich wersjach systemu Windows, w których uruchomiłem tę konfigurację, zanim zobaczę cztery rdzenie, gdy patrzę na monitor procesora, którego tutaj nie mam.
jkp
Kiedy mówisz „monitor procesora”, czy masz na myśli sekcję monitorowania wydajności menedżera zadań? Ponieważ opierając się wyłącznie na zrzutach ekranu, pokazujesz dowody dwóch dwurdzeniowych procesorów. W takim przypadku powinieneś zobaczyć wszystkie 4 rdzenie w monitorze wydajności. Jeśli nie, to tak, coś jest nie tak.
phoebus
@ phoebus: tak, mam na myśli sekcję monitorowania wydajności menedżera zadań. Zdecydowanie wydaje mi się
dziwny

Odpowiedzi:

17

Podejrzewam, że procesory są prezentowane jako procesory jednordzeniowe w osobnych gniazdach. Windows 7 Ultimate obsługuje do 2 systemów gniazd, więc będzie korzystał z 2 procesorów.

Nie wiem, czy możesz skonfigurować KVM tak, aby przedstawiał procesory jako jedno- lub czterordzeniowy procesor, czy też dwa dwurdzeniowe procesory, co powinno rozwiązać problem.

Xenny
źródło
1
To jest poprawne. ATM nie ma możliwości zmiany topologii.
Luca Tettamanti
1
Wow, nie wiedziałem tego. Dziękujemy za prawidłowe wskazanie problemu. @Luca: czy wiesz, czy takie wsparcie jest planowane? Naprawdę używam dodatkowych dwóch rdzeni, czy będą się marnować?
jkp
2
@Luca: właściwie od qemu 0.12 możesz zmienić topologię. Zaktualizowałem komponenty kvm w przestrzeni użytkownika, ale myślę, że potrzebuję nowego modu jądra, aby działał .... w każdym razie można to zrobić :)
jkp
Ach, fajnie ... ja też powinienem zaktualizować :)
Luca Tettamanti
Pamiętaj, że możesz uruchomić najnowszy moduł jądra kvm na bieżącym starszym jądrze. Prawdopodobnie będziesz musiał samodzielnie skompilować moduł, chyba że znajdziesz repozytorium dla swojej dystrybucji, które ma dla ciebie plik binarny. Ale zbudowanie modułu nie jest zbyt trudne.
3dinfluence 19.01.11
21

W libvirt 0.8.3, jeśli wpiszesz:

virsh capabilities | grep topology

wyświetli listę topologii hosta:

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

Liczby odnoszą się do gniazd, rdzeni na gniazdo i wątków na rdzeń. Dodaj ten wiersz do wpisu procesora w pliku xml, aby umożliwić systemowi Windows korzystanie z wszystkich 4 rdzeni, np .:

 <vcpu>4</vcpu>
 <cpu>
     <topology sockets='1' cores='4' threads='1'/>
 </cpu>
Mark Dayel
źródło
wiedziałem o tym, ale zapomniałem o tym - no cóż, znowu jest błąd serwera i wszyscy ci ludzie piszący te wszystkie niesamowite rzeczy. dzięki za wskazówkę!
fen.
1
Próbowałem tego na mojej maszynie RHEL 7.2. Dodano <topology sockets='1' cores='4' threads='1'/>do mojego xml. virsh capabilities | grep topologypokazuje <topology sockets='1' cores='6' threads='2'/>. KRYTYCZNE: kill -HUP nnnnnwykonałem gdzie nnnnn jest PID mojego procesu libvirtd. Uruchomiłem maszynę wirtualną. Zadziałało. +1! Dzięki! ... Ale nie zapomnij wykopać libvirtd z sygnałem HUP lub restartem!
Mike S
4

Ustawienia topologii są w pełni obsługiwane w virt-manager od Ubuntu 15.04.

Z virt-manager> Procesory> Topologia:

  • Sprawdź: Ręcznie ustaw topologię procesora
  • Gniazda: 2
  • Rdzenie: 2
  • Wątki: 2

Poniższe ustawienia są tworzone z powyższych ustawień w virt-manager. Nie musisz wprowadzać ich przy pomocy edycji virsh.

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

Topologia przestała być rozpoznawana przez system Windows po aktualizacji i ponownie ogranicza wirtualny procesor do 2 gniazd.

Aby to naprawić, użyj „edycji virsh”, aby ukryć funkcję kvm i dodać funkcje hyperv. Po całkowitym zamknięciu i ponownym uruchomieniu maszyna wirtualna systemu Windows ponownie rozpozna wiele procesorów.

Dlaczego moja maszyna wirtualna z systemem Windows 7 działająca pod Linuksem KVM nie używa wszystkich procesorów wirtualnych?

<features>
  <acpi/>
  <apic/>
  <hyperv>
    <relaxed state='on'/>
    <vapic state='on'/>
    <spinlocks state='on' retries='8191'/>
  </hyperv>
  <kvm>
    <hidden state='on'/>
  </kvm>
</features>
rickfoosusa
źródło
2

W RHEL / CentOS 5.5 (kvm> = 83-164.el5) plik binarny kvm obsługuje również opcję „-smp N, cores = N” (w pakiecie znajdują się łaty backport); jednak wersja libvirt nie obsługuje elementu <topology> w pliku XML domeny. Obejściem tego problemu jest utworzenie skryptu opakowania dla / usr / libexec / kvm, który doda odpowiednią opcję i określi ten skrypt w elemencie <emulator> zamiast domyślnej ścieżki.

Siergiej Własow
źródło
1

Warto zauważyć, że Ubuntu 10.4 (Lucid) ma wersję 0.7.5 libvirt, podczas gdy wsparcie dla topologii zostało dodane do libvirt w wersji 0.7.6. Ubuntu 10.10 (Maverick) ma bibliotekę libvirt w wersji 0.8.3, więc powinna być w stanie bezpośrednio obsługiwać specyfikację topologii w XML bez opakowania.

użytkownik67327
źródło