Principes généraux de fonctionnement de QEMU-KVM

Principes généraux de fonctionnement de QEMU-KVM

Ma compréhension actuelle :

1) KVM

KVM (Kernel-based Virtual Machine) est un hyperviseur (VMM – Virtual Machine Manager) fonctionnant en tant que module sur le système d'exploitation Linux. Un hyperviseur est nécessaire pour exécuter certains logiciels dans un environnement (virtuel) inexistant et en même temps cacher à ce logiciel le véritable matériel physique sur lequel ce logiciel s'exécute. L'hyperviseur agit comme un « espaceur » entre le matériel physique (hôte) et le système d'exploitation virtuel (invité).

KVM étant un module standard du noyau Linux, il reçoit tous les goodies requis du noyau (gestion de la mémoire, planificateur, etc.). Et par conséquent, en fin de compte, tous ces avantages reviennent aux invités (puisque les invités travaillent sur un hyperviseur qui s'exécute sur/dans le noyau du système d'exploitation Linux).

KVM est très rapide, mais il ne suffit pas à lui seul pour exécuter un système d'exploitation virtuel, car... Cela nécessite une émulation d’E/S. Pour les E/S (CPU, disques, réseau, vidéo, PCI, USB, ports série, etc.), KVM utilise QEMU.

2) QEMU

QEMU (Quick Emulator) est un émulateur pour divers appareils qui vous permet d'exécuter des systèmes d'exploitation conçus pour une architecture sur une autre (par exemple, ARM -> x86). En plus du processeur, QEMU émule divers périphériques : cartes réseau, disque dur, cartes vidéo, PCI, USB, etc.

Cela fonctionne comme ceci:

Les instructions/code binaire (par exemple, ARM) sont convertis en code intermédiaire indépendant de la plate-forme à l'aide du convertisseur TCG (Tiny Code Generator), puis ce code binaire indépendant de la plate-forme est converti en instructions/code cible (par exemple, x86).

ARM -> code_intermédiaire -> x86

Essentiellement, vous pouvez exécuter des machines virtuelles sur QEMU sur n'importe quel hôte, même avec des modèles de processeurs plus anciens qui ne prennent pas en charge Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine). Cependant, dans ce cas, cela fonctionnera très lentement, car le code binaire en cours d'exécution doit être recompilé deux fois à la volée, en utilisant TCG (TCG est un compilateur juste à temps).

Ceux. QEMU en lui-même est méga cool, mais il fonctionne très lentement.

3) Anneaux de protection

Principes généraux de fonctionnement de QEMU-KVM

Le code de programme binaire sur les processeurs fonctionne pour une raison, mais se situe à différents niveaux (anneaux / Anneaux de protection) avec différents niveaux d'accès aux données, du plus privilégié (Ring 0), au plus limité, réglementé et « avec les écrous serrés ». » (Sonnerie 3).

Le système d'exploitation (noyau du système d'exploitation) fonctionne sur Ring 0 (mode noyau) et peut faire ce qu'il veut avec n'importe quelles données et appareils. Les applications utilisateur fonctionnent au niveau Ring 3 (mode utilisateur) et ne sont pas autorisées à faire ce qu'elles veulent, mais doivent à la place demander l'accès à chaque fois pour effectuer une opération particulière (ainsi, les applications utilisateur n'ont accès qu'à leurs propres données et ne peuvent pas « obtenir »). dans le bac à sable de quelqu'un d'autre). Les anneaux 1 et 2 sont destinés à être utilisés par les conducteurs.

Avant l'invention d'Intel VT-x / AMD SVM, les hyperviseurs fonctionnaient sur l'anneau 0 et les invités sur l'anneau 1. Étant donné que l'anneau 1 ne dispose pas de suffisamment de droits pour le fonctionnement normal du système d'exploitation, à chaque appel privilégié du système invité, le l'hyperviseur a dû modifier cet appel à la volée et l'exécuter sur l'anneau 0 (un peu comme le fait QEMU). Ceux. binaire invité PAS a été exécuté directement sur le processeur, et a subi à chaque fois plusieurs modifications intermédiaires à la volée.

La surcharge était importante et c'était un gros problème, puis les fabricants de processeurs, indépendamment les uns des autres, ont publié un ensemble étendu d'instructions (Intel VT-x / AMD SVM) qui permettaient d'exécuter le code du système d'exploitation invité. DIRECTEMENT sur le processeur hôte (en contournant les étapes intermédiaires coûteuses, comme c'était le cas auparavant).

Avec l'avènement d'Intel VT-x / AMD SVM, un nouveau niveau d'anneau spécial -1 (moins un) a été créé. Et maintenant, l'hyperviseur s'exécute dessus, et les invités s'exécutent sur le Ring 0 et bénéficient d'un accès privilégié au CPU.

Ceux. finalement:

  • l'hôte fonctionne sur l'anneau 0
  • les invités travaillent sur le Ring 0
  • l'hyperviseur fonctionne sur Ring -1

4) QEMU-KVM

KVM donne aux invités l'accès à l'anneau 0 et utilise QEMU pour émuler les E/S (processeur, disques, réseau, vidéo, PCI, USB, ports série, etc. que les invités « voient » et avec lesquels ils travaillent).

D'où QEMU-KVM (ou KVM-QEMU) :)

CRÉDITS
Une image pour attirer l'attention
Photo des anneaux de protection

PS Le texte de cet article a été initialement publié sur la chaîne Telegram @RU_Voip en réponse à une question de l'un des participants de la chaîne.

Écrivez dans les commentaires si je ne comprends pas correctement le sujet ou s'il y a quelque chose à ajouter.

Je vous remercie!

Source: habr.com

Ajouter un commentaire