La meva comprensió actual:
1) KVM
KVM (Màquina virtual basada en nucli) és un hipervisor (VMM - Virtual Machine Manager) que s'executa com a mòdul al sistema operatiu Linux. Es necessita un hipervisor per executar algun programari en un entorn (virtual) inexistent i alhora ocultar d'aquest programari el maquinari físic real en què s'executa aquest programari. L'hipervisor actua com a "espaiador" entre el maquinari físic (amfitrió) i el sistema operatiu virtual (convidat).
Atès que KVM és un mòdul estàndard del nucli de Linux, rep totes les coses necessàries del nucli (gestió de memòria, planificador, etc.). I en conseqüència, al final, tots aquests avantatges van per als convidats (ja que els convidats treballen en un hipervisor que s'executa al/al nucli del sistema operatiu Linux).
KVM és molt ràpid, però per si sol no n'hi ha prou amb executar un sistema operatiu virtual, perquè... Això requereix emulació d'E/S. Per a E/S (CPU, discs, xarxa, vídeo, PCI, USB, ports sèrie, etc.) KVM utilitza QEMU.
2) QEMU
QEMU (Quick Emulator) és un emulador per a diversos dispositius que permet executar sistemes operatius dissenyats per a una arquitectura en una altra (per exemple, ARM -> x86). A més del processador, QEMU emula diversos dispositius perifèrics: targetes de xarxa, HDD, targetes de vídeo, PCI, USB, etc.
Funciona així:
Les instruccions/codi binari (per exemple, ARM) es converteixen en codi intermedi independent de la plataforma mitjançant el convertidor TCG (Tiny Code Generator) i després aquest codi binari independent de la plataforma es converteix en instruccions/codi de destinació (per exemple, x86).
ARM –> codi_intermedi –> x86
Bàsicament, podeu executar màquines virtuals a QEMU a qualsevol host, fins i tot amb models de processadors més antics que no admeten Intel VT-x (tecnologia de virtualització Intel) / AMD SVM (màquina virtual segura AMD). Tanmateix, en aquest cas, funcionarà molt lentament, a causa del fet que el codi binari que s'executa s'ha de recompilar sobre la marxa dues vegades, utilitzant TCG (TCG és un compilador Just-in-Time).
Aquells. QEMU en si és genial, però funciona molt lentament.
3) Anells de protecció
El codi de programa binari als processadors funciona per una raó, però es troba a diferents nivells (anells / anells de protecció) amb diferents nivells d'accés a les dades, des dels més privilegiats (anell 0), fins als més limitats, regulats i “amb les femelles apretades”. ” (Anell 3).
El sistema operatiu (nucli del sistema operatiu) s'executa amb Ring 0 (mode nucli) i pot fer el que vulgui amb qualsevol dada i dispositiu. Les aplicacions d'usuari operen al nivell Ring 3 (mode d'usuari) i no poden fer el que vulguin, sinó que han de sol·licitar accés cada vegada per realitzar una operació determinada (per tant, les aplicacions d'usuari només tenen accés a les seves pròpies dades i no poden “obtenir a” la caixa de sorra d'una altra persona). Els anells 1 i 2 estan pensats per a ser utilitzats pels conductors.
Abans de la invenció d'Intel VT-x / AMD SVM, els hipervisors funcionaven a Ring 0 i els convidats funcionaven a Ring 1. Com que Ring 1 no té prou drets per al funcionament normal del sistema operatiu, amb cada trucada privilegiada del sistema convidat, el L'hipervisor va haver de modificar aquesta trucada sobre la marxa i executar-la a l'anell 0 (com fa QEMU). Aquells. binari convidat NO s'executava directament al processador, i cada vegada passava per diverses modificacions intermèdies sobre la marxa.
La sobrecàrrega era important i això era un gran problema, i aleshores els fabricants de processadors, independentment els uns dels altres, van llançar un conjunt estès d'instruccions (Intel VT-x / AMD SVM) que permetien executar codi del sistema operatiu convidat. DIRECTAMENT al processador amfitrió (obviant els passos intermedis costosos, com era el cas anterior).
Amb l'arribada d'Intel VT-x / AMD SVM, es va crear un nou nivell especial d'anell -1 (menys un). I ara l'hipervisor s'executa amb ell i els convidats s'executen a l'anell 0 i tenen accés privilegiat a la CPU.
Aquells. finalment:
- L'amfitrió s'executa a l'anell 0
- els convidats treballen a l'anell 0
- L'hipervisor s'executa a l'anell -1
4) QEMU-KVM
KVM dóna accés als convidats a Ring 0 i utilitza QEMU per emular l'E/S (processador, discs, xarxa, vídeo, PCI, USB, ports sèrie, etc. que els convidats "veuen" i treballen).
Per tant, QEMU-KVM (o KVM-QEMU) :)
CRÈDITS
PD El text d'aquest article es va publicar originalment al canal de Telegram
Escriu als comentaris on no entenc bé el tema o si hi ha alguna cosa a afegir.
Gràcies!
Font: www.habr.com