Domanda

Nel nostro sistema embedded (che utilizza un processore PowerPC), si desidera disabilitare la cache del processore.Quali passi devo prendere?

Per chiarire un po', l'applicazione in questione deve avere come costante una velocità di esecuzione, come possiamo fare.Variabilità nell'esecuzione del codice stesso percorso non è accettabile.Questo è il motivo per disattivare la cache.

È stato utile?

Soluzione

Io sono un po 'in ritardo per la domanda, e anche è stato un po' dato che ho fatto tutto il basso livello di processore codice di inizializzazione su Ppc, ma mi sembra di ricordare che la cache & MMU essere abbastanza strettamente accoppiato (uno doveva essere attivata per attivare le altre) e ho pensare nella MMU tabelle di pagina, è possibile definire il cacheable attributo.

Quindi il mio punto è questo:se c'è un certo sottoinsieme di codice che deve essere eseguito in deterministico tempo, forse è possibile individuare il codice (tramite un comando del linker file) in una regione di memoria che è definito come non-cacheable nelle tabelle di pagina?In quel modo tutto il codice che possono/dovrebbero beneficiare di una cache, e (si spera) il sottoinsieme di codice che non dovrebbe, non.

Mi piacerebbe gestire in questo modo, comunque, in modo che in seguito, se si desidera abilitare la cache di parte del sistema, è solo bisogno di capovolgere un paio di bit nella MMU tabelle di pagina, invece di (ri)scrivere il codice di inizializzazione per impostare tutte le tabelle di pagina & cache.

Altri suggerimenti

Dal E600 manuale di riferimento:
Il HID0 speciali registro contiene vari bit che invalidano, disattivare e bloccare l'istruzione e la cache di dati.

Si dovrebbe usare HID0[DCE] = 0 per disabilitare la cache di dati.
Si dovrebbe usare HID0[ICE] = 0 per disabilitare la cache di istruzioni.

Notare che al momento dell'accensione, entrambe le cache sono disabilitati.Avrete bisogno di scrivere in codice assembly.

Forse non si desidera disabilitare globalmente cache, si desidera disattivare per un determinato intervallo di indirizzi?

Su alcuni processori è possibile configurare TLB (translation lookaside buffer) le voci per gli intervalli di indirizzi in modo tale che ogni gamma potrebbe avere la cache abilitata o disabilitata.In questo modo è possibile disattivare la memorizzazione nella cache per memory mapped I/O, e ancora lasciare il caching per il blocco principale di RAM.

Il solo PowerPC questo l'ho fatto io, era un PowerPC 440EP (da IBM, quindi AMCC), quindi non so se tutti sui powerpc funzionano allo stesso modo.

Che tipo di core PPC è?Il controllo della cache è molto diverso tra le diverse anime di fornitori diversi...inoltre, disattivando la cache è in generale considerato davvero una brutta cosa fare alla macchina.La Performance diventa così crawlingly lento che si farebbe con un vecchio 8-bit del processore (esagerando un po').BRACCIO varianti sono TCMs, strettamente ricordi, che il lavoro invece di cache, ma io non sono a conoscenza di eventuali PPC variante con quella struttura.

Forse una soluzione migliore è quello di mantenere il Livello 1 di cache attiva, e usa i chip di cache L2 come mapping RAM invece?Che è comune sulle moderne PowerQUICC dispositivi, almeno.

Disattivare la cache non fare bene a tutti.L'esecuzione e la velocità di caduta di un ordine di grandezza.Si sarebbe mai spedire un sistema come questo, così le sue prestazioni in queste condizioni non è di alcun interesse.

Per ottenere una costante velocità di esecuzione, prendere in considerazione uno di questi approcci:

1) Bloccare alcuni o tutti i cache.Tutti gli attuali chip PowerPC da Freescale, IBM, e AMCC offrono questa funzionalità.

2) Se si tratta di un chip Freescale con cache L2, considerare la possibilità di mappare parte di cache on-chip di memoria.

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