Caching je termín používaný v informatike. Myšlienka cache (vyslovuje sa "cash" /ˈkæʃ/ KASH)) je veľmi jednoduchá: získanie výsledku niektorých operácií alebo prístup k údajom môže byť časovo náročné alebo nákladné, preto sa často oplatí výsledok uložiť a znova ho použiť. Typicky sa pracuje so dvoma druhmi pamäťových médií: jedno je veľké, ale pomalé (napríklad pevný disk alebo diaľkový server), druhé je malé, ale rýchle (napríklad procesorová vyrovnávacia pamäť alebo operačná pamäť). Základným princípom je mať kópiu často používaných údajov v rýchlom médiu, aby sa znížil priemerný čas prístupu a zlepšil výkon systému.
Čo je vyrovnávacia pamäť (cache)
Vyrovnávacia pamäť je dočasné úložisko obsahujúce kópie údajov, ktoré sa často používajú. Ak sa požadované údaje nachádzajú v cache (tzv. cache hit), systém ich získa rýchlejšie než pri opätovnom načítaní alebo prepočítaní z pôvodného zdroja (tzv. cache miss). Ukladanie nových položiek do cache obvykle vyžaduje nahradenie niektorej existujúcej položky podľa určitej stratégie.
Cache vs. buffer (vyrovnávací priestor)
Cache a buffer (vyrovnávací priestor) sú príbuzné pojmy, no líšia sa účelom a tým, ako o nich vie klient:
- Cache spravidla obsahuje kópie už existujúcich údajov s cieľom zrýchliť opakovaný prístup; často je transparentná — klient nemusí vedieť, že cache existuje (napr. CPU cache alebo disk cache v OS).
- Buffer je dočasné miesto pre údaje počas prenosu alebo transformácie (napr. I/O buffer); často ho klient aktívne používa alebo spravuje aplikácia.
Lokalita referencie
Typické aplikácie pristupujú k údajom blokovo a pristup často nasleduje určité vzory. Dva hlavné druhy lokality referencie sú:
- Temporálna lokalita — ak sa k určitému bloku prístupuje, je pravdepodobné, že sa k nemu bude pristupovať znova v blízkej budúcnosti.
- Priestorová (spaciálna) lokalita — ak sa pristupuje k určitému bloku, je pravdepodobné, že sa v krátkom čase pristúpi aj k susedným blokom.
Tieto vlastnosti sú dôvodom, prečo cache fungujú dobre v mnohých oblastiach výpočtovej techniky.
Metriky výkonu cache
- Hit rate — podiel požiadaviek, ktoré skončia v cache (vyšší je lepší).
- Miss rate — doplnok hit rate (1 − hit rate).
- Latencia (čas prístupu) — doba potrebná na servis požiadavky pri hite a pri mise.
- Throughput — počet obslúžených požiadaviek za jednotku času.
Stratégie nahradzovania (eviction)
Keď je cache plná, musí sa rozhodnúť, ktorú položku nahradiť. Bežné stratégie sú:
- LRU (Least Recently Used) — nahradí sa položka, ktorá bola najdlhšie nepoužitá.
- FIFO (First-In, First-Out) — nahradí sa najstaršia vložená položka.
- LFU (Least Frequently Used) — nahradí sa položka s najnižšou frekvenciou prístupov.
- Random — náhodné nahradenie, jednoduché na implementáciu.
- Adaptive a hybridné — kombinujú viacero princípov (napr. CLOCK, ARC).
Organizácia cache (zapojenie)
Dôležitou charakteristikou cache, najmä v CPU a pamäťových systémoch, je asociativita:
- Direct-mapped — každý blok pamäte má presne jednu pozíciu v cache (rýchle, ale môže viesť k častým konfliktom).
- Set-associative — pamäťové bloky sú mapované do menších sád; v každej sade môže byť viacero vložených položiek (vyvážený kompromis medzi výkonom a zložitosťou).
- Fully associative — blok môže byť uložený kdekoľvek v cache (najflexibilnejšie, ale náročnejšie na vyhľadávanie).
Zápisové politiky
Pri zmene údajov existujú dve základné stratégie zápisu do cache:
- Write-through — pri zápise sa údaje zapíšu súčasne do cache i do hlavného úložiska (jednoduché, konzistentné, ale môže byť pomalšie).
- Write-back — zápis mení len kópiu v cache a spätné zapísanie do pomalého úložiska sa vykoná neskôr pri evikcii (efektívnejšie, ale vyžaduje sledovanie „dirty“ bitov a riešenie konzistencie).
Typy cache a príklady použitia
- CPU cache (L1, L2, L3) — malé, veľmi rýchle úrovne cache v procesore, navrhnuté na znižovanie latencie prístupu k inštrukciám a dátam.
- Disková a OS cache — cache v operačnom systéme alebo disku na zrýchlenie prístupu k súborom.
- Webový a proxy cache — ukladanie odpovedí HTTP, znižujú sieťovú záťaž a latenciu.
- CDN (Content Delivery Network) — distribuované cache blízko používateľov pre statický obsah (obrázky, videá).
- Databázové cache — ukladanie výsledkov dotazov, často používané v kombinácii s in-memory kešovaním (napr. Redis, Memcached).
- Príklad v prehliadači — browser cache ukladá obrázky, CSS a JS súbory, aby sa pri ďalších návštevách stránky nemusia znova sťahovať.
Konzistencia, invalidácia a problémy
Cache prinášajú aj výzvy:
- Stále (stale) údaje — kópia v cache môže byť zastaraná, preto treba mechanizmy invalidácie alebo časového vypršania (TTL).
- Cache coherence — v multiprocesorových systémoch a rozložených systémoch je potrebné zabezpečiť, aby viac kópií údaja zostalo konzistentných.
- Cache thrashing — pri nevhodnej veľkosti alebo stratégie sa môže stať, že položky budú často nahrádzané, čím sa zníži efektivita cache.
- Cache invalidation — problém správneho zmazania alebo aktualizácie položiek je často zložitejší než samotné kešovanie („cache invalidation is one of the two hard things in computer science…“).
Rozhodovanie o veľkosti a návrhu cache
Vyrovnávacie pamäte sú zvyčajne oveľa menšie než celý objem údajov, ktorý zastupujú. Väčšia cache zvyšuje pravdepodobnosť hitu, ale môže mať dlhší čas vyhľadávania, vyššie náklady a zložitejšiu správu. Pri návrhu sa teda vyvažuje kapacita, rýchlosť, asociativita a náklady (energie, cena, miesto v čipe).
Tipy pre používanie cache v aplikáciách
- Zvoľte vhodnú stratégiu nahradzovania podľa vzorov prístupov (LRU je často dobrý východiskový bod).
- Určite jasné pravidlá invalidácie alebo TTL pre dynamické údaje.
- Merajte hit rate a latenciu — len meranie ukáže skutočný prínos cache.
- Pri rozložených systémoch zvážte konzistenciu a náklady na synchronizáciu medzi cache uzlami.
- Dbajte na bezpečnosť a citlivé údaje — nie všetky údaje sú vhodné na ukladanie do cache.
Vyrovnávacie pamäte sú kľúčovým nástrojom na zlepšenie výkonu v mnohých oblastiach výpočtovej techniky. Správne navrhnuté a konfigurované dokážu výrazne znížiť latenciu a zvýšiť priepustnosť systémov, no zároveň vyžadujú starostlivé riešenie otázok konzistencie a správy životnosti údajov.

