Конфигурисање Линук кернела за ГлустерФС

Превод чланка припремљен је уочи почетка курса „Администратор Линук. професионалац".

Конфигурисање Линук кернела за ГлустерФС

С времена на време, ту и тамо се јаве питања о Глустеровим препорукама у вези са прилагођавањем кернела и да ли је то неопходно.

Ова потреба се ретко јавља. Језгро ради веома добро под већином радних оптерећења. Иако постоји негативна страна. Историјски гледано, Линук кернел лако троши много меморије ако му се пружи прилика, укључујући и кеширање као примарно средство за побољшање перформанси.

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

Имамо велико искуство у раду са системима који троше много меморије, као што су ЦАД, ЕДА и слични, који су почели да успоравају под великим оптерећењем. И понекад смо наилазили на проблеме у Глустеру. Након пажљивог праћења коришћене меморије и времена чекања на диску дуже од једног дана, добили смо преоптерећење диска, огромно чекање, грешке кернела (кернел упс), замрзавање итд.

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

Када је у питању конфигурисање меморије, прво место на које треба обратити пажњу је подсистем виртуелне меморије (ВМ), који има велики број опција које вас могу збунити.

вм.сваппинесс

Параметар vm.swappiness одређује колико кернел користи свап у поређењу са РАМ-ом. Такође је дефинисан у изворном коду као „склоност крађи мапиране меморије“. Висока вредност замене значи да ће језгро бити склоније мењању мапираних страница. Ниска вредност замене значи супротно: кернел ће мање замењивати странице из меморије. Другим речима, што је већа вредност vm.swappiness, што ће систем више користити свап.

Екстензивна употреба замене је непожељна, пошто се огромни блокови података учитавају и учитавају у РАМ. Многи људи тврде да би вредност замене требало да буде висока, али по мом искуству, постављање на „0“ доводи до бољих перформанси.

Више можете прочитати овде - лвн.нет/Артицлес/100978

Али опет, ова подешавања треба користити са опрезом и тек након тестирања одређене апликације. За високо оптерећене апликације за стримовање, овај параметар треба да буде подешен на „0“. Када се промени на "0", одзив система се побољшава.

вм.вфс_цацхе_прессуре

Ова поставка контролише меморију коју кернел троши за кеширање објеката директоријума и иноде (дентри и иноде).

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

Када користе ГлустерФС, многи корисници са великом количином података и много малих датотека могу лако да користе значајну количину РАМ-а на серверу због иноде/дентри кеширања, што може довести до лоших перформанси јер кернел мора да рукује структурама података на систему са 40 ГБ меморије. Постављање овог параметра на већи од 100 је помогло многим корисницима да постигну праведније кеширање и побољшају одзив језгра.

вм.дирти_бацкгроунд_ратио и вм.дирти_ратио

Први параметар (vm.dirty_background_ratio) одређује проценат меморије са прљавим страницама, по достизању којег је потребно започети позадинско испирање прљавих страница на диск. Док се не достигне овај проценат, странице се не испуштају на диск. А када ресетовање почне, ради у позадини без прекидања покренутих процеса.

Други параметар (vm.dirty_ratio) одређује проценат меморије који могу да заузму прљаве странице пре него што почне принудно блиц. Када се достигне овај праг, сви процеси постају синхрони (блокирани) и није им дозвољено да наставе са радом све док се И/О операција коју су захтевали стварно не заврши и подаци се не налазе на диску. Са великим улазно/излазним оптерећењем, ово узрокује проблем јер нема кеширања података и сви процеси који раде И/О су блокирани и чекају на И/О. Ово резултира великим бројем закачених процеса, великим оптерећењем, нестабилношћу система и лошим перформансама.

Смањење вредности ових параметара доводи до тога да се подаци чешће испуштају на диск и не чувају у РАМ-у. Ово може помоћи системима са великим бројем меморије где је нормално да се кешови страница од 45-90 ГБ испразне на диск, што резултира огромним кашњењем за фронт-енд апликације, смањујући укупни одзив и интерактивност.

"1" > /проц/сис/вм/пагецацхе

Кеш страница је кеш меморија у којој се чувају подаци из датотека и извршних програма, односно то су странице са стварним садржајем датотека или блок уређаја. Овај кеш се користи за смањење броја читања диска. Вредност "1" значи да кеш користи 1% РАМ-а и да ће бити више читања са диска него из РАМ-а. Није неопходно мењати ову поставку, али ако сте параноични у вези са контролом кеша странице, можете је користити.

"рок" > /сис/блоцк/сдц/куеуе/сцхедулер

И/О планер је компонента Линук кернела која рукује редовима за читање и писање. У теорији, боље је користити „нооп“ за паметни РАИД контролер, јер Линук не зна ништа о физичкој геометрији диска, па је ефикасније пустити контролер који добро познаје геометрију диска да обради захтев као што је брже могуће. Али изгледа да „рок“ побољшава перформансе. Више информација о планерима можете пронаћи у документацији за изворни код Линук кернела: linux/Documentation/block/*osched.txt. Такође сам приметио повећање пропусности читања током мешовитих операција (много писања).

"256" > /сис/блоцк/сдц/куеуе/нр_рекуестс

Број И/О захтева у баферу пре него што се пошаљу у планер. Величина унутрашњег реда неких контролера (куеуе_дептх) је већа од нр_рекуестс И/О планера, тако да И/О планер има мале шансе да правилно одреди приоритете и обједини захтеве. За планере рокова и ЦФК, боље је када је нр_рекуестс 2 пута већи од унутрашњег реда контролора. Спајање и преуређивање упита помаже планеру да боље реагује под великим оптерећењем.

ецхо "16" > /проц/сис/вм/паге-цлустер

Параметар кластер страница контролише број страница које су уписане у размену у једном тренутку. У горњем примеру, вредност је постављена на „16“ да би одговарала величини РАИД траке од 64 КБ. Ово нема смисла када је сваппинесс = 0, али ако подесите сваппинесс на 10 или 20, онда ће вам коришћење ове вредности помоћи када је величина РАИД траке 64 КБ.

блоцкдев --сетра 4096 /дев/<девнаме> (-сдб, хдц или дев_маппер)

Подразумеване поставке блок уређаја за многе РАИД контролере често резултирају ужасним перформансама. Додавањем горње опције конфигурише се читање унапред за секторе од 4096*512 бајтова. Барем за операције стримовања, брзина се повећава пуњењем кеш диска на чипу путем читања унапред током периода који кернел користи за припрему И/О. Кеш може да садржи податке који ће бити затражени током следећег читања. Превише читања унапред може да убије насумични И/О за велике датотеке ако троши потенцијално корисно време на диску или учитава податке ван кеша.

Испод је још неколико препорука на нивоу система датотека. Али још нису тестирани. Уверите се да ваш систем датотека зна величину траке и број дискова у низу. На пример, да је ово раид5 низ са величином траке од 64К од шест дискова (у ствари пет, јер се један диск користи за паритет). Ове препоруке су засноване на теоријским претпоставкама и прикупљене су са разних блогова/чланака од стране стручњака за РАИД.

-> ext4 fs, 5 disks, 64K stripe, units in 4K blocks
mkfs -text4 -E stride=$((64/4))
-> xfs, 5 disks, 64K stripe, units in 512-byte sectors
mkfs -txfs -d sunit=$((64*2)) -d swidth=$((5*64*2))

За веће датотеке можете размислити о повећању горње величине трака.

ОПРЕЗ Све горе описано је крајње субјективно за неке врсте апликација. Овај чланак не гарантује никаква побољшања без претходног тестирања одговарајућих апликација од стране корисника. Требало би да се користи само ако постоји потреба да се побољша укупна одзивност система или ако решава тренутне проблеме.

Додатни материјали:

Конфигурисање Линук кернела за ГлустерФС

Опширније

Извор: ввв.хабр.цом

Додај коментар