====== Buffers a cache v Linuxu ====== Operační systém Linux (tedy jeho jádro -- tedy "Linux" v pravém slova smyslu) se snaží maximálně využít dostupnou paměť počítače. Veškerá RAM, kterou nespotřebovaly spuštěné programy a systém samotný, je využita pro účely urychlení vstupu a výstupu: * **buffers** -- paměť sloužící pro vstupně/výstupní buffery. Většinu zabírají buffery otevřených souborů (obvykle těch do kterých se zapisuje), různé roury a podobně. * **cache** -- disková cache. Kusy na disku, které jsou dočasně uloženy v paměti pro urychlení dalšího načítání. Linuxové jádro také předčítá (preload) sektory disku do paměti a tam je ponechá pro další použití. Mnoho linuxových distribucí navíc během startu používá uživatelské programy (např. preload), které sekvenčně přečtou soubory, které se patrně v dalším procesu zavádění budou potřebovat, a tím urychlují start. O něco podobného se snaží i větší programy jako je Firefox nebo OpenOffice.org. Program //free// slouží k vypsání volné paměti. Použil jsem přepínač //-m//, který vypisuje v megabajtech -- můžete zkusit také přepínač //-g//. Vidíme, že počítač má 6 GB paměti (total) a z toho je 5903 MB použito. [lzapletal@atlas ~]$ free -m total used free shared buffers cached Mem: 5970 5903 67 0 716 2627 -/+ buffers/cache: 2560 3410 Swap: 4102 109 3992 Pro účely bufferů je využito přes 700 MB a disková cache zabírá 2627 MB. Všimněte si řádku "-/+ buffers/cache", který nám usnadní kalkulaci, kolik to vlastně máme volné paměti. Jak jsem předeslal, paměť pro buffery a cache je vlastně využitá volná paměť, a tedy lze ji kdykoli přidělit běžícím programům. Na tomto řádku se tedy dočteme, kolik je použité paměti ve skutečnosti (2560 MB) a kolik volné (3410 MB). Ve chvíli, kdy si program vyžádá další blok paměti, je uvolněna na úkor diskové cache a poté i bufferů. To neplatí opačně -- programy musejí sami svoji paměť systému vrátit (a nebo si uvolnění systém může vynutit). Pakliže je volná paměť nevyužitá (free) a program provede diskové náročnou operaci (například grep nad celým filesystémem), velikost cache obvykle naroste a zaplní někdy i celou volnou paměť. Častokrát se tedy může stát, že máte volnou pamět (free) nulovou - to je v pořádku. Musíte **odečíst slupce buffers a cached**. Kdyby se mě někdo v okamžik volání programu //free// u daného příkladu zeptal, kolik mám volné paměti, neodpovím "67 mega". Odpovím "přes tři giga". {{tag>linux}} ~~DISCUSSION~~