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

Diskuze

If you can't read the letters on the image, download this .wav file to get them read to you.
pridej.cz
blog/buffers_a_cache_v_linuxu.txt · Poslední úprava: 29.05.2008 09:04 (external edit)
Creative Commons License Valid CSS Driven by DokuWiki Recent changes RSS feed Valid XHTML 1.0