Forholdet mellom cache-linje og minneside

  1. Hvis jeg er riktig, er en side i hovedminnet den minste enheten for overføring av data mellom hovedminnet og en ekstern lagringsenhet, for eksempel en harddisk. En cache-linje i hovedminnet er den minste enheten for overføring av data mellom hovedminnet og cpu-cachene.

  2. Jeg lurer på om en sidestørrelse alltid eller best er å være en naturlig antall cache linjestørrelse? Hvis en cache-linjestørrelse er 64 byte, og en minnesidestørrelse er 4KB, har hver side 4KB / 64 byte == 64 cache-linjer.

  3. Er en side og en cache-linje begge faste objekter i et minne? Eller er de bare en sammenhengende blokk av et minne av en viss størrelse, som kan starte og flyte hvor som helst i minnet?

  4. Er det alltid en cache-linje ikke kan spenne mer enn en side, dvs. en del av en hurtiglinjelinje er på en side og den andre delen av hurtiglinjelinjen er på en annen side?

Takk.

Kommentarer

  • Svarene på spørsmålene dine er svært avhengig av CPU-arkitektur.

Svar

  1. En cache-linje er den minste enheten du kan ta på fysisk minne med. Betydning når du leser / skriver 1 byte, blir en full cache-linje som inneholder den lest inn i cpu-cachen og skrevet tilbake. Merk at til og med instruksjoner som omgår hurtigbufferen for å skrive (kortvarige streaminginstruksjoner) skriver i hurtigstørrelseslinjestørrelser. Avhengig av CPU er størrelsen på hurtigbufferlinjen vanligvis 32/64/128 byte. Når minnesider skrives til disk, skrives de i sin helhet. Dette vil skje når minnetrykket er for høyt eller i dvalemodus (og muligens til annen bruk). De vil også bli lest hele når det trengs igjen. Dette er hovedsakelig fordi kjernen ikke har noen måte å vite om siden er delvis eller fullstendig brukt. Andre lese- / skriveoperasjoner for ekstern lagring kan ha vilkårlig granularitet (f.eks. Fwrite (..)).

  2. Sidestørrelsen er avhengig av CPU / GPU. For de fleste CPUer vil sidestørrelser være minst 4KB og generelt støtte en blanding av 4KB / 64KB / 2MB / 4MB / 16MB / 1GB (ikke nødvendigvis alle støttet samtidig). Størrelsen vil alltid være en kraft på to.

  3. Både en side og en cache-linje er sammenhengende og krever at de justeres til deres respektive størrelse. En 64 byte hurtigbufferlinje er alltid 64 bytejustert og en 2 MB-side er alltid 2 MB justert.

  4. På grunn av # 3 kan en cache-linje aldri spenne over 2 sider siden sidestørrelser alltid være større enn en cache-linje og vil alltid være et multiplum av størrelsen på en cache-linje.

Se denne utmerkede kilden for et vell av informasjon om minne: http://lwn.net/Articles/250967/

Kommentarer

  • Er dette svaret fremdeles relevant i 2020? Har disse størrelsene endret seg?
  • Så vidt jeg vet er disse verdiene fortsatt relevante i dag. Alle moderne x86- og x64-prosessorer bruker 64 byte per cache-linje, og 4KB er fortsatt den vanligste sidestørrelsen under Windows og Linux. For innebygde enheter, se prosessorens interne manual for detaljer om hva som støttes.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *