Výkon

Co je vm.min_free_kbytes a jak to naladit?

Co je vm.min_free_kbytes a jak to naladit?
Co je vm.min_free_kbytes sysctl laditelný pro linuxové jádro a na jakou hodnotu by měl být nastaven?  Tento parametr a jeho dopad na běžící linuxový systém si prostudujeme v tomto článku.  Budeme testovat jeho dopad na mezipaměť stránek OS a na malloky a na to, co ukazuje bezplatný příkaz systému, když je nastaven tento parametr.  Uděláme několik poučných odhadů ideálních hodnot pro tento laditelný soubor a ukážeme, jak nastavit vm.min_free_kbytes trvale, aby přežily restarty.  Tak pojďme.

Jak vm.min_free_kbytes funguje

Systém může vyžadovat přidělení paměti, aby bylo zajištěno správné fungování samotného systému.  Pokud jádro umožňuje alokovat veškerou paměť, mohlo by se to potýkat s potřebou paměti pro běžné operace, aby operační systém fungoval hladce.  Proto jádro poskytuje laditelný vm.min_free_kbytes.  Laditelné vynutí správce paměti jádra, aby udržel alespoň X množství volné paměti.   Zde je oficiální definice z dokumentace linuxového jádra: „Toto se používá k vynucení virtuálního počítače s Linuxem, aby udržel volný minimální počet kilobajtů.  Virtuální počítač používá toto číslo k výpočtu hodnoty vodoznaku [WMARK_MIN] pro každou zónu lowmem v systému. Každá lowmem zóna dostane počet rezervovaných stránek zdarma úměrně k její velikosti. K uspokojení přidělení PF_MEMALLOC je potřeba určité minimální množství paměti; pokud nastavíte tuto hodnotu na méně než 1024 kB, váš systém se nenápadně rozbije a bude náchylný k zablokování při vysokém zatížení. Nastavením této příliš vysoké hodnoty se váš stroj okamžitě OOM."

Ověřování vm.min_free_kbytes Works

Aby bylo možné otestovat, že nastavení min_free_kbytes funguje tak, jak bylo navrženo, vytvořil jsem virtuální instanci linuxu pouze s 3.75 GB RAM.  Pro analýzu systému použijte níže uvedený bezplatný příkaz:

# zdarma -m

Podíváme-li se výše na obslužný program volné paměti pomocí příznaku -m, aby byly hodnoty vytištěny v MB.  Celková paměť je 3.5 až 3.75 GB paměti.  Je použito 121 MB paměti, 3.3 GB paměti je zdarma, 251 MB využívá mezipaměť mezipaměti.  A 3.K dispozici jsou 3 GB paměti.

Nyní změníme hodnotu vm.min_free_kbytes a uvidíte, jaký je dopad na systémovou paměť.  Odpovíme novou hodnotu na virtuální souborový systém proc, abychom změnili hodnotu parametru jádra, jak je uvedeno níže:

# echo 1500000> / proc / sys / vm / min_free_kbytes
# sysctl vm.min_free_kbytes

Vidíte, že parametr byl změněn na 1.Přibližně 5 GB a vstoupilo v platnost.  Nyní použijeme volný, uvolnit znovu zobrazte všechny změny rozpoznané systémem.

# zdarma -m

Volná paměť a mezipaměť vyrovnávací paměti se příkazem nezmění, ale velikost paměti se zobrazí jako k dispozici byla snížena z 3327 na 1222 MB.  Což je přibližné snížení změny parametru na 1.5 GB min. Volné paměti.

Nyní vytvořme 2 GB datový soubor a poté uvidíme, co čtení tohoto souboru do mezipaměti vyrovnávací paměti způsobí hodnotám.  Zde je návod, jak vytvořit 2GB datový soubor ve 2 řádcích bash skriptu níže.  Skript vygeneruje náhodný soubor 35 MB pomocí příkazu dd a poté jej 70krát zkopíruje do nového datový soubor výstup:

# dd if = / dev / random of = / root / d1.počet txt = 10 000 000
# for i in 'seq 1 70'; dělat echo $ i; kočka / kořen / d1.txt >> / root / data_file; Hotovo

Přečti si soubor a ignorujme obsah čtením a přesměrováním souboru na / dev / null podle níže:

# cat data_file> / dev / null

Dobře, co se stalo s naší systémovou pamětí s touto sadou manévrů, pojďme to teď zkontrolovat:

# zdarma -m

Analýza výše uvedených výsledků.  Stále máme 1.8 GB volné paměti, takže jádro chránilo velkou část paměti jako rezervovanou kvůli našemu nastavení min_free_kbytes.  Vyrovnávací paměť používala 1691 MB, což je menší než celková velikost našeho datového souboru, která je 2.3 GB.  Zřejmě celá datový soubor nelze uložit do mezipaměti z důvodu nedostatku dostupné paměti pro mezipaměť vyrovnávací paměti.  Můžeme ověřit, že celý soubor není uložen v mezipaměti, ale načasování opakovaných pokusů o čtení souboru. Pokud by byl v mezipaměti, čtení souboru by trvalo zlomek sekundy.  Pojďme to zkusit.

# time cat data_file> / dev / null
# time cat data_file> / dev / null

Čtení souboru trvalo téměř 20 sekund, což znamená, že téměř jistě ne všechny uložené v mezipaměti.

Jako jednu finální validaci pojďme snížit vm.min_free_kbytes, aby mezipaměť stránky měla více prostoru pro provoz, a můžeme očekávat, že bude mezipaměť fungovat a čtení souboru bude mnohem rychlejší.

# echo 67584> / proc / sys / vm / min_free_kbytes
# time cat data_file> / dev / null
# time cat data_file> / dev / null

S extra pamětí dostupnou pro ukládání do mezipaměti klesl čas čtení souboru z 20 sekund před na .364 sekund, vše v mezipaměti.

Jsem zvědavý na další experiment.  Co se stane s malloc voláními k přidělení paměti programu C tváří v tvář tomuto opravdu vysokému vm.min_free_kbytes nastavení.  Zklame to malloc?  Zemře systém?  Nejprve resetujte vm.nastavení min_free_kbytes na opravdu vysokou hodnotu pro obnovení našich experimentů:

# echo 1500000> / proc / sys / vm / min_free_kbytes

Podívejme se znovu na naši volnou paměť:

Teoreticky máme 1.9 GB zdarma a 515 MB k dispozici.  Využijeme program zátěžového testu s názvem stress-ng, abychom využili trochu paměti a zjistili, kde selháváme.  Použijeme vm tester a pokusíme se přidělit 1 GB paměti.  Protože jsme rezervovali pouze 1.5 GB na 3.75 GB systém, myslím, že by to mělo fungovat.

# stress-ng --vm 1 --vm-bytes 1G --timeout 60s
stress-ng: info: [17537] odeslání prasat: 1 vm
stress-ng: info: [17537] přidělení mezipaměti: výchozí velikost mezipaměti: 46080K
stress-ng: info: [17537] úspěšný běh dokončen za 60.09 s (1 min, 0.09 s)
# stress-ng --vm 2 --vm-bytes 1G --timeout 60s
# stress-ng --vm 3 --vm-bytes 1G --timeout 60s

Zkusme to znovu s více pracovníky, můžeme zkusit 1, 2, 3, 4 pracovníky a v určitém okamžiku by to mělo selhat.  V mém testu prošel s 1 a 2 pracovníky, ale selhal u 3 pracovníků.

Pojďme resetovat vm.min_free_kbytes na nízké číslo a uvidíme, jestli nám to pomůže spustit 3 paměťové stresory, každý s 1 GB na 3.75GB systém.

# echo 67584> / proc / sys / vm / min_free_kbytes
# stress-ng --vm 3 --vm-bytes 1G --timeout 60s

Tentokrát to proběhlo úspěšně bez chyby, zkusil jsem to dvakrát bez problémů.  Mohu tedy dojít k závěru, že existuje behaviorální rozdíl v dostupnosti více paměti pro malloc, když je vm.hodnota min_free_kbytes je nastavena na nižší hodnotu.

Výchozí nastavení pro vm.min_free_kbytes

Výchozí hodnota pro nastavení v mém systému je 67584, což je asi 1.8% RAM v systému nebo 64 MB. Z bezpečnostních důvodů na silně otřeseném systému bych měl tendenci jej trochu zvýšit, možná na 128 MB, abych umožnil více rezervované volné paměti, ale pro průměrné použití se výchozí hodnota zdá dostatečně rozumná.  Oficiální dokumentace varuje před příliš vysokou hodnotou.  Nastavení na 5 nebo 10% systémové paměti RAM pravděpodobně není zamýšleným použitím nastavení a je příliš vysoké.

Nastavení vm.min_free_kbytes, aby přežily restarty

Aby bylo zajištěno, že nastavení přežije restartování a nebude při restartování obnoveno na výchozí hodnoty, nezapomeňte nastavit sysctl jako trvalé vložením požadované nové hodnoty do / etc / sysctl.soubor conf.

Závěr

Viděli jsme, že vm.laditelné jádro linuxového min_free_kbytes lze upravit a může rezervovat paměť v systému, aby byl zajištěn stabilnější systém, zejména při vysokém používání a velkém přidělování paměti.  Výchozí nastavení může být trochu příliš nízké, zejména na systémech s vysokou pamětí, a mělo by být považováno za pečlivě zvýšeno.  Viděli jsme, že paměť rezervovaná tímto laditelným systémem brání mezipaměti OS používat celou paměť a také brání tomu, aby některé operace malloc nevyužily také celou paměť.

Top 5 ergonomických produktů pro počítačové myši pro Linux
Způsobuje dlouhodobé používání počítače bolest zápěstí nebo prstů? Trpíte ztuhlými klouby a neustále si musíte třást ruce? Cítíte pálivou bolest pokaž...
Jak změnit nastavení myši a touchpadu pomocí Xinput v Linuxu
Většina linuxových distribucí je ve výchozím nastavení dodávána s knihovnou „libinput“ pro zpracování vstupních událostí v systému. Může zpracovávat v...
Přemapujte tlačítka myši odlišně pro jiný software pomocí ovládání myší X-Mouse
Možná potřebujete nástroj, který by mohl změnit ovládání myši u každé aplikace, kterou používáte. V takovém případě můžete vyzkoušet aplikaci s názvem...