2013-09-26 2 views
14

Quel adressage est utilisé dans les processeurs x86/x86_64 pour la mise en cache dans L1, L2 et L3 (LLC) - physique ou virtuel (utilisant PT/PTE et TLB) et d'une certaine manière PAT(page attribute table) affecte-t-il?L'adressage physique ou virtuel est-il utilisé dans les processeurs x86/x86_64 pour la mise en cache dans les L1, L2 et L3?

Y a-t-il une différence entre les pilotes (espace noyau) et les applications (espace utilisateur) dans ce cas?

+0

Vous ne pouvez pas traiter le cache. Vous pouvez uniquement adresser la mémoire. Le cache est géré par le processeur en privé. –

+1

@Kerrek SB Oui, je sais, mais le cache CPU utilise-t-il le TLB et tous les overheads de l'adressage virtuel ou non? – Alex

Répondre

28

La réponse à votre question est - cela dépend. C'est strictement une décision de conception de CPU, qui équilibre sur le compromis entre la performance et la complexité. Prenez par exemple les récents processeurs Intel Core - ils sont physiquement étiquetés et virtuellement indexés (au moins selon http://www.realworldtech.com/sandy-bridge/7/). Cela signifie que les caches ne peuvent effectuer des recherches dans l'espace d'adressage physique pur, afin de déterminer si la ligne est là ou non. Cependant, puisque le L1 est associatif à 32k, à 8 voies, cela signifie qu'il utilise 64 ensembles, donc vous n'avez besoin que des bits d'adresse 6 à 11 pour trouver l'ensemble correct. Comme il se trouve, les adresses virtuelles et physiques sont les mêmes dans cette plage, de sorte que vous pouvez rechercher le DTLB en parallèle avec la lecture d'un ensemble de cache - une astuce connue (voir - http://en.wikipedia.org/wiki/CPU_cache pour une bonne explication).

En théorie, on peut construire un cache étiqueté virtuellement index + virtualy, ce qui enlèverait l'obligation de passer par la traduction d'adresse (recherche TLB, et également marche de page en cas d'échec TLB). Cependant, cela causerait de nombreux problèmes, en particulier avec l'alias de mémoire - un cas où deux adresses virtuelles correspondent à la même physique.

Dites que le core1 a des caches A de mémoire virtuelle dans un tel cache totalement virtuel (il est mappé à l'addr C de Phys, mais nous n'avons pas encore fait cette vérification). core2 écrit dans l'addr B cette carte pour le même addr C - cela signifie que nous avons besoin d'un mécanisme (généralement un "snoop", terme inventé par Jim Goodman) qui va invalider cette ligne dans core1, gérant la gestion des données et la cohérence si besoin. Toutefois, core1 ne peut pas répondre à cet espionnage car il ne connaît pas l'addr B virtuel et ne stocke pas l'addr physique C dans le cache virtuel. Donc, vous pouvez voir que nous avons un problème, bien que cela soit surtout pertinent pour les systèmes x86 stricts, d'autres architectures peuvent être plus laxistes et permettre une gestion plus simple de tels caches.

En ce qui concerne les autres questions - il n'y a pas de véritable connexion avec PAT à laquelle je puisse penser, le cache est déjà conçu, et ne peut pas changer pour différents types de mémoire. Même réponse pour l'autre question - le HW est principalement sous la distinction entre mode utilisateur/noyau (à l'exception des mécanismes qu'il fournit pour la vérification de la sécurité, principalement les différents anneaux).

+1

Gros merci! Et à votre avis, y a-t-il un avantage à la connaissance du mécanisme sur x86 et si le développeur I le sait, puis-je en quelque sorte optimiser les performances de mon programme? – Alex

+2

Absolument, un développeur SW qui ne connaît pas le HW qu'il exécute ferait un mauvais travail en l'optimisant (si nécessaire), ou en le déboguant (si nécessaire :). Le type d'adresse de mappage de cache est en fait un peu bas niveau, bien qu'il ouvre une hachure à certaines optimisations importantes telles que les éléments intrinsèques de pré-extraction SW et la conception de cache-aware). Voir cet excellent post pour des exemples - http://stackoverflow.com/questions/16699247/what-is-cache-friendly-code. Il y a aussi la question de l'exécution désordonnée qui pourrait donner quelques indices, et bien sûr la variété des optimisations du compilateur (pas HW, mais aussi important) – Leeor

+0

Je veux dire - bénéficier de la connaissance que dans x86: "ils sont physiquement étiqueté et virtuellement indexé " – Alex

Questions connexes