Czy wydajność QEMU (nadal) jest mniejsza niż VirtualBox i czy istnieje sposób na jej poprawę bez wsparcia sprzętowego + modułu jądra kvm?


9

Zauważyłem kilka artykułów, które twierdziły, że QEMU działa wolniej niż VirtualBox (bez pomocy sprzętowej), ale kilka ma już lata, a najnowsze wydawały się być z zeszłego roku.

  • Czy to prawda, że ​​QEMU działa wolniej niż VirtualBox?
  • Jeśli tak to dlaczego?
  • Czy są jakieś sztuczki, aby wypełnić lukę w wydajności?

Niektóre z moich hostów nie obsługują wirtualizacji sprzętowej, dlatego szczególnie interesują mnie wskazówki dotyczące wydajności, które działają bez modułu jądra.

Odpowiedzi:


10

Jeśli mówisz o wirtualizacji x86 na hoście x86, pamiętaj, że kqemu (stary moduł jądra akceleracji dla qemu) jest przestarzały. Kernel Virtual Machine (KVM) to „droga naprzód”, ale działa tylko na hostach Linux. Gościem może być dowolny system operacyjny, pod warunkiem, że jest to architektura x86.

Cross-architektura qemu jest nadal bardzo powolna; właśnie dzisiaj próbowałem najnowszego qemu z Debianem MIPS64 u gościa ... można go było używać z terminala, ale w Xorgu było to strasznie wolne. zgodnie z moją najlepszą wiedzą, nie można używać instrukcji przyspieszania procesora, takich jak rozszerzone tabele stron lub VT-x, gdy przechodzisz między architekturami. Wszystko to jest emulowane w oprogramowaniu.

Zatem w przypadku wirtualizacji od x86 do x86 „surowe” qemu jest wolne, ale KVM (który używa qemu) jest szybki. Dosyć szybko. Tak szybko, że jest to zalecane przez RedHata rozwiązanie do wirtualizacji dla RHEL.

VirtualBox wciąż niszczy wszystko, co qemu / kvm może zaoferować w zakresie przyspieszonej sprzętowo wydajności grafiki 2d / 3d, ponieważ kvm koncentruje się na wirtualizacji serwerów, a virtualbox na wirtualizacji pulpitu. Ale zdecydowanie polecam sprawdzenie kvm, jeśli masz do czynienia z serwerem.

Edycja: w przypadku hostów, które nie mają żadnego przyspieszenia sprzętowego, będziesz cierpieć z powodu dość dużego obciążenia, niezależnie od tego, z którego rozwiązania virt korzystasz. Emulowanie sprzętu w oprogramowaniu jest trudne i kosztowne.


2
ls $(which kvm)pokazuje dowiązanie symboliczne do qemu-system-x86_64. Zgaduję, że dokładnie o tym mówiłeś z KVM za pomocą QEMU?
Catskul,

Tak, ale KVM jest, jak sama nazwa wskazuje, maszyną wirtualną opartą na jądrze , co oznacza, że ​​jelita hiperwizora znajdują się w module jądra „kvm”. Jeśli chcesz, możesz pomyśleć o tym, że jest podobny do starego kqemu, ale pod względem architektonicznym jest zupełnie inny. qemu jest bardziej nakładką niż rzeczywistym hiperwizorem, gdy działa kvm.
allquixotic

Och, zapomniałem dodać: powodem, dla którego qemu (i każdy inny system wirtualizacji) jest tak wolny bez „modułu jądra” (jak to mówisz; to, co tak naprawdę rozumiesz, to „bez przyspieszenia sprzętowego”), że niektóre operacje sprzętowe występy gości są bardzo trudne do naśladowania w oprogramowaniu. Cóż, nie trudne pod względem zawodnym lub skomplikowanym; po prostu sloooooooooooooow. Właśnie dlatego Intel spędził większą część dekady, udzielając nam przyspieszonych sprzętowo instrukcji dotyczących najwolniejszych fragmentów wirtualizacji na drodze VT-x i EPT. Jedyną poprawką jest użycie sprzętu, który obsługuje te zestawy instrukcji.
allquixotic

Czy jest coś, co sprawia, że ​​Virtualbox jest szybszy nawet bez przyspieszenia sprzętowego?
Catskul

Nie. Bez przyspieszenia sprzętowego wydajność powinna być dość równa. VirtualBox może mieć zaawansowane optymalizacje x86, które sprawiają, że działa on nieco szybciej w oprogramowaniu, co byłoby odpowiednie, ponieważ virtualbox obsługuje tylko x86, podczas gdy qemu ma znacznie szersze pole gry (architektury inne niż x86). Ale jest to szczegół implementacji / projektu, który zasadniczo sprowadzałby się do lokalizacji pamięci podręcznej, zoptymalizowanych pętli wewnętrznych, ręcznie kodowanego asemblera, buforowania We / Wy dysku po stronie hosta lub innych sztuczek. Nie jestem pewien, w jakim stopniu vbox robi te rzeczy, których nie robi qemu, ale nie są one zbyt istotne ...
allquixotic

1

Zakładając, że host z procesorem zdolnym do wirtualizacji (Intel VT-x, AMD SVM), z uruchomionym Qemu na jądrze (Linux z KVM), jest dość szybki.

Techniczne powody, dla których Qemu jest powolny w przypadku 2D (YouTube, arkusz kalkulacyjny, gry) i emulacji 3D, są dla mnie niejasne. Mogę jednak zgadywać, że „sterowniki wideo” po prostu nie są wystarczająco dobre - sprzęt graficzny w sprzęcie nie jest wykorzystywany w optymalny sposób.

Z drugiej strony, ostatnie opracowanie wprowadziło platformę SPICE do qemu. W rzeczywistości ma kilka lat i wydaje się dość dojrzały. Korzyści z wydajności wideo wynikające ze współpracy ze sterownikiem wideo QXL są ogromne z mojego doświadczenia (tworzenie stron internetowych 2D). Nie wiem, jak dobrze wypada w porównaniu do Virtualbox, ale zdecydowanie jest to poprawa. Myślę, że SPICE jest koniecznością dla każdego, kto korzysta z systemu Windows w Qemu.

To jest wyłącznie moja opinia i należy zauważyć, że nigdy nie próbowałem uruchomić żadnego odtwarzania 3D lub wideo w gościu.


1
Jeśli przez „emulację zorientowaną na grafikę” masz na myśli przyspieszenie 3D, to dlatego, że procesory graficzne nie mogą być zwirtualizowane jak procesory. Emulacja oprogramowania jest niemożliwie powolna, dlatego istnieją obecnie dwa rozwiązania: 1. Przekazywanie interfejsu API (tzn. Wywołania DirectX u gościa są wykonywane jako wywołania DirectX na hoście) 2. Przekazywanie VGA (prawdziwa okazja: cała karta graficzna jest udostępniana do gościa). QEMU obsługuje # 2.
Marcus,

@Marcus Passthrough to droga.
Ярослав Рахматуллин
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.