Маё бягучае разуменне:
1) KVM
KVM (Kernel-based Virtual Machine) - гіпервізор (VMM - Virtual Machine Manager), які працуе ў выглядзе модуля на АС Linux. Гіпервізор патрэбен для таго, каб запускаць нейкі софт у неіснуючым (віртуальным) асяроддзі і пры гэтым, хаваць ад гэтага софту рэальнае фізічнае жалеза, на якім гэты софт працуе. Гіпервізар працуе ў ролі "пракладкі" паміж фізічным жалезам (хастом) і віртуальнай АС (госцем).
Паколькі KVM з'яўляецца стандартным модулем ядра Linux, ён атрымлівае ад ядра ўсе пакладзеныя нішцякі (праца з памяццю, планавальнік і інш.). А адпаведна, у канчатковым выніку, усе гэтыя перавагі дастаюцца і гасцям (бо госці працуюць на гіпервізоры, якія працуе на/у ядры АС Linux).
KVM вельмі хуткі, але яго самога па сабе нядосыць для запуску віртуальнай АС, т.к. для гэтага патрэбна эмуляцыя I/O. Для I/O (працэсар, дыскі, сетка, відэа, PCI, USB, серыйныя парты і г.д.) KVM выкарыстоўвае QEMU.
2) QEMU
QEMU (Quick Emulator) - эмулятар розных прылад, які дазваляе запускаць аперацыйныя сістэмы, прызначаныя пад адну архітэктуру, на іншы (напрыклад, ARM -> x86). Акрамя працэсара, QEMU эмулюе розныя перыферыйныя прылады: сеткавыя карты, HDD, відэа карты, PCI, USB і інш.
Працуе гэта так:
Інструкцыі/бінарны код (напрыклад, ARM) канвертуюцца ў прамежкавы платформанезалежны код пры дапамозе канвертара TCG (Tiny Code Generator) і затым гэты платформанезалежны бінарны код канвертуецца ўжо ў мэтавыя інструкцыі/код (напрыклад, x86).
ARM -> прамежкавы_код -> x86
Па сутнасці, вы можаце запускаць віртуальныя машыны на QEMU на любым хасце, нават са старымі мадэлямі працэсараў, якія не падтрымліваюць Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine). Аднак у такім выпадку, гэта будзе працаваць вельмі павольна, у сувязі з тым, што выкананы бінарны код трэба перакампіляваць на лета два разы, пры дапамозе TCG (TCG – гэта Just-in-Time compiler).
Г.зн. сам па сабе QEMU мега круты, але працуе вельмі павольна.
3) Protection rings
Бінарны праграмны код на працэсарах працуе не проста так, а размяшчаецца на розных узроўнях (кольцах / Protection rings) з рознымі ўзроўнямі доступу да дадзеных, ад самага прывілеяванага (Ring 0), да самага абмежаванага, зарэгуляванага і "з закручанымі гайкамі" (Ring 3 ).
Аперацыйная сістэма (ядро АС) працуе на Ring 0 (kernel mode) і можа рабіць з любымі дадзенымі і прыладамі ўсё, што заўгодна. Карыстальніцкія прыкладанні працуюць на ўзроўні Ring 3 (user mode) і не ў праве рабіць усё, што захочуць, а замест гэтага кожны раз павінны запытваць доступ на правядзенне той ці іншай аперацыі (такім чынам, карыстацкія прыкладанні маюць доступ толькі да ўласных дадзеных і не могуць "улезці" ў "чужую пясочніцу"). Ring 1 і 2 прызначаны для выкарыстання драйверамі.
Да вынаходства Intel VT-x / AMD SVM, гіпервізары працавалі на Ring 0, а госці працавалі на Ring 1. Паколькі ў Ring 1 недастаткова правоў для нармальнага функцыянавання АС, то пры кожным прывілеяваным выкліку ад гасцявой сістэмы, гіпервізару даводзілася на лета мадыфікаваць гэты выклік і выконваць яго на Ring 0 (прыкладна так, як гэта робіць QEMU). Г.зн. гасцявы бінарны код НЕ выконваўся напрамую на працэсары, а кожны раз на лета праходзіў некалькі прамежкавых мадыфікацый.
Накладныя выдаткі былі істотнымі і гэта было вялікай праблемай і тады вытворцы працэсараў, незалежна сябар ад сябра, выпусцілі пашыраны набор інструкцый (Intel VT-x / AMD SVM), якія дазваляюць выконваць код гасцявых АС НАПРАМУЮ на працэсары хаста (мінуючы ўсякія затратныя прамежкавыя этапы, як гэта было раней).
З з'яўленнем Intel VT-x / AMD SVM, быў створаны спецыяльны новы ўзровень Ring-1 (мінус адзін). І зараз на ім працуе гіпервізор, а госці працуюць на Ring 0 і атрымліваюць прывілеяваны доступ да CPU.
Г.зн. у выніку:
- хост працуе на Ring 0
- госці працуюць на Ring 0
- гіпервізор працуе на Ring -1
4) QEMU-KVM
KVM дае доступ гасцям да Ring 0 і выкарыстоўвае QEMU для эмуляцыі I/O (працэсар, дыскі, сетка, відэа, PCI, USB, серыйныя парты і г.д., якія "бачаць" і з якімі працуюць госці).
Адсюль QEMU-KVM (або KVM-QEMU) 🙂
Крэдыта
PS Тэкст гэтага артыкула першапачаткова быў апублікаваны ў Telegram канале
Напішыце ў каментарах, у якіх месцах я не правільна разумею тэму ці калі ёсць што дапоўніць.
Дзякуй!
Крыніца: habr.com