Question

IA-32 définit divers cas dans lesquels la CPU peut invalider l'ensemble du TLB. En commençant par les extensions ASID que AMD dans les processeurs Opteron publiée Rev-F (Barcelone?) Il y a des cas où seules les entrées TLB d'un certain ASID sont invalidés.

La question est, ne l'ASID s'arrête jamais être valide? Le Hypervisor doivent vérifier qu'une ASID est valide avant de l'utiliser?

Était-ce utile?

La solution

pense la réponse est 'pas directement' - regarder la programmation du système AMD spécification , le champ ASID dans le bloc de commande VM est une simple (jusqu'à) ID 32 bits dont les ensembles d'hyperviseur à une valeur unique pour chaque instance d'une machine virtuelle, et est utilisé comme un supplément balise dans la recherche TLB.

Comme vous avez aucun contrôle direct sur le contenu TLB sur x86, vous ne pouvez pas contrôler les entrées finissent dans le TLB - si le processeur décide d'ajouter une entrée à la TLB, l'entrée sera étiqueté avec le courant ASID , qui par définition sera valable lorsqu'il est ajouté.

Ceci est décrit d'une manière un peu rond-point dans la section 15.15.1 de la spécification de programmation du système mentionné précédemment:

  

Dans les réalisations qui ne fournissent pas un moyen de vider de manière sélective toutes les traductions d'un ASID spécifié unique, le logiciel peut effectivement rincer TLB de l'invité entrées en attribuant une nouvelle ASID pour les clients et ne pas réutiliser l'ancien ASID jusqu'à ce que l'ensemble TLB a été rincé au moins une fois.

Cela implique que le processeur n'a pas de concept de ASIDs valides ou invalides - il est juste un nombre dont la valeur actuelle doit correspondre à une des entrées TLB ASID pour la TLB de frapper. Par conséquent, si l'hyperviseur ne vide pas correctement un ASID avant qu'il réutilise, vous aurez atteint TLB rassis.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top