Parawirtualizacja – część druga

W pierwszej części przygotowana została maszyna gospodarza, zaś w drugiej będziemy tworzyć już (para)wirtualną maszynę z windowsem.

Odpalamy virtual machine manager’a i przechodzimy od razu do ustawień i przechodzimy przez kolejne zakładki zaznaczając opcje:

 

Ogólne – Ikona obszaru powiadamiania

v1

 

Zakładka sondaże – wszystkie opcje zaznaczamy

v2

 

Nowa maszyna wirtualna – wybieramy kolejno VNC, QCOW2

v3

 

Zamykamy ustawienia i klikamy na ikonę tworzenia nowej maszyny

v4

 

Wybieramy medium, z które chcemy instalować czyli zapewne plik iso, odznaczamy pole wyboru i wybieramy typ oraz wersję systemu operacyjnego. Jeśli zostaniemy zapytani o uprawnienia to klikamy tak.

v5

 

Przydzielamy pamięć RAM oraz ilość procesorów (core’ów)

v6

 

Następny krok to przydzielenie miejsca dla naszej maszyny.

Niemniej jeśli wcześniej nie korzystaliśmy z libvirt’a to domyślny katalog dla plików dyskowych będzie znajdował się na partycji root. Warto to zmienić klikając na opcję Zarządzaj -> Kliknięcie na znak plus (dodanie puli) -> typ Katalog systemu plików, a w polu nazwa podajemy ścieżkę gdzie chcemy przechowywać obrazy. Następnie klikamy na znak plus po prawej stronie Woluminy i dodajmy obraz o żądanej wielkości.

 

Jeśli chcemy przechowywać dużo danych np. gier to warto zarezerwować więcej miejsca.

v7

 

Zaznaczamy opcję Dostosowania konfiguracji przed instalacją (wybór sieci zostawiamy domyślny) i klikamy ukończ.

v8

 

W polu Oprogramowanie sprzętowe zamiast BIOSu wybieramy UEFI.

v9

 

W kategorii procesory proponuję zostawić domyślne wartości ewentualnie później dodać więcej logicznych procesorów. Jeśli posiadamy procesor(y) z dużą ilość rdzeni to warto pokusić się nad całkowitym rozdzieleniem wątków pomiędzy gospodarzem, a gościem (cpu pinning). U mnie na i5 najlepsze rezultaty dało przydzielenie wszystkich corów (4).

v10

 

Kolejna opcja to nasz dysk gościa, jeśli się rozmyśliliśmy lub chcemy podać inną ścieżkę to przechodzimy do IDE Dysk1. Bardzo ważnym jest aby zmienić rodzaj magistrali na VirtIO lub VirtIO-SCSI gdyż są to specjalne magistrale zapewniające najlepszą wydajność i/o w środowiskach wirtualizowanych kvm.

v11

 

Kolejny etap to dodanie drugiego napędu cdromu. W pierwszym „napędzie” mamy już zamontowany obraz iso windowsa. Natomiast w drugim napędzie zamontujemy obraz z specjalnymi sterownikami, które będą nam potrzebne w trakcie jak i po instalacji.

Obraz ze sterownikami pobieramy ze strony fedory.

https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso

Klikamy Dodaj sprzęt -> pamięć masowa -> typ urządzenia CDROM i wskazujemy lokalizację obrazu virtio-win.iso

v12

 

Kolejna sprawa to interfejs sieciowy, dla którego model urządzenie również wybieramy virtio

v13

 

Klikamy na Rozpocznij instalację aby rozpocząć instalację windows’a.

W instalatorze wybieramy opcję niestandardowej instalacji.

v14

 

I jak widać dalej Windows nie znalazł żadnego dysku, a to dlatego, że sami musimy podać mu sterowniki virtio lub virtio-scsi (w zależności od wybranego wcześniej kontrolera). Klikamy załaduj sterownik – Przeglądaj i odpowiedni sterownik dla odpowiedniej architektury windowsa. Viostor jest dla virtio, a virtioscsi dla virtio-scsi

v15Reszta jest już dosyć standardowa czyli next, next, aż do zakończenia instalacji.

 

Po zakończeniu instalacji musimy jeszcze wgrać dwa sterowniki. Jeden dla karty sieciowej (katalog NetKVM na obrazie ze sterownikami) oraz sterownik zarządzania pamięcią balloon (katalog Balloon na obrazie ze sterownikami).

v16v17

 

Przedostatni krok do dodanie drugiej karty graficznej gospodarza (Nvidii) do maszyny wirtualnej. Wyłączamy windowsa, przechodzimy do menedżera wirtualnej maszyny, klikamy dodaj sprzęt, wybieramy Urządzenie gospodarza PCI i z listy wybieramy oba urządzenia Nvidia (te, które wcześniej odfiltrowywaliśmy)

v18

 

Ostatni krok to edycja pliku z ustawieniami. Jest to wymagany krok dla kart Nvidia, które nie chcą współpracować jeśli sterownik wykryje wirtualizowane środowisko, ale jest na to sposób.

 

Wpisujemy w konsoli komendę:

sudo virsh edit nazwa_wirtualnej_maszyny

 

W pliku XML, gdziekolwiek pomiędzy tagami features dodajemy trzy poniższe, pogrubione linie

<features>
  <kvm>
    <hidden state=’on’/>
  </kvm>
</features>

 

Następnie usuwamy całą sekcję hyperv

<hyperv>
<relaxed state=’on’/>
<vapic state=’on’/>
<spinlocks state=’on’ retries=’8191’/>
</hyperv>

 

oraz usuwamy jedną linię z sekcji clock

<timer name=’hypervclock’ present=’yes’/>

 

Zapisujemy, startujemy maszynę wirtualną i gotowe!

 

Po starcie Windows będzie próbował sam zainstalować swój własny sterownik, pozwólmy mu, a potem zainstalujmy świeży ze strony Nvidii. Po  restarcie i przełączeniu wyjścia monitora powinniśmy zobaczyć ekran Windowsa.

 

Kilka uwag i wskazówek ogólnych:

  • domyślnie klawiatura i myszka są emulowane, jeśli zależy nam na jak najniższej responsywności to można przełączyć klawiaturę i myszkę do wirtualnej maszyny, ale wtedy oba urządzenie przestaną być widoczne u gospodarza. Rozwiązaniem może być albo przełącznik usb lub użycie Synergy do dzielenia klawiatury/myszki po sieci. Synergy działa w architekturze klient/server więc pewnie lepiej jeśli serverem będzie windows, a gościem linux (tak wiem, herezja).
  • Dźwięk to najtrudniejsza sprawa. Możemy bez problemu dodać kartę dźwiękową (nawet wewnętrzną) do gościa, ale wtedy gospodarz straci dźwięk. Nie udało mi się z emulowaną kartą dźwiękową. Poległem na pulseaudio. Najlepszym rozwiązaniem jak dla mnie jest użycie dźwięku po hdmi, który i tak został dodany wraz z kartą graficzną gospodarza. Jeśli mamy monitor z głośnikami lub chociaż wyjście minijack to możemy podłączyć dodatkowe głośniki. Innym rozwiązaniem może być zewnętrzna karta dźwiękowa na USB, aczkolwiek możemy spodziewać się opóźnień/trzasków etc.
  • Obrazy wirtualnej maszyny warto trzymać na osobnym dysku (może ssd?) i koniecznie z kontrolerem virtio/virtio-scsi
  • Problemy z CPU, warto przeczytać różnego rodzaju poradniki dot. cpu pinnining
  • Wbrew wielu błędnym informacjom, nie  jest potrzebne włączenie trybu UEFI na þłycie głównej oraz posiadanie tablicy GPT do obsługi (iommu).
  • Wydajność samego KVMa jest naprawdę wysoka i porównywalna wręcz z natywną, ale musimy pogodzić się (lub nie) z powyższymi niedogodnościami.
  • KVM jest głównie używany przy rozwiązaniach serverowych, a zabawa z kartą graficzną i Windows’em to tylko jedna z wielu możliwości. Warto poczytać.
  • Pozostaje pytanie otwarte czy cel uświęca środki i czy nie łatwiej dual bootować lub bardziej pokochać Steam’a na linux’ie 🙂

 

Warto również przeczytać informacje zamieszczone na poniższych stronach, z których korzystałem testując całe rozwiązanie.

https://vfio.blogspot.com/

https://lime-technology.com/forum/index.php?topic=36214.0

https://tekwiki.beylix.co.uk/index.php/VGA_Passthrough_with_UEFI%2BVirt-Manager

https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.