CPU Cache Afhandeling

### 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

#### Cache management in WHDLoad

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.