GNU/Linux >> Znalost Linux >  >> Linux

Jaký je v Linuxu rozdíl mezi vyrovnávacími pamětmi a mezipamětí hlášenými příkazem free?

Ř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:

Preambule

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.


Linux
  1. Jaký je rozdíl mezi linuxovým kontejnerem a obrázkem?

  2. Jak odstranit vyrovnávací paměti a mezipaměť v Linuxu

  3. Jaký je rozdíl mezi &(ampersand) a &&(dvojitý ampersand) při provádění simultánních příkazů v Linuxu

  1. Jaký je rozdíl mezi vyrovnávací pamětí a mezipamětí v Linuxu?

  2. Jaký je rozdíl mezi „vyhledat“ a „najít“ v Linuxu?

  3. Jaký je rozdíl mezi &> a >&v bash?

  1. Jaký je rozdíl mezi ls a l?

  2. Jaký je rozdíl mezi Unixem, Linuxem, BSD a GNU?

  3. Jaký je rozdíl mezi unlink a rm?