L1- versus L2- versus L3-cache: capaciteit, latentie en delen

L1-, L2- en L3-cache vormen een meertrapscache, gerangschikt naar afstand tot de CPU-core: hoe dichterbij, hoe kleiner en sneller; hoe verder weg, hoe groter en trager. In typische pc- en server-CPU's is L1 enkele tientallen KB met enkele cycli, L2 enkele honderden KB tot enkele MB met tien tot twintig cycli en L3 enkele MB tot enkele tientallen MB met enkele tientallen cycli. L1 en L2 zijn meestal per core aanwezig, L3 wordt door meerdere cores gedeeld. Een toegang tot het DRAM-hoofdgeheugen kost honderden cycli, dus deze hiërarchie moet zoveel mogelijk toegangen opvangen.

KenmerkL1-cacheL2-cacheL3-cache
Relatie met de coreEigen per coreMeestal eigen per core. Sommige ontwerpen delen hem tussen enkele coresGedeeld door meerdere cores (de hele chip of een cluster van cores)
Capaciteit (typisch bereik voor pc- en server-CPU's)Ongeveer 32 tot 64 KB, elk voor instructies en voor dataOngeveer 256 KB tot enkele MB per coreEnkele MB tot enkele tientallen MB voor de hele chip
Latentie (typisch bereik)Ongeveer 3 tot 5 cycliOngeveer 10 tot 20 cycliOngeveer 30 tot 70 cycli. Langer voor delen verder van de core
Instructies en dataGescheiden (I-cache en D-cache)Gezamenlijk (unified cache)Gezamenlijk (unified cache)
OntwerpprioriteitKorte hittijd. Wordt elke cyclus in de pipeline gebruiktMissers van L1 opvangen en de miss penalty klein houdenToegangen tot het hoofdgeheugen beperken en data tussen cores delen
Bestemming bij een misserL2L3Hoofdgeheugen (DRAM)
AdresseringVaak virtueel geïndexeerd, fysiek getagd (VIPT)Fysieke adressenFysieke adressen
InclusiviteitHoogste niveau. Of de inhoud in lagere niveaus zit, hangt af van het beleid van die niveausAfhankelijk van het ontwerp, bijvoorbeeld inclusief of niet-inclusiefEen inclusieve L3 maakt het gemakkelijker om coherentiecontroles te beperken. Er bestaan ook exclusieve ontwerpen zonder duplicaten en niet-inclusieve ontwerpen
Fysieke plaatsIn de core, vlak naast de uitvoeringseenhedenNet buiten de core, als onderdeel van de core geplaatstVaak verdeeld in slices per core, verbonden via een ring- of meshnetwerk
LijngrootteMeestal 64 bytesMeestal 64 bytesMeestal 64 bytes

De getalswaarden zijn typische ordegroottes en variëren per procesgeneratie en product.

Wanneer welke variant?

L1-cache
De dichtstbijzijnde cache, gebruikt bij elke instructiefetch en elke load en store. Hij werkt het best als veelgebruikte data in een klein gebied wordt samengebracht en de temporele lokaliteit hoog is.
L2-cache
Vangt werkdata op die niet in L1 past. Technieken zoals loop blocking die de werkset beperken tot enkele honderden KB tot enkele MB werken hier goed.
L3-cache
Effectief wanneer meerdere cores data delen of wanneer grote data niet in de caches per core past. Omdat de capaciteit met andere cores wordt gedeeld, hebben gelijktijdig draaiende programma's invloed.

Veelgestelde vragen

Waarom wordt de L1-cache niet groter gemaakt?

Een grotere capaciteit maakt de geheugenarray en de bedrading langer, waardoor de hittijd toeneemt. L1 wordt elke cyclus in de pipeline gebruikt, dus zelfs één cyclus vertraging heeft grote invloed op de prestaties. Daarom wordt L1 beperkt tot enkele tientallen KB en wordt grote capaciteit in L2 en L3 ondergebracht. Bij VIPT wordt de capaciteit bovendien begrensd door de relatie tussen paginagrootte en associativiteit.

Waarom is alleen L1 gesplitst in een instructie- en een datacache?

In een pipeline wordt elke cyclus een instructie opgehaald terwijl een andere instructie data leest of schrijft. Met gescheiden caches kunnen beide toegangen tegelijk plaatsvinden en kan elke cache passend worden ingericht. Vanaf L2 is de toegangsfrequentie lager, dus is een gezamenlijke cache gebruikelijk, waarin de capaciteit flexibel kan worden verdeeld.

Wat is beter: inclusief of exclusief?

Beide hebben voor- en nadelen. Bij inclusief staat de inhoud van hogere niveaus altijd ook in het lagere niveau, zodat verzoeken van andere cores alleen in het lagere niveau kunnen worden beoordeeld, maar door de duplicaten neemt de effectieve capaciteit af. Exclusief heeft geen duplicaten en benut de totale capaciteit goed, maar het verplaatsen van lijnen en het beheer van coherentie worden complexer. De keuze hangt af van het aantal cores en de cachegroottes.

Gelden de capaciteiten en cycli in de tabel voor elke CPU?

Nee, het zijn typische bereiken voor pc- en server-CPU's. Ze variëren met de ontwerpgeneratie, de klokfrequentie, het aantal cores en de chipindeling. Veel microcontrollers voor embedded gebruik hebben geen L2 of L3, terwijl er omgekeerd ook CPU's zijn waarop een cachechip is gestapeld om L3 te vergroten. De werkelijke waarden kunnen worden nagegaan met prestatietellers of programma's die de geheugenlatentie meten.

Test uw begrip

Welke volgorde van het geheugenhiërarchie, van snel naar langzaam toegankelijk, is voor een gewone computer juist?

  1. ASSD → hoofdgeheugen → L2-cache → L1-cache → register
  2. BHoofdgeheugen → register → SSD → L1-cache
  3. CRegister → L1-cache → L2-cache → hoofdgeheugen (DRAM) → SSD
Antwoord en toelichting tonen

Antwoord: C. Register → L1-cache → L2-cache → hoofdgeheugen (DRAM) → SSD

Geheugen dichter bij de CPU is sneller en kleiner; geheugen verder weg is langzamer, groter en goedkoper. Richtwaarden zijn: registers minder dan één klokcyclus, L1 circa 1 ns (tientallen KB), L2 enkele ns (enkele MB), L3 enkele tientallen ns (tientallen MB), DRAM circa 100 ns (tientallen GB) en SSD tientallen tot 100 µs (enkele TB). Door veelgebruikte gegevens in snellere niveaus te plaatsen, wordt een in totaal snel geheugen met grote capaciteit goedkoop gerealiseerd.

Wat is het belangrijkste voordeel van een gesplitste L1-cache met aparte caches voor instructies (I-cache) en data (D-cache)?

  1. AInstructies en data botsen niet wanneer ze op hetzelfde adres staan, zodat de capaciteit verdubbeld lijkt
  2. BHet ophalen van instructies en het lezen en schrijven van data kunnen in dezelfde klokcyclus parallel plaatsvinden
  3. CInstructies worden niet gewijzigd, zodat de D-cache overbodig is
Antwoord en toelichting tonen

Antwoord: B. Het ophalen van instructies en het lezen en schrijven van data kunnen in dezelfde klokcyclus parallel plaatsvinden

In een pipeline wordt elke klokcyclus een instructie opgehaald terwijl een andere instructie data leest of schrijft. Bij een gesplitste L1 kunnen beide toegangen parallel verlopen zonder om de poort van één cache te concurreren, en kan elke cache op zijn eigen eigenschappen worden afgestemd. De capaciteit wordt niet verdubbeld; de totale capaciteit wordt verdeeld. Omdat data altijd moeten kunnen worden gelezen en geschreven, kan de D-cache niet worden gemist. Vanaf L2 worden instructies en data doorgaans gezamenlijk opgeslagen.

Wat is de belangrijkste rol van de L2-cache in een meerniveaucache waarin L2 onder de L1-cache is geplaatst?

  1. AMet een kortere hittijd dan L1 de misses van L1 zelf laten verdwijnen
  2. BGroter en trager dan L1 zijn, maar de misstraf van L1 verkleinen
  3. CAls vervanging van het hoofdgeheugen altijd alle data van het programma bevatten
Antwoord en toelichting tonen

Antwoord: B. Groter en trager dan L1 zijn, maar de misstraf van L1 verkleinen

L1 wordt klein gemaakt om snelheid te behalen, zodat enige misses optreden. L2 is groter dan L1 en heeft een langere hittijd, maar is veel sneller dan het hoofdgeheugen; veel toegangen die in L1 missen worden door L2 opgevangen, waardoor de misstraf van L1 veel kleiner is dan wanneer naar het hoofdgeheugen moet worden gegaan. L2 is niet sneller dan L1 en kan de misses van L1 niet laten verdwijnen. De capaciteit is veel kleiner dan die van het hoofdgeheugen, dus alle data kunnen er niet in staan.

  1. Welke uitspraak over de inclusieve opzet, waarbij een lager cacheniveau (zoals L2) alle inhoud van het hogere niveau (L1) bevat, is juist?
  2. Wat gebeurt er in het algemeen met de hittijd wanneer de capaciteit van de cache wordt vergroot, en welke combinatie met de reden is juist?
  3. De hittijd van de L1-cache is 1 ns, de missratio 5%, de hittijd van de L2-cache 10 ns, de lokale missratio van L2 20% en de toegangstijd van het hoofdgeheugen 100 ns. Wat is de gemiddelde geheugentoegangstijd?

Oefenvragen over Geheugenhiërarchie en prestaties

Belangrijke termen uitgelegd

Cachegeheugen
Snel geheugen met kleine capaciteit dicht bij de CPU. Het bewaart veelgebruikte gegevens en overbrugt het snelheidsverschil met het hoofdgeheugen. Wordt meestal met SRAM gemaakt.
Gemiddelde geheugentoegangstijd (AMAT)
Gemiddelde tijd van één geheugentoegang. Berekend als hittijd + missratio × misstraffe en een basismaat om de prestaties van caches te vergelijken.
Miss penalty
Extra tijd die nodig is om bij een cachemiss data uit het onderliggende niveau op te halen. Wordt bepaald door de toegangstijd van het onderliggende niveau en de overdrachtstijd van de regel.
Cachecoherentie
Mechanisme dat in een multicore-CPU de consistentie bewaart wanneer de caches van meerdere cores data van hetzelfde adres bevatten. Wordt gerealiseerd door bijvoorbeeld verouderde kopieën in andere cores ongeldig te maken zodra een core schrijft.
Temporele lokaliteit
Eigenschap dat gegevens of instructies die één keer zijn benaderd, binnenkort waarschijnlijk opnieuw worden benaderd. Een voorbeeld zijn variabelen die herhaaldelijk in een lus worden gebruikt; een van de redenen waarom caches werken.

Verwante vergelijkingen