Izrāde

Kas ir vm.min_free_kbytes un kā to noskaņot?

Kas ir vm.min_free_kbytes un kā to noskaņot?
Kas ir vm.min_free_kbytes sysctl noskaņojams Linux kodolam un kādai vērtībai tas būtu jāiestata?  Šajā rakstā mēs izpētīsim šo parametru un to, kā tas ietekmē darbojošos Linux sistēmu.  Mēs pārbaudīsim tā ietekmi uz OS lapu kešatmiņu un mallocs un to, ko parāda sistēmas bezmaksas komanda, kad šis parametrs ir iestatīts.  Mēs izdarīsim dažus izglītotus minējumus par ideālajām vērtībām šim noskaņojamajam un parādīsim, kā iestatīt vm.min_free_kbytes neatgriezeniski, lai izdzīvotu pārstartēšana.  Tātad ejam.

Kā vm.darbojas min_free_kbytes

Atmiņas piešķiršana var būt nepieciešama sistēmai, lai nodrošinātu pareizu pašas sistēmas darbību.  Ja kodols ļauj piešķirt visu atmiņu, tas var cīnīties, kad nepieciešama operatīva operācija, lai OS darbotos nevainojami.  Tāpēc kodols nodrošina noskaņojamo vm.min_bez_kabaiti.  Noregulējamais process piespiedīs kodola atmiņas pārvaldnieku saglabāt vismaz X brīvas atmiņas apjomu.   Šeit ir oficiālā definīcija no Linux kodola dokumentācija: “Tas tiek izmantots, lai piespiestu Linux VM saglabāt minimālu kilobaitu skaitu.  VM izmanto šo skaitli, lai aprēķinātu ūdenszīmes [WMARK_MIN] vērtību katrai sistēmas zemākā līmeņa zonai. Katra zemākā līmeņa zona saņem vairākas rezervētas bezmaksas lapas, proporcionāli tās lielumam. Lai apmierinātu PF_MEMALLOC piešķīrumus, nepieciešams minimāls atmiņas apjoms; ja to iestatīsit uz mazāku par 1024 KB, sistēma kļūs smalki salauzta un pakļauta strupceļam lielās slodzēs. Uzstādot šo pārāk augstu, jūsu mašīna tiks nekavējoties nomainīta.“

Apstiprina vm.Min_free_kbytes Darbi

Lai pārbaudītu, vai min_free_kbytes iestatījums darbojas kā paredzēts, esmu izveidojis Linux virtuālo instanci, kurā ir tikai 3.75 GB RAM.  Lai analizētu sistēmu, izmantojiet zemāk esošo bezmaksas komandu:

# bezmaksas -m

Aplūkojot iepriekšminēto brīvās atmiņas utilītu, izmantojot karogu -m, vērtības tiek drukātas MB.  Kopējā atmiņa ir 3.5 līdz 3.75 GB atmiņa.  Tiek izmantota 121 MB atmiņa, 3.3 GB atmiņa ir brīva, bufera kešatmiņa izmanto 251 MB.  Un 3.Ir pieejama 3 GB atmiņa.

Tagad mēs mainīsim vm vērtību.min_free_kbytes un skatiet, kāda ir ietekme uz sistēmas atmiņu.  Mēs atkārtosim jauno vērtību proc virtuālajā failu sistēmā, lai mainītu kodola parametru vērtību, kā norādīts zemāk:

# atbalss 1500000> / proc / sys / vm / min_free_kbytes
# sysctl vm.min_bez_kabaiti

Var redzēt, ka parametrs tika mainīts uz 1.Aptuveni 5 GB un ir stājies spēkā.  Tagad izmantosim bez maksas vēlreiz, lai redzētu visas sistēmas atpazītās izmaiņas.

# bezmaksas -m

Brīvā atmiņa un bufera kešatmiņa ar komandu nemainās, bet atmiņas apjoms tiek parādīts kā pieejams ir samazināts no 3327 līdz 1222 MB.  Kas ir aptuvena parametra izmaiņu samazināšana līdz 1.5 GB min. Brīva atmiņa.

Tagad izveidosim 2 GB lielu datu failu un pēc tam redzēsim, kā šis fails tiek nolasīts bufera kešatmiņā.  Tālāk ir aprakstīts, kā izveidot 2GB datu failu 2 zemāk esošajās bash skripta rindiņās.  Skripts ģenerēs 35 MB izlases failu, izmantojot komandu dd, un pēc tam to 70 reizes nokopēs jaunā datu_fails izeja:

# dd, ja = / dev / izlases = / root / d1.txt skaits = 1000000
# par i i 'sekos 1 70'; darīt atbalss $ i; kaķis / sakne / d1.txt >> / root / data_file; izdarīts

Lasīsim failu un ignorēsim saturu, lasot un novirzot failu uz / dev / null, kā norādīts zemāk:

# cat data_file> / dev / null

Labi, kas ir noticis ar mūsu sistēmas atmiņu ar šo manevru komplektu, pārbaudīsim to tūlīt:

# bezmaksas -m

Analizējot iepriekš minētos rezultātus.  Mums joprojām ir 1.8 GB brīvas atmiņas, tāpēc kodols ir aizsargājis lielu daļu atmiņas, kas rezervēta mūsu iestatījuma min_free_kbytes dēļ.  Bufera kešatmiņā ir izmantots 1691 MB, kas ir mazāks nekā mūsu datu faila kopējais lielums, kas ir 2.3 GB.  Acīmredzot viss datu_fails nevarēja saglabāt kešatmiņā, jo trūkst brīvas atmiņas, ko izmantot bufera kešatmiņā.  Mēs varam apstiprināt, ka viss fails netiek glabāts kešatmiņā, bet tiek noteikts laiks, kad atkārtoti mēģinājumi lasīt failu. Ja tas būtu saglabāts kešatmiņā, faila lasīšana prasītu sekundes daļu.  Pamēģināsim.

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

Faila nolasīšana aizņēma gandrīz 20 sekundes, kas nozīmē, ka gandrīz visi faili netiek saglabāti kešatmiņā.

Kā vienu galīgo apstiprinājumu samazināsim vm.min_free_kbytes, lai lapas kešatmiņā būtu vairāk vietas darbībai, un mēs varam sagaidīt, ka kešatmiņa darbojas un failu lasīšana kļūst daudz ātrāka.

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

Ar papildu atmiņu, kas pieejama kešatmiņā, faila lasīšanas laiks samazinājās no 20 sekundēm pirms līdz .364 sekundes ar visu to kešatmiņā.

Man ir interese veikt vēl vienu eksperimentu.  Kas notiek ar malloc zvaniem, lai piešķirtu atmiņu no C programmas, ņemot vērā šo patiešām augsto vm.min_free_kbytes iestatījums.  Vai tas neizdosies Malloc?  Vai sistēma nomirs?  Vispirms atiestatiet vm.Min_free_kbytes iestatīšana uz patiešām augstu vērtību, lai atsāktu mūsu eksperimentus:

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

Apskatīsim vēlreiz savu brīvo atmiņu:

Teorētiski mums ir 1.9 GB bezmaksas un pieejami 515 MB.  Izmantosim stresa testa programmu ar nosaukumu stress-ng, lai izmantotu atmiņu un redzētu, kur mums neizdodas.  Mēs izmantosim vm testeri un mēģināsim piešķirt 1 GB atmiņu.  Tā kā mēs esam rezervējuši tikai 1.5 GB uz 3.75 GB sistēma, es domāju, ka tai vajadzētu darboties.

# stress-ng --vm 1 --vm-baiti 1G - 60-taimauts
stress-ng: info: [17537] cūku nosūtīšana: 1 vm
stress-ng: info: [17537] kešatmiņas piešķiršana: noklusējuma kešatmiņas izmērs: 46080K
stress-ng: info: [17537] veiksmīgs skrējiens pabeigts 60. gadā.09s (1 min, 0.09 sekundes)
# stress-ng --vm 2 --vm-baiti 1G - 60-taimauts
# stress-ng --vm 3 --vm-baiti 1G - 60-taimauts

Mēģināsim to vēlreiz ar vairāk strādniekiem, mēs varam izmēģināt 1, 2, 3, 4 darbiniekus, un kādā brīdī tam vajadzētu neizdoties.  Manā pārbaudījumā tas izturēja 1 un 2 darbiniekus, bet neizdevās ar 3 darbiniekiem.

Atiestatīsim vm.min_free_kbytes līdz mazam skaitam un pārbaudiet, vai tas palīdz mums palaist 3 atmiņas stresa faktorus ar 1GB katram uz 3.75 GB sistēma.

# echo 67584> / proc / sys / vm / min_free_kbytes
# stress-ng --vm 3 --vm-baiti 1G - 60-taimauts

Šoreiz tas veiksmīgi darbojās bez kļūdām, es to izmēģināju divas reizes bez problēmām.  Tāpēc es varu secināt, ka ir uzvedības atšķirība, ja mallocam ir pieejama vairāk atmiņas, kad vm.Min_free_kbytes vērtība ir iestatīta uz mazāku vērtību.

Noklusējuma iestatījums vm.min_bez_kabaiti

Manas sistēmas iestatījuma noklusējuma vērtība ir 67584, kas ir aptuveni 1.8% RAM sistēmā vai 64 MB. Drošības apsvērumu dēļ stipri saspiestā sistēmā es to mēdzu mazliet palielināt, iespējams, līdz 128 MB, lai ļautu rezervēt brīvāku atmiņu, tomēr vidējai lietošanai noklusējuma vērtība šķiet pietiekami saprātīga.  Oficiālā dokumentācija brīdina par pārāk lielas vērtības palielināšanu.  Tā iestatīšana uz 5 vai 10% no sistēmas RAM, iespējams, nav paredzētais iestatījuma lietojums un ir pārāk augsts.

Nosakot vm.min_free_kbytes, lai izdzīvotu atkārtoti

Lai nodrošinātu, ka iestatījums var izdzīvot atkārtotā palaišanā, un atsāknēšanas laikā netiek atjaunotas noklusējuma vērtības, pārliecinieties, ka sysctl iestatījums ir nemainīgs, ievietojot vēlamo jauno vērtību mapē / etc / sysctl.conf fails.

Secinājums

Mēs esam redzējuši, ka vm.min_free_kbytes linux kodola noskaņojamo var mainīt un var rezervēt atmiņu sistēmā, lai nodrošinātu sistēmas stabilitāti, īpaši intensīvas lietošanas un lielas atmiņas piešķiršanas laikā.  Noklusējuma iestatījumi, iespējams, ir nedaudz par zemu, it īpaši atmiņas sistēmās ar lielu atmiņas līmeni, un jāapsver, ka tie ir rūpīgi jāpalielina.  Mēs esam redzējuši, ka šī noskaņojamā rezervētā atmiņa neļauj OS kešatmiņai izmantot visu atmiņu un arī dažām malloc operācijām neizmanto arī visu atmiņu.

Tomb Raider for Linux apmācība
Tomb Raider ēna ir divpadsmitais papildinājums Tomb Raider sērijai - darbības piedzīvojumu spēļu franšīzei, kuru izveidoja Eidos Montreal. Spēli gan k...
Kā palielināt FPS Linux?
FPS apzīmē Kadri sekundē. FPS uzdevums ir izmērīt kadru ātrumu video atskaņošanā vai spēļu izrādēs. Vienkāršos vārdos nepārtrauktu pilnekrāna attēlu s...
Populārākās Oculus App Lab spēles
Ja esat Oculus austiņu īpašnieks, jums ir jāsazinās par sānu ielādi. Sānu ielāde ir process, kurā austiņās tiek instalēts saturs, kas nav veikals. Sid...