Qu'est-ce que TLB (tampon de traduction d'adresses) ?
Petit cache qui conserve les résultats de traduction d'adresses virtuelles en adresses physiques. Il évite de parcourir à chaque fois la table des pages en mémoire et accélère la traduction.
Nom japonais: TLB(変換索引バッファ)
« TLB (tampon de traduction d'adresses) » apparaît dans 20 questions d'entraînement réparties sur 4 thèmes, dont Système d'exploitation et matériel, Hiérarchie mémoire, Analyse des performances.
Domaine: CPU et architecture
Fonctionnement d'une recherche dans le TLB
À chaque lecture d'instruction, chargement et rangement, l'unité de gestion mémoire (MMU) découpe l'adresse virtuelle en un numéro de page virtuelle et un décalage dans la page ; avec des pages de 4 Ko, les 12 bits de poids faible constituent le décalage et passent sans traduction. En cas de succès (hit) dans le TLB, le numéro de page physique stocké est accolé au décalage et les permissions sont vérifiées dans la même étape. En cas d'échec (miss), un parcours de la table des pages lit les tables en mémoire, jusqu'à quatre niveaux pour des adresses de 48 bits avec des pages de 4 Ko, et recharge l'entrée. Un défaut de page ne survient que si l'entrée de la table des pages est invalide ou interdit l'accès.
Portée du TLB et pages géantes
La portée du TLB est le nombre d'entrées multiplié par la taille de page : 64 entrées de 4 Ko ne couvrent que 256 Ko, alors que les mêmes 64 entrées contenant des pages géantes de 2 Mo couvrent 128 Mo. Comme les TLB ne contiennent que de quelques dizaines à quelques milliers d'entrées, les programmes dont l'ensemble de travail est vaste ou dispersé, comme les bases de données et les machines virtuelles, peuvent passer une part notable de leur temps à parcourir les tables des pages. Les remèdes incluent les pages géantes, un TLB de second niveau plus grand derrière de petits TLB de premier niveau, la conservation des entrées de table des pages dans les caches de données et une meilleure localité.
TLB, table des pages et cache de données
La table des pages est la correspondance de référence, construite par le système d'exploitation pour chaque processus et stockée en mémoire ; le TLB met en cache les entrées récemment utilisées de cette table : il contient donc des traductions, pas des données. Les caches de données sont distincts mais coopèrent étroitement : de nombreux caches L1 sont indexés virtuellement et étiquetés physiquement (VIPT), sélectionnant l'ensemble grâce aux bits de décalage non traduits, de sorte que la lecture de l'ensemble et la recherche dans le TLB se font en parallèle, avant la comparaison de l'étiquette physique. Un défaut de cache est traité par le matériel, alors qu'un défaut de page est une exception traitée par l'OS.
Questions fréquentes
Que se passe-t-il lors d'un TLB miss ?
La MMU (ou, sur certaines architectures, un gestionnaire de l'OS) parcourt les tables des pages en mémoire pour trouver la traduction, l'installe dans le TLB et relance l'accès. Si l'entrée de la table des pages est invalide ou si l'accès n'est pas autorisé, un défaut de page est levé à la place et l'OS prend le relais.
Comment calculer la portée d'un TLB ?
On multiplie le nombre d'entrées du TLB par la taille de page. Par exemple, 64 entrées × 4 Ko = 256 Ko, alors que 64 entrées × 2 Mo = 128 Mo, ce qui explique que les pages géantes réduisent les échecs TLB.
Le TLB fait-il partie du cache du CPU ?
C'est un cache, mais de traductions d'adresses et non de données. Il se trouve à côté des caches L1 et est généralement interrogé en parallèle avec eux, mais il ne contient jamais le contenu de la mémoire lui-même.