Allmänna driftsprinciper för QEMU-KVM

Allmänna driftsprinciper för QEMU-KVM

Min nuvarande förståelse:

1) KVM

KVM (Kernel-baserad virtuell maskin) är en hypervisor (VMM – Virtual Machine Manager) som körs som en modul på Linux OS. En hypervisor behövs för att köra viss mjukvara i en obefintlig (virtuell) miljö och samtidigt dölja från denna mjukvara den verkliga fysiska hårdvaran som denna programvara körs på. Hypervisorn fungerar som en "spacer" mellan den fysiska hårdvaran (värd) och det virtuella operativsystemet (gäst).

Eftersom KVM är en standardmodul i Linux-kärnan, tar den emot alla nödvändiga godsaker från kärnan (minneshantering, schemaläggare, etc.). Och följaktligen, i slutändan, går alla dessa fördelar till gästerna (eftersom gästerna arbetar på en hypervisor som körs på/i Linux OS-kärnan).

KVM är väldigt snabbt, men i sig räcker det inte för att köra ett virtuellt OS, eftersom... Detta kräver I/O-emulering. För I/O (CPU, diskar, nätverk, video, PCI, USB, seriella portar, etc.) använder KVM QEMU.

2) QEMU

QEMU (Quick Emulator) är en emulator för olika enheter som låter dig köra operativsystem designade för en arkitektur på en annan (till exempel ARM -> x86). Förutom processorn emulerar QEMU olika kringutrustning: nätverkskort, hårddisk, grafikkort, PCI, USB, etc.

Det fungerar så här:

Instruktioner/binär kod (till exempel ARM) konverteras till mellanliggande plattformsoberoende kod med hjälp av TCG-omvandlaren (Tiny Code Generator) och sedan konverteras denna plattformsoberoende binära kod till målinstruktioner/kod (till exempel x86).

ARM –> intermediate_code –> x86

I huvudsak kan du köra virtuella maskiner på QEMU på vilken värd som helst, även med äldre processormodeller som inte stöder Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine). Men i det här fallet kommer det att fungera väldigt långsamt, på grund av att den exekverande binära koden måste kompileras om i farten två gånger med hjälp av TCG (TCG är en Just-in-Time-kompilator).

De där. QEMU i sig är megacool, men det fungerar väldigt långsamt.

3) Skyddsringar

Allmänna driftsprinciper för QEMU-KVM

Binär programkod på processorer fungerar av en anledning, men är placerad på olika nivåer (ringar / skyddsringar) med olika nivåer av dataåtkomst, från den mest privilegierade (ring 0), till den mest begränsade, reglerade och "med muttrarna åtdragna ” (Ring 3 ).

Operativsystemet (OS-kärnan) körs på Ring 0 (kärnläge) och kan göra vad det vill med alla data och enheter. Användarapplikationer fungerar på Ring 3-nivå (användarläge) och får inte göra vad de vill, utan måste istället begära åtkomst varje gång för att utföra en viss operation (därmed har användarapplikationer bara tillgång till sina egna data och kan inte "få in i någon annans sandlåda). Ring 1 och 2 är avsedda att användas av förare.

Före uppfinningen av Intel VT-x / AMD SVM, körde hypervisorer på Ring 0, och gäster körde på Ring 1. Eftersom Ring 1 inte har tillräckligt med rättigheter för normal drift av operativsystemet, med varje privilegierat samtal från gästsystemet, hypervisor var tvungen att modifiera detta samtal i farten och köra det på Ring 0 (ungefär som QEMU gör). De där. gäst binär INTE exekverades direkt på processorn och gick varje gång igenom flera mellanliggande modifieringar i farten.

Omkostnaderna var betydande och detta var ett stort problem, och sedan släppte processortillverkarna, oberoende av varandra, en utökad uppsättning instruktioner (Intel VT-x / AMD SVM) som gjorde det möjligt att köra gäst OS-kod DIREKT på värdprocessorn (som kringgår alla kostsamma mellansteg, vilket var fallet tidigare).

Med tillkomsten av Intel VT-x / AMD SVM skapades en speciell ny ringnivå -1 (minus en). Och nu kör hypervisorn på den, och gästerna kör på Ring 0 och får privilegierad tillgång till CPU:n.

De där. så småningom:

  • värd körs på Ring 0
  • gäster arbetar på Ring 0
  • hypervisor körs på Ring -1

4) QEMU-KVM

KVM ger gäster tillgång till Ring 0 och använder QEMU för att emulera I/O (processor, diskar, nätverk, video, PCI, USB, seriella portar etc. som gästerna "ser" och arbetar med).

Därav QEMU-KVM (eller KVM-QEMU) :)

POÄNG
Bild för att väcka uppmärksamhet
Bild på skyddsringar

PS Texten i denna artikel publicerades ursprungligen i Telegram-kanalen @RU_Voip som svar på en fråga från en av kanaldeltagarna.

Skriv i kommentarerna där jag inte förstår ämnet korrekt eller om det finns något att tillägga.

Tack!

Källa: will.com

Lägg en kommentar