[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:

Utilizzo delle Cache in WHDLoad

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]