Jak włączyć przekazywanie urządzeń KVM w systemie Linux?

13

Mam płytę główną do gier MSI-GD65 i procesor Intel i7 4790. VT-D jest włączony w sekcji Funkcje procesora w bios.

Korzystam z Ubuntu 14.04.1 LTS i kiedy próbuję odłączyć urządzenie, pojawia się następujący komunikat:

# virsh nodedev-detach pci_0000_00_1f_2

błąd: nie udało się odłączyć urządzenia pci_0000_00_1f_2 błąd: Operacja nie jest obsługiwana: w systemie nie jest obecnie obsługiwane przypisanie urządzenia VFIO ani KVM

Dmesg zawiera pewne informacje o IOMMU, ale nie wiem, czy to oznacza, że ​​VT-D jest włączony

$ dmesg | grep -i iommu

[0.027450] dmar: IOMMU 0: reg_base_addr fed9000000 ver 1: 0 cap c0000020660462 ecap f0101a
[0.027455] dmar: IOMMU 1: reg_base_addr fed91000 ver 1: 0 cap d2008020660462 ecap f010da
[0,0275 0xM] IAPAP I0M0 0x1M1000 IMPAP IAM

Czy ktoś może doradzić, co muszę zrobić, aby włączyć VT-D w tym systemie i przekazać urządzenia PCI gościom KVM?

Anonimowe myślenie
źródło
czy wykonałeś pełny cykl zasilania po włączeniu VT i VT-d?
dyasny

Odpowiedzi:

11

Rozwiązaniem tego problemu jest włączenie IOMMU w parametrach rozruchowych GRUB.

Możesz to zrobić, ustawiając następujące opcje w / etc / default / grub

GRUB_CMDLINE_LINUX_DEFAULT = "intel_iommu = on"

Jeśli używasz procesora AMD, powinieneś dołączyć amd_iommu=ondo parametrów rozruchu

GRUB_CMDLINE_LINUX_DEFAULT = "cichy plusk amd_iommu = włączony"

Następnie uruchom update-grubi uruchom ponownie

Ten link bardzo mi pomógł: https://www.centos.org/forums/viewtopic.php?f=47&t=48115

Zobacz także: https://pve.proxmox.com/wiki/Pci_passthrough

Uciekało mi to nieco, ponieważ uważałem, że iommu jest alternatywą AMD dla VT-D.

Anonimowe myślenie
źródło
A jeśli to nie zadziała, twój procesor może nie obsługiwać VT-D lub AMD-VI (pytanie wyjaśnia, że ​​- zamieszczam tutaj innych)
ndemou 14.10.16
5

Dodanie do odpowiedzi Anonymouslemming: Wydaje się, że w Ubuntu występuje błąd (18.04 dla mnie), który powoduje, że ustawienie GRUB_CMDLINE_LINUX_DEFAULT w / etc / default / grub jest ignorowane.

Można to naprawić, komentując GRUB_CMDLINE_LINUX_DEFAULT w /etc/default/grub.d/50-curtin-settings.cfg

https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1569567

Mads Y
źródło
1

Wygląda na to, że masz wymagania sprzętowe, ponieważ używa go inny moduł (IOAPIC). W takim przypadku musisz po prostu skonfigurować oprogramowanie.

Wygląda na to, że musisz upewnić się, że masz zainstalowane wszystkie wymagania wstępne do obsługi odłączenia odpowiedniego urządzenia. Wygląda na to, że nie masz ich zainstalowanych lub nie są skonfigurowane.

Musisz mieć zainstalowane i zainicjowane odpowiednie biblioteki i moduły jądra, zanim spróbujesz ich użyć w takim przypadku. Będą to różne narzędzia systemowe „hosta” i moduły jądra do konfiguracji KVM.

Przed próbą uruchomienia narzędzi należy przeczytać sekcję podręcznika, w jaki sposób odpowiednio skonfigurować odpowiednie rozwiązanie KVM i wykonać te kroki. Nie są po prostu instalowane przy pierwszym uruchomieniu tylko dlatego, że zainstalowane są niezbędne pakiety.

Należy pamiętać, że jeśli dane urządzenie jest osadzone w płycie głównej, technicznie może nie być urządzeniem PCI, ale urządzeniem mapowanym przez PCI. Urządzenia te są w rzeczywistości podłączane innymi sposobami, ale są mapowane do przestrzeni PCI BIOS za pomocą BIOS-u. Mogą, ale nie muszą być kompatybilne z odłączaniem urządzeń, w zależności od różnych aspektów ich podłączenia do systemu.

Ponadto odłączenie urządzeń podrzędnych może nie być możliwe bez odłączenia urządzeń nadrzędnych, jeśli ich sterowniki są od siebie zależne. Urządzenia można odłączać tylko z absolutną pewnością, kto jest urządzeniem nadrzędnym, kontrolerem PCI, mostkiem PCI lub innym obsługiwanym kontrolerem magistrali lub mostem

Robert Wm Ruedisueli
źródło
Dzięki za informację. Wydaje mi się, że moje pytanie powinno zawierać „Gdzie mogę znaleźć dokumentację, aby to zrobić w KVM”, a konkretniej.
Anonymouslemming
0

Jestem na centos7

Miałem ten błąd, który mnie tu doprowadził, ale mój problem nie polegał na aktualizacji (w moim przypadku) vim /etc/sysconfig/grubi dodawaniu intel_iommu=ondo końca wierszaGRUB_CMDLINE_LINUX

Musiałem uruchomić to polecenie

grub2-mkconfig -o /boot/grub2/grub.cfg

następnie uruchom ponownie

Uwaga: uruchomiłem jednak również grub2-mkconfig z restartem przed powyższym poleceniem i to nie zrobiło dla mnie nic z tego, co zobaczyłem.

odniesienie: https://bugzilla.redhat.com/show_bug.cgi?id=1269446

Komentarz 11 i 12

gstlouis
źródło