2009-06-17 19 views
10

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

Invalido un intervallo di indirizzi e quindi desidero accertarmi che non sia stato invalidato o meno. Anche se posso 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 !!

risposta

8

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

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

L'Icache e dCache sono mantenuti utilizzando le istruzioni MCR e MRC per CP15 registri 7 e 9, definito dal modello ARM V4T del programmatore. Ulteriori operazioni sono disponibili usando il registro 15 di MCR e MRC a CP15. Queste operazioni sono combinate con quelle che utilizzano i registri 7 e 9 per abilitare il test delle cache interamente nel software.

Queste sono istruzioni privilegiate che potrebbero non essere accessibili sulla piattaforma di destinazione.

Vorrei iniziare con un semplice programma che scarica lo stato di tutte le linee della cache. Questo dovrebbe darti abbastanza informazioni per leggere i dati nella cache semplicemente leggendo le posizioni di memoria fornite dai tag della cache.

2

Sono riluttante a scrivere è impossibile, quindi sto scrivendo è estremamente difficile. Probabilmente non c'è una risposta generica. dato che la cache della CPU funziona in modo trasparente, non è possibile leggere il suo contenuto dalla CPU collegata senza alterare il contenuto della cache. Le cache della CPU vengono solitamente implementate come CAM (memoria indirizzabile ai contenuti, memoria associativa) se la CPU tenta di accedere ai dati, la cache viene cercata, se i dati non ci sono vengono prelevati dalla memoria, ma temo che questo processo sia trasparente per la CPU .

L'opzione è utilizzare un tipo di modulo di osservazione HW e sniff sul bus di sistema, che collega la cache alla RAM. Se la richiesta di dati dovesse apparire sul bus, i dati richiesti non erano nella cache.

spero che qualcuno con una profonda conoscenza dell'HW farà luce.

c'è una voce su wikipedia parlano di caching della CPU: http://en.wikipedia.org/wiki/CPU_cache

0

Come indicato nel this thread, semplicemente utilizzando la CPU può causare il contenuto di cache di cambiare. Poiché (la maggior parte) le implementazioni della cache sono intenzionalmente completamente trasparenti per la CPU, non sarà possibile visualizzare il contenuto della cache direttamente dal software in esecuzione su CPU tradizionali.

Per fare qualcosa di simile richiederebbe una CPU sensibile alla cache (con istruzioni speciali per il controllo della cache, non ho idea se esistano realmente), o avresti bisogno di installare un modulo HW separato per visualizzare la cache . Qui ci sono 2 idee che ho per questo:

  1. Sostituire il controller della cache originale con uno che ha funzioni di controllo aggiuntive e può essere collegato al bus di sistema per leggere i dati. Questo controller si trova "tra" la CPU e la cache.

  2. Inserire un modulo secondario in parallelo con la cache originale, con accesso in cache di sola lettura. Utilizzando una speciale linea di interrupt (o un segnale hardware simile -NOT-), la CPU può quindi attivare un dump della cache nella memoria di questo modulo e quindi leggerlo di nuovo (su un bus) in un secondo momento. Questo controller non influisce sul funzionamento della cache; ti consentirebbe semplicemente di scattare istantanee in qualsiasi momento.

1

Per definizione, tutto ciò che avrebbe bisogno di fare per leggere un contenuto della cache potrebbe essere quella di caricare la locazione di memoria viene memorizzato dalla cache. Se la cache funziona correttamente, estrarrebbe il contenuto dalla cache.

Tuttavia, se si sta tentando di leggere il contenuto della cache I, questo dipende dal punto di vista dell'architettura. Inoltre, avrai condizioni di gara da considerare. L'istruzione per leggere un contenuto della cache può inavvertitamente sovrascrivere il contenuto della cache stessa.

Problemi correlati