Výkon systému Linux:
Víme, že používání odkládacího prostoru v Linuxu namísto operační paměti (RAM) může výrazně snížit výkon. Někdo by se tedy mohl zeptat: Když mám k dispozici více než dost paměti, nebylo by lepší odkládací prostor odstranit? Krátká odpověď zní: Ne. Zapnutí odkládacího prostoru přináší výkonnostní výhody, i když máte k dispozici více než dostatek paměti ram. Aktualizace, viz také část 2: Výkon Linuxu:
I s více než dostatečnou instalovanou pamětí serveru často zjistíte, že odkládací prostor bude po dlouhé době provozu využit. Viz následující příklad ze serveru live-chat s přibližně měsíční dobou provozu:
total used free shared buff/cache availableMem: 3.7G 1.0G 445M 84M 2.2G 2.2GSwap: 1.8G 308M 1.5G
Výstup free -h
zde ukazuje 308M využitého prostoru swap. Když jsem spustil kontroly swapování, nebyly zjištěny žádné známky probíhající nebo předčasné I/O aktivity swapu. Také služba kswap nespotřebovávala mnoho času procesoru. Ve skutečnosti nebyl proces kswap nikde v top (top procesy seřazené podle času CPU). Pro potvrzení jsem použil následující příkaz:
ps -A | grep kswap 40 ? 00:00:29 kswapd0
…takže v tomto případě, stejně jako v mnoha jiných, využití swapu neškodí výkonu linuxového serveru. Nyní se podíváme na to, jak může prostor swapu skutečně pomoci výkonu linuxového serveru.
Aktualizace: Nedávno jsem na svůj Pinebook Pro nainstaloval Manjoro i3. Ten je nyní ve výchozím nastavení vybaven povolenou pamětí ZRAM.
Výhody odkládacího prostoru na systémech s dostatečnou pamětí RAM
Je normální a může být dobré, že systémy Linux využívají nějaký odkládací prostor, i když je ještě k dispozici paměť RAM. Jádro Linuxu přesune stránky paměti, které se téměř nepoužívají, do odkládacího prostoru, aby zajistilo, že v paměti bude k dispozici ještě více místa pro častěji používané stránky paměti (stránka je kus paměti). Využití swapu se stává výkonnostním problémem, když je jádro nuceno neustále přesouvat paměťové stránky do a z paměti a odkládacího prostoru.
Další výhodou je, že swap dává správcům čas reagovat na problémy s nedostatkem paměti. Často si všimneme, že se server chová pomalu, a po přihlášení si všimneme silného swapování. Bez swapu (jak je popsáno v následující části) může nedostatek paměti vyvolat mnohem náhlejší a závažnější řetězové reakce. Obvykle tedy doporučuji nastavit prostor pro swap přibližně na velikost největšího procesu. Například nastavená paměť MySQL v souboru my.cnf. Může být i menší, zejména pokud máte zavedeno monitorování a/nebo upozorňování.
Někteří doporučují žádný swap nebo velikost swapu o něco větší, než je celková paměť RAM. Pokud pro to můžete přijít s pádnými důvody, pak je to možná vaše volba. Na serverech to však téměř neplatí a místo toho byste měli své rozhodnutí zvážit s ohledem na to, jaký vliv bude mít swap na vaše konkrétní aplikace. Swap nemění množství paměti RAM potřebné pro zdravý server nebo třeba stolní počítač. Je navržen tak, aby doplňoval výkon zdravých systémů.
Abychom to shrnuli:
– I když je paměť RAM stále k dispozici, jádro Linuxu přesune do swapovacího prostoru paměťové stránky, které se téměř nepoužívají.
– Je lepší swapovat paměťové stránky, které jsou již nějakou dobu neaktivní, a ponechat často používaná data v mezipaměti, a to v době, kdy je server nejvíce nečinný, což je cílem jádra.
– Vyvarujte se nastavení příliš velkého odkládacího prostoru, pokud to bude mít za následek prodloužení problémů s výkonem, výpadky nebo dobou odezvy (bez řádného monitorování/upozornění).
Odkládací prostor vs. žádný odkládací prostor při nedostatku dostupné paměti
Na rozdíl od výše uvedeného případu, pokud nemáte dostatek paměti, bude odkládací prostor používán poměrně často a znatelně více při jakýchkoli nárůstech požadavků na paměť. Pokud nemáte dostatek paměti a žádné odkládací místo, bude to často příčinou neúspěšného přidělování paměti pro požadavky vyžadující více paměťových stránek. V krajním případě jádro nasadí OOM killer, aby zlikvidovalo procesy s velkým množstvím paměti (obvykle MySQL, java atd.).
Podrobnější informace o odkládacím prostoru v Linuxu najdete v kapitolách Správa odkládacího prostoru a Rekultivace stránkovacího rámce z dokumentace Kernel.org. Podívejte se také na poslední část „Tlak na mezipaměť jádra a swapování“ mého dalšího příspěvku na blogu, kde najdete tipy pro ladění využití swapovacího prostoru v Linuxu jádrem. Pokud je váš „využitý“ odkládací prostor vždy „0“, pak máte skutečně spoustu volně dostupné paměti RAM a v takovém případě je možná bezpečné odkládací prostor odstranit… nebo můžete upravit tlak vyrovnávací paměti jádra, abyste využili ještě více paměti RAM.
Abych to shrnul:
– Swap I/O se škáluje velmi špatně. Pokud nelze paměťové stránky swapovat pouze v době nečinnosti serveru, měli byste swap vyladit nebo zakázat. Obvykle tomu tak není, proto název tohoto příspěvku „téměř vždy“.
– Při vypnutém swapu se problémy s výkonem projeví velmi rychle a zabiják OOM vás může dostat! 🙂
Pro srovnání uvádím výstup free při použití starší verze free z procps-ng-3.3.1 na stejném serveru:
total used free shared buffers cachedMem: 3.7G 3.3G 445M 0B 4.2M 1.7G-/+ buffers/cache: 1.6G 2.1GSwap: 1.8G 308M 1.5G
Tlak na cache jádra a swapování
Teď, když máte swap povolený. Zvažte úpravu tlaku cache serveru a tendence ke swapování (vm.swappiness) podle níže uvedeného návodu, který pochází z předchozího článku: Linuxový server potřebuje upgrade paměti RAM? Zkontrolujte pomocí top, free, vmstat a sar:
vfs_cache_pressure – Řídí tendenci jádra obnovovat paměť, která se používá pro ukládání adresářových a inodových objektů do mezipaměti. (výchozí hodnota = 100, doporučená hodnota 50 až 200)
swappiness – Tento ovládací prvek určuje, jak agresivně bude jádro vyměňovat stránky paměti. Vyšší hodnoty zvýší agresivitu, nižší hodnoty sníží množství swapu. (výchozí hodnota = 60, doporučené hodnoty mezi 1 a 60) Odstraňte swap pro hodnotu 0, ale obvykle se ve většině případů nedoporučuje.
Pro úpravu můžete přidat nebo nahradit tyto řádky v souboru /etc/sysctl.conf. Pokud máte například do upgradu málo paměti, můžete zkusit něco takového:
vm.swappiness=10vm.vfs_cache_pressure=200
Tím se zvýší tlak na mezipaměť, což se může zdát poněkud kontraproduktivní, protože ukládání do mezipaměti je dobré pro výkon. Příliš časté vyměňování však snižuje celkový výkon serveru podstatně více. Neudržování tak velkého množství mezipaměti v paměti tedy pomůže snížit aktivitu swapování. Také při nastavení vm.swappiness na 10 nebo až na 1 se sníží swapování disku.
Na zdravém serveru s velkým množstvím dostupné paměti použijte následující:
vm.swappiness=10vm.vfs_cache_pressure=50
Snížíte tím tlak na mezipaměť. Protože ukládání do mezipaměti je dobré pro výkon, chceme, aby data uložená v mezipaměti zůstala v paměti déle. Since the cache will grow larger, we still want to reduce swapping to not cause increased swap I/O.
To check current values using these commands use:
sudo cat /proc/sys/vm/swappinesssudo cat /proc/sys/vm/vfs_cache_pressure
To enable these settings temporarily without rebooting, use the following commands:
sudo sysctl -w vm.swappiness=10sudo sysctl -w vm.vfs_cache_pressure=50