Spektaklis

Kas yra vm.min_free_kbytes ir kaip jį sureguliuoti?

Kas yra vm.min_free_kbytes ir kaip jį sureguliuoti?
Kas yra vm.„min_free_kbytes sysctl“, suderinamas su „Linux“ branduoliu, ir kokia vertė turėtų būti nustatyta?  Šiame straipsnyje nagrinėsime šį parametrą ir tai, kaip jis veikia veikiančią „Linux“ sistemą.  Mes išbandysime jo poveikį OS puslapio talpyklai ir mallocs ir ką rodo sistemos nemokama komanda, kai šis parametras yra nustatytas.  Mes atliksime keletą išsilavinusių šio derinamo vaizdo idealių verčių ir parodysime, kaip nustatyti vm.Min_free_kbytes visam laikui išgyventi iš naujo.  Taigi einam.

Kaip vm.veikia min_free_kbytes

Sistemai gali prireikti atminties paskirstymo, kad būtų užtikrintas tinkamas pačios sistemos veikimas.  Jei branduolys leidžia paskirstyti visą atmintį, jis gali kovoti, kai reikia atminties reguliarioms operacijoms, kad OS veiktų sklandžiai.  Štai kodėl branduolys teikia derinamą vm.min_free_kbytes.  Derinamas privers branduolio atminties tvarkytuvą išlaikyti bent X laisvos atminties kiekį.   Čia pateikiamas oficialus apibrėžimas iš Linux branduolio dokumentacija: „Tai naudojama norint priversti„ Linux VM “išlaikyti minimalų kilobaitų skaičių.  VM naudoja šį skaičių, kad apskaičiuotų vandens ženklo [WMARK_MIN] reikšmę kiekvienai sistemos žemiausio lygio zonai. Kiekviena žemų rankų zona gauna rezervuotų nemokamų puslapių skaičių, proporcingai jo dydžiui. Tam, kad būtų patenkinti PF_MEMALLOC paskirstymai, reikia šiek tiek minimalios atminties; jei nustatysite tai mažesnę nei 1024 KB, jūsų sistema bus subtiliai sugadinta ir linkusi į aklavietę esant didelėms apkrovoms. Nustačius tai per aukštai, jūsų mašina iškart sužlugs.„

Patvirtinant vm.Min_free_kbytes Veikia

Norėdami patikrinti, ar min_free_kbytes nustatymas veikia taip, kaip suprojektuota, sukūriau „Linux“ virtualų egzempliorių, kuriame yra tik 3.75 GB RAM.  Norėdami analizuoti sistemą, naudokite toliau pateiktą nemokamą komandą:

# nemokamai -m

Pažvelgę ​​į aukščiau esančią laisvos atminties priemonę naudodami žymeklį -m, kad reikšmės būtų atspausdintos MB.  Bendra atmintis yra 3.Nuo 5 iki 3.75 GB atminties.  Naudojama 121 MB atmintis, 3.3 GB laisvos atminties, 251 MB naudoja buferinė talpykla.  3.Yra 3 GB atminties.

Dabar mes pakeisime vm vertę.min_free_kbytes ir pažiūrėkite, koks poveikis yra sistemos atmintyje.  Mes pakartosime naują vertę proc virtualioje failų sistemoje, kad pakeistume branduolio parametro vertę, kaip nurodyta toliau:

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

Matote, kad parametras pakeistas į 1.Apytiksliai 5 GB ir įsigaliojo.  Dabar naudokime Laisvas dar kartą, kad pamatytumėte visus sistemos atpažintus pakeitimus.

# nemokamai -m

Laisva atmintis ir buferio talpykla nepakeičiama, tačiau atminties kiekis rodomas kaip prieinama buvo sumažintas nuo 3327 iki 1222 MB.  Tai yra apytikslis parametro pokyčio sumažinimas iki 1.5 GB min. Laisvos atminties.

Dabar sukurkime 2 GB duomenų failą ir pažiūrėkime, ką tas failas perskaito buferio talpykloje.  Štai kaip sukurti 2 GB duomenų failą toliau pateiktose 2 „bash“ scenarijaus eilutėse.  Scenarijus naudodamas komandą dd sugeneruos 35 MB atsitiktinį failą, tada 70 kartų nukopijuos jį į naują informacijos rinkmena išvestis:

# dd, jei = / dev / atsitiktinis = / root / d1.txt skaičius = 1000000
# už i „1 70 sekoje“; daryti aidą $ i; katė / šaknis / d1.txt >> / root / data_file; padaryta

Perskaitykime failą ir nepaisykime turinio, skaitydami ir peradresuodami failą į / dev / null, kaip nurodyta toliau:

# cat data_file> / dev / null

Gerai, kas nutiko mūsų sistemos atmintyje atlikus šiuos manevrus, patikrinkime tai dabar:

# nemokamai -m

Analizuojant aukščiau pateiktus rezultatus.  Mes vis dar turime 1.8 GB laisvos atminties, todėl branduolys apsaugojo didelę atminties dalį, rezervuotą dėl mūsų min_free_kbytes nustatymo.  Buferio talpykloje sunaudota 1691 MB, o tai yra mažiau nei bendras mūsų duomenų failo dydis, kuris yra 2.3 GB.  Matyt, visa informacijos rinkmena negalėjo būti laikoma talpykloje, nes trūksta atminties, kurią būtų galima naudoti buferinei talpyklai.  Galime patvirtinti, kad visas failas nėra saugomas talpykloje, bet laikas kartoja bandymus skaityti failą. Jei ji buvo talpykloje, failo skaitymas užtruko sekundės dalį.  Pamėginkime.

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

Perskaitytas failas užtruko beveik 20 sekundžių, o tai reiškia, kad beveik visos jos talpyklos.

Kaip vieną galutinį patvirtinimą sumažinkime vm.min_free_kbytes, kad puslapio talpykloje būtų daugiau vietos veikti, ir mes galime tikėtis, kad talpykla veikia ir failas skaitomas daug greičiau.

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

Turint papildomą atmintį, kurią galima laikyti talpykloje, failo skaitymo laikas sumažėjo nuo 20 sekundžių iki .364 sekundės su visa tai talpykloje.

Man įdomu atlikti dar vieną eksperimentą.  Kas atsitinka su „Malloc“ skambučiais, norint paskirstyti atmintį iš C programos, atsižvelgiant į šį tikrai aukštą vm.„min_free_kbytes“ nustatymas.  Ar nepavyks malloc?  Ar sistema numirs?  Pirmiausia iš naujo nustatykite vm.Min_free_kbytes nustatymas į tikrai didelę vertę, norint atnaujinti eksperimentus:

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

Pažvelkime dar kartą į savo laisvą atmintį:

Teoriškai turime 1.9 GB laisvos ir 515 MB laisvos vietos.  Panaudokime testavimo nepalankiausiomis sąlygomis programą, vadinamą stress-ng, norėdami panaudoti šiek tiek atminties ir pamatyti, kur mums nepavyksta.  Mes naudosime vm testerį ir bandysime skirti 1 GB atminties.  Kadangi mes rezervavome tik 1.5 GB 3.75 GB sistema, manau, tai turėtų veikti.

# stress-ng --vm 1 --vm baitai 1G - 60-ojo laiko pertrauka
stress-ng: info: [17537] kiaulių siuntimas: 1 vm
stress-ng: info: [17537] talpyklos paskirstymas: numatytasis talpyklos dydis: 46080K
stress-ng: info: [17537] sėkmingas bėgimas baigtas 60 m.09s (1 min., 0.09 sek.)
# stress-ng --vm 2 --vm baitai 1G - 60-ojo laiko pertrauka
# stress-ng --vm 3 --vm baitai 1G - 60-ojo laiko pertrauka

Pabandykime dar kartą su daugiau darbuotojų, galime išbandyti 1, 2, 3, 4 darbuotojus ir tam tikru momentu tai turėtų nepavykti.  Mano teste jis praėjo su 1 ir 2 darbuotojais, bet nepavyko su 3 darbuotojais.

Iš naujo nustatykime vm.min_free_kbytes iki mažo skaičiaus ir sužinokite, ar tai padeda mums paleisti 3 atminties stresorius su 1 GB kiekvienam 3.75 GB sistema.

# echo 67584> / proc / sys / vm / min_free_kbytes
# stress-ng --vm 3 --vm baitai 1G - 60-ojo laiko pertrauka

Šį kartą jis sėkmingai veikė be klaidų, bandžiau du kartus be problemų.  Taigi galiu padaryti išvadą, kad yra daugiau elgesio skirtumų turint daugiau atminties mallocui, kai vm.Min_free_kbytes reikšmė nustatyta į mažesnę vertę.

Numatytasis vm nustatymas.min_free_kbytes

Numatytoji mano sistemos nustatymo vertė yra 67584, tai yra apie 1.8% sistemos RAM arba 64 MB. Saugumo sumetimais labai sugadintoje sistemoje aš linkęs ją šiek tiek padidinti galbūt iki 128 MB, kad būtų laisvesnė laisva atmintis, tačiau vidutiniam naudojimui numatytoji vertė atrodo pakankamai protinga.  Oficialiuose dokumentuose įspėjama, kad vertė yra per didelė.  Jo nustatymas į 5 arba 10% sistemos RAM greičiausiai nėra numatytas nustatymo naudojimas ir yra per didelis.

Nustatant vm.min_free_kbytes išgyventi iš naujo

Norėdami įsitikinti, kad nustatymas gali išlikti iš naujo paleidus, o perkraunant jis nebus atstatytas į numatytąsias reikšmes, įsitikinkite, kad sysctl nustatymas yra pastovus, įvedant norimą naują reikšmę į / etc / sysctl.konf failas.

Išvada

Matėme, kad vm.Min_free_kbytes „Linux“ branduolio derinimas gali būti pakeistas ir gali rezervuoti atmintį sistemoje, siekiant užtikrinti sistemos stabilumą, ypač intensyvaus naudojimo ir didelės atminties paskirstymo metu.  Numatytieji nustatymai gali būti šiek tiek per maži, ypač daug atminties turinčiose sistemose, todėl juos reikėtų atsargiai padidinti.  Mes matėme, kad atmintis, kurią rezervuoja šis derinamas, neleidžia OS talpyklai naudoti visos atminties, taip pat neleidžia kai kurioms „Malloc“ operacijoms naudoti visą atmintį.

Kaip naudoti „AutoKey“, norint automatizuoti „Linux“ žaidimus
„AutoKey“ yra darbalaukio automatizavimo įrankis, skirtas „Linux“ ir „X11“, užprogramuotas „Python 3“, „GTK“ ir „Qt“. Naudodami scenarijų ir „MACRO“ f...
Kaip parodyti FPS skaitiklį „Linux“ žaidimuose
„Linux“ žaidimai gavo didelį postūmį, kai „Valve“ paskelbė „Linux“ palaikymą „Steam“ klientui ir jų žaidimams 2012 m. Nuo tada daugelis AAA ir indie ž...
Kaip atsisiųsti ir paleisti „Sid Meier Civilization VI“ sistemoje „Linux“
Įvadas į žaidimą „Civilization 6“ yra šiuolaikinė klasikinės koncepcijos, pristatytos „Age of Empires“ žaidimų serijoje, koncepcija. Idėja buvo gana p...