Question

Dans un processeur multi-cœurs, ce qui se passe au contenu du cache d'un noyau (L1 dire) lorsqu'un changement de contexte se produit sur ce cache?

Le comportement dépend de l'architecture ou est-ce un comportement général suivi par tous les fabricants de puces?

Était-ce utile?

La solution

Cela dépend à la fois sur le processeur (pas seulement la série de processeur, il peut varier d'un modèle à) et les systèmes d'exploitation, mais il y a des principes généraux. Que ce soit un processeur multi-cœurs est n'a pas d'impact direct sur cet aspect; le même processus pourrait être exécuté sur plusieurs noyaux simultanément (si elle est multithread), et de la mémoire peut être partagée entre les processus, de sorte que la synchronisation du cache est inévitable, peu importe ce qui se passe sur un changement de contexte.

Quand un processeur recherche un emplacement de mémoire dans le cache, s'il y a une MMU , il peut utiliser la physique ou l'adresse virtuelle de cet endroit (parfois même une combinaison des deux, mais ce n'est pas vraiment pertinent ici).

Avec des adresses physiques, peu importe quel processus accède à l'adresse, le contenu peut être partagé. Il n'y a donc pas besoin d'invalider le contenu du cache lors d'un changement de contexte. Si les deux processus carte la même page physique avec des attributs différents, cela est géré par la MMU (agissant comme MPU (mémoire unité de protection)). L'inconvénient d'un cache adressé physiquement est que le MMU doit rester entre le processeur et le cache, de sorte que la recherche de cache est lent. caches L1 ne sont presque jamais adresses physiquement; caches de niveau supérieur peuvent être.

La même adresse virtuelle peut désigner différents emplacements de mémoire dans différents processus. Par conséquent, avec un cache adressage virtuel, le processeur et le système d'exploitation doivent coopérer pour veiller à ce qu'un processus à trouver la mémoire. Il existe plusieurs techniques communes. Le code commutation de contexte fourni par le système d'exploitation peut invalider l'ensemble cache; cela est correct, mais très coûteux. Certaines architectures de CPU ont de la place dans leur ligne de cache pour un ASID (identificateur d'espace d'adressage) la version matérielle d'un ID de processus, également utilisé par la MMU. Cela sépare efficacement les entrées du cache des différents processus, et des moyens que deux processus utilisant la même page auront des vues incohérentes de la même page physique (il y a généralement une valeur ASID spéciale indiquant une page partagée, mais ceux-ci ont besoin d'être rincée si elles sont pas sur la carte à la même adresse dans tous les processus où ils sont mis en correspondance). Si le système d'exploitation prend en charge que les différents processus utilisent des espaces d'adressage non-chevauchement (qui va à l'encontre de certains dans le but d'utiliser la mémoire virtuelle, mais peut être fait parfois), alors les lignes de cache restent valides.

La plupart des processeurs qui ont un MMU ont également TLB . Le TLB est un cache de correspondances des adresses virtuelles à des adresses physiques. Le TLB est consulté avant dans les caches physiquement lookups adressée, pour déterminer l'adresse physique rapidement lorsque cela est possible; le processeur peut commencer la recherche de cache avant la recherche TLB est complète, aussi souvent des lignes de cache candidats peuvent être identifiés à partir des bits du milieu de l'adresse, entre les bits qui déterminent le décalage dans une ligne de cache et les bits qui déterminent la page. La quasi-adressée caches contourner le TLB s'il y a un coup de cache, bien que le processeur peut lancer la recherche TLB pendant qu'il interroge le cache, en cas d'un échec.

Le TLB lui-même doit être géré au cours d'un changement de contexte. Si les entrées TLB contiennent un ASID, ils peuvent rester en place; le système d'exploitation n'a besoin que de vider les entrées TLB si leur ASID a un sens changé (par exemple parce qu'un processus a quitté). Si les entrées TLB sont globales, elles doivent être invalidée lors du passage à un contexte différent.

Autres conseils

Le cache est généralement insensible à un changement de contexte. Seule la séquence d'adresses de mémoire accessible détermine quelles lignes de cache sont remplacés.

La politique de remplacement est généralement une personne à charge heuristique du fabricant et de la microarchitecture particulière. Le problème est que l'heuristique ne peut pas prédire l'avenir, quelle adresse et par conséquent la ligne de cache seront accessibles suivant.

L'heuristique peut être un simple LRU (moins récemment utilisé). Mais avec les processeurs modernes heuristiques sont plus complexes.

Jetez un oeil à la page Intel® 64 et IA-32 manuel d'Architectures Software Developer Volume 3 Chapitre 11 explique le cache de la mémoire et les mécanismes de contrôle du cache. AMD a ce sujet au chapitre 7 de la Architecture AMD64 Manuel du programmeur Volume 2: programmation système . Pour les processeurs à base ARM, il semble que les fichiers PDF ne sont disponibles que pour les clients enregistrés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à cs.stackexchange
scroll top