Шта је вм.мин_фрее_кбитес и како га подесити?

What Is Vm Min_free_kbytes



Шта је вм.мин_фрее_кбитес сисцтл подесив за Линук језгро и на коју вредност треба да се постави? У овом чланку ћемо проучити овај параметар и како он утиче на покренути линук систем. Тестираћемо његов утицај на предмеморију странице ОС -а и на маллокове и шта показује системска бесплатна команда када се овај параметар постави. Направит ћемо неке образоване претпоставке о идеалним вриједностима за ово подешавање и показат ћемо како трајно поставити вм.мин_фрее_кбитес да преживи поновна покретања. Па идемо.

Како вм.мин_фрее_кбитес функционише

Додељивање меморије може бити потребно систему како би се осигурало правилно функционисање самог система. Ако језгро дозвољава додељивање све меморије, могло би бити тешко када му је потребна меморија за редовне операције како би ОС неометано радио. Зато језгро нуди подесиве вм.мин_фрее_кбитес. Подешавање ће присилити управитеља меморије кернела да задржи најмање Кс количине слободне меморије. Ево званичне дефиниције из документација о кернелу линук : Ово се користи за присиљавање Линук ВМ да минимални број килобајта остане слободан. ВМ користи овај број за израчунавање вредности [ВМАРК_МИН] воденог жига за сваку ниску меморијску зону у систему. Свака ниска зона добија одређени број резервисаних бесплатних страница пропорционално величини. Потребна је минимална количина меморије да би се задовољиле алокације ПФ_МЕМАЛЛОЦ; ако ово поставите на мање од 1024 КБ, ваш систем ће се суптилно покварити и бити склон застоју под великим оптерећењима. Ако поставите ово превисоко стање, ваша машина ће одмах ООМ.







Провера вм.мин_фрее_кбитес ради

Да бих тестирао да ли поставка мин_фрее_кбитес ради како је дизајнирано, креирао сам линук виртуелну инстанцу са само 3,75 ГБ РАМ -а. За анализирање система користите доњу бесплатну команду:



#бесплатно



Гледајући горњи помоћни програм за слободну меморију користећи заставицу -м да бисте одштампали вредности у МБ. Укупна меморија је 3,5 до 3,75 ГБ меморије. Заузето је 121 МБ меморије, 3,3 ГБ меморије је бесплатно, 251 МБ се користи у међуспремнику. Доступно је и 3,3 ГБ меморије.





Сада ћемо променити вредност вм.мин_фрее_кбитес и видети какав је утицај на системску меморију. Ми ћемо поновити нову вредност у виртуелном датотечном систему проц да бисмо променили вредност параметра језгре према доле:

# ецхо 1500000>/проц/сис/вм/мин_фрее_кбитес
# сисцтл вм.мин_фрее_кбитес



Можете видети да је параметар промењен приближно на 1,5 ГБ и ступио је на снагу. Сада искористимо бесплатно наредите поново да видите све промене које систем препознаје.

#бесплатно

Слободна меморија и међуспремник се не мењају наредбом, али количина меморије је приказана као доступан је смањен са 3327 на 1222 МБ. Што је приближно смањење промене параметра на 1,5 ГБ мин слободне меморије.

Сада направимо датотеку са подацима од 2 ГБ, а затим видимо шта читање те датотеке у предмеморији бафера чини вредностима. Ево како да направите датотеку података од 2 ГБ у 2 реда басх скрипте испод. Скрипта ће генерисати насумичну датотеку од 35 МБ помоћу наредбе дд, а затим је 70 пута копирати у нову дата_филе излаз:

# дд иф =/дев/рандом оф =/роот/д1.ткт цоунт = 1000000
# фор и у `сек 1 70`; до ецхо $ и; цат /роот/д1.ткт >> /роот /дата_филе; Готово

Прочитајмо датотеку и занемаримо садржај читањем и преусмеравањем датотеке на /дев /нулл према доле:

#мачкадата_филе> /дев/нула

У реду, шта се догодило са нашом системском меморијом са овим сетом маневара, проверимо сада:

#бесплатно

Анализирајући горе наведене резултате. Још увек имамо 1,8 ГБ слободне меморије, тако да је кернел заштитио велики део меморије који је резервисан због наше поставке мин_фрее_кбитес. Међуспремник користи 1691 МБ, што је мање од укупне величине наше датотеке података која износи 2,3 ГБ. Очигледно цео дата_филе није могао бити ускладиштен у кешу због недостатка расположиве меморије која би се могла користити за кеш меморију. Можемо потврдити да цела датотека није ускладиштена у кешу, већ да одредимо време за понављање покушаја читања датотеке. Да је кеширано, требало би делић секунде за читање датотеке. Хајде да пробамо.

# тиме цат дата_филе> /дев /нулл
# тиме цат дата_филе> /дев /нулл

Читање датотеке трајало је скоро 20 секунди, што значи да готово сигурно није све у кешу.

Као последњу проверу, смањимо вм.мин_фрее_кбитес како бисмо омогућили да кеш странице има више простора за рад и можемо очекивати да кеш ради, а читање датотеке постаје све брже.

# ецхо 67584>/проц/сис/вм/мин_фрее_кбитес
# тиме цат дата_филе> /дев /нулл
# тиме цат дата_филе> /дев /нулл

Са додатном меморијом доступном за кеширање датотеке време читања је пало са 20 секунди пре на. 364 секунде, а све у кешу.

Радознао сам да направим још један експеримент. Шта се дешава са маллоц позивима за додељивање меморије из Ц програма у односу на ову заиста високу поставку вм.мин_фрее_кбитес. Хоће ли пропасти маллоц? Да ли ће систем умрети? Прво ресетујте поставку вм.мин_фрее_кбитес на заиста високу вредност да бисте наставили наше експерименте:

#Избацио 1500000 > /проценат/сис/вм/мин_фрее_кбитес

Погледајмо поново нашу слободну меморију:

Теоретски имамо 1,9 ГБ бесплатних и 515 МБ доступних. Користимо програм тестирања отпорности на стрес који се зове стрес-нг како бисмо искористили мало меморије и видели где смо успели. Користићемо вм тестер и покушаћемо да доделимо 1 ГБ меморије. Пошто смо резервисали само 1,5 ГБ на систему од 3,75 ГБ, претпостављам да би ово требало да функционише.

# стресс-нг --вм 1 --вм-битес 1Г-тимеоут 60с
стрес: инфо:[17537]отпремање свиња:1вм
стрес: инфо:[17537]алоцирање кеша: подразумевана величина кеша: 46080К
стрес: инфо:[17537]успешна трка завршенау60.09с(1мин,0.09СУВ)
# стресс-нг --вм 2 --вм-битес 1Г-тимеоут 60с
# стресс-нг --вм 3 --вм-битес 1Г-тимеоут 60с

Покушајмо поново са више радника, можемо покушати са 1, 2, 3, 4 радника и у једном тренутку би то требало да пропадне. У мом тесту је прошао са 1 и 2 радника, али није успео са 3 радника.

Вратимо вм.мин_фрее_кбитес на мали број и видимо да ли нам то помаже да покренемо 3 меморијска стресора са по 1 ГБ на систему од 3,75 ГБ.

# ецхо 67584>/проц/сис/вм/мин_фрее_кбитес
# стресс-нг --вм 3 --вм-битес 1Г-тимеоут 60с

Овај пут је успешно радио без грешке, покушао сам два пута без проблема. Тако да могу закључити да постоји разлика у понашању што има више меморије на располагању за маллоц, када је вредност вм.мин_фрее_кбитес постављена на нижу вредност.

Подразумевана поставка за вм.мин_фрее_кбитес

Подразумевана вредност за поставку на мом систему је 67584, што је око 1,8% РАМ -а на систему или 64 МБ. Из сигурносних разлога на јако разбијеном систему, настојао бих га мало повећати на 128 МБ како бих омогућио резервисанију слободну меморију, међутим за просјечну употребу задана вриједност изгледа довољно разумна. Званична документација упозорава на повећање вредности. Постављање на 5 или 10% системске РАМ меморије вероватно није намеравана употреба поставке и превисока је.

Подешавање вм.мин_фрее_кбитес за преживљавање поновног покретања

Да бисте били сигурни да поставка може да преживи поновно покретање и да се при поновном покретању не врати на подразумеване вредности, обавезно учините поставку сисцтл трајном тако што ћете жељену нову вредност ставити у датотеку /етц/сисцтл.цонф.

Закључак

Видели смо да се вм.мин_фрее_кбитес линук кернел може подесити и може резервисати меморију на систему како би се осигурало да је систем стабилнији, посебно током велике употребе и великих додељивања меморије. Задане поставке могу бити мало прениске, посебно на системима са великом меморијом, па их треба пажљиво повећати. Видели смо да меморија резервисана овим подешавањем спречава кеш ОС -а да користи сву меморију, а такође спречава и неке маллоц операције да користе сву меморију.