Question

Existe-t-il un moyen de lire le contenu du cache de la CPU? L'architecture est pour ARM.

J'invalide une plage d'adresses, puis je veux m'assurer qu'elle est invalidée ou non. Bien que je sache lire et écrire la plage d'adresses avec et sans invalider et vérifier l'invalidation, je veux savoir s'il est possible de lire le contenu du cache

Merci !!

Était-ce utile?

La solution

ARM9 fournit des registres de manipulation et de test du cache qui vous permettent d’examiner l’état du cache. Voici un point de départ raisonnable:

http: // centre d'informations .arm.com / help / index.jsp? topic = / com.arm.doc.ddi0151c / Chdcfejb.html

  

ICache et DCache sont gérés à l’aide des instructions MCR et MRC des registres 7 et 9 du CP15, définis par le modèle du programmeur ARM v4T. Des opérations supplémentaires sont disponibles à l'aide des registres MCR et MRC à CP15 15. Ces opérations sont combinées à celles des registres 7 et 9 pour permettre de tester entièrement les caches dans le logiciel.

Il s’agit d’instructions privilégiées qui risquent de ne pas être accessibles sur votre plate-forme cible.

Je commencerais par un programme simple qui affiche l'état de toutes les lignes de cache. Cela devrait vous donner suffisamment d'informations pour lire les données dans le cache en lisant simplement les emplacements de mémoire fournis par les balises de cache.

Autres conseils

J'hésite à écrire que c'est impossible, alors j'écris que c'est extrêmement difficile. Il n'y a probablement pas de réponse générique. Etant donné que le cache de la CPU fonctionne de manière transparente, il est impossible de lire son contenu à partir de la CPU attachée sans modifier le contenu de la cache. Les caches de CPU sont généralement implémentés en tant que CAM (mémoire à contenu adressable, mémoire associative) si le CPU tente d'accéder aux données, le cache est recherché, si les données ne sont pas là, elles sont extraites de la mémoire, mais je crains que ce processus ne soit transparent pour le CPU. .

L’option consiste à utiliser une sorte de module d’observation matérielle et de détection sur le bus système, qui connecte le cache à la RAM. Si la demande de données apparaît sur le bus, les données demandées ne sont pas en cache.

J'espère que quelqu'un avec une connaissance approfondie du DD va nous éclairer.

il existe une entrée sur wikipedia qui traite de la mise en cache de la CPU: http://fr.wikipedia.org/wiki/CPU_cache

Par définition, tout ce que vous devez faire pour lire un contenu en cache consiste à charger l’emplacement de la mémoire stockée par le cache. Si le cache fonctionne correctement, le contenu du cache sera extrait.

Toutefois, si vous essayez de lire le contenu de l'I-cache, cela dépend de l'architecture. De plus, vous devrez tenir compte des conditions de course. L'instruction de lecture d'un contenu de cache peut écraser par inadvertance le contenu de cache lui-même.

Comme indiqué dans ce fil , en utilisant simplement le Le processeur peut entraîner une modification du contenu du cache. Étant donné que (la plupart) les implémentations de cache sont intentionnellement complètement transparentes pour le processeur, vous ne pourrez pas afficher le contenu du cache directement à partir du logiciel fonctionnant sur des processeurs traditionnels.

Pour faire quelque chose comme cela, il faudrait soit un processeur sensible au cache (avec des instructions spéciales pour contrôler le cache; je ne sais pas si elles existent réellement), soit vous auriez besoin d'installer un module matériel séparé pour afficher le cache. Voici 2 idées que j'ai pour cela:

  1. Remplacez votre contrôleur de cache d'origine par un contrôleur doté de fonctionnalités de contrôle supplémentaires et pouvant être connecté au bus système pour lire les données. Ce contrôleur se situe " entre " le processeur et le cache.

  2. Placez un module secondaire en parallèle du cache d'origine, avec un accès au cache en lecture seule. En utilisant une ligne d'interruption spéciale (ou un signal matériel -NOT- logiciel similaire), la CPU peut alors déclencher un vidage du cache dans la mémoire de ce module, puis le relire (sur un bus) ultérieurement. Ce contrôleur n’affectera pas le fonctionnement de votre cache; cela vous permettrait simplement de prendre des instantanés à tout moment.

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