2016-01-22 3 views

Répondre

1

Au moins trois méthodes existent pour surveiller un cache L1 d'adresse virtuelle en utilisant des adresses physiques. Le plus évident est peut-être d'utiliser un cache L2 inclusif adressé par des adresses physiques et incluant des informations sur l'ensemble et la manière dont le bloc occupe (s'il est dans L1). La propriété d'inclusion ne doit s'appliquer qu'aux balises, par exemple, en fournissant deux fois plus de possibilités d'associativité dans les balises que dans les blocs de données de la mémoire. Cela peut entraîner un manque dans L2 nécessitant une éviction d'une ligne de cache L1 lorsque l'associativité L2 est insuffisante pour gérer tous les blocs dans L1 qui correspondent à un index donné. Ces expulsions sont généralement rares, compte tenu de la capacité et de l'associativité typiques de la L2. (Avec 4 pages KiB, dans une L1 de 32 KiB, une adresse physique particulière peut être mappée à 8 endroits différents en utilisant une simple indexation modulo - l'associativité biaisée complique les choses - donc une L2 associative associative à 4 voies ne peut garantir que Les annulations de retour ne se produiraient pas, bien qu'un L2 à 8 voies puisse le faire Puisque la localité spatiale est commune et que les caches L2 sont relativement grands, les problèmes de conflit ne sont pas aussi fréquents qu'avec les modèles d'accès aléatoire. maximiser un tel conflit.)

Une deuxième méthode est étroitement liée à la première consiste à répliquer les étiquettes dans une structure adressée physiquement. (Si cette structure est associée à la L2, elle peut être considérée comme une version d'une L2 contenant des tags.) Cela permet au processeur d'accéder au cache en utilisant des adresses virtuelles alors que les snoops utilisent des adresses physiques. Le magasin de tags adressé physiquement peut avoir besoin d'une associativité relativement élevée, mais comme les snoops sont moins courants que les accès au cache du processeur, les sondes peuvent être effectuées plus lentement pour économiser de l'énergie (et de la surface).

(En théorie, ce magasin d'étiquettes secondaire pourrait être filtré, par exemple, en utilisant des étiquettes partielles, ce qui indiquerait typiquement un manque d'espionnage et limiterait généralement les possibilités à l'autre. Une perte d'espionnage en accédant aux balises L1 virtuellement indexées et en utilisant un TLB pour la traduction peut être acceptable.Tandis qu'un snoop pourrait, en principe, récupérer toutes les balises virtuelles possibles correspondant à l'adresse physique et les traduire et les vérifier, ceci serait typiquement inacceptable. Pour un L1 directement mappé, pas plus grand que la taille de la page, cela peut être acceptable, cela peut donc être considéré comme une autre méthode, et d'autres mécanismes de filtrage pourraient être proposés: le coloriage pourrait réduire le nombre d'adresses à traduire dans l'associativité de L1.)

Une troisième méthode consiste à fournir un TLB inverse qui traduit des adresses physiques en adresses virtuelles. (Je me rappelle avoir lu qu'un processeur HP-RISC utilisait cette méthode.) Une erreur TLB inversée indiquerait que l'adresse physique sondée n'est pas dans L1. Cela peut introduire des invalidations de retour lorsqu'une nouvelle traduction doit supprimer une traduction qui a encore des blocs dans L1.

Un L1 virtuellement indexé et peut simplement sonder d'autres manières possibles sur un snoop. Cela pourrait interférer avec l'accès du processeur à L1, mais dans un processeur scalaire, il peut y avoir suffisamment de bande passante d'étiquette de cache pour prendre en charge les sondes d'accès et de snoop si seulement un ou deux bits d'adresses quatre sondes seraient nécessaires. (La bande passante supplémentaire fournie pour la surveillance peut également être utilisée pour les préfixes logiciels et permettre l'accès séquentiel aux données d'étiquette pour économiser de l'énergie lorsque davantage d'accès sont prêts à sonder le cache que les chemins de données.)