Qu'est-ce que SMT (multithreading simultané) ?

Technique qui traite simultanément les instructions de plusieurs threads dans un même cœur pour mieux utiliser ses unités de calcul. Intel l'appelle Hyper-Threading.

Nom japonais: SMT(同時マルチスレッディング)

« SMT (multithreading simultané) » apparaît dans 2 questions d'entraînement réparties sur 2 thèmes, dont Sécurité matérielle, CPU et architecture.

Domaine: CPU et architecture

Comment le SMT partage un cœur

Un cœur moderne à exécution dans le désordre peut émettre plusieurs instructions par cycle, mais un seul thread occupe rarement toutes ses unités d'exécution, à cause des dépendances, des erreurs de prédiction de branchement et des défauts de cache. Le multithreading simultané (SMT) dote le cœur d'un état architectural distinct, comme le compteur ordinal et les registres architecturaux, pour chaque thread matériel, tandis que les threads partagent les unités d'exécution, les caches, les prédicteurs de branchement et les tampons internes. Au cours d'un même cycle, des instructions de threads différents peuvent être émises vers des unités différentes. Le système d'exploitation voit chaque thread matériel comme un processeur logique, généralement deux par cœur.

Quel gain attendre

Comme les threads se disputent les mêmes ressources d'exécution, le SMT ne double pas les performances comme pourrait le faire un second cœur. Les gains typiques vont d'environ 0 à 30 %. Les charges de travail souvent bloquées, comme celles qui attendent la mémoire, en profitent le plus : pendant qu'un thread attend la résolution d'un défaut de cache, l'autre occupe les unités. Les charges qui saturent déjà les unités de calcul flottant ou la bande passante mémoire gagnent peu, et la contention dans les caches partagés peut même ralentir chaque thread, ce qui compte pour les applications sensibles à la latence.

Le SMT face aux autres formes de multithreading

Le multithreading à gros grain ne bascule vers un autre thread que lors d'un long blocage, comme un défaut de cache. Le multithreading à grain fin entrelace les threads cycle par cycle, mais n'émet qu'à partir d'un seul thread par cycle, une approche courante dans les GPU et certains processeurs réseau. Le SMT va plus loin en émettant à partir de plusieurs threads dans le même cycle, ce qui convient aux cœurs superscalaires larges. Le multicœur, lui, duplique le cœur entier. Intel commercialise son SMT à deux voies sous le nom d'Hyper-Threading, et certains processeurs pour serveurs prennent en charge quatre ou huit threads par cœur.

Sécurité et ordonnancement

Deux threads SMT partagent les caches L1, le prédicteur de branchement, les ports d'exécution et les tampons à une granularité très fine : un thread peut donc déduire ce que fait l'autre en mesurant son propre timing. Plusieurs vulnérabilités par canal auxiliaire reposent précisément sur cette configuration. Les systèmes qui exécutent sur le même matériel du code non fiable provenant de clients différents peuvent donc désactiver le SMT ou recourir au core scheduling, qui ne place sur des processeurs logiques frères que des threads d'un même domaine de confiance. Les deux options réduisent le débit : la décision met en balance performances et isolation.

S'entraîner : questions sur SMT (multithreading simultané)

Pourquoi désactive-t-on parfois le multithreading simultané (SMT) du CPU dans les systèmes effectuant des traitements confidentiels ?

  1. AParce que deux threads s'exécutant sur le même cœur partagent le cache L1, les unités de calcul, etc., ce qui permet à l'un d'observer finement les traces du traitement de l'autre
  2. BParce que la désactivation du SMT améliore toujours les performances du CPU
  3. CParce que le SMT ne permet pas les calculs cryptographiques
Afficher la réponse et l'explication

Réponse : A. Parce que deux threads s'exécutant sur le même cœur partagent le cache L1, les unités de calcul, etc., ce qui permet à l'un d'observer finement les traces du traitement de l'autre

En SMT, deux threads s'exécutent simultanément dans un même cœur et partagent finement le cache L1, le prédicteur de branchement, les unités de calcul, les tampons, etc. Un thread peut donc facilement observer par mesure du temps les ressources utilisées par l'autre, ce qui a constitué la condition d'attaque de plusieurs vulnérabilités. Pour ne pas partager un cœur avec une partie non fiable, on désactive le SMT ou l'on ne place sur un même cœur que des threads du même utilisateur.

Questions fréquentes

L'Hyper-Threading est-il la même chose que le SMT ?

Oui. Hyper-Threading est le nom commercial donné par Intel à sa mise en œuvre du multithreading simultané, dans laquelle chaque cœur physique apparaît au système d'exploitation comme deux processeurs logiques.

Le SMT double-t-il les performances du CPU ?

Non. Les deux threads partagent les unités d'exécution et les caches d'un même cœur : les gains de débit typiques sont d'environ 0 à 30 % selon la charge de travail, bien moins que l'ajout d'un second cœur.

Pourquoi certains systèmes désactivent-ils le SMT ?

Les threads d'un même cœur partagent les caches et les ressources d'exécution de façon assez étroite pour que l'un puisse observer l'autre par des canaux auxiliaires temporels. Désactiver le SMT, ou n'ordonnancer ensemble que des threads mutuellement fiables, supprime cette exposition au prix d'une certaine perte de débit.

« SMT (multithreading simultané) » dans les explications

Questions mentionnant « SMT (multithreading simultané) » (2)

  1. Pourquoi désactive-t-on parfois le multithreading simultané (SMT) du CPU dans les systèmes effectuant des traitements confidentiels ?
  2. Quelle technique permet à un seul cœur de traiter simultanément les instructions de plusieurs threads afin d'utiliser efficacement ses unités d'exécution ?

Termes associés

Architecture de von Neumann Architecture du jeu d'instructions (ISA) Cohérence de cache DMA (accès direct à la mémoire) DVFS (ajustement dynamique de la tension et de la fréquence) Exécution dans le désordre (out-of-order) GPU Interruption IPC Loi d'Amdahl

Retour au glossaire