4 votes

Associativité minimale pour qu'un cache L1 PIPT soit également VIPT, en accédant à un ensemble sans traduire l'index en physique.

Cette question s'inscrit dans le contexte d'une section sur la mémoire virtuelle dans un cours d'architecture informatique de premier cycle. Ni les assistants d'enseignement ni le professeur n'ont pu y répondre suffisamment, et les ressources en ligne sont limitées.

Question :

Supposons un processeur avec les spécifications suivantes :

  • Pages de 8KB
  • Adresses virtuelles 32 bits
  • Adresses physiques de 28 bits
  • une table de pages à deux niveaux, avec une table de pages de 1 Ko au premier niveau et des tables de pages de 8 Ko au second niveau. deuxième niveau
  • Entrées de la table des pages de 4 octets
  • une TLB associative à 8 voies de 16 entrées
  • En plus du numéro de trame physique (page), les entrées de la table des pages contiennent un bit valide, un numéro de page et un numéro de page. bit lisible, un bit inscriptible, un bit exécutable et un bit réservé au noyau.

Supposons maintenant que ce processeur possède un cache L1 de 32 Ko dont les étiquettes sont calculées sur la base des adresses physiques. Quelle est l'associativité minimale que doit avoir ce cache pour permettre d'accéder à l'ensemble de cache approprié avant de calculer l'adresse physique qui correspond à une adresse virtuelle ?

Intuition :

Mon intuition est que si le nombre d'indices dans le cache et le nombre de pages virtuelles (c'est-à-dire les entrées de la table des pages) sont divisibles de manière égale, alors nous pourrions récupérer les octets contenus dans la page physique directement à partir du cache sans jamais calculer cette page physique, fournissant ainsi une petite accélération. Cependant, je ne suis pas sûr que cette intuition soit correcte et je ne sais absolument pas comment la mettre en pratique. Quelqu'un pourrait-il m'expliquer ?

Note : J'ai calculé que le nombre d'entrées de la table des pages est de 2^19, si cela peut aider quelqu'un.

6voto

Peter Cordes Points 1375

Quelle est l'associativité minimale que doit avoir le cache pour permettre d'accéder à l'ensemble de cache approprié avant de calculer l'adresse physique qui correspond à une adresse virtuelle ?

Ils sont seulement spécifiés que le cache est physiquement Étiqueté .

Vous pouvez toujours construire un cache virtuellement indexé, sans associativité minimale. Même le mappage direct (1 voie par ensemble) fonctionne. Voir Confusion des méthodes d'adressage des caches pour plus de détails sur VIPT par rapport à PIPT (et VIVT, et même l'inhabituel PIVT).

Pour que cette question ne soit pas triviale, je suppose qu'ils voulaient également dire "sans créer de problèmes d'aliasing". VIPT n'est donc qu'une accélération par rapport à PIPT (physical indexed, phyiscally tagged). Vous obtenez l'avantage de permettre la consultation de la TLB en parallèle avec la récupération des balises (et des données) pour les moyens de l'ensemble indexé sans aucun inconvénient.

Mon intuition est que si le nombre d'indices dans le cache et le nombre de pages virtuelles (c'est-à-dire les entrées de la table des pages) sont divisibles de manière égale, alors nous pourrions récupérer les octets contenus dans la page physique directement à partir du cache sans jamais calculer cette page physique.

Vous avez besoin de l'adresse physique pour vérifier les balises ; rappelez-vous que votre cache est physiquement balisé (les caches virtuellement balisés existent, mais doivent généralement être vidés lors de changements de contexte vers un processus avec des tables de pages différentes = un espace d'adressage virtuel différent). Cela était utilisé pour les petits caches L1 sur les vieux processeurs).

On suppose normalement que les deux nombres sont une puissance de 2, de sorte qu'ils sont toujours divisibles de manière égale.

La taille des pages est toujours une puissance de 2. Vous pouvez donc diviser une adresse en numéro de page et en décalage dans la page en prenant simplement différentes plages de bits dans l'adresse.

Les caches de petite taille/rapides ont également toujours un nombre de jeux de puissance 2, de sorte que la "fonction" d'indexation consiste simplement à prendre une plage de bits de l'adresse. Pour un cache indexé virtuellement : à partir de l'adresse virtuelle. Pour un cache indexé physiquement : à partir de l'adresse physique. (Les caches externes comme un grand cache L3 partagé peuvent avoir une fonction d'indexation plus fantaisiste, comme un hachage de plus de bits d'adresse, pour éviter l'aliasing pour les adresses décalées les unes des autres par une grande puissance de 2).

Le cache taille peut ne pas être une puissance de 2, mais on y parvient en ayant une associativité qui n'est pas une puissance de 2 (par exemple, 10 ou 12 chemins ne sont pas rares) plutôt qu'une taille de ligne ou un nombre d'ensembles qui n'est pas une puissance de 2. Après l'indexation d'un ensemble, le cache récupère les étiquettes pour toutes les voies de cet ensemble et les compare en parallèle. (Et pour les caches L1 rapides, ils récupèrent souvent les balises données sélectionnées par les bits de décalage de ligne en parallèle, aussi, alors les comparateurs mélangent juste ces données dans la sortie, ou lèvent un drapeau pour aucune correspondance).


Exigences pour le VIPT sans aliasing (comme le PIPT)

Pour ce cas, vous avez besoin que tous les bits d'index proviennent d'en dessous du décalage de page . Ils se traduisent "gratuitement" du virtuel au physique, de sorte qu'un cache VIPT (qui indexe un ensemble avant la consultation de la TLB) n'a aucun problème d'homonyme/synonyme. En dehors des performances, c'est PIPT.

Ma réponse détaillée sur Pourquoi la taille du cache L1 est-elle inférieure à celle du cache L2 dans la plupart des processeurs ? comprend une section sur ce piratage de la vitesse.

Cache physiquement étiqueté virtuellement indexé Synonyme montre un cas où le cache ne pas a cette propriété, et nécessite une mise en page par l'OS pour éviter les problèmes de synonymes.

Comment calculer la largeur des bits de cache pour les étiquettes, les indices et les offsets dans un cache associatif et une TLB ? a quelques notes supplémentaires sur la taille du cache / associativité qui donnent cette propriété.

Formule :

  • associativité minimale = taille du cache / taille de la page

Par exemple, un système avec des pages de 8 Ko a besoin d'un cache L1 de 32 Ko pour être au moins associatif à 4 voies afin que les bits d'indexation ne proviennent que de la partie inférieure de 13.

Un cache à mappage direct (1 voie par jeu) ne peut être aussi grand qu'une page : le total des bits d'octet à la ligne et d'index correspond au décalage d'octet à la page. Chaque octet dans un cache à mappage direct (1 voie) doit avoir une adresse unique index:offset, et ces bits proviennent de bits bas contigus de l'adresse complète.

Pour le dire autrement, 2^(idx_bits + within_line_bits) est la taille totale du cache avec une seule voie par ensemble. 2^N est la taille de la page, pour un décalage de page de N (le nombre de bits d'adresse d'octet-en-page qui se traduisent gratuitement).

Le nombre réel de jeux (dans ce cas = lignes) dépend de la taille de la ligne et de la taille de la page. L'utilisation de lignes plus petites / plus grandes ne ferait que décaler la division entre les bits de décalage et d'index.

À partir de là, la seule façon d'agrandir le cache sans indexer à partir de bits d'adresse plus élevés est d'ajouter plus de voies par ensemble, et non plus de voies.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X