J'ai lu le document à propos de l'instruction CLFLUSH de la machine Intel x86. Je comprends que CLFLUSH m8
signifie vider la ligne de cache contenant l'adresse linéaire m8 si je cours l'instruction à l'intérieur d'un module Linux sur le métal nu. Cependant, que se passe-t-il si je veux exécuter l'instruction dans une machine virtuelle dans un environnement de virtualisation? Quel est le paramètre de CLFLUSH
? Pour être spécifique, supposons que je veuille vider une ligne de cache qui contient le contenu de l'adresse virtuelle va
d'un programme dans une machine virtuelle. L'adresse virtuelle va
est mappée à l'adresse physique pa
dans la machine virtuelle et pa
sera mappée à l'adresse de la machine ma
dans le VMM/hyperviseur. Quelle adresse dois-je utiliser pour l'instruction CLFLUSH
, va
, pa
ou ma
?CLFLUSH dans l'environnement de virtualisation
Merci beaucoup!
Répondons de cette façon. Je suis sûr que vous serez d'accord pour dire que le logiciel devrait fonctionner de manière identique dans des environnements virtualisés et non virtualisés, et que dans l'idéal, il devrait être incapable de dire qu'il est virtualisé. La réponse à votre question suit immédiatement; Vous utilisez n'importe quelle adresse que vous auriez utilisée si elle était en mode bare-metal, tout simplement parce que vous n'auriez aucun moyen de savoir si vous êtes en fait en train d'exécuter du bare-metal ou non. –
Ceci est une observation agréable! Je suis d'accord. Cependant, la raison pour laquelle le logiciel n'a aucune idée s'il s'exécute dans un environnement virtualisé ou non virtualisé est que le VMM/hyperviseur a virtualisé l'instruction. Si le VMM ne supporte pas cette instruction et que je souhaite étendre l'hypercall du VMM pour le supporter, je devrai savoir quelle adresse l'hyperviseur doit utiliser pour l'instruction CLFLUSH. Ai-je raison? – Mike
Si l'hyperviseur peut utiliser l'adresse 'va', je me demande comment le matériel peut déterminer quelle ligne de cache doit être vidée en fonction de' va'? Sur le métal nu, je peux comprendre que le matériel peut utiliser le registre CR3 pour transférer l'adresse 'va' à l'adresse de la machine pour trouver la ligne de cache à vider. Mais dans un environnement virtualisé, le matériel fera-t-il automatiquement la traduction de 'va' à' ma'? – Mike