Est-il possible d'obtenir la liste des traductions (à partir de pages virtuelles en pages physiques) à partir de TLB (tampon de traduction lookaside, c'est un cache spécial dans la CPU). Je veux dire x86 ou x86_64 moderne; et je veux le faire de façon programmatique, pas en utilisant JTAG et en déplaçant toutes les entrées TLB.Vider le contenu du tampon TLB du processeur x86
Répondre
Le noyau linux n'a pas de dumper, il y a une page du noyau Linux à propos du cache et de la tlb: https://www.kernel.org/doc/Documentation/cachetlb.txt "Cache et TLB Flushing sous Linux". David S. Miller
Il y avait un tel TLB jeter dans 80386DX (et 80486, et peut-être dans "Pentium intégré" 100-166 MHz/"Embedded Pentium MMX 200-233 MHz" en 1998):
- 1 - livre "MICROPROCESSEURS: LA 8086/8088, 80186/80286, 80386/80486 ET LA FAMILLE PENTIUM", ISBN 9788120339422, 2010, à la page 579
Cela a été fait par essai registres TR6 TR7:
- 2 - Livre "Microprocesseurs & Microcontrôleurs" de Godse & Godse, 2008 ISBN 9788184312973 page SA3-PA19: "3.2.7.3 Registres de test" "Seuls deux registres de test (TR6-TR7) sont actuellement définis. ... Ces registres sont utilisés pour vérifier la mémoire tampon de traduction (TLB) de l'unité de radiomessagerie. "
- 3" x86-Programmierung und -Betriebsarten (Teil 5). Die Testregister TR6 und TR7 ", deutsche article sur les registres:" Zur Prüfung des Translation-Lookaside-Buffers sind die zwei Testregister TR6 et TR7 vorhanden. Sie werden als Test-Commande-Registre (TR6) et Testdatenregister (TR7) bezeichnet. "
- 4 Intel « Pentium® processeur embarqué Famille Manuel développeur », partie « 26 Modèle Registres spécifiques et fonctions » page 8 « 26.2.1.2 Registres test TLB »
TR6 est registre de commande, l'adresse linéaire est Il peut être utilisé pour écrire dans TLB ou lire une ligne depuis TLB, TR7 est une donnée à écrire dans TLB ou à lire dans TLB
Wikipédia dit dans https://en.wikipedia.org/wiki/Test_register que TR6/TR7 "génère une exception d'opcode invalide sur n'importe quel CPU plus récent que 80486. "
L'encodage o f mov TR6/TR7 était disponible uniquement au niveau de privilège 0: http://www.fermimn.gov.it/linux/quarta/x86/movrs.htm
0F 24 /r movl tr6/tr7,r32 12 Move (test register) to (register)
movl %tr6,%ebx
movl %tr7,%ebx
0F 26 /r movl r32,tr6/tr7 12 Move (register) to (test register)
movl %ebx,%tr6
movl %ebx,%tr7
Vous pouvez obtenir la liste des traductions VA-PA stockées dans TLB mais vous pouvez avoir à utiliser un émulateur de processeur comme qemu
. Vous pouvez télécharger et installer qemu à partir de http://wiki.qemu.org/Main_Page Vous pouvez démarrer un noyau qui est stocké dans une image disque (généralement au format qcow2 ou raw) et exécuter votre application. Vous devrez peut-être modifier le code dans qemu pour imprimer le contenu de TLB. Regardez tlb_*
fonctions dans qemu/exec.c
Vous pouvez ajouter une fonction tlb_dump pour imprimer le contenu du TLB. Pour autant que je sache, c'est le plus proche que vous pouvez obtenir pour déverser le contenu de TLB. P.S: J'ai commencé à répondre à cette question et j'ai réalisé que c'était un an.
Mais c'est toujours intéressant. Quel TLB est émulé par qemu? Que pensez-vous de l'utilisation des émulateurs Bochs ou PTLsim? – osgx
Que voulez-vous dire par quel TLB? 'qemu' est un émulateur de processeur et peut émuler un x86-64, sparc, ou d'autres types de CPU. Je n'ai pas utilisé Bochs mais la dernière version de PTLsim utilise 'qemu' pour effectuer une émulation fonctionnelle. PTLSim est pour simuler les informations de synchronisation. – Bhushan
Bhushan, Quels sont les paramètres du TLB émulé? – osgx
- 1. Affichage du contenu de la mémoire cache du processeur dans les architectures x86
- 2. Documentations NUMA pour le processeur x86-64?
- 3. Exécution du code sur un processeur différent (assemblage x86)
- 4. DataOutputStream ne pas vider le tampon
- 5. Comment vider le tampon io dans Erlang?
- 6. Problème Modification du contenu du tampon de trame
- 7. elisp créer un tampon sans nom du contenu du fichier
- 8. Comment vider le tampon de sortie Zend au niveau du contrôleur?
- 9. Obtention du contenu spécifié dans le tampon en c
- 10. Récupère le contenu du tampon de la console dans C
- 11. architecture du processeur de l'Assemblée
- 12. Fourniture d'adresse physique directement au TLB en x86-64
- 13. Isolement du processeur du processeur d'épingles sous Windows
- 14. Est-ce que Postgres fournit une commande pour vider le cache du tampon?
- 15. InnoDB de MySQL - éviter de vider le tampon du journal pour une seule transaction?
- 16. Comment vider (effacer) le tampon logcat dans Android
- 17. Comment obtenir processeur Id du processeur win32
- 18. x86 Entrée du clavier d'assemblage sans INT
- 19. Vitesse du processeur Wakelock
- 20. Threads du processeur C#
- 21. Capacités du processeur multicœur
- 22. oblige le compilateur à ne pas vider automatiquement le tampon
- 23. Utilisation du processeur Jquery
- 24. Caractéristiques du processeur C#
- 25. Utilisation du processeur
- 26. Comment mesurer les temps d'exécution des commandes d'assemblage x86 et x86-64 dans les cycles du processeur?
- 27. Explication du démontage du simple programme (x86)
- 28. Windows Server 2008 Hyper-V sur le processeur x86
- 29. Comment lire les registres de drapeaux dans le processeur x86
- 30. déterminer l'architecture du processeur en D
Lorsque votre code s'exécute, il devrait normalement changer le contenu du TLB. Comment voulez-vous éviter cela? –
Le TLB déchargé devrait être petit pour changer un peu le TLB.De même, pour les TLB non associatives, il existe des méthodes bancaires (assistées par OS) pour que l'application TLB ne croise pas le TLB de l'outil TLB-dumping (comme la coloration de la page). – osgx