2011-07-23 5 views
2

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

+0

Lorsque votre code s'exécute, il devrait normalement changer le contenu du TLB. Comment voulez-vous éviter cela? –

+0

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

Répondre

2

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 
0

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.

+0

Mais c'est toujours intéressant. Quel TLB est émulé par qemu? Que pensez-vous de l'utilisation des émulateurs Bochs ou PTLsim? – osgx

+0

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

+0

Bhushan, Quels sont les paramètres du TLB émulé? – osgx

Questions connexes