Pangkalahatang mga prinsipyo ng pagpapatakbo ng QEMU-KVM

Pangkalahatang mga prinsipyo ng pagpapatakbo ng QEMU-KVM

Ang aking kasalukuyang pag-unawa:

1) KVM

Ang KVM (Kernel-based Virtual Machine) ay isang hypervisor (VMM – Virtual Machine Manager) na tumatakbo bilang isang module sa Linux OS. Ang isang hypervisor ay kinakailangan upang magpatakbo ng ilang software sa isang hindi umiiral (virtual) na kapaligiran at sa parehong oras ay itago mula sa software na ito ang tunay na pisikal na hardware kung saan tumatakbo ang software na ito. Ang hypervisor ay gumaganap bilang isang "spacer" sa pagitan ng pisikal na hardware (host) at ang virtual OS (panauhin).

Dahil ang KVM ay isang karaniwang module ng Linux kernel, natatanggap nito ang lahat ng kinakailangang goodies mula sa kernel (pamamahala ng memorya, scheduler, atbp.). At ayon dito, sa huli, lahat ng mga benepisyong ito ay mapupunta sa mga bisita (dahil ang mga bisita ay nagtatrabaho sa isang hypervisor na tumatakbo sa/sa Linux OS kernel).

Napakabilis ng KVM, ngunit sa sarili nito ay hindi sapat na magpatakbo ng isang virtual OS, dahil... Nangangailangan ito ng I/O emulation. Para sa I/O (CPU, mga disk, network, video, PCI, USB, serial port, atbp.) Gumagamit ang KVM ng QEMU.

2) QEMU

Ang QEMU (Quick Emulator) ay isang emulator para sa iba't ibang device na nagbibigay-daan sa iyong magpatakbo ng mga operating system na idinisenyo para sa isang arkitektura sa isa pa (halimbawa, ARM -> x86). Bilang karagdagan sa processor, ang QEMU ay nag-emulate ng iba't ibang mga peripheral device: network card, HDD, video card, PCI, USB, atbp.

Ito ay gumagana tulad nito:

Ang mga tagubilin/binary code (halimbawa, ARM) ay kino-convert sa intermediate na platform-independent na code gamit ang TCG (Tiny Code Generator) converter at pagkatapos ang platform-independent na binary code na ito ay iko-convert sa target na mga tagubilin/code (halimbawa, x86).

ARM -> intermediate_code -> x86

Sa pangkalahatan, maaari kang magpatakbo ng mga virtual machine sa QEMU sa anumang host, kahit na sa mga mas lumang modelo ng processor na hindi sumusuporta sa Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine). Gayunpaman, sa kasong ito, ito ay gagana nang napakabagal, dahil sa ang katunayan na ang executing binary code ay kailangang i-recompiled sa mabilisang dalawang beses, gamit ang TCG (TCG ay isang Just-in-Time compiler).

Yung. Ang QEMU mismo ay napaka-cool, ngunit ito ay gumagana nang napakabagal.

3) Mga singsing ng proteksyon

Pangkalahatang mga prinsipyo ng pagpapatakbo ng QEMU-KVM

Ang binary program code sa mga processor ay gumagana para sa isang kadahilanan, ngunit matatagpuan sa iba't ibang mga antas (mga singsing / Proteksyon na mga singsing) na may iba't ibang antas ng pag-access ng data, mula sa pinaka-pribilehiyo (Ring 0), hanggang sa pinaka-limitado, kinokontrol at "na may mga nuts tightened ” (Ring 3).

Ang operating system (OS kernel) ay tumatakbo sa Ring 0 (kernel mode) at maaaring gawin ang anumang gusto nito sa anumang data at device. Gumagana ang mga application ng user sa antas ng Ring 3 (mode ng user) at hindi pinapayagang gawin ang anumang gusto nila, ngunit sa halip ay dapat humiling ng access sa bawat oras upang magsagawa ng partikular na operasyon (kaya, ang mga application ng user ay may access lamang sa kanilang sariling data at hindi maaaring "makakuha ng sa” sandbox ng ibang tao). Ang singsing 1 at 2 ay inilaan para sa paggamit ng mga driver.

Bago ang pag-imbento ng Intel VT-x / AMD SVM, ang mga hypervisor ay tumakbo sa Ring 0, at ang mga bisita ay tumakbo sa Ring 1. Dahil ang Ring 1 ay walang sapat na karapatan para sa normal na operasyon ng OS, sa bawat pribilehiyong tawag mula sa guest system, ang Ang hypervisor ay kailangang baguhin ang tawag na ito sa mabilisang at isagawa ito sa Ring 0 (katulad ng ginagawa ng QEMU). Yung. binary ng bisita HINDI ay naisakatuparan nang direkta sa processor, at sa bawat oras na dumaan sa ilang mga intermediate na pagbabago sa mabilisang.

Ang overhead ay makabuluhan at ito ay isang malaking problema, at pagkatapos ay ang mga tagagawa ng processor, nang nakapag-iisa sa isa't isa, ay naglabas ng pinahabang hanay ng mga tagubilin (Intel VT-x / AMD SVM) na nagpapahintulot sa pag-execute ng guest OS code DIREKTA sa host processor (pag-bypass sa anumang magastos na intermediate na hakbang, gaya ng nangyari noon).

Sa pagdating ng Intel VT-x / AMD SVM, nilikha ang isang espesyal na bagong antas ng Ring -1 (minus one). At ngayon ang hypervisor ay tumatakbo dito, at ang mga bisita ay tumatakbo sa Ring 0 at nakakuha ng pribilehiyong pag-access sa CPU.

Yung. sa huli:

  • tumatakbo ang host sa Ring 0
  • nagtatrabaho ang mga bisita sa Ring 0
  • tumatakbo ang hypervisor sa Ring -1

4) QEMU-KVM

Binibigyan ng KVM ang mga bisita ng access sa Ring 0 at ginagamit ang QEMU para tularan ang I/O (processor, mga disk, network, video, PCI, USB, serial port, atbp. na "nakikita" at pinagtatrabahuhan ng mga bisita).

Kaya QEMU-KVM (o KVM-QEMU) :)

CREDITS
Larawan upang makaakit ng pansin
Larawan ng mga singsing na Proteksyon

P.S. Ang teksto ng artikulong ito ay orihinal na nai-publish sa Telegram channel @RU_Voip bilang sagot sa tanong ng isa sa mga kalahok sa channel.

Sumulat sa mga komento kung saan hindi ko naiintindihan ng tama ang paksa o kung mayroong anumang idagdag.

Salamat sa iyo!

Pinagmulan: www.habr.com

Magdagdag ng komento