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:

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“.