Izvedba

Kaj je vm.min_free_kbytes in kako ga nastaviti?

Kaj je vm.min_free_kbytes in kako ga nastaviti?
Kaj je vm.min_free_kbytes sysctl nastavljiv za jedro linux in na katero vrednost naj bo nastavljen?  Ta parameter bomo preučili v tem članku in kako vpliva na delujoči sistem Linux.  Preizkusili bomo njegov vpliv na predpomnilnik strani OS in mallocs ter kaj sistemski ukaz prostega prikaza, ko je ta parameter nastavljen.  Naredili bomo nekaj izobraženih ugibanj o idealnih vrednostih za to nastavljivo in pokazali bomo, kako nastaviti vm.min_free_kbytes trajno za preživetje ob ponovnem zagonu.  Torej gremo.

Kako vm.min_free_kbytes deluje

Sistem bo morda potreboval dodelitve pomnilnika, da bo zagotovil pravilno delovanje samega sistema.  Če jedro dovoli dodeljevanje celotnega pomnilnika, se bo morda borilo, ko bo potreboval pomnilnik za redne operacije, da bo OS nemoteno deloval.  Zato jedro ponuja nastavljiv vm.min_free_kbytes.  Nastavljivo bo prisililo upravitelja pomnilnika jedra, da ohrani vsaj X prostega pomnilnika.   Tu je uradna opredelitev iz dokumentacija o jedru linux: »To se uporablja za vsiljevanje VM Linux, da ohrani najmanj kilobajtov prostega.  VM uporablja to številko za izračun vrednosti vodnega žiga [WMARK_MIN] za vsako območje lowmem v sistemu. Vsako območje lowmem dobi število rezerviranih brezplačnih strani glede na njegovo velikost. Za izpolnitev dodelitev PF_MEMALLOC je potrebno nekaj minimalne količine pomnilnika; če to nastavite na manj kot 1024KB, se bo vaš sistem prefinjeno pokvaril in se bo pri velikih obremenitvah lahko zataknil. Če to nastavite previsoko, bo vaša naprava takoj OOM.“

Preverjanje vm.min_free_kbytes deluje

Da bi preizkusil, ali nastavitev min_free_kbytes deluje pravilno, sem ustvaril virtualni primerek linux s samo 3.75 GB RAM-a.  Za analizo sistema uporabite spodnji brezplačni ukaz:

# brezplačno -m

Če pogledamo zgornji pripomoček za brezplačen pomnilnik z uporabo zastavice -m, da se vrednosti natisnejo v MB.  Skupni pomnilnik je 3.5 do 3.75 GB pomnilnika.  Zasede 121 MB pomnilnika, 3.Prosto je 3 GB pomnilnika, medpomnilnik pa porabi 251 MB.  In 3.Na voljo je 3 GB pomnilnika.

Zdaj bomo spremenili vrednost vm.min_free_kbytes in si oglejte, kakšen je vpliv na sistemski pomnilnik.  Novo vrednost bomo odzvali v virtualni datotečni sistem proc, da bomo spremenili vrednost parametra jedra, kot je navedeno spodaj:

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

Vidite lahko, da je bil parameter spremenjen na 1.Približno 5 GB in je začel veljati.  Zdaj pa uporabimo prost znova ukaz za prikaz sprememb, ki jih sistem prepozna.

# brezplačno -m

Prosti pomnilnik in predpomnilnik vmesnika ukaz ne spremenita, količina pomnilnika pa se prikaže kot na voljo je zmanjšana s 3327 na 1222 MB.  Kar je približno zmanjšanje spremembe parametra na 1.5 GB min prostega pomnilnika.

Zdaj pa ustvarimo 2 GB podatkovne datoteke in nato poglejmo, kaj branje te datoteke v predpomnilniku vmesnega pomnilnika naredi vrednostim.  Spodaj je opisano, kako v 2 vrsticah skripta bash ustvarite 2 GB podatkovne datoteke.  Skript bo z ukazom dd ustvaril 35 MB naključne datoteke in jo nato 70-krat kopiral v novo data_file izhod:

# dd, če = / dev / random od = / root / d1.txt število = 1000000
# za i v 'naslednjih 1 70'; naredi echo $ i; mačka / koren / d1.txt >> / root / data_file; Končano

Preberite datoteko in prezrite njeno vsebino, tako da jo preberete in preusmerite na / dev / null, kot je prikazano spodaj:

# cat data_file> / dev / null

Ok, kaj se je zgodilo z našim sistemskim pomnilnikom s tem nizom manevrov, preverimo zdaj:

# brezplačno -m

Analiza zgornjih rezultatov.  Še vedno imamo 1.8 GB prostega pomnilnika, zato je jedro zaščitilo velik del pomnilnika, kot je rezerviran zaradi naše nastavitve min_free_kbytes.  Predpomnilnik medpomnilnika je porabil 1691 MB, kar je manj kot skupna velikost naše podatkovne datoteke, ki je 2.3 GB.  Očitno celo data_file ni bilo mogoče shraniti v predpomnilnik zaradi pomanjkanja razpoložljivega pomnilnika za predpomnilnik medpomnilnika.  Lahko potrdimo, da celotna datoteka ni shranjena v predpomnilniku, temveč časovno določa večkratne poskuse branja datoteke. Če je bil predpomnjen, bi trajal delček sekunde, da bi prebral datoteko.  Poskusimo.

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

Prebrana datoteka je trajala skoraj 20 sekund, kar pomeni, da skoraj zagotovo ni vsa predpomnjena.

Kot eno končno potrditev zmanjšajmo vm.min_free_kbytes, da bo predpomnilnik strani imel več prostora za delovanje, in pričakujemo lahko, da predpomnilnik deluje in branje datoteke postaja veliko hitrejše.

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

Z dodatnim pomnilnikom, ki je na voljo za predpomnjenje, se je čas branja datoteke zmanjšal z 20 sekund pred na .364 sekund z vsem v predpomnilniku.

Zanima me še en poskus.  Kaj se zgodi s klici malloc za dodelitev pomnilnika iz programa C ob tej res visoki vm.nastavitev min_free_kbytes.  Ali bo spodletel malloc?  Ali bo sistem umrl?  Najprej ponastavite vm.nastavitev min_free_kbytes na res visoko vrednost za nadaljevanje poskusov:

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

Poglejmo še enkrat naš prosti spomin:

Teoretično imamo 1.9 GB brezplačno in 515 MB na voljo.  Uporabimo program za testiranje stresa, imenovan stres-ng, da uporabimo nekaj pomnilnika in ugotovimo, kje ne uspemo.  Uporabili bomo vm tester in poskusili dodeliti 1 GB pomnilnika.  Ker smo rezervirali samo 1.5 GB na 3.75 GB sistem, mislim, da bi to moralo delovati.

# stress-ng --vm 1 --vm-bytes 1G --outout 60s
stress-ng: info: [17537] odpremne prašiče: 1 vm
stress-ng: info: [17537] dodelitev predpomnilnika: privzeta velikost predpomnilnika: 46080K
stress-ng: info: [17537] uspešen tek končan v 60.09 s (1 min, 0.09 sekund)
# stress-ng --vm 2 --vm-bytes 1G --timeout 60s
# stress-ng --vm 3 --vm-bytes 1G - timeout 60s

Poskusimo znova z več delavci, lahko poskusimo z 1, 2, 3, 4 delavci in na neki točki ne bi uspelo.  V mojem testu je opravil z 1 in 2 delavci, vendar s 3 delavci ni uspel.

Ponastavimo vm.min_free_kbytes na majhno število in preverite, ali nam to pomaga zagnati 3 stresorje pomnilnika z 1 GB vsakega na 3.75 GB sistema.

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

Tokrat je uspešno tekel brez napak, dvakrat sem poskusil brez težav.  Tako lahko zaključim, da obstaja vedenjska razlika, če je na voljo več pomnilnika za malloc, ko vm.Vrednost min_free_kbytes je nastavljena na nižjo vrednost.

Privzeta nastavitev za vm.min_free_kbytes

Privzeta vrednost nastavitve v mojem sistemu je 67584, kar je približno 1.8% RAM-a v sistemu ali 64 MB. Iz varnostnih razlogov v močno raztreščenem sistemu bi ga rad nekoliko povečal, morda na 128 MB, da bi omogočil bolj rezerviran prosti pomnilnik, vendar se privzeta vrednost za povprečno uporabo zdi dovolj smiselna.  Uradna dokumentacija opozarja na previsoko vrednost.  Nastavitev na 5 ali 10% sistemskega RAM-a verjetno ni predvidena uporaba nastavitve in je previsoka.

Nastavitev vm.min_free_kbytes za preživetje ob ponovnem zagonu

Da bi zagotovili, da lahko nastavitev preživi pri ponovnem zagonu in ob ponovnem zagonu ni obnovljena na privzete vrednosti, nastavitev sysctl ohranite tako, da v / etc / sysctl vnesete želeno novo vrednost.conf.

Zaključek

Videli smo, da vm.min_free_kbytes nastavljivo jedro linuxa je mogoče spremeniti in lahko rezervira pomnilnik v sistemu, da se zagotovi stabilnost sistema, zlasti med veliko uporabo in dodeljevanjem težkega pomnilnika.  Privzete nastavitve so lahko nekoliko prenizke, zlasti v sistemih z velikim pomnilnikom in bi jih bilo treba skrbno povečati.  Videli smo, da pomnilnik, ki ga rezervira ta nastavljiv sistem, preprečuje, da bi predpomnilnik OS uporabljal ves pomnilnik in tudi nekaterim operacijam malloc ne bi uporabljal celotnega pomnilnika.

Nadzirajte in upravljajte gibanje miške med več monitorji v sistemu Windows 10
Upravitelj miške z dvojnim zaslonom vam omogoča nadzor in konfiguriranje gibanja miške med več monitorji, tako da upočasni gibanje blizu meje. Windows...
WinMouse vam omogoča prilagajanje in izboljšanje premikanja kazalca miške v računalniku z operacijskim sistemom Windows
Če želite izboljšati privzete funkcije kazalca miške, uporabite brezplačno programsko opremo WinMouse. Dodaja več funkcij, s pomočjo katerih boste kar...
Levi gumb miške ne deluje v sistemu Windows 10
Če s prenosnikom ali namiznim računalnikom uporabljate namensko miško, vendar gumb miške z levim klikom ne deluje v operacijskem sistemu Windows 10/8/...