Cache – definition, funktion och typer av cacheminne

Lär dig vad cache och cacheminne är, hur det fungerar, vilka typer som finns och smarta ersättningsstrategier — en snabb, praktisk guide för utvecklare och IT‑intresserade.

Författare: Leandro Alegsa

Caching är ett begrepp inom datavetenskap som beskriver att man sparar kopior av ofta använda data för att snabba upp åtkomst eller undvika dyra beräkningar. En cache (uttalas "cash" /ˈkæʃ/ KASH) fungerar genom att hålla en liten, snabbt åtkomlig uppsättning kopior av data från ett större, långsammare lagringsmedium. När data efterfrågas kontrolleras först cachen: om kopian finns där (en cache‑hit) kan den användas omedelbart; om inte (en cache‑miss) måste originaldata hämtas eller beräknas, vilket tar längre tid. Att cacha minskar i genomsnitt svarstiden och belastningen på långsammare resurser.

Varför caching fungerar

Två viktiga principer gör caching effektivt:

  • Referenslokalitet — program tenderar att få åtkomst till data som ligger nära varandra i tid eller i adressrymd. Detta kallas också referenslokalitet och delas ofta upp i temporär lokalitet (samma data används flera gånger under kort tid) och rumslig lokalitet (data nära varandra används tillsammans).
  • Skillnad i åtkomsttid — det är vanligt att ett stort lagringsmedium (t.ex. hårddisk, nätverk eller komplicerade beräkningar) är betydligt långsammare än en mindre, snabbare mellanlagring. Genom att hålla de mest använda objekten i den snabba cachen sparas tid.

Olika typer av cacheminne

Det finns många former av cache beroende på var i systemet den används:

  • CPU‑cache — flera nivåer (L1, L2, L3) nära processorkärnan för att snabba upp instruktioner och dataåtkomst.
  • Disk‑ eller filcache — operativsystemets minne som håller nyligen lästa eller skrivna filblock för att minska I/O‑åtkomst till hårddisk eller SSD.
  • Webbläsarcache — sparar webbresurser (HTML, bilder, script) lokalt för snabbare laddning av tidigare besökta sidor.
  • CDN‑cache (Content Delivery Network) — distribuerade servrar som cacher webbinnehåll nära användarna.
  • Applikationscache — inbyggda eller externa cachelager (t.ex. Redis, Memcached) för att lagra resultat av dyra databasanrop eller beräkningar.

Cacheorganisation och prestandafaktorer

För prestanda och kostnad finns flera dimensioner att överväga:

  • Storlek — större cache rymmer fler objekt men är ofta dyrare och kan ge något längre åtkomsttid.
  • Associativitet — hur cacheposter placeras (direktmappad, set‑associativ, fullt associativ) påverkar sannolikheten för konflikt och prestanda.
  • Evictionsstrategier — när cachen är full måste äldre objekt ersättas. Vanliga strategier är:
    • LRU (Least Recently Used) — ersätt det objekt som inte använts längst.
    • LFU (Least Frequently Used) — ersätt det objekt som använts minst ofta.
    • FIFO (First In, First Out) — ersätt det äldsta objektet.
    • Random — ersätt ett slumpmässigt valt objekt (enkelt och ibland effektivt).
  • Skrivpolicy — vid skrivningar mot cachad data finns två vanliga strategier:
    • Write‑through — skriv alltid både i cachen och i det långsammare lagret; enklare att hålla konsekvens men kan vara långsammare.
    • Write‑back (write‑behind) — skriv först i cachen och uppdatera det långsammare lagret senare; snabbare men kräver mekanismer för att hantera förlorade uppdateringar eller krascher.
  • TTL och invalidation — vissa cacheobjekt får en tidsgräns (Time To Live) eller måste bli invaliderade när originaldata ändras, för att undvika föråldrade kopior.

Cache vs buffert

En buffert är nära besläktad med en cache men skiljer sig i synliga avsikter: klienten som använder en buffert vet vanligtvis att data ligger i en buffert (t.ex. en I/O‑buffert för att jämna ut överföringshastigheter). I en cache behöver klienten inte vara medveten om cachens existens — cachen fungerar transparent för att snabba upp åtkomst eller beräkningar.

Begränsningar och utmaningar

  • Konsistens — att hålla cachad data synkroniserad med originalet kan vara komplext, särskilt i distribuerade system.
  • Köldstart (warm‑up) — en ny cache är tom och ger initialt inga fördelar tills den fyllts med användbara objekt.
  • Felhantering — vid systemkrasch eller nätverksproblem måste eventuella skrivningar i write‑back‑cache hanteras för att undvika dataförlust.
  • Felaktiga antaganden om lokalitet — om arbetsbelastningen inte uppvisar temporal eller rumslig lokalitet fungerar cachen dåligt och kan till och med förvärra prestanda.

Praktiska exempel

  • En webbläsare sparar foton och script så att återbesök på en webbsida blir snabba.
  • Processorns L1‑cache håller instruktioner och data som används frekvent för att undvika att vänta på minnet.
  • Ett ramverk kan cacha resultat av en databasfråga i minnet (t.ex. Redis) för att minska antalet dyra frågor.

Sammanfattningsvis är en cache ett tillfälligt lagringsområde som sparar ofta använda data i en snabbare (men normalt mindre) minnesenhet. Genom att utnyttja referenslokalitet och välja lämpliga strategier för ersättning och skrivning kan man avsevärt förbättra systemets responsivitet och minska belastningen på långsammare resurser.

Hur cacheminnen fungerar

En cache är ett minnesblock för lagring av data som sannolikt kommer att användas igen. Processorn och hårddisken använder ofta en cache, liksom webbläsare och webbservrar.

En cache består av många poster som kallas för en pool. Varje post innehåller ett datum (en bit data) som är en kopia av ett datum på ett annat ställe. Cacher använder vanligtvis en så kallad backing store. Backing stores är långsamma eller dyra att komma åt jämfört med cacheminnet. En diskcache använder till exempel en hårddisk som backing store. Varje post har också en liten information bifogad, en så kallad tagg. Denna tagg används för att hitta den plats där den ursprungliga datan är lagrad.

Caches för läsning

Om en klient (en CPU, en webbläsare eller ett operativsystem) vill komma åt en datamängd som den tror finns i cacheminnet, kontrollerar den först om datamängden finns i cacheminnet. Om datan kan hittas i cacheminnet kan klienten använda den och behöver inte använda huvudminnet. Detta kallas för en cacheträff. Ett webbläsarprogram kan till exempel kontrollera sin lokala cache på disken för att se om det finns en lokal kopia av innehållet i en webbsida på en viss URL. I det här exemplet är URL:en taggen och webbsidans innehåll datumet.

En annan situation som kan inträffa är att datumet med märkningen inte kan hittas i cachen. Detta kallas cache miss. Datumet måste hämtas från det stödjande lagret. Vanligtvis kopieras det till cacheminnet, så att det inte längre behöver hämtas från backing store nästa gång.

Cachen har bara en begränsad storlek. För att göra plats för den tidigare ej cachelagda posten kan en annan cachelagd post behöva tas bort från cachen. Särskilda regler används för att hitta den post som bäst bör tas bort. Dessa regler brukar kallas heuristik. Heuristik som används för att hitta posten kallas ersättningspolicy. En mycket enkel regel som används kallas Least recently used (LRU). Den tar helt enkelt den post som användes för längst tid sedan. Andra heuristiker finns förtecknade på cache-algoritmen...

Caches för skrivning

Cacher kan också användas för att skriva data. Fördelen med detta är att klienten kan fortsätta sin operation när posten har skrivits till cacheminnet; den behöver inte vänta tills posten har skrivits till backing store.

Men posten måste skrivas till backing-lagret vid någon tidpunkt. Tidpunkten för när detta sker styrs av skrivpolicyn.

I en skriv-cache skrivs varje post till backing store omedelbart, samtidigt som den lagras i cacheminnet.

Det andra alternativet är att endast skriva till cacheminnet och skriva till backing store senare. Detta kallas write-back (eller write-behind) cache. Cachen markerar de poster som ännu inte har skrivits till backing store; den markering som används kallas ofta dirty flag. Innan posterna raderas från cacheminnet skrivs de till backing store. Detta kallas lazy write. En miss i en write-back-cache (som kräver att ett block ersätts av ett annat) kräver ofta två minnesåtkomster: en för att hämta det nödvändiga datumet och en annan för att skriva ersatta data från cacheminnet till lagret.

Cachelagringspolicyn kan också ange att ett visst datum måste skrivas till cacheminnet. Klienten kan ha gjort många ändringar i datumet i cacheminnet. När den är klar kan den uttryckligen säga till cacheminnet att skriva tillbaka datumet.

No-write-allokering är en cachepolicy där endast läsning lagras i cacheminnet. På så sätt undviker man behovet av caching med skrivning tillbaka eller genomskrivning. Skrivningar görs hela tiden till backing store.

Klienten är inte det program som ändrar data i backup-lagret. Om data ändras i backup-lagret kommer kopian i cacheminnet att vara inaktuell eller inaktuell. Om klienten uppdaterar data i cacheminnet kommer kopior av dessa data i andra cacheminnen att bli inaktuella. Det finns särskilda kommunikationsprotokoll som gör det möjligt för cachehanterare att prata med varandra för att hålla uppgifterna meningsfulla. Dessa är kända som koherensprotokoll.

Diagram över en CPU-memory cacheZoom
Diagram över en CPU-memory cache

Val av den post som ska ersättas

En cache är liten och den är full eller nästan full för det mesta. När ett nytt värde läggs till måste ett gammalt värde tas bort. Det finns olika sätt att göra detta urval:

  • Först in först ut: Det är bara att ersätta den post som lades till i cachen för längst tid sedan.
  • Senast använda: Denna idé liknar FIFO-principen ovan, men när en post används uppdateras dess tidsstämpel/ålder.
  • Minst frekvent använt: Istället för att använda en tidsstämpel används en räknare som ökas varje gång en post används.
  • Välj ett slumpmässigt bidrag

Historia

Ordet cache användes för första gången inom datateknik 1967, när en vetenskaplig artikel förbereddes för att publiceras i IBM Systems Journal. Artikeln handlade om en ny förbättring av minnet i Model 85. Model 85 var en dator i IBM System/360-produktlinjen. Tidskriftens redaktör ville ha ett bättre ord för höghastighetsbuffert, som användes i artikeln. Han fick inga förslag och föreslog cache, från franskans cacher, som betyder "gömma". Artikeln publicerades i början av 1968 och författarna hedrades av IBM. Deras arbete välkomnades allmänt och förbättrades. Cache blev snart standardanvändning i datalitteraturen.

Var cacheminnen används

CPU-caches

Små minnen på eller nära CPU-chipet kan göras snabbare än det mycket större huvudminnet. De flesta CPU:er sedan 1980-talet har använt en eller flera cacheminnen. Moderna allmännyttiga CPU:er i persondatorer kan ha så många som ett halvt dussin. Varje cacheminne kan vara specialiserat på en annan del av uppgiften att utföra program.

Disk caches

CPU-caches hanteras i allmänhet helt och hållet av hårdvara, medan andra caches hanteras av olika typer av programvara. Operativsystemet hanterar vanligtvis en sidcache i huvudminnet. Användare utanför datavetenskap brukar kalla denna cache för virtuellt minne. Den hanteras av operativsystemets kärna.

Moderna hårddiskar har diskbuffertar. Dessa kallas ibland för "diskcache", men det är fel. Buffertarnas huvudfunktion är att ordna skrivningar på disken och hantera läsningar. Upprepade cacheträffar är sällsynta, eftersom bufferten är mycket liten i förhållande till hårddiskens storlek.

Lokala hårddiskar är snabba jämfört med andra lagringsenheter, t.ex. fjärrservrar, lokala bandstationer eller optiska jukeboxar. Att använda lokala hårddiskar som cacheminnen är huvudkonceptet för hierarkisk lagringshantering.

Webbkakor

Webbläsare och webbproxyservrar använder cacheminnen för att lagra tidigare svar från webbservrar, t.ex. webbsidor. Webbcacher minskar mängden information som behöver överföras via nätverket. Information som tidigare lagrats i cacheminnet kan ofta återanvändas. Detta minskar bandbredden och behandlingskraven för webbservern och bidrar till att förbättra responsen för webbanvändarna.

Moderna webbläsare använder en inbyggd webbcache, men vissa internetleverantörer eller organisationer använder också en proxyserver för caching. Detta är en webbcache som delas mellan alla användare i nätverket.

Sökmotorerna gör också ofta webbsidor som de har indexerat tillgängliga från sin cache. Google tillhandahåller till exempel en länk "Cached" bredvid varje sökresultat. Detta är användbart när webbsidor är tillfälligt otillgängliga från en webbserver.

Cachelagring med opålitliga nätverk

Write-through-operation är vanligt i opålitliga nätverk (t.ex. Ethernet LAN). Protokollet som används för att se till att data i skrivcachen är meningsfulla när flera skrivcacher används är mycket komplicerat i ett sådant fall.

Till exempel är cacher för webbsidor och cacher för nätverksfilsystem på klientsidan (som i NFS eller SMB) vanligtvis skrivskyddade eller skrivskyddade för att hålla nätverksprotokollet enkelt och tillförlitligt.

Skillnaden mellan buffert och cache

Buffert och cache utesluter inte varandra, utan används ofta tillsammans. Anledningen till att de används är dock olika. En buffert är en plats i minnet som traditionellt används eftersom CPU-instruktioner inte direkt kan adressera data som lagras i perifera enheter. Datorminnet används som ett mellanlager.

Dessutom kan en sådan buffert vara användbar när ett stort datablock sätts samman eller tas isär (vilket krävs av en lagringsenhet), eller när data kan levereras i en annan ordning än den i vilken de produceras. En hel buffert med data överförs också vanligtvis sekventiellt (t.ex. till hårddisk), så att buffringen i sig själv ibland ökar överföringsprestandan. Dessa fördelar finns även om de buffrade uppgifterna skrivs till bufferten en gång och läses från bufferten en gång.

En cache ökar också överföringsförmågan. En del av ökningen kommer också från möjligheten att flera små överföringar kombineras till ett stort block. Men den huvudsakliga prestandaförbättringen beror på att det finns en god chans att samma data kommer att läsas från cacheminnet flera gånger, eller att skrivna data snart kommer att läsas. Caches enda syfte är att minska åtkomsten till den underliggande långsammare lagringen. Cache är också vanligtvis ett abstraktionslager som är utformat för att vara osynligt ur angränsande lagers perspektiv. På så sätt kan det hända att programmen eller klienterna inte är medvetna om att det finns en cache.

Frågor och svar

F: Vad är caching?


S: Caching är en term som används inom datavetenskapen och som syftar till att lagra kopior av data som används ofta för att få tillgång till dem snabbare än att hämta eller beräkna originaldata på nytt.

F: Hur fungerar caching?


S: Cachelagring fungerar genom att man använder två typer av lagringsmedier, ett som vanligtvis är ganska stort men långsamt att komma åt, och ett annat som man kan komma åt mycket snabbare men som i allmänhet är mindre. Tanken bakom caching är att använda det snabba mediet för att lagra kopior av data så att det tar mindre tid eller är billigare att komma åt originaldata.

F: Vad är en buffert?


S: En buffert liknar en cache i det avseendet att den lagrar kopior av data för snabbare åtkomst, men med en buffert vet den klient som får tillgång till data att det finns en buffert och att den hanteras av ett program, medan klienterna med en cache inte behöver vara medvetna om att det finns en cache.

F: Vad betyder referenslokalitet?


S: Referenslokalitet innebär att när ett program får tillgång till vissa block av strukturerade data är det troligt att det också får tillgång till andra block i närheten av de block som ursprungligen användes. Detta bidrar till att cacheminnen fungerar bra eftersom de vanligtvis är små jämfört med alla tillgängliga data.

F: Varför tar det längre tid för större cacheminnen att söka upp poster?


S: Större cacheminnen tar längre tid eftersom de innehåller mer lagrad information och därför kräver mer tid för sökning. De är också dyrare eftersom de kräver mer resurser för lagring.

Fråga: Hur kan lokalitet bidra till att cacheminnen fungerar bättre?


S: Lokalitet bidrar till att cacheminnen fungerar bättre eftersom när programmen får tillgång till vissa block av strukturerade data kommer de sannolikt också att behöva andra block i närheten, som då snabbt kan hämtas från cacheminnet i stället för att behöva hämta dem från annat håll eller beräkna dem på nytt.


Sök
AlegsaOnline.com - 2020 / 2025 - License CC3