CPU Cache Overzicht
Om de prestatie te verbeteren, kunnen sommige CPU's van de 68k familie
de geheugen toegangen cachen.
Caches worden altijd toegeschreven met logische adressen, inclusief de functie code
van de toegang. Dat betekent dat toegangen in Gebruikers Mode en Supervisor Mode
verschillende Cache notities maakt (lees de Motorola documentatie voor meer informatie).
hier volgt een overzicht van de mogelijkheden in cachen op de 68k CPU's:
- 68000
niets
- 68010
- Instructie Prefetch
twee woorden prefetch, 1 woord decodeer register
- Loop Mode
is actief wanneer een 1 woord instructie word gevolgt door een DBcc,
meer instructies worden niet gehaald tot de loop eindigt.
- 68020
- Instructie Prefetch
1 lang woord
- Instructie Cache
16 regels á 16 byte = 256 byte
kan aangezet worden of bevroren via de CACR
- 68030
- Instructie Prefetch
1 lang woord
- Instructie Cache
16 regels á 16 byte = 256 byte
kan aangezet worden of bevroren via de CACR
- Data Cache
16 regels á 16 byte = 256 byte
kan aangezet worden of bevroren via de CACR
altijd WriteThrough
selecteerbare Schrijf allocatie mode
- 68040
- Instructie Prefetch
1 lang woord
- Instructie Cache
256 regels á 16 byte = 4096 byte
kan aangezet worden of bevroren via de CACR
- Data Cache
256 regels á 16 bytet = 4096 byte
kan aangezet worden of bevroren via de CACR
selecteerbare modus CopyBack/WriteThrough via MMU
- 68060
- Instructie Prefetch
1 lang woord
- Instructie Cache
512 lijnen á 16 byte = 8192 byte
kan ingeschakeld worden, bevroren en verminderd tot half de grootte via de CACR
- Branch Cache
kan aangezet worden of bevroren via de CACR
niet beïnvloed door de MMU setup
- Superscalar Dispatch
kan aangezet worden via de CACR
- Data Cache
512 regels á 16 byte = 8192 byte
kan ingeschakeld worden, bevroren en verminderd tot half de grootte via de CACR
selecteerbare modus CopyBack/WriteThrough via MMU
- Push Buffer
kan uitgezet worden via de PCR
- Store Buffer
kan aangezet worden via de CACR
Pages moeten niet NonCachable Serialized (precise) zijn
Het eerste belangrijke ding is om te begrijpen dat de caches op 68030..68060
gestuurd worden door de Cache Control Register (CACR) en de MMU
(er van uitgaand dat WHDLoad de MMU gebruikt en stuurt)!
In de CACR zullen de caches globaal in en uitgeschakeld zijn.
Met de MMU worden single pages (4 KByte met WHDLoad) gemarkeerd hoe ze gecached kunnen worden.
Op de 68030 kan een geheugen page Cacheable of Niet Cacheable zijn.
Op een 68040/68060 kan het cachable WriteThrough, cachable CopyBack, Niet Cachable
(impercise) of Niet Cachable Serialized (precise) zijn.
Als de MMU niet gebruikt word door WHDLoad, bestuurd het alleen de CACR.
Standaard Cache Setup
Standaard zijn de gebieden van WHDLoad, de Slave en ExpMem gemarkeerd als
cacheable CopyBack. Het BaseMem gebied is gemarkeerd als Niet Cachable, en de Data
en Instructie Cache zijn ingeschakeld in de CACR. Zodat de programma aanwezig
in de BaseMem gebied draait zonder Caches maar WHDLoad en de Slave gebruikt de
Caches voor de beste prestatie.
Programmeurs Cache Control
Er zijn 2 resload functies om de Caches te besturen: resload_SetCACR en resload_SetCPU. De
resload_SetCACR is de
historisch oudere routine en kan volledig vervangen worden door
resload_SetCPU (WHDLoad
mapt intern de argumenten van resload_SetCACR en roept
resload_SetCPU aan).
Niettemin, het gebruik van resload_SetCACR is aanbevolen
voor alle mensen die niks weten over Caches en hun gedrag in een Amiga systeem. Met
resload_SetCACR kan de instructie en data cache afzonderlijk
in en uitgeschakeld worden.
resload_SetCACR beïnvloed alleen de
cachebaarheid van het BaseMem gebied.
Gebruikers Cache Control
Als de programmeur goed werk heeft geleverd dan hoeft de gebruiker niets
te doen betreffend tot Caches omdat alle benodigde instellingen al gemaakt
zijn door de Slave.
Niettemin kunnen er 2 redenen zijn om handmatig de Cache instellingen
te veranderen. ten eerste om een install werkend te krijgen welke problemen
geeft omdat het te snel draait (bijv. maken van grafische fouten) en ten
tweede om een geïnstalleerd programma sneller te maken.
Om een programma dat crasht werkend te krijgen kan NoCache worden gebruikt. Deze optie
schakelt alle caches uit en markeert alle geheugen als Niet Cachebele Serialized (precies).
Als de machine 32-bit Chip-Geheugen heeft zal het nog steeds sneller zijn dan een originele A500.
Om een geïnstalleerd programma sneller te maken kunnen sommige opties worden ingesteld welke
de Cache ingeschakeld. Dat zal de instellingen overschrijven door de Slave. Op de 68020 kan de optie
Cache ingeschakeld worden. Op de 68030 kan ook de optie DCache gebruikt worden dat ook de Cache optie bevat.
Op de 68060 zijn er nog wat meer opties: BranchCache,
StoreBuffer en
SuperScalar. De optie ChipNoCache/S kan de prestaties verbeteren op de
68040 en 68060, zie hieronder.
cachebaarheid van Chip-Geheugen
De cachebaarheid kan niet alleen ingesteld worden door de CPU zelf (CACR) en de MMU instellingen
maar ook via externe hardware. De CPU signaleert op de bus of het probeert een toegang te cachen.
En een externe hardware kan de CPU een sein geven (nadat een adres is ingevoerd in de adres bus tijdens
een geheugen toegang) dat de toegang niet gecached moet worden.
Het mechanisme dat hardware signalen geeft aan de CPU dat geheugen niet
cacheable is of helemaal niet gebruikt wordt (AFAIK) Amigas en CPU-Kaarten die
CPU's >= 68030 bevatten (omdat ze een data cache hebben).
De hele Chip-geheugen en IO-Space (Cia/Custom/RTC) worden beïnvloed welke niet gecached
mogen worden door de data cache.
Dit is nodig om cache inconsistenties te voorkomen, bijvoorbeeld om DMA activiteit.
De reactie van de CPU op een hardware afwijzing van een cachebaar toegang
varieert op de verschillende CPU's. Op de 68030 is er geen impact op de prestatie
van de toegang, de data wordt simpel niet gecached. Op de 68040 worden lees toegangen
uitgevoerd in volle snelheid maar schrijf toegangen (CopyBack) worden gestopt
en herstart zonder cachebaarheid wat resulteert in ongeveer 5 keer (ligt aan
de hardware en CPU snelheid) langzamere toegang vergeleken met een niet cacheable
toegang. Op de 68060 worden lees en schrijf toegangen gestopt en herstart.
Lees toegangen worden ongeveer 3 keer langzamer en schrijf toegangen tot ongeveer 5 keer.
De genoemde problemen zijn gerelateerd aan data toegangen. Instructie toegangen zijn
meestal niet beïnvloed en ook cacheable binnen het Chip-Geheugen.
Er is wat (misschien gebroken) hardware welke niet toestemming geeft om instructies
te cachen in het Chip-Geheugen. Met zulke hardware moet de optie ChipNoCache/S gebruikt worden om een grote vertraging
in de uitvoerbare snelheid te verkomen omdat ergens anders instructie toegangen 2 keer
langzamer worden.
U kunt dit gedrag controleren op uw machine door het uitvoeren van de
Speed.Slave wat aanwezig is in de src/memory-speed directory van het ontwikkelaars archief
Schrijf Toewijzing
De Schrijf Toewijzing bestuurt de cache afhandeling op de 68030 wanneer een cache gemist
plaatsvind tijdens een schrijf operatie. Schrijf Allocatie moet ingeschakeld zijn wanneer
delen van het geïnstalleerde programma draaien in Gebruikers Mode. Als het geïnstalleerde
programma draait in alleen Supervisor Mode kan Schrijf Allocatie uitgeschakeld zijn, wat
een klein prestatie voordeel geeft.
Branch Cache
De Branch Cache is alleen beschikbaar in de 68060. Het is een soort van
instructie cache voor branch instructies. Maar in verschil tot de
instructie cache is het niet beïnvloed door de MMU setup! Dat betekend dat
zelfs als het geschikte geheugen Page is gemarkeerd als Niet Cacheable, worden branch
instructies gecached als de Branch Cache is ingeschakeld.
Lees de Motorola Microprocessors Gebruikers Handleiding voor meer informatie.
Als u correcties of aanvullende informatie heeft voor deze pagina alsjeblieft Email mij.