Cache

Cache (výslovnost: , počeštěle , též mezipaměť) je v informatice označení pro hardwarovou nebo softwarovou součást počítače, která uchovává data, a tím následující přístup k těmto datům může být rychlejší. Od vyrovnávací paměti (bufferu) se cache liší tím, že může poskytovat data v ní uložená opakovaně (zatímco vyrovnávací pamětí data pouze procházejí). Použití termínu cache a vyrovnávací paměť může být zaměňováno, protože obě funkce mohou splývat.

Cache je tvořena (relativně) rychlou pamětí, která je však dražší. Proto má cache menší velikost než úložný prostor, ke kterému zrychluje přístup. Optimalizací úspěšného využití cache lze dosáhnout vyššího výkonu zařízení (počítače). Hardwarovou cache najdeme v mikroprocesorech nebo pevných discích. Cache může být softwarově vytvořena v operační paměti.

Charakteristika 
Účelem cache je urychlit přístup k (často používaným) datům, která jsou uložena na „pomalých“ úložištích tím, že je (požadovaná) část dat umístěna do rychlejšího úložiště (paměti). Například v současných mikroprocesorech funguje cache automaticky (tzv. hardwarová cache) a urychluje přístupy do operační paměti počítače. Další cache je řízena jádrem operačního systému (softwarová cache), je umístěna v operační paměti RAM a slouží k uchování (často používaných) dat umístěných na pevném disku, čímž urychluje práci počítače. Cache webového prohlížeče obsahuje dříve navštívené stránky (obrázky a další objekty), takže pokud se uživatel vrátí zpět nebo následující stránka obsahuje stejné prvky, nemusí se stahovat přes počítačovou síť, ale jsou poskytnuty z cache (operační paměť nebo pevný disk).

Cache byla vynalezena v první polovině 60. let 20. století.

Cache hit a miss 
Pokud jsou požadovaná data v cache, jedná se o tzv. cache hit (data jsou poskytnuta z cache velmi rychle), pokud data v cache nejsou, pak se jedná o cache miss (data musí být získána z pomalejšího úložiště – operační paměť, I/O zařízení apod.).

Typy cache 
 softwarová cache, vytvořená programově, vymezením určité části operační paměti pro potřeby vyrovnávací paměti (např. disková cache v operačním systému)
 hardwarová cache, tvořená paměťovými obvody (např. pro potřeby procesoru).

Softwarová cache 

Obecně se používá jako vyrovnávací paměť pro pomalé (vzhledem k rychlosti operační paměti a procesoru) vnější paměti, typickým takovým zařízením je pevný disk počítače. Operační systém se snaží informace, se kterými pracuje častěji, uchovávat v rychlé operační paměti a v případě zápisu tyto na disk ukládat v co nejvýhodnějším pořadí. Nemusí tak provádět zbytečné čtecí a zápisové operace na disku, které jsou o několik řádů pomalejší (je nutné přemístit hlavy a počkat, až se disk natočí požadovaným místem pod hlavy).

Moderní systémy přidělují cache paměť pro disky dynamicky, podle množství volné paměti a potřeb systému. Algoritmy pro obsluhu diskové cache mají podstatný vliv na rychlost a výkon celého systému.

Nevýhodou používání cache je riziko spojené s neočekávaným výpadkem napájení - stav datových souborů na disku není vždy aktuální a musí se synchronizovat s obsahem cache. Z tohoto důvodu vyžadují operační systémy před vypnutím počítače provést tzv. „shutdown“, to znamená korektní ukončení práce systému, při kterém se (mimo jiné) uloží obsah diskové cache do souborů na disku. Ze stejných důvodů je nutné některá vyměnitelná média v unixových systémech před vyjmutím „odmountovat“. Tím se dává najevo systému, že se s médiem už nebude dále pracovat a systém provede synchronizaci cache se soubory. Odpojení je nutné i například u Windows XP, a to „zelenou ikonkou vpravo dole“, jinak může dojít k poškození souborového systému na výměnném médiu a to hlavně pokud se s médiem zrovna pracuje (kopírování, editace,...). Případné problémy s nečekaným výpadkem napájení se snaží moderní systémy alespoň částečně eliminovat pomocí žurnálu.

Hardwarová cache 

Paměť cache realizovaná specializovanými paměťovými obvody se používá v některých řídicích jednotkách vnějších pamětí a v procesorech a jejich podpůrných obvodech.

Cache v řídicích jednotkách vyrovnává rozdíl mezi nepravidelným předáváním/přebíráním dat počítačem (sběrnici) a pravidelným tokem dat do/z magnetických hlav, jehož rytmus je dán rychlostí otáčení disku.

U počítačů je cache elektronický obvod, tvořený z tranzistorů (ty tvoří bistabilní klopné obvody) a její funkce je vyrovnávat rozdílnou rychlost mezi procesorem a operační pamětí. Vyšší rychlosti je dosaženo použitím kvalitnějších tranzistorů (vyšší frekvence) než u operační paměti a cache je také blíže k procesoru než operační paměť. Tudíž je možno použít opět vyšší frekvenci, protože po cestě nejsou tak velké parazitní kapacity.

Cache v pevném disku 
Cache v pevném disku je vlastně vyrovnávací paměť, která odděluje velmi rychlý procesor od řádově pomalejšího pevného disku. Umožňuje uchovat data určená k zápisu do doby, než je mechanická část pevného disku zpracuje a naopak uchovává přečtená data do doby, než je obsluha přerušení přesune do operační paměti. Může sloužit i k interní reorganizaci požadavků kvůli zvýšení výkonu (NCQ). Její velikost se pohybuje od několika kB do 256 MiB u současných klasických 3.5" pevných disků a až do 2048 MiB u současných SSD disků.

Cache v procesoru 
Cache paměť v procesoru ukládá kopie dat přečtených z adresy v operační paměti. Pokud při čtení obsahu slova z adresy v paměti je tato položka nalezena v cache paměti, je její obsah přečten z cache paměti, a ne z operační paměti (angl. cache hit). Mezi procesorem a cache pamětí se přenášejí jednotlivá slova, mezi cache pamětí a operační pamětí se přenášejí rámce slov o velikosti několikanásobku velikosti slova procesoru. Protože asi 90% operací procesoru je čtení paměti, většinou sekvenční, je tímto způsobem dosaženo větší propustnosti dat z operační paměti do procesoru, tím i vyššího výpočetního výkonu.

Vyrovnávací paměť procesoru bývá dvojstupňová. Část paměti o malé kapacitě je přímo součástí procesoru a je stejně rychlá, jako vlastní procesor (značí se L1). Další paměť, pomalejší, ale s větší kapacitou, je mezi procesorem a operační pamětí, dnes se již umisťuje do pouzdra s procesorem (značí se L2). Protože cena pamětí stoupá s její rychlostí (a samozřejmě s kapacitou), je možné tímto uspořádáním najít kompromis mezi cenou a rychlostí. Na přelomu roku 2008 a 2009 se začíná používat L3 cache i v běžných procesorech (Intel Core i7, AMD Phenom), která je pro všechna jádra společná a většinou má velikost několik megabajtů.

Velikost paměti cache, její rychlost a algoritmus řízení paměti cache se liší u jednotlivých výrobců a typů procesorů a je to jeden z parametrů, který podstatně ovlivňuje výkon a cenu počítače.

Webová cache 
Webová cache slouží k ukládání předchozích odpovědí od webových serverů jako jsou webové stránky nebo obrázky. Informace uložené v cache mohou být znovu využity a tím je možné snížit vytížení přenosových cest počítačových sítí a též zátěž webových serverů. Webová cache je obvyklou součástí webového prohlížeče. Správci větších počítačových sítí nebo poskytovatelé internetového připojení používají proxy servery, které cachují data pocházející od webových serverů k webovým klientům.

Některé velmi zatížené webové servery používají reverzní proxy cache, která je záměrně postavena přímo před webový server (například před servery Wikipedie). Webový server tak nemusí opakovaně odesílat klientům data, která odeslal před kratší dobou a tím je snížena jeho zátěž.

P2P cache 
Jinou podobou cache je P2P ukládání, kde soubory nejvíce vyhledávané peer-to-peer aplikacemi jsou uloženy v ISP cache pro zrychlení P2P přenosů. Podobně existují i decentralizované ekvivalenty, které dovolují komunitám provádět stejné úlohy pro P2P přenos, například Corelli.

Další cache 
Doménový DNS server BIND ukládá do své cache mapování doménových jmen na IP adresy. Trvanlivost záznamu v cache určuje správce daného doménového záznamu. Podobnou cache může využívat i knihovna používaná pro provedení překladu doménového jména na adresu a zpět (tzv. resolver s konfiguračním souborem resolv.conf).

Některé síťové souborové systémy urychlují přístup ke vzdáleným souborů pomocí lokální cache, kdy jsou celé soubory (nebo jejich části) ukládány na straně klienta do cache. Taková cache může být i velká a proto bývá umístěna na disku. Protože síťové souborové systémy musí řešit aktualizace záznamů v cache, když je soubor změněn jiným klientem, může být činnost takové lokální cache omezena (např. jen pro čtení nebo jen pro soubory, do kterých nelze zapisovat a podobně). Lokální cache používají pokročilé systémy, jako je AFS, ale mohou být implementovány i pro potřebu běžnějších, jako je NFS nebo SMB.

Cache v operační paměti, a/nebo na pevném disku je využívána také například u stránkování paměti ve stránkovacích algoritmech.

Webové vyhledávače často ukládají indexované webové stránky do své cache a mohou ji i zpřístupnit. Například vyhledávač Google poskytuje vedle každého výsledku vyhledávání odkaz na Archiv, což může být užitečné, když jsou webové stránky z webového serveru dočasně nebo permanentně nedostupné.

Dalším typem cache je ukládání vypočítaných výsledků, u kterých je pravděpodobné, že budou znovu potřeba, což se také nazývá memoizace. Příkladem tohoto typu je Ccache, program který ukládá výstup kompilace k urychlení příští kompilace.

Ukládání databáze do cache může podstatně zlepšit výkonnost databázových aplikací, například při zpracovávání indexů, datových repositářů a často používaných sub-sad dat.

Distribuované ukládání používá cache rozšířenou na počítače propojené sítí, například Corelli.

Rozdíl mezi bufferem a cache 

Dva pojmy „buffer“ (vyrovnávací paměť) a „cache“ označují vzájemně se nevylučující funkce. Ty se však mohou i vzájemně prolínat. V jejich významech je však rozdíl (princip cache je vysvětlen výše).

Buffer je vyrovnávací paměť, která slouží k vyrovnávání různých rychlostí dvou stran (např. tiskárny a počítače nebo dva vzájemně komunikující procesy). Buffer je typicky realizován jako (dočasný) úsek operační paměti počítače, avšak může být realizován i hardwarově (například jako součást pevného disku). Používán je typicky jako fronta FIFO, případně jako kruhový buffer, ale též jako zásobník. Data jsou do bufferu zapsána, po nějaké době jsou z něj přečtena a již v něm nejsou dále uchovávána.

Reference

Externí odkazy 
 
 
 Vyrovnávací paměti (cache)
 Vyrovnávací paměti a optimalizace programů
 Návod na aplikaci webové cache
 Architektury vyrovnávacích pamětí

Počítačová paměť