Domanda

Esiste un modo per leggere il contenuto della cache della CPU? L'architettura è per ARM.

Sto invalidando un intervallo di indirizzi e quindi voglio assicurarmi che sia invalidato o meno. Sebbene sia in grado di leggere e scrivere l'intervallo di indirizzi con e senza invalidare e verificare l'invalidazione, voglio sapere se è possibile leggere il contenuto della cache

Grazie !!

È stato utile?

Soluzione

ARM9 fornisce manipolazione della cache e registri di prova che consentono di esaminare lo stato della cache. Ecco un ragionevole punto di partenza:

http: // infocenter .arm.com / help / index.jsp? topic = / com.arm.doc.ddi0151c / Chdcfejb.html

  

ICache e DCache vengono gestiti utilizzando le istruzioni MCR e MRC per i registri CP15 7 e 9, definiti dal modello del programmatore ARM v4T. Ulteriori operazioni sono disponibili utilizzando MCR e MRC al registro 15. CP15 Queste operazioni sono combinate con quelle che utilizzano i registri 7 e 9 per consentire il test delle cache interamente nel software.

Queste sono istruzioni privilegiate, quindi potrebbero non essere accessibili sulla tua piattaforma di destinazione.

Comincerei con un semplice programma che scarica lo stato di tutte le righe della cache. Ciò dovrebbe fornire informazioni sufficienti per leggere i dati nella cache semplicemente leggendo le posizioni di memoria fornite dai tag della cache.

Altri suggerimenti

Sono titubante nel scrivere che è impossibile, quindi sto scrivendo che è estremamente difficile. Probabilmente non esiste una risposta generica. dato che la cache della CPU funziona in modo trasparente, non è possibile leggerne il contenuto dalla CPU collegata senza alterare il contenuto della cache. Le cache della CPU sono generalmente implementate come CAM (memoria indirizzabile del contenuto, memoria associativa) se la CPU tenta di accedere ai dati, la cache viene cercata, se i dati non sono presenti vengono recuperati dalla memoria, ma temo che questo processo sia trasparente per la CPU .

L'opzione è usare una specie di modulo di osservazione HW e annusare il bus di sistema, che collega la cache alla RAM. Se la richiesta di dati appare sul bus, i dati richiesti non erano nella cache.

spero che qualcuno con una conoscenza HW più profonda farà luce.

c'è una voce su wikipedia che parla della memorizzazione nella cache della CPU: http://en.wikipedia.org/wiki/CPU_cache

Per definizione, tutto ciò che dovresti fare per leggere un contenuto della cache sarebbe caricare la posizione di memoria che viene memorizzata dalla cache. Se la cache funziona correttamente, estrarrebbe il contenuto dalla cache.

Tuttavia, se stai cercando di leggere il contenuto della I-cache, questo dipende dal punto di vista architettonico. Inoltre, avrai le condizioni di gara da considerare. Le istruzioni per la lettura di un contenuto della cache possono inavvertitamente sovrascrivere il contenuto della cache stesso.

Come indicato in questa discussione , semplicemente usando il La CPU può far cambiare il contenuto della cache. Poiché (la maggior parte) le implementazioni della cache sono intenzionalmente completamente trasparenti per la CPU, non sarà possibile visualizzare i contenuti della cache direttamente dall'interno del software in esecuzione su CPU tradizionali.

Per fare una cosa del genere richiederebbe una CPU compatibile con la cache (con istruzioni speciali per il controllo della cache; non ho idea se esistano davvero), o per installare la cache dovrai installare un modulo HW separato. Ecco 2 idee che ho per quello:

  1. Sostituisci il tuo controller di cache originale con uno che ha funzionalità di controllo aggiuntive e può essere collegato al bus di sistema per leggere i dati. Questo controller è compreso tra " la CPU e la cache.

  2. Posiziona un modulo secondario in parallelo con la cache originale, con accesso alla cache di sola lettura. Usando una linea di interruzione speciale (o un segnale simile hardware -NOT- software simile), la CPU potrebbe quindi attivare un dump della cache nella memoria di questo modulo e quindi rileggerlo (su un bus) in un secondo momento. Questo controller non influirebbe sul funzionamento della cache; ti consentirebbe semplicemente di scattare istantanee in qualsiasi momento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top