-
Om jag stämmer är en sida i huvudminnet den minsta enheten för överföring av data mellan huvudminnet och en extern lagringsenhet, till exempel en hårddisk. En cachelinje i ett huvudminne är den minsta enheten för överföring av data mellan huvudminnet och cpu-cacherna.
-
Jag undrar om en sidstorlek alltid eller bäst är att vara en naturligt antal cachelinjer? Om en cache-radstorlek är 64 byte och en minnessidesstorlek är 4KB, har varje sida 4KB / 64 byte == 64 cachelinjer.
-
Är en sida och en cachelinje båda fasta objekt i ett minne? Eller är det bara ett sammanhängande block av ett minne av en viss storlek som kan börja och flyta var som helst i minnet?
-
Är det alltid att en cachelinje inte kan spänna mer än en sida, dvs en del av en cache-rad finns på en sida och den andra delen av cache-raden på en annan sida?
Tack.
Kommentarer
- Svaren på dina frågor är mycket CPU-arkitekturberoende.
Svar
-
En cachelinje är den minsta enhet som du kan röra vid fysiskt minne med. Betydelse när du läser / skriver 1 byte läses en fullständig cache-rad som innehåller den in i cpu-cachen och skrivs tillbaka. Observera att även instruktioner som kringgår cacheminnet för att skriva (kortvariga streaminginstruktioner) skriver i cachelinjestorlekar. Beroende på CPU är cache-radstorlekar vanligtvis 32/64/128 byte. När minnessidor skrivs till disk skrivs de i sin helhet. Detta kommer att hända när minnetrycket är för högt eller i viloläge (och eventuellt för andra användningsområden). De kommer också att läsas hela när det behövs igen. Detta beror främst på att kärnan inte kan veta om sidan används helt eller delvis. Andra läs- / skrivfunktioner för extern lagring kan ha godtycklig granularitet (t.ex. fwrite (..)).
-
Sidstorleken är CPU / GPU-beroende. För de flesta processorer kommer sidstorlekarna att vara minst 4KB och i allmänhet stödja en blandning av 4KB / 64KB / 2MB / 4MB / 16MB / 1GB (inte nödvändigtvis alla stödda samtidigt). Storleken kommer alltid att vara två.
-
Både en sida och en cachelinje är angränsande och måste anpassas till respektive storlek. En 64 byte cache-linje är alltid 64 byte-inriktad och en 2 MB-sida är alltid 2 MB inriktad.
-
På grund av # 3 kan en cache-rad aldrig spänna över 2 sidor eftersom sidstorlekar kommer att vara alltid större än en cachelinje och kommer alltid att vara en multipel av storleken på en cachelinje.
Se den här utmärkta källan för en mängd information om minne: http://lwn.net/Articles/250967/
Kommentarer
- Är detta svar fortfarande relevant 2020? Har dessa storlekar förändrats?
- Så vitt jag vet är dessa värden fortfarande relevanta idag. Alla moderna x86- och x64-processorer använder 64 byte per cachelinje och 4KB är fortfarande den vanligaste sidstorleken under Windows och Linux. För inbäddade enheter, se handboken för processorns interna enheter för information om vad som stöds.