diff --git a/thesis/chapters/chap1.tex b/thesis/chapters/chap1.tex index 8f26ac2f981b41406f91198ac8305a01feef4be7..f0f896e96959512a2178ab31485ac3a94b94addf 100644 --- a/thesis/chapters/chap1.tex +++ b/thesis/chapters/chap1.tex @@ -6,14 +6,14 @@ % définir clairement les enjeux et avantages de cette technologie. Dans ce chapitre, nous commencerons par expliciter le principe fondamental qu'est -l'abstraction en informatique au moyen de la virtualisation. En partant des -concepts de base et en allant jusqu'aux applications actuelles, nous pourons -par conséquent définir clairement les enjeux et avantages fournis par cette -forme d'abstraction. +l'abstraction dans le domaine de l'informatique, au moyen de la virtualisation. +En partant des concepts de base et en allant jusqu'aux applications actuelles, +nous pourrons par conséquent définir clairement les enjeux et avantages fournis +par cette forme d'abstraction. S'en suivera une partie plus approfondie sur la virtualisation de plateforme et des différentes formes d'implémentation de celle-ci. En particulier, la -virtualisation \textbf{complète assistée matériellement} (\textit{hardware-assisted +virtualisation \textbf{complète assistée par le matériel} (\textit{hardware-assisted full virtualization}) sera au cœur de l'entièreté de ce travail, d'où l'importance cruciale de bien définir ses principes théoriques de fonctionnement avant d'entamer une discussion sur les manières ingénieuses de l'utiliser à @@ -22,7 +22,7 @@ mauvais escient. \section{Principe de l'abstraction} Au cours de son évolution, le domaine de l'informatique fut constamment -confronté à ce que l'on pourrait qualifier de dilemme cornélien; maintenir une +confronté à ce que l'on pourrait qualifier de dilemme cornélien : maintenir une facilité d'utilisation de nouveaux procédés et outils tout en faisant face à une grandissante complexité technique. Afin de réconcilier ces deux phénomènes, une des solutions fréquentes est d'introduire une couche intermédiaire dont le but @@ -32,17 +32,18 @@ l'utilisateur afin qu'il puisse tirer parti de ces avancées. De ce fait, il est donc possible d'éviter un compromis entre l'avancement des performances computationnelles et une utilisation potentiellement plus laborieuse. -L'abstraction existe à tous les niveau de l'informatique, des langages de +L'abstraction existe à tous les niveaux de l'informatique, des langages de programmation haut niveau qui masquent les détails de la gestion manuelle de -la mémoire, aux systèmes d'exploitation qui sont l'epitome même d'une couche -d'abstraction. Ils permettent à leurs utilisateurs, via une invite de commandes -ou une interface graphique, d'intéragir avec la machine et ses ressources sans -avoir besoin de manipuler physiquement les composants qui la composent. +la mémoire jusqu'aux systèmes d'exploitation qui représentent la définiton même +d'une couche d'abstraction entre l'utilisateur et le matériel. Ils permettent à +leurs utilisateurs, via une invite de commandes ou une interface graphique, +d'intéragir avec la machine et ses ressources sans avoir besoin de manipuler +physiquement les composants qui la composent. Un des exemples classiques mettant en avant l'avantage d'abstraire les détails dits \say{architecturaux} est la \textbf{\say{virtualisation de langage}} (\textit{language-based virtualization}). Le langage Java en est un exemple -typique. Le code source étant compilé pour une plateforme/architecture +typique. Le code source étant compilé pour une plateforme / architecture inexistante (\acrshort{jvm}), il est impossible de l'exécuter immédiatement sur une machine physique. Néanmoins, en installant cette \acrshort{vm} (ainsi que les dépendances nécessaires) sur n'importe quelle plateforme \textbf{réelle} @@ -52,7 +53,7 @@ les diverses architectures physiques (ARM, x86-64, etc\dots). % FIXME: not sure about this paragraph En mettant en place des mécanismes permettant d'abstraire les détails d'implémentations ou bien architecturaux il devient donc possible de rendre -la création/utilisation d'outils plus simples et plus portables à travers des +la création / utilisation d'outils plus simples et plus portables à travers des plateformes différentes. \section{Virtualisation de plateforme} @@ -73,7 +74,7 @@ virtuelle. Dans le monde de la virtualisation de plateforme, cette couche possède le nom \textbf{\say{d'hyperviseur}}, aussi appelée \acrshort{vmm}. Le diagramme ci-dessous illustre le positionnement hiérarchique de l'hyperviseur entre le matériel physique de la machine et les différents systèmes -d'exploitations \say{invités} qu'il hébèrge. +d'exploitation invités qu'il héberge. % NOTE: Multi Autonomic Management for Optimizing Energy Consumption in Cloud Infrastructures - Scientific Figure on ResearchGate. Available from: https://www.researchgate.net/figure/Platform-Virtualization_fig2_278643549 [accessed 10 Mar 2025] % TODO: rajouter la source partout!!! @@ -84,24 +85,24 @@ d'exploitations \say{invités} qu'il hébèrge. \caption{Diagramme simplifiée d'\acrshort{vmm}. Source : tiré de researchgate.net, ref. URL02 / réalisé par ALVARES Frederico}\label{fig:platform_virt} \end{figure} -Dans le but de pouvoir re-créer des environnements informatiques virtuels -quasiment indistinguable de \say{l'hôte}, l'hyperviseur est censé pouvoir -virtualisé trois composantes distinctes : +Dans le but de pouvoir recréer des environnements informatiques virtuels +quasi identique à l'hôte, l'hyperviseur est censé pouvoir virtualisé trois +composantes distinctes : \begin{itemize} - \item \acrshort{cpu} + \item \gls{cpu} \begin{itemize} - \item Fournir aux \say{invités} des ressources computationnelles à + \item Fournir aux invités des ressources computationnelles à part entière pour exécuter leurs codes respectifs \end{itemize} - \item \acrshort{mmu} + \item \gls{mmu} \begin{itemize} \item Assurer une isolation entre les zones mémoires dédiées à - chaque \acrshort{vm} ainsi que pour \say{l'hôte} + chaque \acrshort{vm} ainsi que pour l'hôte \end{itemize} - \item \acrshort{io} (appareils gérant les entrées et sorties d'une machine) + \item \gls{io} \begin{itemize} - \item Permettre l'utilisation de périphériques (ex.: disque de + \item Permettre l'utilisation de périphériques (ex. disque de stockage, carte réseau, etc\dots) au sein d'une machine virtuelle \end{itemize} @@ -112,7 +113,7 @@ virtualisé trois composantes distinctes : Le but ultime d'un hyperviseur est d'exposer un \textit{duplicata} \textbf{efficace} et \textbf{isolé} de la machine physique sous-jacente. Pour atteindre cet objectif, Gerald J. Popek ainsi que Robert P. Goldberg ont publié dans leur -article intitulé \textit{\say{Formal requirements for virtualizable third generation architectures}}\cite{popek_formal_1974}, +article intitulé \textit{\say{Formal requirements for virtualizable third generation architectures}} \cite{popek_formal_1974}, trois exigences pour qu'une architecture informatique puisse être qualifiée comme pouvant prendre en charge la virtualisation de manière efficace. Ces principes historiques sont les suivants : @@ -120,31 +121,31 @@ principes historiques sont les suivants : \begin{enumerate} \item Équivalence \begin{itemize} - \item Fournir à \say{l'invité} un environnement quasiment identique à - \say{l'hôte} de sorte à ce que le code puisse s'exécuter de la même + \item Fournir à l'invité un environnement quasi identique à + l'hôte de sorte à ce que le code puisse s'exécuter de la même manière. \end{itemize} \item Efficacité \begin{itemize} \item Faire en sorte que la grande majorité des instructions du - programme de \say{l'invité} soient exécutées par le matériel + programme de l'invité soient exécutées par le matériel sous-jacent sans intervention du \acrshort{vmm}. \end{itemize} \item Isolation \begin{itemize} \item Assurer que le \acrshort{vmm} ait le plein contrôle sur les - ressources physiques accédées par \say{l'invité}, garantissant + ressources physiques accédées par l'invité, garantissant ainsi sécurité et isolation entre les diverses \acrshort{vm}s. \end{itemize} \end{enumerate} -De nos jours, ces principes sont toujours d'actualités sauf celui de -l'équivalence (moyennant l'architecture du \acrshort{cpu}) pour des raisons +De nos jours, ces principes sont toujours d'actualité, sauf celui de +l'équivalence (mis à part l'architecture du \acrshort{cpu}) pour des raisons de performances. \section{Techniques de virtualisation du CPU}\label{sec:techniques_de_virtualisation_du_cpu} % (fold) -À présent, nous allons effectuer un bref aperçu des diverses techniques +À présent, nous allons présenter un bref aperçu des diverses techniques existantes permettant la virtualisation de la pièce maîtresse d'une machine physique, le \acrshort{cpu}. @@ -153,36 +154,35 @@ physique, le \acrshort{cpu}. L'approche originelle pour résoudre le problème de la virtualisation du \acrshort{cpu} consistait à introduire un niveau de privilège additionnel pour le \acrshort{vmm}, supérieur à celui du code source du noyau des systèmes -d'exploitations \say{invités}, de sorte à ce que celui-ci puisse intercepter +d'exploitation invités, de sorte à ce que celui-ci puisse intercepter l'exécution d'instructions privilégiées. Ceci permettait donc de garantir que -le code exécuté par le système \say{invité} ne pouvait en réalité pas affecter +le code exécuté par le système invité ne pouvait en réalité affecter le matériel physique de l'hôte. Au moment de l'exécution d'une instruction -privilégiée, le \acrshort{vmm} l'interceptait et l'émulait (re-créait son +privilégiée, le \acrshort{vmm} l'interceptait et l'émulait (recréait son comportement de manière contrôlée) de sorte à ne pas compromettre l'état du système hôte. -Cette technique, obsolète à l'heure d'aujourd'hui, était employée à l'aube de +Cette technique, de nos jours obsolète, était employée à l'aube de la virtualisation (années $\sim$ 1960-1970) de plateforme notamment par IBM dans -leurs \textit{mainframes} tel que le CP-67. +leurs \textit{mainframes}\footnote{Ordinateurs centraux} tel que le CP-67. \subsection{Virtualisation complète par la traduction dynamique binaire} Le besoin pour la traduction binaire dynamique est apparu suite à la montée en popularité de l'architecture informatique x86 aux alentours des années 1990. -Cet événement marqua ainsi le début de la démocratisation des ordinateurs -personnels grâce au gain de performances proposés par cette nouvelle -architecture. +Grâce au gain de performances offert par cette nouvelle architecture, tout +en modérant les coûts, cet événement marqua ainsi le début de la démocratisation +des ordinateurs personnels. Jusqu'à cette époque, la virtualisation fut pratiquée uniquement sur les \textit{mainframes} du fait que ceci furent assez puissants et explicitement conçus pour proposer ce cas d'utilisation. Avec l'avènement de ce nouveau -paradigme architectural, le souhait de pouvoir virtualiser x86 apparu. - +paradigme architectural, le souhait de pouvoir virtualiser x86 est apparu. Pour y parvenir, une approche similaire à l'interception et émulation fut initialement envisagée, or celle-ci s'est avérée être incompatible avec x86. -La raison de de cette incompatibilité était que 17 instructions privilégiées ne +La raison de cette incompatibilité était que 17 instructions privilégiées ne pouvait être interceptée. En conséquence, le \acrshort{vmm} perdait le contrôle -sur le code s'exécutant par l'invité. +sur le code exécuté par l'invité. La solution proposée par le groupe de recherche de Mendel Rosenblum était de traduire \textbf{à la volée} le code source de l'\acrshort{os} de l'invité en @@ -191,7 +191,7 @@ certaines sections de celui-ci de manière équivalente lorsqu'il utilisait une des 17 instructions problématiques. Un des avantages majeurs de cette technique est qu'elle ne nécessite pas de modifier le code source de l'\acrshort{os} invité permettant ainsi d'exécuter des \acrshort{os} dont le code source n'est -pas public (e.g. Windows). Inversement, du fait que cette traduction +pas public (ex. Windows). Inversement, du fait que cette traduction s'effectuait simultanément à l'exécution de l'invité, l'impact négatif sur les performances étaient non-négligeables. @@ -202,18 +202,18 @@ performances étaient non-négligeables. Dans le but de finalement résoudre le problème introduit par les 17 instructions privilégiées de l'architecture x86, les fabricants Intel et AMD décident, en 2005 et 2006 respectivement, d'introduire des extensions de virtualisation aux -instructions matérielles existantes permettant ainsi de palier à cette +instructions matérielles existantes permettant ainsi de pallier cette problématique. -Les extensions Intel VT-x et AMD-V (\textit{Pacifica} de son nom originel), +Les technologies Intel VT-x et AMD-V (\textit{Pacifica} de son nom originel), introduisent une déduplication du mode d'opération du \acrshort{cpu}. À présent, lors de l'exécution d'une ou plusieurs \acrshort{vm}s sous la supervision d'un hyperviseur, celles-ci disposeront des quatre niveaux de privilèges habituels (dans l'ordre descendant du niveau de privilège), appelés \textit{Ring-0} à -\textit{Ring-3}. Cependant, ces anneaux de privilèges seront régis à présent -par un nouveau mode \acrshort{cpu} prénommé \textbf{\textit{Non-Root}}. De son -côté, l'hyperviseur ainsi que les applications de l'hôte seront exécutés en mode -\textbf{\textit{Root}}. +\textit{Ring-3}. Cependant, ces anneaux de privilèges seront régis dès lors +par un nouveau mode \acrshort{cpu} prénommé \textbf{\textit{Non-Root}}. +Quant aux applications de l'hôte ainsi que l'hyperviseur, ils seront exécutés +en mode \textbf{\textit{Root}} du processeur. % NOTE: flg 02_platform_virt @@ -230,7 +230,7 @@ Cette déduplication à un double avantage, premièrement elle amplifie l'illusi pour la \acrshort{vm} que celle-ci n'est en fait pas virtualisée, notamment du fait que le code du noyau s'exécute de manière conventionnelle en \textit{Ring-0} et deuxièmement, à chaque fois qu'une instruction privilégiée -est demandée, celle-ci sera interceptée et causera une \textbf{\textit{VMExit}}. +est demandée, celle-ci sera interceptée et causera une \textbf{\textit{VM-exit}}. À ce moment, le \acrshort{cpu} basculera en mode \textit{Root} et l'hyperviseur s'en chargera de la gérer de manière adéquate. @@ -247,9 +247,9 @@ L'implémentation de ses extensions matérielles ont permis de rendre l'architecture x86 réellement virtualisable de manière similaire à l'interception et émulation utilisée sur les \textit{mainframes}. Ceci a drastiquement amélioré les performances des environnements virtuels par rapport -à la traduction binaire dynamique du fait que le code en exécution d'une -\acrshort{vm} ne nécessitait plus une analyse au \textit{runtime} par -l'hyperviseur sous-jacent. +à la traduction binaire dynamique du fait que le code de la \acrshort{vm} ne +nécessitait plus une analyse au \textit{runtime}\footnote{Lors de l'exécution} +par l'hyperviseur sous-jacent. % Le seul bémol de cette approche est qu'afin de tirer % partie de cette accéleration matérielle, il est nécessaire que le \acrshort{cpu}