Výkon

Čo je vm.min_free_kbytes a ako to vyladiť?

Čo je vm.min_free_kbytes a ako to vyladiť?
Čo je vm.min_free_kbytes sysctl laditeľné pre linuxové jadro a na akú hodnotu by mal byť nastavený?  V tomto článku sa budeme zaoberať týmto parametrom a jeho dopadom na fungujúci linuxový systém.  Budeme testovať jeho vplyv na medzipamäť stránok OS a na malloky a na to, čo ukazuje bezplatný príkaz systému, keď je nastavený tento parameter.  Urobíme niekoľko poučených odhadov o ideálnych hodnotách pre tento laditeľný nástroj a ukážeme, ako nastaviť vm.min_free_kbytes natrvalo, aby prežili reštartovanie.  Tak, poďme.

Ako vm.min_free_kbytes funguje

Systém môže vyžadovať pridelenie pamäte, aby sa zabezpečilo správne fungovanie samotného systému.  Ak jadro umožňuje prideliť všetku pamäť, mohlo by to zápasiť, keď by ste potrebovali pamäť na bežné operácie, aby operačný systém fungoval hladko.  Preto jadro poskytuje laditeľný vm.min_free_kbytes.  Laditeľný program prinúti správcu pamäte jadra uchovať najmenej X množstva voľnej pamäte.   Tu je oficiálna definícia z dokumentácia k linuxovému jadru: „Toto sa používa na vynútenie toho, aby operačný systém Linux udržoval minimálny počet kilobajtov voľný.  VM používa toto číslo na výpočet hodnoty vodoznaku [WMARK_MIN] pre každú zónu s nízkym obsahom v systéme. Každá lowmem zóna dostane množstvo rezervovaných stránok zadarmo úmerne k svojej veľkosti. Na uspokojenie pridelení PF_MEMALLOC je potrebné minimálne množstvo pamäte; ak nastavíte túto hodnotu na menej ako 1024 kB, váš systém sa jemne pokazí a bude náchylný na zablokovanie pri vysokom zaťažení. Nastavením tejto príliš vysokej hodnoty sa vaše zariadenie okamžite OOM.„

Potvrdzuje sa vm.min_free_kbytes Works

Aby som otestoval, že nastavenie min_free_kbytes funguje podľa plánu, vytvoril som linuxovú virtuálnu inštanciu iba s 3.75 GB RAM.  Na analýzu systému použite nasledujúci bezplatný príkaz:

# zadarmo -m

Keď sa pozrieme na obslužný program voľnej pamäte vyššie, pomocou príznaku -m sa hodnoty vytlačia v MB.  Celková pamäť je 3.5 až 3.75 GB pamäte.  Je použitých 121 MB pamäte, 3.3 GB pamäte sú zadarmo, 251 MB využíva medzipamäť medzipamäte.  A 3.K dispozícii sú 3 GB pamäte.

Teraz ideme zmeniť hodnotu vm.min_free_kbytes a zistite, aký je dopad na systémovú pamäť.  Odpovieme novú hodnotu na virtuálny súborový systém proc, aby sme zmenili hodnotu parametra jadra, ako je uvedené nižšie:

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

Vidíte, že parameter bol zmenený na 1.Približne 5 GB a nadobudlo platnosť.  Teraz použijeme zadarmo opätovným príkazom zobrazíte všetky zmeny rozpoznané systémom.

# zadarmo -m

Voľná ​​pamäť a vyrovnávacia pamäť sa príkazom nezmenia, ale veľkosť pamäte sa zobrazí ako k dispozícii sa znížila z 3327 na 1222 MB.  Čo je približné zníženie zmeny parametra na 1.5 GB min. Voľnej pamäte.

Teraz poďme vytvoriť 2 GB dátový súbor a potom sa pozrime, čo načítanie tohto súboru do medzipamäte pamäti urobí s hodnotami.  Tu je postup, ako vytvoriť 2 GB dátový súbor v 2 riadkoch bash skriptu nižšie.  Skript vygeneruje náhodný súbor 35 MB pomocou príkazu dd a potom ho 70-krát skopíruje do nového dátový_súbor výkon:

# dd if = / dev / random of = / root / d1.počet txt = 10 000 000
# for i in 'seq 1 70'; urob echo $ i; mačka / koreň / d1.txt >> / root / data_file; hotový

Poďme si prečítať súbor a ignorovať jeho obsah čítaním a presmerovaním súboru na / dev / null, ako je uvedené nižšie:

# cat data_file> / dev / null

Dobre, čo sa stalo s našou systémovou pamäťou s touto sadou manévrov, skontrolujme to teraz:

# zadarmo -m

Analýza vyššie uvedených výsledkov.  Stále máme 1.8 GB voľnej pamäte, takže jadro chránilo veľkú časť pamäte ako vyhradenú kvôli nášmu nastaveniu min_free_kbytes.  Vyrovnávacia pamäť používala 1 691 MB, čo je menej ako celková veľkosť nášho dátového súboru, ktorá je 2.3 GB.  Zrejme celá dátový_súbor nebolo možné uložiť do medzipamäte z dôvodu nedostatku dostupnej pamäte na použitie pre medzipamäť medzipamäte.  Môžeme potvrdiť, že celý súbor nie je uložený v pamäti cache, ale načasovanie opakovaných pokusov o prečítanie súboru. Ak by bol v pamäti cache, prečítanie súboru by trvalo zlomok sekundy.  Poďme to skúsiť.

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

Čítanie súboru trvalo takmer 20 sekúnd, čo znamená, že takmer určite nie všetky sú v pamäti cache.

Ako jednu konečnú validáciu znížime vm.min_free_kbytes, aby medzipamäť stránky mala viac priestoru na prácu, a môžeme očakávať, že bude medzipamäť fungovať a čítanie súboru bude oveľa rýchlejšie.

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

S dodatočnou pamäťou dostupnou na ukladanie do pamäte cache klesol čas čítania z 20 sekúnd pred na .364 sekúnd so všetkým v medzipamäti.

Som zvedavý na ďalší experiment.  Čo sa stane s hovormi malloc na pridelenie pamäte programu C tvárou v tvár tomuto skutočne vysokému VM.nastavenie min_free_kbytov.  Bude to zlyhať Malloc?  Zomrie systém?  Najskôr resetujte vm.nastavenie min_free_kbytes na skutočne vysokú hodnotu, aby sa obnovili naše experimenty:

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

Pozrime sa ešte raz na našu voľnú pamäť:

Teoreticky máme 1.9 GB zadarmo a 515 MB k dispozícii.  Využime program záťažových testov s názvom stress-ng, aby sme využili trochu pamäte a zistili, kde zlyhávame.  Použijeme vm tester a pokúsime sa prideliť 1 GB pamäte.  Pretože sme rezervovali iba 1.5 GB na 3.75 GB systém, myslím, že by to malo fungovať.

# stress-ng --vm 1 --vm-bytes 1G --timeout 60s
stress-ng: info: [17537] dispečing ošípaných: 1 vm
stress-ng: info: [17537] pridelenie cache: predvolená veľkosť cache: 46080K
stress-ng: info: [17537] úspešný beh bol dokončený v 60.09 s (1 min, 0.09 sekúnd)
# stress-ng --vm 2 --vm-bytes 1G --timeout 60s
# stress-ng --vm 3 --vm-bytes 1G --timeout 60s

Skúsme to znova s ​​viacerými pracovníkmi, môžeme vyskúšať 1, 2, 3, 4 pracovníkov a v určitom okamihu by to malo zlyhať.  V mojom teste obstál u 1 a 2 pracovníkov, ale neuspel u 3 pracovníkov.

Obnovme vm.min_free_kbytes na nízke číslo a uvidíte, či nám to pomôže spustiť 3 stresové faktory pamäte, každý s 1 GB na 3.75 GB systém.

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

Tentokrát to prebehlo úspešne bez chyby, vyskúšal som to dvakrát bez problémov.  Takže môžem dospieť k záveru, že existuje behaviorálny rozdiel v dostupnosti väčšej pamäte pre malloc, keď je vm.hodnota min_free_kbytes je nastavená na nižšiu hodnotu.

Predvolené nastavenie pre vm.min_free_kbytes

Predvolená hodnota pre nastavenie v mojom systéme je 67584, čo je asi 1.8% RAM v systéme alebo 64 MB. Z bezpečnostných dôvodov v silne zmlátenom systéme by som mal tendenciu ho trochu zvýšiť na 128 MB, aby sa zaistilo rezervovanejšie voľné miesto v pamäti, avšak pre priemerné použitie sa predvolená hodnota zdá byť dostatočne rozumná.  Oficiálna dokumentácia varuje pred príliš vysokou hodnotou.  Nastavenie na 5 alebo 10% systémovej pamäte RAM pravdepodobne nie je zamýšľaným použitím nastavenia a je príliš vysoké.

Nastavenie vm.min_free_kbytes na prežitie reštartov

Aby ste zaistili, že nastavenie prežije reštartovanie a pri reštarte sa neobnoví na pôvodné hodnoty, nezabudnite zabezpečiť trvalé nastavenie sysctl vložením požadovanej novej hodnoty do súboru / etc / sysctl.conf súbor.

Záver

Videli sme, že vm.laditeľné jadro linuxového jadra min_free_kbytes je možné upraviť a rezervovať pamäť v systéme, aby sa zabezpečila stabilnejšia stabilita systému, najmä pri nadmernom používaní a nadmernom prideľovaní pamäte.  Predvolené nastavenia môžu byť trochu príliš nízke, najmä v systémoch s vysokou pamäťou, a mali by sa považovať za opatrné.  Videli sme, že pamäť rezervovaná týmto laditeľným prvkom zabráni tomu, aby vyrovnávacia pamäť OS využívala všetku pamäť, a tiež aby zabránila niektorým operáciám malloc využívať celú pamäť tiež.

Hry Vulkan pre používateľov systému Linux
Vulkan pre používateľov systému Linux
S každou novou generáciou grafických kariet vidíme, že vývojári hier posúvajú hranice grafickej vernosti a prichádzajú o krok bližšie k fotorealizmu. ...
Hry OpenTTD vs Simutrans
OpenTTD vs Simutrans
Vytvorenie vlastnej simulácie dopravy môže byť zábavné, relaxačné a mimoriadne lákavé. Preto sa musíte uistiť, že vyskúšate čo najviac hier, aby ste n...
Hry Výukový program OpenTTD
Výukový program OpenTTD
OpenTTD je jednou z najpopulárnejších obchodných simulačných hier. V tejto hre musíte vytvoriť úžasné dopravné podnikanie. Začnete však na začiatku ok...