it-swarm-eu.dev

Proč používat swap, když je v RAM více než dostatek volného místa?

Pomocí swap místo namísto RAM může drasticky zpomalit PC.

Proč tedy, když mám k dispozici více než dost RAM), používá můj systém Linux (Arch) swap?

Pokladna můj conky výstup níže:

conky output

Mohlo by to také být příčinou problémů s rychlostí a citlivostí na systém, které mám?

Výstup free -m:

$ free -m
             total       used       free     shared    buffers     cached
Mem:          1257       1004        252          0         51        778
-/+ buffers/cache:        174       1082
Swap:          502        144        357
132
Stefan

Je normální, že systémy Linux používají některé swap, i když stále existuje RAM zdarma.) Linuxové jádro se přesune na swapové stránky, které se používají velmi zřídka (např. , instance getty, pokud používáte pouze X11 a některé jiné neaktivní démona).

Využití odkládacího prostoru se stává problémem pouze v případě, že není dost RAM k dispozici, a jádro je nuceno nepřetržitě přesouvat paměťové stránky za účelem výměny a zpět do RAM, jen do udržujte aplikace v chodu. V tomto případě by aplikace pro sledování systému vykazovaly hodně diskových I/O aktivit.

Pro srovnání můj systém Ubuntu 10.04, se dvěma uživateli přihlášenými k relacím X11, které běží na ploše GNOME, používá ~ 600 MB swapu a ~ 1 GB RAM (nepočítá se vyrovnávací paměť a fs cache)), takže Řekl bych, že vaše údaje pro využití swapu vypadají normálně.

96
Riccardo Murri

Toto chování lze nakonfigurovat nastavením hodnoty:

/proc/sys/vm/swappiness

Výchozí hodnota je 60. Nastavení na 0 znamená, že nikdy nepoužívat odkládání, pokud je stále RAM vlevo a 100 odkládá paměť co nejdříve.

Chcete-li dočasně změnit hodnotu (ztraceno při restartu):

Sudo sysctl vm.swappiness=10

Chcete-li hodnotu trvale změnit, upravte soubor:

/etc/sysctl.conf

jako root (např. Sudo nano /etc/sysctl.conf) a změňte nebo přidejte (pokud tam není) řádek:

vm.swappiness

na požadovanou hodnotu. Pokud tento soubor neexistuje (např. V Arch Linuxu), zkuste /etc/sysctl.d/99-sysctl.conf namísto.

Tam byla nějaká debata o tom, zda je výměna volné paměti k dispozici, je dobrá nebo špatná, ale buntu nápověda skutečně doporučuje hodnotu 10 pro stolní systémy . Viz také tento tutoriál o digitálním oceánu pro CentOS .

96
Marcel Stimberg

Linux začne swapování před naplněním RAM). To se provádí za účelem zlepšení výkonu a pohotovosti:

  • Výkon je zvýšen, protože někdy RAM je lepší použít pro mezipaměť disku než pro ukládání programové paměti. Je tedy lepší zaměnit program, který byl po nějakou dobu neaktivní, a místo toho uchovávat často používané soubory v mezipaměti.

  • Schopnost reagovat je zlepšena zaměňováním stránek, když je systém nečinný, spíše než když je paměť plná a nějaký program běží a vyžaduje více RAM k dokončení úlohy).

Zaměňování samozřejmě zpomaluje systém - ale alternativou k zaměňování není zaměňování, má více RAM nebo méně RAM).

Tohle je starý příspěvek, přesto bych si však dovolil uvést zde své myšlenky.

Počínaje odspodu dolů by Linux nejprve rozdělil paměť na stránky (obvykle 4 kB na stránku v systému x86_64). Poté se vytvoří virtuální paměť, jejíž mapování se provádí pomocí fyzické paměti pomocí MMU (jednotka správy paměti).

Procesům je přidělena paměť z oblasti virtuální paměti, takže prosím všimněte si, když uvidíte/proc/meminfo, uvidíte VMalloc * jako podrobnosti virtuální paměti.

Řekněme, že máte proces, který vyžaduje paměť (řekněme 300 MB - webový prohlížeč). Proces by byl přidělen 300 MB z virtuální paměti, není však nutné mapovat paměť (která je mapována na fyzickou paměť). Existuje koncept „Kopírovat při zápisu“ pro správu paměti, přičemž pokud vaše procesy skutečně používají paměť přidělenou z virtuální paměti (to znamená, že do paměti něco zapisuje), pak je mapována do fyzické paměti. To pomáhá jádru pracovat správně v prostředí s více procesy.

Co jsou mezipaměti?

Sdílené procesy využívají mnoho paměti. Řekněme, že knihovnu glibc používají téměř všechny procesy. Jaký je smysl uchovávat více kopií glibc v paměti, když každý proces mohl získat přístup k stejnému umístění v paměti a provést úlohu. Takové často používané prostředky jsou uchovávány v mezipaměti, takže pokud to procesy vyžadují, mohou být odkazovány na stejné umístění v paměti. To pomáhá při urychlování procesů, protože čtení glibc (atd.) Znovu a znovu z disku by bylo časově náročné.

Výše uvedené bylo pro sdílené knihovny na řekněme, podobné platí také pro čtení souborů. Pokud si poprvé přečtete velký soubor (řekněme 100-200 MB), bude to trvat hodně času. Pokud se však pokusíte znovu provést stejné čtení, bylo by to rychlejší. Data byla uložena do paměti a opakované čtení nebylo provedeno pro všechny bloky.

Co je to buffer?

Pokud jde o vyrovnávací paměť, když procesy dělají soubor I/O, spoléhá na zápis dat na disk do vyrovnávací paměti jádra. Procesy, požaduje jádro k provedení úlohy. Takže jménem procesu jádro zapisuje data do své „vyrovnávací paměti“ a řekne procesu, že zápis je hotový. Asynchronním způsobem bude jádro synchronizovat tato data ve vyrovnávací paměti na disk. Tímto způsobem se procesy spoléhají na jádro, aby si vybral správný čas pro synchronizaci dat na disk a procesy by mohly pokračovat v práci dopředu. Pamatujte, že toto je obecné I/O, které běžně probíhají procesy. Specializované procesy, které potřebují potvrdit, že se I/O skutečně provádí na disku, však mohou použít jiný mechanismus k provádění I/O na disku. Některé z obslužných programů opensource jsou libaio. Existují také způsoby, jak zavolat explicitní synchronizaci s FD otevřenými v kontextu vašich procesů, takže vynutíte jádro, aby synchronizovalo data na disk pro zápis, který jste možná udělali.

Co jsou tedy chyby stránky?

Uvažujme příklad, když spustíte proces (řekněme webový prohlížeč), jehož binární hodnota je asi 300 MB. Úplných 300 MB binárního kódu webového prohlížeče však nezačne okamžitě fungovat. Proces pokračuje ve svém kódu z funkcí na funkce. Jak již bylo řečeno, virtuální paměť by byla spotřebována 300 MB, ale ne všechny jsou mapovány na fyzickou paměť (RSS - rezidentní paměť by byla menší, viz horní výstup). Když spuštění kódu dosáhne bodu, pro který paměť není ve skutečnosti fyzicky mapována, došlo by k chybě stránky. Jádro by tuto paměť namapovalo na fyzickou stránku a přiřadilo stránku paměti k vašemu procesu. Taková chyba stránky se nazývá „drobné chyby stránky“. Podobně, když proces dělá soubor I/O hlavní chyby stránky jsou zvýšeny.

Kdy a proč se stane odkládání?

Situace 1:

V souladu s výše uvedenými detaily umožňuje zvážit scénář, kdy se velké množství paměti změní na paměť. A nyní se začínají procesy, které vyžadují paměť. Jak bylo uvedeno výše, jádro bude muset provést určité mapování paměti. K mapování paměti však není k dispozici dostatek fyzických RAM). Nyní se jádro nejprve podívá do mezipaměti, bude mít některé staré stránky paměti, které se nepoužívají. stránky do samostatného oddílu (nazývaného SWAP), uvolněte některé stránky a mapujte uvolněné stránky podle nových požadavků. Protože zápis na disk je mnohem pomalejší než solid-state RAM, tento proces zabere hodně času, a proto zpomaluje je viděn.

Situace 2:

Řekněme, že v systému vidíte spoustu volné paměti. I poté uvidíte, že se odehrává spousta výměn. Mohlo by dojít k pravděpodobnému problému fragmentace paměti. Vezměme si procesy, které od jádra vyžadují 50 MB souvislé paměti. (mějte na paměti přilehlé). Jádro by samozřejmě stránky náhodně přidělilo různým procesům a některé z nich uvolnilo. Když však požadujeme souvislou paměť, bude muset hledat kus, který uspokojí poptávku po procesech. Pokud není schopna získat takovou paměť, bude muset udělat swap-out některých starých stránek paměti a pak přidělit sousední stránky. I v takových případech by se stalo SWAP. Počínaje jádrem verze 2.6 a výše se tyto problémy fragmentace výrazně snížily. Pokud však systém běží dlouho, mohou se tyto problémy stále vyskytovat.

Viz tento příklad ( výstup vmstat )

2016-10-29 03:55:32 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
2016-10-29 03:55:32  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
2016-10-30 03:56:04 19 23 2914752 4692144 3344908 12162628 1660    1  8803 12701 4336 37487 14  7 40 38  0
2016-10-30 03:56:34  3 20 2889296 4977580 3345316 12026752 2109    2  8445 14665 4656 36294 12  7 46 34  0
2016-10-30 03:57:04  1 11 3418868 4939716 3347804 11536356  586 4744  2547  9535 3086 24450  6  3 59 33  0  <<<-----
2016-10-30 03:57:34  3 19 3456252 5449884 3348400 11489728 3291 13371  6407 17957 2997 22556  6  4 66 24  0
2016-10-30 03:58:04  7  6 4194500 5663580 3349552 10857424 2407 12240  3824 14560 2295 18237  4  2 65 29  0
2016-10-30 03:58:34  2 16 4203036 5986864 3348908 10838492 4601 16639  7219 18808 2575 21563  6  4 60 31  0
2016-10-30 03:59:04  3 14 4205652 6059196 3348760 10821448 6624 1597  9431  4357 1750 20471  6  2 60 31  0
2016-10-30 03:59:34  2 24 4206968 6053160 3348876 10777216 5221 2067 10106  7377 1731 19161  3  3 62 32  0
2016-10-30 04:00:04  0 13 4205172 6005084 3348932 10785896 6236 1609 10330  6264 1739 20348  4  2 67 26  0
2016-10-30 04:00:34  4 11 4206420 5996396 3348976 10770220 6554 1253 10382  4896 1964 42981 10  5 58 27  0
2016-10-30 04:01:04  6  4 4177176 5878852 3348988 10825840 8682  765 10126  2716 1731 32949  8  4 69 19  0

@ 2016-10-30 03:57:04, vidíme, že stále existuje velké množství volného RAM = k dispozici. Přesto se však stalo, že došlo k výměně. V tomto bodě jsme zkontrolovali strom procesů a neviděli jsme žádný proces, který by vyžadoval tak velké množství paměti (více než volná paměť). Zjevným podezřením byla výše popsaná situace 2. Zkontrolovali jsme výše protokoly buddyinfo a zoneinfo (použijte echo m>/proc/sysrq - spouštěč je zkontroluje, výstup jde do syslogů).

U našeho běžného systému to platí pro porovnání informací o zóně. Grafy mezipaměti/volné/nízké paměti jsou také uvedeny níže

zone info

swap free low free

Při pohledu na informace je zřejmé, že v uzlu 0 a uzlu 1 je normální fragmentace paměti (uzel je to stroj založený na NUMA, tedy více uzlů (viz numactl pro kontrolu informací o vašem systému)).

Fragmentace paměti je také důvodem, proč se využití swapu může zvýšit, i když je k dispozici volná paměť.

15
Anugraha Sinha

Mít více dostupné paměti

Jak všichni říkali, výměna ano vám pomůže zbavit se nevyužité paměti, takže vám může pomoci mít k dispozici více paměti.

Hibernace

Swap lze ale také použít pro hibernace, což může být opravdu užitečné, pokud máte notebook nebo chcete ušetřit energii a uvést počítač a pracovat do režimu hibernace před odchodem z práce. Takže můžete mít rychlejší start ráno.

Mít hibernační funkci je jedním z hlavních důvodů, proč stále vidíme, že radíme mít alespoň pro výměnu velikost RAM). Tímto způsobem může systém vložit všechny použité RAM do swapu a přejde do režimu spánku.

Krátké příchody

Dbejte na to, aby jednou vyměněná procesní data mohla být ve swapu načtena i po vypnutí, pokud nebyl swap šifrován (samozřejmě).

Používání šifrovaného swapu s hibernací nefunguje u všech distribucí. Musíte použít konstantní šifrovací klíč (některá nastavení náhodně generují šifrovací klíč swapového prostoru při každém spuštění) a initrd/initramfs pro aktivaci šifrovaného svazku před obnovením.

5
Huygens

Od buntu Swap F.A.Q. , ke kterému Marcel připojil

Jako základní minimum se důrazně doporučuje, aby se odkládací prostor rovnal množství fyzické paměti (RAM). Také se doporučuje, aby odkládací prostor byl dvojnásobkem velikosti fyzické paměti (RAM) v závislosti na množství pevného disku

Myslím, že byste měli zvýšit svůj odkládací prostor ve vašem systému. Výměna urychluje RAM přidělení paměti) tím, že umožňuje zahodit již stránená data.

3
Jader Dias

Mnoho moderních programů je založeno na nafouklých rámcích, které přetahují spoustu nevyžádaných věcí, které ve skutečnosti nepotřebujete ke spuštění programu. Zaměnění těchto nevyužitých stránek uvolní RAM pro mezipaměť a programy, které mohou skutečně využít RAM.

Mluvím zde o bolestivé osobní zkušenosti.

V loňském roce jsem přepnul jeden z mých webů na slibný nový rámec webového serveru, který byl postaven na Firefoxu. Může to znít podivně, když se systém na straně serveru vytvoří na vrcholu programu zaměřeného na klienta, jako je Firefox, ale měl to obrovské výhody. Firefox je velmi výkonný, nabízí některé opravdu působivé interní služby a snižuje nesoulad impedancí mezi serverem a klientem, aby obě mohly provozovat podobné platformy.

Ale je tu jedna nevýhoda: Firefox je velký. Opravdu velký. Jednalo se o projekt typu 1.x, takže se nepřibližovali k problémům, jako je například odstranění podpory GUI. [*] Moje stránka nic z toho nepotřebovala, ale protože technologie VPS, kterou použil můj poskytovatel hostingu, t Umožnit odkládací prostor, že GUI kód ​​a všechny ostatní části Firefoxu, které jsem nepoužil, snědli skutečnou RAM. Nakonec jsem potřeboval 512 MB RAM minimum jen abych spustil web bez toho, aby se zhroutil kvůli vyčerpání paměti. Pokud by můj VPS měl nějaký odkládací prostor, pravděpodobně bych se dostal s plánem 256 MB.

[*] Odstranění kódu GUI z rámce nemusí být dokonce žádoucí, protože jednou z výhod této platformy bylo vysoce věrné škrabání na webu, protože rámec na straně serveru mohl stahovat webové stránky z jiného webu a můžete s nimi manipulovat stejně jako vy. na straně klienta. Mysli mashup. Mnoho takových věcí by se zlomilo, pokud nemůžete "vykreslit" webovou stránku do nějakého grafického kontextu.

Mimochodem, tento webový rámec je nyní v podstatě mrtvý, takže neexistuje žádný bodový název a hanba. Nejlepší je vzít si širší lekci k srdci: ano, výměna je stále užitečná, i když máte koncerty volné paměti RAM.

3
Warren Young

Myslím, že „Gilles“ již zmínil skutečnost, že i když můžete mít více než dostatek paměti RAM, může být výměna užitečná při určitých „nedostatcích“ a také trvalé ukládání některých dat i po vypnutí - nebo se mýlím v předpokladu, že? ( protože RAM se po restartu vyprázdní) mám v mém systému k dispozici 12 GB RAM (RAM $ ===) a já jsem se o této otázce také dříve zabýval. bod, když jsem vypnul všechny swapy a spoléhal jsem jen na svou RAM, měl jsem bolestivě obtížné zkušenosti se pokusem o ladění nějaké systémové chyby nebo havárie atd. po vypnutí systému. Od té doby jsem znovu povolil odkládací oddíl.

2
ILMostro_7