Performance

Mis on vm.min_vaba_kabaiti ja kuidas seda häälestada?

Mis on vm.min_vaba_kabaiti ja kuidas seda häälestada?
Mis on vm.min_free_kbytes sysctl linuxi tuuma jaoks häälestatav ja milliseks väärtuseks see peaks olema seatud?  Selles artiklis uurime seda parameetrit ja selle mõju töötavale Linuxi süsteemile.  Testime selle mõju OS-i lehe vahemälule ja mallocsidele ning sellele, mida näitab süsteemi vaba käsk, kui see parameeter on seatud.  Me teeme selle häälestatava osa ideaalsete väärtuste kohta haritud oletusi ja näitame, kuidas vm seadistada.taaskäivitamise ellujäämiseks jäädavalt min_vaba_kabaiti.  Nii et lähme.

Kuidas vm.min_free_kbytes töötab

Süsteem võib vajada mälu eraldamist, et tagada süsteemi enda nõuetekohane toimimine.  Kui kernel võimaldab kogu mälu eraldada, võib see OS-i sujuva toimimise nimel vaeva näha, kui vajate regulaarsete toimingute jaoks mälu.  Sellepärast pakub tuum häälestatava vm.min_vaba_kabaiti.  Häälestatav sunnib tuuma mäluhaldurit säilitama vähemalt X vaba mälumahtu.   Siin on ametlik määratlus Linuxi tuuma dokumentatsioon: „Seda kasutatakse selleks, et sundida Linuxi VM-i hoidma vaba minimaalset kilobaiti.  VM kasutab seda arvu, et arvutada süsteemi kõigi madalamate tsoonide vesimärgi [WMARK_MIN] väärtus. Iga madalama taseme tsoon saab oma reserveerituna hulga reserveeritud tasuta lehti. PF_MEMALLOC eraldiste rahuldamiseks on vaja minimaalset mälumahtu; kui määrate selle väiksemaks kui 1024 KB, puruneb teie süsteem peenelt ja kaldub suure koormuse korral ummikusse minema. Selle liiga kõrgeks seadmine muudab teie masina koheseks."

Valideerimine vm.min_free_kbytes Töötab

Selleks, et testida, kas min_free_kbyte seade töötab kavandatud viisil, olen loonud Linuxi virtuaalse eksemplari, kus.75 GB RAM-i.  Süsteemi analüüsimiseks kasutage allpool olevat tasuta käsku:

# tasuta -m

Vaadates ülaltoodud vaba mälu utiliiti, kasutades väärtust MB-na, kasutades väärtust -m.  Kogumälu on 3.5 kuni 3.75 GB mälu.  Kasutatakse 121 MB mälu, 3.3 GB mälu on vaba, puhvermälu kasutab 251 MB.  Ja 3.Saadaval on 3 GB mälu.

Nüüd muudame vm väärtust.min_vaba_kabaiti ja vaadake, milline mõju on süsteemi mälul.  Kordame uue väärtuse proc virtuaalsele failisüsteemile, et muuta kerneli parameetri väärtust allpool toodud viisil:

# kaja 1500000> / proc / sys / vm / min_vaba_kabaiti
# sysctl vm.min_vaba_kabaiti

Näete, et parameeter muudeti väärtuseks 1.Umbes 5 GB ja on jõustunud.  Nüüd kasutame tasuta käsk uuesti, et näha süsteemi tuvastatud muudatusi.

# tasuta -m

Vaba mälu ja puhvermälu ei muutu käsuga, kuid kuvatav mälumaht on saadaval on vähendatud 3327-lt 1222 MB-ni.  Mis on parameetri muutuse ligikaudne vähendamine väärtusele 1.5 GB min vaba mälu.

Nüüd loome 2GB andmefaili ja siis vaatame, mida see fail puhvervällu lugedes väärtustega teeb.  Nii saate 2 GB andmefaili luua allpool olevas bashi skripti kahes reas.  Skript loob käsuga dd 35MB juhusliku faili ja seejärel kopeerib selle 70 korda uude andmete_fail väljund:

# dd kui = / dev / juhuslik = / root / d1.txt arv = 1000000
# i jaoks 'seq 1 70'; tee kaja $ i; kass / juur / d1.txt >> / root / data_file; tehtud

Loeme faili ja ignoreerime sisu, lugedes ja suunates faili alla / dev / null nagu allpool:

# cat data_file> / dev / null

Ok, mis on juhtunud meie süsteemimäluga selle manöövrite komplektiga, kontrollime seda kohe:

# tasuta -m

Ülaltoodud tulemusi analüüsides.  Meil on veel 1.8 GB vaba mälu, nii et kernel on min_free_kbytes sätte tõttu kaitsnud reserveeritud suurt mälumahtu.  Puhvermällu on kasutatud 1691 MB, mis on väiksem kui meie andmefaili suurus 2.3 GB.  Ilmselt kogu andmete_fail ei saanud vahemällu salvestada, kuna puhvervälja jaoks pole piisavalt vaba mälu.  Saame kinnitada, et kogu faili ei salvestata vahemälus, vaid ajastame faili korduvad katsed. Kui see oli vahemällu salvestatud, kuluks faili lugemiseks murdosa sekundist.  Proovime seda.

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

Faili lugemine võttis peaaegu 20 sekundit, mis tähendab, et see pole peaaegu kindlasti kõik vahemällu salvestatud.

Ühe lõpliku valideerimisena vähendame vm.min_vaba_kabaiti, et lehe vahemälul oleks rohkem ruumi tegutsemiseks ja võime eeldada, et vahemälu töötab ja faili loetakse palju kiiremini.

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

Kui faili vahemällu salvestamiseks on saadaval lisamälu, langes 20 sekundist varasemasse aega lugemise aeg .364 sekundit, kõik on vahemälus.

Mul on uudishimu teha veel üks katse.  Mis juhtub malloc-kõnedega, et eraldada mälu C-programmist selle tõeliselt kõrge vm ees.min_vaba_kabaiti seade.  Kas see kukub mallocil läbi?  Kas süsteem sureb?  Kõigepealt lähtestage vm.Min_free_kbytes seadistades meie katsete jätkamiseks tõeliselt kõrge väärtuse:

# kaja 1500000> / proc / sys / vm / min_vaba_kabaiti

Vaatame uuesti oma vaba mälu:

Teoreetiliselt on meil 1.9 GB vaba ja 515 MB saadaval.  Kasutame stressitesti programmi nimega stress-ng, et kasutada veidi mälu ja näha, kus me ebaõnnestume.  Kasutame vm testerit ja proovime eraldada 1 GB mälu.  Kuna meil on reserveeritud ainult 1.5 GB 3-le.75 GB süsteem peaks see vist töötama.

# stress-ng --vm 1 --vm-baidid 1G - 60-ndate kellaaeg
stress-ng: info: [17537] sigade saatmine: 1 vm
stress-ng: info: [17537] vahemälu eraldamine: vahemälu vaikimisi suurus: 46080K
stress-ng: info: [17537] edukas jooks valmis 60. aastal.09s (1 min, 0.09 sekundit)
# stress-ng --vm 2 --vm-baiti 1G - 60-ndate kellaaeg
# stress-ng --vm 3 --vm-baiti 1G - 60-ndate aastate väljalülitamine

Proovime uuesti rohkemate töötajatega, saame proovida 1, 2, 3, 4 töötajat ja ühel hetkel peaks see ebaõnnestuma.  Minu testis läbis see 1 ja 2 töötajat, kuid ebaõnnestus 3 töötajaga.

Lähtestame vm.min_vaba_kabaiti väikesele arvule ja vaadake, kas see aitab meil käivitada 3 mälu stressorit, 1GB igaüks 3.75 GB süsteem.

# echo 67584> / proc / sys / vm / min_vaba_kabaiti
# stress-ng --vm 3 --vm-baidid 1G - 60-ndate kellaaeg

Seekord jooksis see edukalt ilma tõrgeteta, proovisin seda kaks korda probleemideta.  Nii võin järeldada, et malloci jaoks on rohkem mälu kättesaadav käitumuslik erinevus, kui vm.min_free_kbytes väärtuseks seatakse madalam väärtus.

Vm vaikeseade.min_vaba_kabaiti

Minu süsteemi sätte vaikeväärtus on 67584, mis on umbes 1.8% RAM-ist süsteemis ehk 64 MB. Turvalisuse huvides tugevasti räsitud süsteemis kipuksin seda pisut suurendama ehk 128 MB-ni, et võimaldada reserveeritumat vaba mälu, kuid keskmise kasutamise korral tundub vaikeväärtus piisavalt mõistlik.  Ametlik dokumentatsioon hoiatab väärtuse liiga kõrgeks muutmise eest.  Selle määramine 5 või 10% -ni süsteemi RAM-ist ei ole tõenäoliselt sätte kavandatud kasutus ja on liiga kõrge.

Vm seadistamine.min_vaba_kabaiti, et taaskäivitada

Selle tagamiseks, et seade püsiks taaskäivitamisel ja et taaskäivitamisel ei taastata vaikeväärtusi, muutke sysctl säte püsivaks, lisades soovitud uue väärtuse kataloogi / etc / sysctl.konf fail.

Järeldus

Oleme näinud, et vm.min_vaba_kabaiti linuxi tuuma saab häälestada ja see võib süsteemi mälu reserveerida, et tagada süsteemi stabiilsus, eriti intensiivse kasutamise ja suure mälumahu korral.  Vaikimisi seaded võivad olla veidi liiga madalad, eriti suure mälumahuga süsteemides, ja neid tuleks kaaluda ettevaatlikult.  Oleme näinud, et selle häälestatava reserveeritud mälu takistab OS-i vahemälul kogu mälu kasutamist ja takistab ka mõnel malloc-operatsioonil kogu mälu kasutamist.

Parimad mängude jaoks mõeldud Linuxi distrod 2021. aastal
Linuxi operatsioonisüsteem on oma algsest, lihtsast, serveripõhisest välimusest kaugele jõudnud. See operatsioonisüsteem on viimastel aastatel tohutul...
Kuidas Linuxis oma mänguseanssi jäädvustada ja voogesitada
Varem peeti mängude mängimist ainult hobiks, kuid aja jooksul kasvas mängutööstus tehnoloogia ja mängijate arvu osas tohutult. Mängupublik on veebimän...
Parimad mängud, mida saab mängida käte jälgimisega
Oculus Quest tutvustas hiljuti suurepärast ideed käsitsi jälgimisest ilma kontrolleriteta. Üha suurema hulga mängude ja tegevustega, mis toetavad kas ...