Qu'est-ce qu'un noyau virtuel ?

Un CPU est composé de plusieurs éléments distincts. Le noyau du CPU, quant à lui, est le cœur du processeur. Ceux-ci offrent la puissance de traitement réelle du CPU. Un cœur de CPU moderne dispose d'une matrice de mémoire divisée en cache, registres et tampons. Ceux-ci sont utilisés pour fournir un stockage à grande vitesse avec une capacité limitée. Un processeur possède un ou plusieurs cœurs, généralement un nombre impair. Chaque cœur d'unité centrale dispose du même ensemble d'infrastructures de soutien, comme la même quantité de cache et de registres.

noyau virtuel

Les premières architectures de CPU n'avaient qu'un seul cœur de CPU et fonctionnaient de manière séquentielle. Le cœur de l'unité centrale exécutait les instructions dans l'ordre où elles étaient reçues. Il terminait également chaque instruction avant de passer à la suivante. Il s'agit d'un concept simple, mais inefficace. Les circuits du cœur de l'unité centrale sont divisés en de nombreux composants discrets, chacun d'entre eux correspondant à une étape de l'exécution des instructions.

Cependant, comme ces circuits sont séparés, ils n'ont pas besoin d'être aussi étroitement couplés dans leur utilisation pratique. Le grand avantage de cette méthode est que vous pouvez utiliser tous les segments du pipeline en même temps. Cette méthode est connue sous le nom de "pipelining" et permet de réaliser des gains de performance significatifs par rapport à l'exécution complète d'une instruction avant de passer à la suivante. Pour faire un excellent usage d'un pipeline, le processeur doit être conçu avec un peu plus de soin. Toutefois, l'amélioration des performances en vaut la peine.

Tirer le meilleur parti du pipeline

Le pipeline a pour but de faire circuler les instructions aussi efficacement que possible dans le processeur. Malheureusement, comme pour tout, ce n'est pas si simple. Les instructions du pipeline peuvent devoir être retardées d'un ou de plusieurs cycles d'horloge pendant que le cache du CPU est interrogé pour des données. Il en résulte une bulle ou un blocage du pipeline.

Ce problème peut toutefois être facilement résolu en installant un pipeline de secours. Si le pipeline principal est interrompu, ce pipeline fournit des instructions pour commencer immédiatement les opérations. Cela ajoute peu de complexité au CPU tout en augmentant les performances en comblant les trous dans le pipeline. Cette idée est promue dans les CPU AMD sous le nom de SMT (Simultaneous MultiThreading) et dans les CPU Intel sous le nom d'Hyperthreading.

Le pipeline secondaire est essentiellement présenté comme un cœur de CPU supplémentaire au système d'exploitation. Cependant, il n'y a qu'un seul cœur de CPU physique dans la conception sous-jacente du CPU. Un cœur virtuel est le nom donné à ce deuxième cœur conceptuel.

Il convient de noter que tous les processeurs grand public qui utilisent des cœurs virtuels n'ajoutent qu'un cœur virtuel à chaque cœur physique. Toutefois, la notion peut être poussée un peu plus loin, certains cœurs de traitement spécialisés permettant d'avoir quatre ou même huit "cœurs" sur un seul cœur physique.

Performances et problèmes

Étant donné le peu de circuits supplémentaires nécessaires pour construire un autre pipeline, il n'est pas surprenant que l'augmentation de puissance directement liée à un cœur virtuel soit négligeable. Il convient toutefois de mentionner qu'en faisant fonctionner le cœur physique plus souvent, on augmente indirectement la consommation d'énergie. Selon les recherches d'Intel, l'introduction d'un cœur virtuel augmente les performances de 30 %. Toutefois, selon l'application, cette valeur peut varier considérablement. Certaines applications peuvent voir leurs performances presque doubler, tandis que d'autres peuvent voir une mise à l'échelle négative. Cette mise à l'échelle négative est généralement constatée exclusivement dans les logiciels qui ne sont pas optimisés pour les cœurs virtuels.

Comme le cœur virtuel utilise la majorité des mêmes ressources système que le cœur physique, il existe certains risques pour la sécurité. La surveillance des hits et des temps d'accès au cache, ainsi que le Translation Lookaside Buffer, peuvent permettre la fuite de clés de chiffrement. Ces vecteurs d'attaque à canal latéral sont quelque peu limités. Pour réaliser l'attaque, vous devez déjà exécuter du code arbitraire sur le cœur virtuel associé au cœur physique qui exécute le thread principal que vous souhaitez surveiller. Néanmoins, pour des raisons de sécurité, il existe des recommandations importantes pour désactiver l'hyperthreading et le SMT.

Conclusion

Un cœur virtuel n'est pas la même chose qu'un cœur de CPU. Il s'agit plutôt d'un second pipeline lié au même cœur physique du CPU. L'unité de traitement réelle accepte les instructions du second pipeline lorsqu'elle serait autrement inactive. Il s'agit d'une utilisation efficace des ressources, qui permet d'améliorer l'utilisation du cœur du processeur à un coût presque nul. Toutefois, les ressources partagées soulèvent des vulnérabilités potentielles en matière de sécurité qui sont difficiles, voire impossibles, à atténuer.