Агульныя прынцыпы працы QEMU-KVM

Агульныя прынцыпы працы QEMU-KVM

Маё бягучае разуменне:

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

Агульныя прынцыпы працы QEMU-KVM

Бінарны праграмны код на працэсарах працуе не проста так, а размяшчаецца на розных узроўнях (кольцах / 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) 🙂

Крэдыта
Малюнак для прыцягнення ўвагі
Малюнак Protection rings

PS Тэкст гэтага артыкула першапачаткова быў апублікаваны ў Telegram канале @RU_Voip у якасці адказу на пытанне аднаго з удзельнікаў канала.

Напішыце ў каментарах, у якіх месцах я не правільна разумею тэму ці калі ёсць што дапоўніць.

Дзякуй!

Крыніца: habr.com

Дадаць каментар