Wirtualizacja: Jaka jest różnica między KVM a QEMU?


Najlepsza odpowiedź

KVM to rozwidlenie QEMU. Bazujący na kodzie KVM jest modyfikowany w celu obsługi akceleracji sprzętowej, gdy jest dostępna (ta sama architektura dla maszyny wirtualnej hosta i gościa)

W większości przypadków QEMU jest używany do emulacji innej architektury (np. Emulowanie ARM / Power arch. Przy użyciu procesora x86) . Używałem tego do uruchomienia obrazu RaspberryPI, który działa na ARM w moim laptopie z procesorem Intel.

Jedna różnica polega na tym, że QEMU działa na procesorze bez konieczności rozszerzenia wirtualizacji sprzętu (Intel VT / VT-d, AMD-V), podczas gdy KVM go używa. Rozszerzenia wirtualizacji sprzętowej umożliwiają bezpośredni dostęp do sprzętu na maszynie fizycznej. Wadą jest to, że baza kodu KVM nie może emulować innej architektury.

Ale kiedy KVM jest uruchamiany na maszynie bez żadnego rozszerzenia HW virt., przełącza się z powrotem do QEMU, aby uruchomić maszynę wirtualną.

Aby sprawdzić, czy twój procesor obsługuje sprzętowy virt., w systemie Windows możesz użyć http://www.cpuid.com/cpuz.php lub http://www.grc.com/securable.htm i poszukaj rozszerzenia „vmx” lub „svm”. (To drugie jest znacznie łatwiejsze)

W Linuksie użyj

  • egrep „(vmx | svm)” / proc / cpuinfo

Scalanie obu baz kodu jest w trakcie i będziemy postrzegać je jako jeden projekt w przyszłości. Spowoduje to, że KVM stanie się przestarzałe i zostanie połączone z bazą kodu QEMU.

Nawiasem mówiąc, prawie wszystkie nowe procesory wydane przez Intel i AMD obsługują wirtualizację, ale widziałem laptopa Acer z procesorem Intel, który nie obsługuje wirtualizacji sprzętu. Prosimy również o sprawdzenie BIOS-u, jeśli to rozszerzenie jest włączone. W innym systemie BIOS rozszerzenie jest domyślnie wyłączone.

Odpowiedź

Oryginalnie z Server Fault

KVM :

KVM to kilka rzeczy: po pierwsze Jest to moduł jądra Linuksa (teraz zawarty w głównej linii), który przełącza procesor w nowy stan „gościa”. Stan gościa ma swój własny zestaw stanów pierścieniowych, ale uprzywilejowane instrukcje ring0 powracają do kodu hiperwizora. Ponieważ jest to nowy tryb wykonywania procesora, kod nie musi być w żaden sposób modyfikowany.

Oprócz przełączania stanu procesora, moduł jądra obsługuje również kilka niskopoziomowych części emulacja, podobnie jak rejestry MMU (używane do obsługi VM) i niektóre części sprzętu emulowanego przez PCI.

Po drugie, KVM jest rozwidleniem pliku wykonywalnego Qemu. Oba zespoły aktywnie pracują nad minimalizacją różnicy i są postępy w jej zmniejszaniu. Ostatecznie celem jest, aby Qemu działało wszędzie, a jeśli jest dostępny moduł jądra KVM, można go użyć. Ale w dającej się przewidzieć przyszłości, zespół Qemu skupia się na emulacji sprzętu i przenośności, podczas gdy ludzie z KVM skupiają się na module jądra (czasami przenosząc tam małe części emulacji, jeśli udowodniono, że poprawia wydajność) i łączeniu się z resztą kodu przestrzeni użytkownika .

Plik wykonywalny kvm-qemu działa jak normalne Qemu: przydziela pamięć RAM, ładuje kod i zamiast go rekompilować lub wywoływać KQemu, tworzy wątek (jest to ważne); wątek wywołuje moduł jądra KVM w celu przełączenia w tryb gościa i przechodzi do wykonania kodu maszyny wirtualnej. Zgodnie z instrukcją przywilejów przełącza się z powrotem na moduł jądra KVM, który, jeśli to konieczne, sygnalizuje wątkowi Qemu, że ma obsłużyć większość emulacji sprzętu.

Jedną z fajnych rzeczy w tej architekturze jest to, że gość kod jest emulowany w wątku posix, którym można zarządzać za pomocą zwykłych narzędzi Linuksa. Jeśli potrzebujesz maszyny wirtualnej z 2 lub 4 rdzeniami, kvm-qemu tworzy 2 lub 4 wątki, każdy z nich wywołuje moduł jądra KVM, aby rozpocząć wykonywanie. Współbieżność (jeśli masz wystarczającą liczbę rzeczywistych rdzeni) lub planowanie (jeśli nie masz) są zarządzane przez normalny program do planowania Linuksa, co ogranicza kod i liczbę niespodzianek.

Qemu :

QEmu jest kompletnym i samodzielnym oprogramowaniem. Używasz go do emulacji maszyn, jest bardzo elastyczny i przenośny. Działa głównie przez specjalny „rekompilator”, który przekształca kod binarny napisany dla danego procesora na inny (powiedzmy, aby uruchomić kod MIPS na komputerze Mac PPC lub ARM w komputerze x86).

Aby emulować więcej niż tylko procesor, Qemu zawiera długą listę emulatorów urządzeń peryferyjnych: dysk, sieć, VGA, PCI, USB, porty szeregowe / równoległe itp.

Źródło: Różnica między KVM a QEMU

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *