2. Architecture du processeur : pipeline, caches et Fabrics

Cette unité plonge dans la microarchitecture du CPU moderne : pipeline superscalaire, exécution spéculative et ses failles de sécurité (Spectre, Meltdown, MDS), hiérarchie des caches et protocoles de cohérence, puis les interconnexions internes (Infinity Fabric, Ring Bus, chiplets UCIe).

 

Le pipeline et l’exécution spéculative

Un CPU moderne est superscalaire (plusieurs unités d’exécution en parallèle, plusieurs instructions émises par cycle) et pratique l’exécution dans le désordre (out-of-order execution) : les instructions sont réordonnées à la volée selon la disponibilité de leurs opérandes

 

In-Order vs Out-of-Order Execution
Comparaison In-Order vs Out-of-Order Execution : l’OoO évite les pipeline stalls en réordonnant les instructions indépendantes.

, puis leurs résultats sont « retirés » (committed) dans l’ordre logique grâce à un ROB (Reorder Buffer).

Pour éviter d’attendre le résultat d’un branchement conditionnel, le processeur prédit son issue grâce à un prédicteur de branchement basé sur l’historique des exécutions passées et exécute spéculativement les instructions du chemin prédit. Si la prédiction est fausse, le pipeline est vidé (pipeline flush) — coûteux en cycles, mais rare, donc globalement gagnant.

Spectre, Meltdown et la famille MDS

Meltdown

 

Schéma de l'attaque Meltdown
Meltdown : le CPU lit spéculativement une adresse noyau depuis la RAM via le cache avant que la vérification de permission ne l’annule.

exploitait la lecture spéculative de pages mémoire noyau depuis un programme utilisateur non privilégié, avant que la vérification de permission soit finalisée. Corrigé par KPTI (Kernel Page Table Isolation) au prix de 5 à 30 % de perte de performance sur les charges avec beaucoup d’appels système.

Spectre (variantes V1/V2/V4) exploitait le prédicteur de branchement lui-même pour faire exécuter spéculativement du code fuyant des données via le cache. Mitigé par microcode (IBRS, STIBP).

ZombieLoad, Fallout, RIDL (famille MDS, 2019) exploitent les tampons de remplissage internes du CPU (fill buffers, store buffers, load ports) pour lire des données en transit appartenant à d’autres processus ou à l’hyperviseur. Ces failles illustrent un principe général : toute ressource matérielle partagée entre contextes de sécurité différents est une source potentielle de canal auxiliaire (side-channel).

 

La hiérarchie des caches

Le principe fondamental est la localité : temporelle (une donnée récemment utilisée sera probablement réutilisée) et spatiale (une donnée proche sera probablement utilisée aussi). Chaque niveau de cache est un compromis capacité/latence/coût.

Niveau | Latence typique     | Portée      | Capacité
L1     | 3-4 cycles (~1 ns)  | Privé/cœur  | 32-64 Ko
L2     | ~14 cycles (~3 ns)  | Privé/cœur  | 256 Ko - 2 Mo
L3 LLC | 10-20 ns (40-80c)   | Partagé CCX | 2 - 256+ Mo
DRAM   | ~60-100 ns          | Système     | Go à To

 

Pyramide mémoire
Hiérarchie mémoire : du plus rapide (registres CPU) au plus lent et grand (Internet/stockage distant).

Le L1 est VIPT (Virtually Indexed, Physically Tagged). Le L3 (LLC — Last Level Cache) est partagé entre tous les cœurs d’un même CCX (AMD) ou de la même puce. Sa latence de 10 à 20 ns s’explique par le trajet physique du signal sur le ring bus (Intel) ou l’Infinity Fabric (AMD).

 

La cohérence des caches : MESI et MESIF

Le protocole MESI garantit la cohérence des copies en cache entre cœurs via quatre états : Modified (modifiée localement, seul détenteur), Exclusive (conforme à la RAM, unique détenteur), Shared (identique dans plusieurs caches), Invalid (invalide).

Intel ajoute un cinquième état dans MESIF : le Forward (‘F’). Lorsqu’une ligne est partagée, un seul cache porte l’étiquette Forward et répond aux requêtes de lecture, évitant de solliciter systématiquement le cache Modified ou la DRAM.

 

Interconnexions internes au CPU

AMD Infinity Fabric

L’Infinity Fabric est un réseau sur puce (NoC) composé du SDF (Scalable Data Fabric

 

AMD Infinity Fabric – Configuration EPYC 4th Gen 2P
AMD Infinity Fabric sur EPYC 9004 (Genoa) 2 sockets : liens G (cross-socket), P (PCIe/CXL) et options 3L/4L.

, données) et du SCF (Scalable Control Fabric, gestion thermique/alimentation/sécurité). Il relie les CCX entre eux. La latence inter-CCX (≈80 à 100 ns) est nettement supérieure à la latence intra-CCX (10 à 20 ns) : point critique pour le placement NUMA-aware des tâches sur les serveurs EPYC multi-chiplets.

Intel Ring Bus, Mesh et CAT

Sur les architectures client Intel, les cœurs et les tranches de L3 sont reliés par un ring bus bidirectionnel. Sur les architectures serveur récentes, Intel utilise une topologie mesh (grille 2D) pour passer à l’échelle. L’Intel CAT (Cache Allocation Technology) permet à l’OS ou l’hyperviseur de réserver des ways du L3 pour des applications critiques (QoS cache).

Chiplets et UCIe

Depuis AMD Zen (2017), la tendance est de découper un processeur monolithique en chiplets reliés par une interconnexion haute densité. Le standard UCIe (Universal Chiplet Interconnect Express), porté par Intel, AMD, TSMC, Samsung, Arm et d’autres, standardise ces interconnexions pour permettre l’assemblage de chiplets de fondeurs différents dans un même boîtier.

Points clés :

  • L’exécution spéculative optimise les performances mais génère des canaux auxiliaires (Spectre, Meltdown, MDS)
  • La hiérarchie L1/L2/L3/DRAM est un compromis vitesse/capacité/coût à chaque niveau
  • MESI/MESIF garantit la cohérence des données entre les caches de différents cœurs
  • AMD Infinity Fabric : latence inter-CCX (~100 ns) bien supérieure à l’intra-CCX (~15 ns)
  • Les chiplets (UCIe) permettent de mélanger différents nœuds de gravure dans un même boîtier
SEE ALL Add a note
YOU
Add your Comment