Relatie tussen cache-regel en geheugenpagina

  1. Als ik gelijk heb, is een pagina in een hoofdgeheugen de kleinste eenheid voor gegevensoverdracht tussen het hoofdgeheugen en een extern opslagapparaat, zoals een harde schijf. Een cacheregel van een hoofdgeheugen is de kleinste eenheid voor gegevensoverdracht tussen het hoofdgeheugen en de cpu-caches.

  2. Ik vraag me af of een paginaformaat altijd of het beste is om een natuurlijk aantal cacheregelgrootte? Als de grootte van een cacheregel 64 bytes is en de grootte van een geheugenpagina 4 KB, dan bevat elke pagina 4 KB / 64 bytes == 64 cacheregels.

  3. Zijn een pagina en een cacheregel beide vaste objecten in een geheugen? Of zijn ze gewoon een aaneengesloten blok van een geheugen van een bepaalde grootte, dat overal in het geheugen kan starten en zweven?

  4. Is het altijd zo dat een cacheregel niet meer dan één pagina, dwz een deel van een cacheregel bevindt zich op een pagina en het andere deel van de cacheregel bevindt zich op een andere pagina?

Bedankt.

Opmerkingen

  • De antwoorden op uw vragen zijn sterk afhankelijk van de CPU-architectuur.

Antwoord

  1. Een cache-regel is de kleinste eenheid waarmee u fysiek geheugen kunt aanraken. Dit betekent dat wanneer u 1 byte leest / schrijft, een volledige cacheregel die deze bevat, wordt ingelezen in de cpu-cache en teruggeschreven. Merk op dat zelfs instructies die de cache omzeilen om te schrijven (kortstondige streaminginstructies) schrijven in cacheregelgroottes. Afhankelijk van de CPU zijn de cacheregelgroottes doorgaans 32/64/128 bytes. Wanneer geheugenpaginas naar schijf worden geschreven, worden ze in hun geheel geschreven. Dit zal gebeuren wanneer de geheugendruk te hoog is of tijdens winterslaapprocessen (en mogelijk voor ander gebruik). Ze zullen ook in hun geheel worden gelezen als ze opnieuw nodig zijn. Dit komt voornamelijk doordat de kernel niet kan weten of de pagina gedeeltelijk of volledig wordt gebruikt. Andere lees- / schrijfbewerkingen voor externe opslag kunnen een willekeurige granulariteit hebben (bijvoorbeeld: fwrite (..)).

  2. De paginagrootte is afhankelijk van de CPU / GPU. Voor de meeste CPUs zijn de paginaformaten ten minste 4KB en ondersteunen over het algemeen een combinatie van 4KB / 64KB / 2MB / 4MB / 16MB / 1GB (niet noodzakelijkerwijs allemaal tegelijkertijd ondersteund). De grootte zal altijd een macht van twee zijn.

  3. Zowel een pagina als een cache-regel zijn aaneengesloten en moeten worden uitgelijnd met hun respectievelijke grootte. Een cacheregel van 64 bytes is altijd 64 byte uitgelijnd en een pagina van 2 MB is altijd 2 MB uitgelijnd.

  4. Vanwege punt 3 kan een cacheregel nooit 2 paginas beslaan, aangezien paginaformaten altijd groter zijn dan een cacheregel en zal altijd een veelvoud zijn van de grootte van een cacheregel.

Zie deze uitstekende bron voor een schat aan informatie over geheugen: http://lwn.net/Articles/250967/

Reacties

  • Is dit antwoord nog steeds relevant in 2020? Zijn deze formaten veranderd?
  • Voor zover ik weet, blijven die waarden vandaag relevant. Alle moderne x86- en x64-CPUs gebruiken 64 bytes per cacheregel en 4KB blijft de meest voorkomende paginagrootte onder Windows en Linux. Raadpleeg voor embedded apparaten de interne handleiding van uw processor voor details over wat wordt ondersteund.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *