Izvođenje

Što je vm.min_free_kbytes i kako ga podesiti?

Što je vm.min_free_kbytes i kako ga podesiti?
Što je vm.min_free_kbytes sysctl prilagodljiv za linux kernel i na koju vrijednost treba biti postavljen?  U ovom ćemo članku proučiti ovaj parametar i njegov utjecaj na pokrenuti linux sustav.  Testirat ćemo njegov utjecaj na predmemoriju OS stranice i na malloc-e te ono što naredba besplatnog sustava prikazuje kada se postavi ovaj parametar.  Napravit ćemo neka obrazovana nagađanja o idealnim vrijednostima za ovu prilagodljivu i pokazati ćemo kako postaviti vm.min_free_kbytes trajno za preživljavanje ponovnog pokretanja.  Pa, idemo.

Kako vm.min_free_kbytes radi

Dodjela memorije može biti potrebna sustavu kako bi se osiguralo pravilno funkcioniranje samog sustava.  Ako kernel dopušta dodjelu sve memorije, mogao bi se boriti kada mu je potrebna memorija za redovite operacije kako bi OS radio nesmetano.  Zbog toga kernel nudi prilagodljivi vm.min_free_kbytes.  Podesivo će prisiliti upravitelj memorije jezgre da zadrži najmanje X količine slobodne memorije.   Evo službene definicije iz linux kernel dokumentacija: „Ovo se koristi za prisiljavanje Linux VM-a da održi minimalni broj kilobajta slobodnim.  VM koristi ovaj broj za izračunavanje vrijednosti vodenog žiga [WMARK_MIN] za svaku zonu lowmem u sustavu. Svaka lowmem zona dobiva određeni broj rezerviranih besplatnih stranica proporcionalno veličini. Potrebna je minimalna količina memorije da bi se zadovoljila PF_MEMALLOC dodjela; ako postavite ovo na manje od 1024 KB, vaš će sustav postati suptilno slomljen i sklon zastoju pod velikim opterećenjima. Ako postavite ovo previsoko, vaš će stroj odmah OOM.“

Provjera valjanosti vm.min_free_kbytes Radi

Kako bih testirao da postavka min_free_kbytes radi kako je dizajnirana, stvorio sam linux virtualnu instancu sa samo 3.75 GB RAM-a.  Koristite besplatnu naredbu u nastavku za analizu sustava:

# besplatno -m

Gledajući gornji uslužni program za besplatnu memoriju pomoću zastavice -m da bi se vrijednosti ispisale u MB.  Ukupna memorija je 3.5 do 3.75 GB memorije.  Upotrijebljeno je 121 MB memorije, 3.3 GB memorije je besplatno, 251 MB koristi predmemorija međuspremnika.  I 3.Dostupno je 3 GB memorije.

Sada ćemo promijeniti vrijednost vm.min_free_kbytes i pogledajte kakav je utjecaj na sistemsku memoriju.  Odjeknut ćemo novu vrijednost u virtualni datotečni sustav proc kako bismo promijenili vrijednost parametra jezgre prema dolje:

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

Vidite da je parametar promijenjen u 1.Otprilike 5 GB i stupio je na snagu.  Sada upotrijebimo besplatno ponovo naredbu da biste vidjeli bilo kakve promjene prepoznate od sustava.

# besplatno -m

Naredba ne mijenja slobodnu memoriju i predmemoriju međuspremnika, ali količina memorije prikazuje se kao dostupno smanjen je s 3327 na 1222 MB.  Što je približno smanjenje promjene parametra na 1.5 GB min slobodne memorije.

Ajmo sada stvoriti datoteku podataka od 2 GB i onda vidjeti što čitanje te datoteke u predmemoriji međuspremnika čini vrijednostima.  Evo kako stvoriti datoteku podataka od 2 GB u 2 retka bash skripte u nastavku.  Skripta će generirati slučajnu datoteku od 35 MB pomoću naredbe dd, a zatim će je 70 puta kopirati u novu podatkovna datoteka izlaz:

# dd ako je = / dev / random od = / root / d1.txt broj = 1000000
# za i u 'seq. 1 70'; odzvanjati $ i; mačka / korijen / d1.txt >> / root / data_file; gotovo

Pročitajmo datoteku i zanemarimo sadržaj čitanjem i preusmjeravanjem datoteke na / dev / null kako je navedeno u nastavku:

# mačka data_file> / dev / null

Ok, što se dogodilo s našom sistemskom memorijom s ovim nizom manevara, provjerimo to sada:

# besplatno -m

Analizirajući gornje rezultate.  Još uvijek imamo 1.8 GB slobodne memorije, tako da je kernel zaštitio velik dio memorije rezerviran zbog naše postavke min_free_kbytes.  Predmemorija međuspremnika koristi 1691 MB, što je manje od ukupne veličine naše podatkovne datoteke koja iznosi 2.3 GB.  Očito čitav podatkovna datoteka nije moguće pohraniti u predmemoriju zbog nedostatka dostupne memorije za predmemoriju međuspremnika.  Možemo potvrditi da cijela datoteka nije pohranjena u predmemoriji, ali vremenski određuje ponovljene pokušaje čitanja datoteke. Da je predmemoriran, trebao bi biti djelić sekunde za čitanje datoteke.  Pokušajmo.

# time cat_datoteka_datoteka> / dev / null
# time cat_datoteka_datoteka> / dev / null

Čitanje datoteke trajalo je gotovo 20 sekundi, što znači da gotovo sigurno nije sva predmemorirana.

Kao zadnju provjeru valjanosti, smanjimo vm.min_free_kbytes kako bi predmemorija stranica imala više prostora za rad, a možemo očekivati ​​da će predmemorija raditi i kako se datoteka čita mnogo brže.

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

S dodatnom memorijom dostupnom za predmemoriranje vrijeme čitanja datoteke palo je s 20 sekundi prije na .364 sekunde sa svim u predmemoriji.

Radoznao sam napraviti još jedan eksperiment.  Što se događa s malloc pozivima za dodjelu memorije iz programa C naspram ovog stvarno visokog vm-a.postavka min_free_kbytes.  Hoće li propasti malloc?  Hoće li sustav umrijeti?  Prvo resetirajte vm.postavka min_free_kbytes na stvarno visoku vrijednost za nastavak naših eksperimenata:

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

Pogledajmo ponovno naše slobodno sjećanje:

Teoretski imamo 1.9 GB besplatno i 515 MB na raspolaganju.  Upotrijebimo program za testiranje stresa nazvan stres-ng kako bismo iskoristili malo memorije i vidjeli gdje ne uspijevamo.  Upotrijebit ćemo vm tester i pokušati dodijeliti 1 GB memorije.  Budući da smo rezervirali samo 1.5 GB na 3.Sustav od 75 GB, pretpostavljam da bi ovo trebalo raditi.

# stress-ng --vm 1 --vm-bytes 1G --timeout 60s
stress-ng: info: [17537] otpremne svinje: 1 vm
stress-ng: info: [17537] dodjela predmemorije: zadana veličina predmemorije: 46080K
stress-ng: info: [17537] uspješno trčanje završeno u 60.09s (1 min, 0 h).09 sekundi)
# stress-ng --vm 2 --vm-bytes 1G - timeout 60s
# stress-ng --vm 3 --vm-bytes 1G - timeout 60s

Pokušajmo ponovo s više radnika, možemo isprobati 1, 2, 3, 4 radnika i u nekom trenutku to ne bi uspjelo.  U mom testu prošlo je s 1 i 2 radnika, ali nije uspjelo s 3 radnika.

Vratimo vm.min_free_kbytes na mali broj i pogledajte hoće li nam to pomoći da pokrenemo 3 memorijska stresora sa po 1 GB na 3.Sustav od 75 GB.

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

Ovaj put je trčao uspješno bez greške, dva puta sam ga pokušao bez problema.  Stoga mogu zaključiti da postoji razlika u ponašanju ako imamo više memorije na raspolaganju za malloc, kada vm.Vrijednost min_free_kbytes postavljena je na nižu vrijednost.

Zadana postavka za vm.min_slobodnih_bajta

Zadana vrijednost za postavku na mom sustavu je 67584 što je oko 1.8% RAM-a na sustavu ili 64 MB. Iz sigurnosnih razloga na jako razbijenom sustavu, nastojao bih ga malo povećati, možda na 128 MB, kako bih omogućio rezerviraniju slobodnu memoriju, no za prosječnu upotrebu zadana vrijednost čini se dovoljno razumnom.  Službena dokumentacija upozorava na to da je vrijednost previsoka.  Postavljanje na 5 ili 10% RAM-a sustava vjerojatno nije namjeravano korištenje postavke i previsoko je.

Postavljanje vm.min_free_kbytes za preživljavanje ponovnog pokretanja

Kako bi se osiguralo da postavka može preživjeti ponovno podizanje sustava i neće se vratiti na zadane vrijednosti prilikom ponovnog pokretanja, pobrinite se da postavka sysctl bude postojana stavljanjem željene nove vrijednosti u / etc / sysctl.conf datoteka.

Zaključak

Vidjeli smo da vm.min_free_kbytes linux kernel prilagodljiv može se mijenjati i može rezervirati memoriju u sustavu kako bi se osiguralo da je sustav stabilniji, posebno tijekom velike upotrebe i dodijeljivanja teške memorije.  Zadane postavke mogu biti malo preniske, posebno na sustavima s velikom memorijom i treba ih pažljivo povećati.  Vidjeli smo da memorija rezervirana ovom prilagodljivom sprečava OS predmemoriju da koristi svu memoriju, a također sprječava neke malloc operacije da koriste svu memoriju.

Kako koristiti GameConqueror Cheat Engine u Linuxu
Članak pokriva vodič o korištenju GameConqueror varalice u Linuxu. Mnogi korisnici koji igraju igre na sustavu Windows često koriste aplikaciju "Cheat...
Najbolji emulatori igraće konzole za Linux
Ovaj će članak navesti popularni softver za emulaciju igraće konzole dostupan za Linux. Emulacija je sloj kompatibilnosti softvera koji oponaša hardve...
Najbolji Linux Distros za igre na sreću 2021. godine
Linux operativni sustav daleko je prevalio svoj izvorni, jednostavni izgled zasnovan na poslužitelju. Ovaj se OS posljednjih godina izuzetno poboljšao...