[Main]
[Docs]
[Installs]
[Search]
[Team]
[Guestbook]
[Links]
CPU Cache Overview
Per incrementare le prestazioni alcune CPU della famiglia 68k sono capaci di utilizzare una cache per gli accessi alla
memoria.
Le cache vengono sempre assegnate mediante l'utilizzo di indirizzi logici, incluso il codice funzione dell'accesso.
Questo significa che gli accessi nella Modalità Utente e nella Modalità Supervisore verranno differenziati e quindi inseriti
in posti diversi nella cache (consulta la documentazione di Motorola per maggiori informazioni).
Segue uno sguardo alla capacità dei diversi processori della famiglia 68k di utilizzare le cache:
- 68000
nessuna
- 68010
- Instruction Prefetch (Precaricamento Istruzione)
due word di precaricamento, una word per il registro di decodifica
- Loop Mode
viene attivato quando una istruzione di una word di lunghezza è seguita da un DBcc che fa loop sull'istruzione precedente,
nessun fetch istruzione verrà applicato fino
alla fine del loop
- 68020
- Instruction Prefetch
una long word
- Instruction Cache (Cache Istruzioni)
16 linee per 16 byte = 256 byte
possono essere abilitate o congelate tramite CACR
- 68030
- Instruction Prefetch
una long word
- Instruction Cache
16 linee per 16 byte = 256 byte
possono essere abilitate o congelate tramite CACR
Burst mode forza la lettura completa di una cache line se l'hardware lo supporta
- Data Cache (Cache Dati)
16 lines per 16 byte = 256 byte
possono essere abilitate o congelate tramite CACR
sempre WriteThrough
modalità Write Allocation selezionabile per forzare l'invalidazione di entries user/supervisor su operazioni di scrittura
Burst mode forza la lettura completa di una cache line se l'hardware lo supporta
- 68040
- Instruction Prefetch
una long word
- Instruction Cache
256 linee per 16 byte = 4096 byte
possono essere abilitate tramite CACR
- Data Cache
256 linee per 16 byte = 4096 byte
possono essere abilitate tramite CACR
modalità CopyBack/WriteThrough selezionabili tramite MMU
- 68060
- Instruction Prefetch
una long word
- Instruction Cache
512 lines per 16 byte = 8192 byte
possono essere attivate, congelate e ridotte a metà della loro dimensione tramite CACR
- Branch Cache
possono essere abilitate tramite CACR
non risente della configurazione della MMU!
- Superscalar Dispatch
può essere abilitato tramite CACR
- Data Cache
512 linee per 16 byte = 8192 byte
possono essere attivate, congelate e ridotte a metà della loro dimensione tramite CACR
modalità CopyBack/WriteThrough selezionabili tramite MMU
- Push Buffer
può essere disabilitato tramite PCR
- Store Buffer
può essere abilitato tramite CACR
Le pagine non devono essere NonCachable Serialized (precise)
La prima cosa importante è di sapere che le cache nei 68030..68060 sono controllate dal Cache Control Register (CACR)
(Registro di Controllo delle Cache) e la MMU!
Nel CACR le cache saranno globalmente o abilitate o disabilitate. Utilizzando le Pagine singole della MMU (4 KByte con
WHDLoad), verranno rese note le loro modalità di utilizzo delle cache.
Nel 68030 una pagina di memoria può essere Cacheable (possono essere utilizzate le cache) o NotCacheable (le cache
non possono essere utilizzate). In un 68040/68060 può essere cacheable WriteThrough, cacheable CopyBack, NonCacheable
(impreciso) o NonCacheable Serialized (preciso).
Se la MMU non viene usata da WHDLoad, quest'ultimo controllerà solo il CACR.
Impostazioni Predefinite delle Cache
Di default le aree di WHDLoad, lo Slave e ExpMem vengono impostati come cacheable CopyBack. L'area BaseMem viene marcata
come NonCacheable, e le Data e Instruction Cache vengono abilitate nel CACR. In questo modo il programma localizzato
nell'area BaseMem girerà senza Cache ma WHDLoad, lo Slave e ExpMem le utilizzeranno per aumentare le prestazioni.
Se WHDLoad viene utilizzato senza MMU questa configurazione risulterà in entrambe le Cache disabilitate, questo accade
perche' senza MMU non è possibile configurare aree diverse di memoria in maniera differente, conseguentemente se una
regione è selezionata come NonCacheable tutte le Cache devono essere disabilitate.
Controllo delle Cache da parte del Programmatore
Ci sono due funzioni resload per controllare le cache: resload_SetCACR e resload_SetCPU. La resload_SetCACR è una routine molto vecchia e può essere
completamente rimpiazzata da resload_SetCPU (WHDLoad mappa internamente gli argomenti di resload_SetCACR e chiama
resload_SetCPU).
In ogni caso l'utilizzo di resload_SetCACR è raccomandato per tutte le persone che non sono degli esperti delle cache e del
loro modo di funzionare in un sistema Amiga. Mediante l'utilizzo di resload_SetCACR le instruction e le data cache possono
essere abilitate o disabilitate separatamente. resload_SetCACR non inficia sulla possibilità di utilizzo delle cache
nell'area BaseMem.
Controllo delle Cache da parte dell'Utente
Se il programmatore ha svolto un lavoro pulito allora l'utente non dovrà preoccuparsi delle cache, perché tutte le necessarie
impostazioni del caso saranno state eseguite dallo Slave.
Tuttavia ci possono essere due ragioni per cambiare manualmente queste impostazioni. In primo luogo per permettere ad
un installatore che va troppo veloce (ad esempio mostra errori nella grafica) di funzionare correttamente, ma anche per
velocizzare un programma installato.
Per permettere ad un programma che va in crash di funzionare, si può usare l'opzione NoCache. Questa opzione disabilita tutte le cache e marca tutta la memoria come NonCachable
Serialized (preciso). Se la macchina possiede memoria Chip a 32-bit sarà comunque più veloce di un A500 originale.
Per rendere un programma installato più veloce si possono impostare alcune opzioni che abilitano le Cache.
Questa impostazione avrà priorità sulle impostazioni dello Slave. Nel 68020 si può impostare l'opzione Cache. Con un 68030 può essere usata anche l'opzione DCache
la quale include anche l'opzione Cache. Con il 68060 c'è la possibiltà di utilizzare anche altre opzioni: BranchCache, StoreBuffer e
SuperScalar. L'opzione ChipNoCache/S può
migliorare le prestazioni in presenza di 68040 e 68060, leggi qui sotto.
Cacheability (possibilità di utilizzo delle cache) della memoria Chip
Le cache possono essere attivate non solo dalla CPU (CACR) e dalle impostazioni della MMU, ma anche da hardware esterno.
La CPU manderà dei segnali al bus se tenterà di usare le cache per un accesso. Ed un hardware esterno può segnalare alla
CPU (dopo che un indirizzo sarà stato immesso nel bus indirizzi durante un accesso alla memoria) che un accesso non è
cacheable (non devono essere attivate le cache per questo accesso).
Il meccanismo dove l'hardware segnala alla CPU che la memoria può o non può essere cacheable viene usato in tutti gli
Amiga (per quanto ne sappia) e schede CPU con processore >= 68030 (perché possiedono una cache dati). Risentono di queste
impostazioni tutta la memoria Chip e lo spazio di I/O (CIA/Custom/RTC), dove non si devono utilizzare le cache dati.
Questo diventa necessario per evitare problemi con le cache, per esempio a causa dell'attività del DMA.
La reazione della CPU nei confronti di un rifiuto hardware di un accesso cacheable dipende dal modello utilizzato. Con
il 68030 non c'è nessun impatto nelle prestazioni dell'accesso, i dati semplicemente non verranno cacheati. Con il 68040 gli
accessi in lettura saranno effettuati a piena velocità ma quelli in scrittura (CopyBack) verranno annullati e fatti
ripartire senza cache, ed il risultato sarà un accesso circa 5 volte più lento (dipendentemente dall'hardware e dalla
velocità della CPU) rispetto ad un accesso non cacheable. In presenza di un 68060 gli accessi in lettura e in scrittura
verranno annullati e fatti ripartire. Gli accessi in lettura saranno circa 3 volte più lenti mentre quelli in scrittura
circa 5 volte.
I problemi menzionati sono relativi agli accessi ai dati. Gli accessi alle istruzioni normalmente non ne risentono e
sono cacheabili all'interno della memoria Chip. C'è qualche hardware (probabilmente non funzionante correttamente) che non
permette alle istruzioni di essere cacheate nella memoria Chip. Con questo hardware dovrebbe essere utilizzata l'opzione ChipNoCache/S per evitare grossi rallentamenti nella velocità di esecuzione poiché
altrimenti gli accessi alle istruzioni saranno circa 2 volte più lenti.
La presenza di questo problema può essere verificata nel sistema eseguendo Speed.Slave contenuto nella directory
src/memory-speed nell'archivio per sviluppatori.
Burst Mode
Il Burst mode sul 68030 forza la lettura di una cache line completa (16 bytes) se si incappa in una
cache miss, rispetto alla sola lettura della long word richiesta.
Il Burst mode deve essere supportato dall'hardware, se non lo è nessun Burst ha luogo e non ci sono rallentamenti.
Il Burst mode può essere attivato separatamente per la cache delle istruzioni e dei dati. Dato che una lettura Burst
richiede più tempo di una normale, ci sarà un vantaggio delle prestazioni solo se gli altri dati presenti sulla linea cache
verrano utilizzati prima del flush (cancellazione) della stessa.
Il Burst mode nella cache delle istruzioni di solito incrementa le prestazioni, per la cache dati questo è vero solo
se ci sono letture consecutive della memoria. WHDLoad attiva la cache istruzioni ed il modo Burst per le stesse a
partire dalla versione 18.0. Il Burst mode per la cache dei dati non viene attivata da WHDLoad.
Write Allocation (Allocazione Scrittura)
La Write Allocation controlla l'utilizzo delle cache nel 68030 quando queste vengono a mancare durante un'operazione di
scrittura. La Write Allocation deve essere abilitata quando alcune parti del programma installato girano in Modalità Utente
(User Mode). Se il programma installato gira solo in Modalità Supervisore (Supervisor Mode) la Write Allocation può essere
disabilitata, e si potrà ottenere un piccolo miglioramento delle prestazioni.
Branch Cache
La Branch Cache è disponibile solo con il 68060. E' una specie di cache istruzioni per le istruzioni di branch. Ma a differenza delle cache istruzioni questa non risente delle impostazioni della MMU! Questo significa che anche quando una certa pagina di memoria viene contrassegnata come Non Cacheable, le istruzioni di branch saranno cacheate se la Branch Cache è abilitata.
Leggi i Motorola Microprocessors User Manuals per maggiori ragguagli.
Se hai correzioni o aggiunte da fare a questa pagina ti prego di contattarmi.
[Main]
[Docs]
[Installs]
[Search]
[Team]
[Guestbook]
[Links]