Alias ​​de contexte du cache de données Hyper-Threading

Oct 31 2020

dans le manuel d'Intel, la section suivante me confond:

11.5.6.2 Mode partagé En mode partagé, le cache de données L1 est partagé de manière compétitive entre les processeurs logiques. Cela est vrai même si les processeurs logiques utilisent des registres CR3 et des modes de pagination identiques. En mode partagé, les adresses linéaires dans le cache de données L1 peuvent être aliasées, ce qui signifie qu'une adresse linéaire dans le cache peut pointer vers différents emplacements physiques. Le mécanisme de résolution de l'aliasing peut conduire à un thrashing. Pour cette raison, IA32_MISC_ENABLE [bit 24] = 0 est la configuration préférée pour les processeurs basés sur la microarchitecture Intel NetBurst prenant en charge la technologie Intel Hyper-Threading.

comme intel, utilisez VIPT (égal à PIPT) pour accéder au cache.

comment l'alias de cache se produirait-il?

Réponses

1 PaulA.Clayton Nov 01 2020 at 20:18

Basé sur Intel® 64 et IA-32 Architectures Optimization Reference Manual , novembre 2009 (248966-020), Section 2.6.1.3:

La plupart des ressources d'un processeur physique sont entièrement partagées pour améliorer l'utilisation dynamique de la ressource, y compris les caches et toutes les unités d'exécution. Certaines ressources partagées adressées de manière linéaire, comme le DTLB, incluent un bit d'ID de processeur logique pour distinguer si l'entrée appartient à un processeur logique ou à l'autre.

Le cache de premier niveau peut fonctionner selon deux modes en fonction d'un bit d'ID de contexte:

  • Mode partagé: le cache de données L1 est entièrement partagé par deux processeurs logiques.
  • Mode adaptatif: en mode adaptatif, les accès à la mémoire à l'aide du répertoire de pages sont mappés de manière identique sur les processeurs logiques partageant le cache de données L1.

Le crénelage est possible car le bit ID de processeur / ID de contexte (qui est juste un peu indiquant de quel processeur virtuel provient l'accès à la mémoire) serait différent pour différents threads et le mode partagé utilise ce bit. Le mode adaptatif traite simplement le cache comme on s'y attend normalement, en utilisant uniquement l'adresse mémoire.

Plus précisément, la manière dont l'ID de processeur est utilisé lors de l'indexation du cache en mode partagé ne semble pas être documentée. (XORing avec plusieurs bits d'adresse fournirait une dispersion des index de telle sorte que les index adjacents pour un thread matériel seraient mappés vers des index plus séparés pour l'autre thread. La sélection d'un ordre de bits différent pour différents threads est moins probable car cela tendrait à augmenter le délai. Dispersion réduit la fréquence des conflits en fonction de la localité spatiale au-dessus de la granularité de la ligne de cache, mais inférieure à la granularité de la taille du chemin.)