Sazkirina kernel Linux ji bo GlusterFS

Wergera gotarê di êvara destpêkirina kursê de hat amadekirin Rêveberê Linux. Karzan".

Sazkirina kernel Linux ji bo GlusterFS

Dem bi dem, li vir û wir, pirs di derbarê pêşnîyarên Gluster-ê yên di derbarê birêkûpêkkirina kernel de derdikevin holê û gelo hewcedarî bi vê yekê heye.

Pêdiviyek weha kêm kêm çêdibe. Li ser piraniya barkêşan, kernel pir baş pêk tîne. Tevî ku kêmasiyek heye. Ji hêla dîrokî ve, kernel Linux amade ye ku heke fersendê jê re were dayîn, gelek bîranîn vedixwe, di nav de ji bo cachkirinê wekî riya sereke ya çêtirkirina performansê.

Di pir rewşan de, ev baş dixebite, lê di bin barê giran de ew dikare bibe sedema pirsgirêkan.

Digel pergalên bîranînê yên wekî CAD, EDA û yên wekî wan, ku di bin barê giran de dest bi hêdîbûnê kirin, gelek ezmûna me heye. Û carinan em di Gluster de ketin nav pirsgirêkan. Piştî ku gelek rojan bi baldarî li karanîna bîranînê û derengiya dîskê temaşe kir, me zêde bargiraniya wan, iowaitek mezin, xeletiyên kernel (kernel oops), cemidandin, hwd.

Ev gotar encama gelek ceribandinên tunekirinê ye ku di rewşên cihêreng de têne kirin. Bi saya van pîvanan, ne tenê berteka giştî baştir bûye, lê kom jî bi girîngî stabîl bûye.

Dema ku dor tê ser ahenga bîranînê, yekem tiştê ku meriv lê mêze dike binepergala bîranîna virtual (VM, bîra virtual), ku hejmareke mezin vebijarkan heye ku dikare we tevlihev bike.

vm.swappiness

Parîsê vm.swappiness diyar dike ku kernel li gorî RAM-ê çiqas swap (swap, paging) bikar tîne. Ew di koda çavkaniyê de jî wekî "meyldariya dizîna bîranîna nexşeyê" tête diyar kirin. Guherînek bilind tê vê wateyê ku kernel dê bêtir meyla guheztina rûpelên nexşandî be. Nirxa guheztinê ya kêm tê wateya berevajî: kernel dê ji bîrê kêmtir rûpel bike. Bi gotineke din, nirxa bilindtir e vm.swappiness, bêtir pergal dê swap bikar bîne.

Bikaranîna mezin a guheztinê nexwestî ye, ji ber ku blokên mezin ên daneyê di RAM-ê de têne barkirin û barkirin. Pir kes arguman dikin ku nirxa guheztinê divê mezin be, lê di ezmûna min de, danîna wê li ser "0" dibe sedema performansa çêtir.

Hûn dikarin li vir bêtir bixwînin - lwn.net/Articles/100978

Lê, dîsa, van mîhengan divê bi baldarî û tenê piştî ceribandina serîlêdanek taybetî bêne sepandin. Ji bo serîlêdanên streaming yên pir barkirî, divê ev pîvan li "0" were danîn. Dema ku li "0" tê guheztin, bersivdana pergalê baştir dibe.

vm.vfs_cache_pressure

Ev mîheng bîranîna ku ji hêla kernelê ve ji bo cachkirina pelrêça û tiştên inode (dentry û inode) tê vexwarin kontrol dike.

Bi nirxa xwerû ya 100-ê, kernel dê hewl bide ku kaşên diran û inode li ser bingehek "dadperwer" ji pagecache û swapcache re azad bike. Kêmkirina vfs_cache_pressure dibe sedem ku kernel keşeyên diran û inode biparêze. Gava ku nirx "0" be, kernel ji ber zexta bîranînê dê ti carî cache diran û inode şuştinê neke, û ev dikare bi hêsanî bibe sedema xeletiyek ji bîrê. Zêdekirina vfs_cache_pressure li jor 100 dibe sedem ku kernel pêşî li şûştina diran û inode bigire.

Dema ku GlusterFS bikar tînin, gelek bikarhênerên xwedan mîqdarên mezin ên daneyê û gelek pelên piçûk dikarin bi hêsanî hejmareke girîng RAM-ê li ser serverê ji ber cachkirina inode/dentry bikar bînin, ku dikare bibe sedema xerabûna performansê ji ber ku kernel neçar e ku strukturên daneyê li ser pergalê pêvajoyê bike. bi 40 GB bîra. Sazkirina vê nirxê li jor 100-ê ji gelek bikarhêneran re bûye alîkar ku bigihîjin caching-a adiltir û bersivdana kernelê baştir bikin.

vm.dirty_background_ratio û vm.dirty_ratio

Parametreya yekem (vm.dirty_background_ratio) rêjeya bîranîna bi rûpelên qirêj diyar dike, piştî ku bigihîje wê pêdivî ye ku meriv rûpelên qirêj ên di paşperdeyê de li ser dîskê dest pê bike. Heya ku ev rêje negihîje, tu rûpel li ser dîskê nayê rijandin. Û gava ku vesazkirin dest pê dike, ew bêyî ku pêvajoyên xebitandinê qut bike di paşperdeyê de dimeşe.

Parametreya duyemîn (vm.dirty_ratio) rêjeya bîranînê ya ku dikare ji hêla rûpelên qirêj ve berî destpêkirina flasha bi zorê were dagir kirin diyar dike. Dema ku ev bend bigihîje, hemî pêvajo hevdem dibin (asteng kirin) û destûr nayê dayîn ku heya I/O ya ku wan xwestiye bi rastî neqede û dane li ser dîskê nebin. Bi I/O ya giran, ev dibe sedema pirsgirêkê ji ber ku veşartina daneyê tune ye û hemî pêvajoyên ku I/O dikin li benda I/O têne asteng kirin. Ev dibe sedema hejmareke mezin ji pêvajoyên darvekirî, bargiraniya bilind, bêserûberiya pergalê û performansa belengaz.

Kêmkirina van mîhengan dibe sedem ku dane pir caran li ser dîskê werin rijandin û di RAM-ê de neyê hilanîn. Ev dikare ji pergalên bîranîn-giran ên ku bi şuştina kaşên rûpela 45-90 GB li ser dîskê re xweş in, bibe alîkar, di encamê de derengiyek mezin ji bo serîlêdanên pêş-endê çêdike, bersivdayîna giştî û danûstendinê kêm dike.

"1" > /proc/sys/vm/pagecache

Rûpelek cache cache ye ku daneyên pelan û bernameyên bicîhker hilîne, ango ev rûpelên bi naveroka rastîn ên pelan an amûrên astengkirinê ne. Ev cache ji bo kêmkirina hejmara xwendina dîskê tê bikar anîn. Nirxa "1" tê vê wateyê ku 1% ji RAM-ê ji bo cache-ê tê bikar anîn û dê ji dîskê bêtir ji RAM-ê were xwendin. Ne hewce ye ku vê mîhengê biguhezîne, lê heke hûn di derbarê kontrolkirina cacheya rûpelê de paranoîd in, hûn dikarin wê bikar bînin.

"dawîn" > /sys/block/sdc/queue/scheduler

Plansazkerê I/O pêkhateyek kernel Linux-ê ye ku rêzên xwendin û nivîsandinê birêve dibe. Di teoriyê de, çêtir e ku meriv "noop" ji bo kontrolkerek RAID-ê jîr bikar bîne, ji ber ku Linux di derheqê geometrîya fîzîkî ya dîskê de tiştek nizane, ji ber vê yekê bikêrtir e ku meriv rê bide kontrolkerê ku geometrîya dîskê baş dizane, daxwazê ​​bi lez û bez pêvajoyê bike. derîmkan. Lê wusa dixuye ku "dawîn" performansê çêtir dike. Hûn dikarin di belgeya koda çavkaniya kernel Linux de li ser plansazkeran bêtir bixwînin: linux/Documentation/block/*osched.txt. Û her weha min di dema operasyonên tevlihev de (gelek operasiyonên nivîsandinê) zêdebûna rêjeya xwendinê dîtiye.

"256" > /sys/block/sdc/queue/nr_requests

Hejmara daxwazên I/O yên di tamponê de berî ku ew ji plansazker re derbas bibin. Mezinahiya rêza navxweyî ya hin kontrolkeran (queue_depth) ji nr_daxwazên plansazkerê I/O mezintir e, ji ber vê yekê nexşerêya I/O xwedan şansê hindik e ku bi rêkûpêk pêşîgirtin û yekkirina daxwazan bike. Ji bo demajoyên muhlet û CFQ, çêtir e dema ku nr_daxwazên 2 qat ji rêza hundurê kontrolker be. Daxwazên hevgirtin û ji nû ve rêzkirin ji plansazker re dibe alîkar ku di bin barê giran de bêtir bersivdar be.

echo "16" > /proc/sys/vm/page-cluster

Parametreya rûpel-cluster hejmara rûpelên ku di yek carî de li ser guheztinê têne nivîsandin kontrol dike. Di mînaka jorîn de, nirx li gorî mezinahiya rêzika RAID ya 16 KB li "64" tête danîn. Ew bi guheztinê = 0 re wate nake, lê heke hûn guheztinê li 10 an 20-ê destnîşan bikin wê hingê karanîna vê nirxê dê ji we re bibe alîkar gava ku mezinahiya tîrêja RAID 64K be.

blockdev --setra 4096 /dev/<devname> (-sdb, hdc an dev_mapper)

Mîhengên blokê yên xwerû yên ji bo gelek kontrolkerên RAID-ê bi gelemperî performansa tirsnak encam didin. Zêdekirina vebijarka jorîn ji bo sektorên 4096 * 512-byte pêş-xwendinê saz dike. Bi kêmanî, ji bo operasyonên streaming, leza bi dagirtina cache dîskê ya li ser-çîpê bi xwendin-pêş-xwendinê di heyama ku ji hêla kernel ve ji bo amadekirina I/O ve hatî bikar anîn zêde dibe. Cache dikare daneyên ku dê di xwendina paşîn de were xwestin vehewîne. Ger ew dema dîskê ya potansiyel bikêr bi kar bîne an jî daneyan li derveyî cache bar bike, pir zêde pêşgir dikare I/O-ya rasthatî ji bo pelên mezin bikuje.

Li jêr li ser asta pergala pelan çend pêşniyarên din hene. Lê ew hîn nehatine ceribandin. Piştrast bike ku pergala pelan mezinahiya xêzik û hejmara dîskên di rêzê de dizane. Mînakî, ku ev komek 5K stripe raid64 ji şeş dîskan e (bi rastî pênc, ji ber ku yek dîsk ji bo hevsengiyê tê bikar anîn). Van pêşnîyaran li ser bingeha texmînên teorîkî ne û ji hêla pisporên RAID-ê ve ji blogên / gotarên cihêreng têne berhev kirin.

-> 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))

Ji bo pelên mezin, bifikire ku mezinahiya tîrêjên ku li jor hatine destnîşan kirin zêde bikin.

ATTENTION! Her tiştê ku li jor hatî destnîşan kirin ji bo hin celeb serlêdanan pir subjektîf e. Vê gotarê bêyî ceribandina bikarhênerê ya berê ya serîlêdanên têkildar tu çêtirbûnek garantî nake. Pêdivî ye ku ew tenê were bikar anîn heke ew hewce ye ku bersivdariya giştî ya pergalê baştir bike, an heke ew pirsgirêkên heyî çareser bike.

Дополльные материалы:

Sazkirina kernel Linux ji bo GlusterFS

Read more

Source: www.habr.com

Add a comment