Řešení 1:
Celkový počet "uložených v mezipaměti" bude také zahrnovat některé další alokace paměti, jako jsou libovolné souborové systémy tmpfs. Chcete-li to vidět ve skutečnosti, zkuste:
mkdir t
mount -t tmpfs none t
dd if=/dev/zero of=t/zero.file bs=10240 count=10240
sync; echo 3 > /proc/sys/vm/drop_caches; free -m
umount t
sync; echo 3 > /proc/sys/vm/drop_caches; free -m
a uvidíte, že hodnota "mezipaměti" klesne o 100 Mb, které jste zkopírovali do souborového systému založeného na paměti RAM (za předpokladu, že bylo dostatek volné paměti RAM, možná zjistíte, že část z nich skončila ve swapu, pokud je počítač již přetížen v podmínkách využití paměti). "synchronizace; echo 3> /proc/sys/vm/drop_caches" před každým voláním free by mělo zapsat cokoli čekajícího na zápis do všech vyrovnávací paměti pro zápis (synchronizace) a vymazat všechny bloky disku uložené v mezipaměti/vyrovnávací paměti z paměti, takže free bude pouze číst ostatní alokace v hodnotě „cached“.
RAM používaná virtuálními stroji (jako jsou ty, které běží pod VMWare) může být také započítána do hodnoty „cached“ zdarma, stejně jako RAM používaná aktuálně otevřenými soubory mapovanými v paměti (to se bude lišit v závislosti na hypervizoru/verzi, kterou používáte, a možná i mezi verzemi jádra).
Není to tedy tak jednoduché jako "vyrovnávací paměti počítají čekající zápisy do souboru/sítě a do mezipaměti počítají nedávno přečtené/zapsané bloky uložené v paměti RAM pro uložení budoucích fyzických čtení", i když pro většinu účelů postačí tento jednodušší popis.
Řešení 2:
Záludná otázka. Když vypočítáte volné místo, musíte ve skutečnosti sečíst vyrovnávací paměť a mezipaměť. To je to, co jsem mohl najít
Vyrovnávací paměť je něco, co ještě nebylo „zapsáno“ na disk. Cache je něco, co bylo „přečteno“ z disku a uloženo pro pozdější použití.
http://visualbasic.ittoolbox.com/documents/difference-between-buffer-and-cache-12135
Řešení 3:
Hledal jsem jasnější popis o vyrovnávací paměti a našel jsem v "Professional Linux® Kernel Architecture 2008"
Kapitola 16:Mezipaměť stránek a vyrovnávací paměti
Interakce
Nastavení propojení mezi stránkami a vyrovnávacími pamětmi nemá žádný význam, pokud to nepřináší žádné výhody pro ostatní části jádra. Jak již bylo uvedeno, některé přenosové operace do az blokových zařízení může být nutné provádět v jednotkách, jejichž velikost závisí na velikosti bloku základních zařízení, zatímco mnoho částí jádra dává přednost provádění I/O operací s granularitou stránek, protože to dělá věci mnohem jednodušší. — zejména pokud jde o správu paměti. V tomto scénáři vyrovnávací paměti fungují jako prostředníci mezi dvěma světy.
Řešení 4:
Vysvětleno RedHat :
Stránky mezipaměti:
Mezipaměť je část paměti, která transparentně ukládá data, takže budoucí požadavky na tato data lze obsluhovat rychleji. Tuto paměť využívá jádro k ukládání diskových dat do mezipaměti a ke zlepšení I/O výkonu.
Linuxové jádro je postaveno tak, že bude používat tolik paměti RAM, kolik jen může, k ukládání informací z vašich lokálních a vzdálených souborových systémů a disků. Jak čas plyne přes různá čtení a zápisy v systému, jádro se snaží uchovat data uložená v paměti pro různé procesy, které v systému běží, nebo data příslušných procesů, které by byly použity v blízké budoucnosti. Mezipaměť není znovu získána v době, kdy se proces zastaví/ukončí, ale když ostatní procesy vyžadují více paměti, než je volná dostupná paměť, jádro spustí heuristiku, aby znovu získalo paměť uložením dat mezipaměti a přidělením této paměti novému procesu.
Když je požadován jakýkoli druh souboru/dat, jádro vyhledá kopii části souboru, se kterou uživatel jedná, a pokud žádná taková kopie neexistuje, přidělí jednu novou stránku vyrovnávací paměti a naplní ji příslušný obsah načtený z disku.
Data uložená v mezipaměti mohou být hodnoty, které byly vypočteny dříve, nebo duplikáty původních hodnot, které jsou uloženy jinde na disku. Když jsou požadována nějaká data, je nejprve zkontrolována mezipaměť, zda tato data obsahuje. Data lze z mezipaměti načíst rychleji než z jejího zdroje.
Segmenty sdílené paměti SysV jsou také považovány za mezipaměť, i když nepředstavují žádná data na discích. Velikost segmentů sdílené paměti lze zkontrolovat pomocí příkazu ipcs -m a kontroly sloupce bajtů.
Vyrovnávací paměti:
Vyrovnávací paměti jsou diskovým blokem reprezentujícím data, která jsou uložena v mezipaměti stránek. Vyrovnávací paměti obsahují metadata souborů/dat, která jsou uložena v mezipaměti stránek. Příklad:Pokud dojde k požadavku na jakákoli data, která jsou přítomna v mezipaměti stránek, jádro nejprve zkontroluje data ve vyrovnávací paměti, která obsahují metadata, která ukazují na skutečné soubory/data obsažená v mezipaměti stránky. Jakmile je z metadat známa skutečná bloková adresa souboru, je vyzvednuta jádrem ke zpracování.
Řešení 5:
Uvolnění vyrovnávací paměti/mezipaměti
Upozornění To vysvětluje silnou metodu, která se nedoporučuje na produkčním serveru! Takže jste varováni, neobviňujte mě, pokud se něco pokazí.
Pro pochopení věci, kterou můžete vynutit váš systém delegovat co nejvíce paměti na cache
než zahodit soubor uložený v mezipaměti:
Před provedením testu můžete otevřít další okno a stisknout:
$ vmstat -n 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 1 39132 59740 39892 1038820 0 0 1 0 3 3 5 13 81 1
1 0 39132 59140 40076 1038812 0 0 184 0 10566 2157 27 15 48 11
...
pro sledování vývoje swapu v reálném čase.
Poznámka: Musíte zlikvidovat tolik volného disku v aktuálním adresáři, máte mem+swap
Demo$ free
total used free shared buffers cached
Mem: 2064396 2004320 60076 0 90740 945964
-/+ buffers/cache: 967616 1096780
Swap: 3145720 38812 3106908
$ tot=0
$ while read -a line;do
[[ "${line%:}" =~ ^(Swap|Mem)Total$ ]] && ((tot+=2*${line[1]}))
done </proc/meminfo
$ echo $tot
10420232
$ dd if=/dev/zero of=veryBigFile count=$tot
10420232+0 records in
10420232+0 records out
5335158784 bytes (5.3 GB) copied, 109.526 s, 48.7 MB/s
$ cat >/dev/null veryBigFile
$ free
total used free shared buffers cached
Mem: 2064396 2010160 54236 0 41568 1039636
-/+ buffers/cache: 928956 1135440
Swap: 3145720 39132 3106588
$ rm veryBigFile
$ free
total used free shared buffers cached
Mem: 2064396 1005104 1059292 0 41840 48124
-/+ buffers/cache: 915140 1149256
Swap: 3145720 39132 3106588
Nota, hostitel, na kterém jsem to udělal, je silně používán. To bude významnější na opravdu tichém stroji.