Forholdet mellem cache-linje og hukommelsesside

  1. Hvis jeg er korrekt, er en side i hovedhukommelsen den mindste enhed til overførsel af data mellem hovedhukommelsen og en ekstern lagerenhed, såsom en harddisk. En cache-linje i en hovedhukommelse er den mindste enhed til overførsel af data mellem hovedhukommelsen og cpu-cache.

  2. Jeg spekulerer på, om en sidestørrelse altid eller bedst er en naturligt antal cache linjestørrelse? Hvis en cache-linjestørrelse er 64 byte, og en hukommelsessidestørrelse er 4KB, har hver side 4KB / 64 bytes == 64 cache-linjer i sig.

  3. Er begge sider og en cache-linje faste objekter i en hukommelse? Eller er de bare en sammenhængende blok af en hukommelse af en bestemt størrelse, som kan starte og flyde overalt i hukommelsen?

  4. Er det altid, at en cache-linje ikke kan spænde mere end en side, dvs. en del af en cache-linje er på en side, og den anden del af cache-linjen er på en anden side?

Tak.

Kommentarer

  • Svarene på dine spørgsmål er meget CPU-arkitekturafhængige.

Svar

  1. En cache-linje er den mindste enhed, som du kan røre ved fysisk hukommelse med. Betydning når du læser / skriver 1 byte, læses en fuld cache-linje indeholdende den i cpu-cachen og skrives tilbage. Bemærk, at selv instruktioner, der omgår cachen for at skrive (kortvarige streaminginstruktioner), skriver i cachelinjestørrelser. Afhængigt af CPU er cache-linjestørrelser typisk 32/64/128 bytes. Når hukommelsessider skrives til disken, skrives de hele. Dette vil ske, når hukommelsestrykket er for højt eller i dvaleprocesser (og muligvis til andre anvendelser). De læses også hele, når det er nødvendigt igen. Dette skyldes primært, at kernen ikke har nogen måde at vide, om siden er delvist eller fuldt ud brugt. Andre eksterne lager- / læse- / skrivefunktioner kan have vilkårlig granularitet (f.eks. Fwrite (..)).

  2. Sidestørrelsen er CPU / GPU-afhængig. For de fleste CPUer vil sidestørrelser være mindst 4KB og generelt understøtte en blanding af 4KB / 64KB / 2MB / 4MB / 16MB / 1GB (ikke nødvendigvis alle understøttet på samme tid). Størrelsen vil altid være en styrke på to.

  3. Både en side og en cache-linje er sammenhængende og skal justeres til deres respektive størrelse. En 64 byte cache linje er altid 64 byte justeret og en 2 MB side er altid 2 MB justeret.

  4. På grund af nr. 3 kan en cache linje aldrig spænde over 2 sider, da sidestørrelser vil altid være større end en cache-linje og vil altid være et multiplum af størrelsen på en cache-linje.

Se denne fremragende kilde for et væld af oplysninger om hukommelse: http://lwn.net/Articles/250967/

Kommentarer

  • Er dette svar stadig relevant i 2020? Er disse størrelser ændret?
  • Så vidt jeg ved, forbliver disse værdier relevante i dag. Alle moderne x86- og x64-CPUer bruger 64 byte pr. Cache-linje, og 4KB forbliver den mest almindelige sidestørrelse under Windows og Linux. For indlejrede enheder, se din interne manual til processoren for detaljer om, hvad der understøttes.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *