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.

Changements de contexte, ASID et virtualisation

Les processus réutilisent les mêmes adresses virtuelles : des traductions périmées ne doivent donc pas survivre à un changement d'espace d'adressage. Sans étiquettes, le TLB est vidé à chaque changement, ce qui provoque une rafale d'échecs ; étiqueter les entrées avec un identifiant d'espace d'adressage (ASID) permet de les réutiliser lorsqu'un processus revient. Projeter le noyau dans chaque espace d'adressage évite tout changement lors des appels système. Lorsque l'OS modifie une correspondance, il doit invalider les entrées concernées sur chaque cœur susceptible de les détenir. Avec la pagination imbriquée et des tables à quatre niveaux à la fois chez l'invité et chez l'hôte, un seul échec peut coûter jusqu'à 24 accès mémoire.

S'entraîner : questions sur TLB (tampon de traduction d'adresses)

Quel est l’avantage d’associer un ASID (identifiant d’espace d’adressage) à chaque entrée du TLB ?

  1. ALes traductions peuvent être distinguées sans vider tout le TLB lors d’un changement
  2. BLa plage d’adresses virtuelles utilisable par un processus est doublée
  3. CLa table des pages devient inutile et toutes les traductions se font dans le TLB
Afficher la réponse et l'explication

Réponse : A. Les traductions peuvent être distinguées sans vider tout le TLB lors d’un changement

Sans ASID, une même adresse virtuelle désignant des adresses physiques différentes selon le processus, il faut vider le TLB à chaque changement de processus, et les défauts de TLB se succèdent ensuite. Avec un ASID par entrée, on distingue à quel processus appartient chaque traduction ; le TLB peut être conservé et réutilisé lorsqu’on revient au processus initial. La plage d’adresses virtuelles ne change pas, et la table des pages reste nécessaire pour les traductions qui ne tiennent pas dans le TLB.

En pagination imbriquée où l’invité et l’hôte utilisent tous deux des tables des pages à 4 niveaux, combien d’accès mémoire faut-il au pire lors d’un défaut de TLB ?

  1. A8
  2. B16
  3. C24
Afficher la réponse et l'explication

Réponse : C. 24

L’emplacement de chacune des 4 tables de l’invité est exprimé en adresse physique invitée ; avant de lire chacune, il faut la traduire avec les 4 niveaux de l’hôte. Chaque niveau de l’invité coûte donc 5 accès (4 pour l’hôte + 1 pour la table de l’invité), soit 20 pour 4 niveaux, auxquels s’ajoutent les 4 accès de traduction par l’hôte de l’adresse physique invitée finale des données : 24 au total. En formule, (4 + 1) × (4 + 1) − 1 = 24. 8 suppose qu’on parcourt simplement deux fois 4 niveaux et oublie la traduction de l’emplacement des tables.

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.

« TLB (tampon de traduction d'adresses) » dans les explications

Questions mentionnant « TLB (tampon de traduction d'adresses) » (20)

  1. Quel est l’avantage d’associer un ASID (identifiant d’espace d’adressage) à chaque entrée du TLB ?
  2. En pagination imbriquée où l’invité et l’hôte utilisent tous deux des tables des pages à 4 niveaux, combien d’accès mémoire faut-il au pire lors d’un défaut de TLB ?
  3. Avec un TLB de 64 entrées et des pages de 4 KB, quelle est l’étendue mémoire accessible sans défaut de TLB (portée du TLB) ?
  4. Quel cache conserve les résultats de traduction d'adresses virtuelles en adresses physiques et accélère cette traduction ?
  5. Quel est le rôle de la table des pages ?
  6. Dans quel cas un défaut de page survient-il ?
  7. Quelle est la principale raison d’utiliser une table des pages à plusieurs niveaux (hiérarchique) plutôt qu’à un seul niveau ?
  8. Avec une table des pages à plusieurs niveaux utilisant 48 bits d’adresse virtuelle, des pages de 4 KB et des tables de 512 entrées (9 bits) à chaque niveau, combien de niveaux faut-il parcourir ?
  9. Pour quelle raison principale un changement de contexte entre processus peut-il dégrader les performances bien plus que le seul temps de sauvegarde et de restauration des registres ?
  10. Beaucoup d’OS placent la zone du noyau dans une partie de l’espace d’adressage de chaque processus (par exemple la plage haute) et en interdisent l’accès depuis le mode utilisateur par les bits de protection de la table des pages. Quel est l’avantage principal de cette disposition ?
  11. Avec des pages de 4 KB, combien de bits de l’adresse virtuelle représentent la position dans la page (déplacement) ?
  12. Dans un système multicœur, lorsque l’OS modifie l’entrée de table des pages d’une page pour supprimer sa correspondance, quel traitement est nécessaire ?
  13. Pour écrire de petites données octet par octet, pourquoi est-il plus rapide de les accumuler dans un tampon en espace utilisateur et de les écrire en bloc plutôt que d’invoquer un appel système à chaque fois ?
  14. Parcourir le tableau à deux dimensions a[i][j] du langage C avec j dans la boucle interne, comme ci-dessus, est généralement plus rapide qu’avec i dans la boucle interne. Pour quelle raison ?
  15. Dans un cache totalement associatif, combien de bits de l’adresse sont utilisés pour l’index (partie qui sélectionne l’ensemble) ?

Termes associés

Table des pages ASID (identifiant d'espace d'adressage) Mémoire virtuelle Appel système Pagination imbriquée (nested paging) Défaut de page (page fault) Changement de contexte Interruption TLB shootdown Bascule (flip-flop)

Retour au glossaire