Kusanidi kinu cha Linux kwa GlusterFS

Tafsiri ya kifungu hicho ilitayarishwa usiku wa kuamkia kozi hiyo Msimamizi wa Linux. MtaalamuΒ».

Kusanidi kinu cha Linux kwa GlusterFS

Mara kwa mara, hapa na pale, maswali huibuka kuhusu mapendekezo ya Gluster kuhusu urekebishaji wa kernel na ikiwa kuna hitaji la hii.

Hitaji kama hilo hutokea mara chache. Kwenye mzigo mwingi wa kazi, kernel hufanya vizuri sana. Ingawa kuna upande wa chini. Kihistoria, kinu cha Linux kimekuwa tayari kutumia kumbukumbu nyingi ikipewa fursa, ikiwa ni pamoja na kuweka akiba kama njia kuu ya kuboresha utendakazi.

Katika hali nyingi, hii inafanya kazi vizuri, lakini chini ya mzigo mkubwa inaweza kusababisha matatizo.

Tuna uzoefu mwingi wa mifumo yenye kumbukumbu nyingi kama vile CAD, EDA na kadhalika, ambayo ilianza kupungua chini ya mzigo mzito. Na wakati mwingine tulipata shida huko Gluster. Baada ya kuangalia kwa uangalifu utumiaji wa kumbukumbu na latency ya diski kwa siku nyingi, tulipata upakiaji wao mwingi, iowait kubwa, makosa ya kernel (kernel oops), kufungia, nk.

Nakala hii ni matokeo ya majaribio mengi ya kurekebisha yaliyofanywa katika hali tofauti. Shukrani kwa vigezo hivi, sio tu mwitikio wa jumla umeboreshwa, lakini nguzo pia imetulia kwa kiasi kikubwa.

Linapokuja suala la kurekebisha kumbukumbu, jambo la kwanza kuangalia ni mfumo mdogo wa kumbukumbu (VM, kumbukumbu ya kawaida), ambayo ina idadi kubwa ya chaguzi ambazo zinaweza kukuchanganya.

vm.swappiness

Parameter vm.swappiness huamua ni kiasi gani kernel hutumia kubadilishana (swap, paging) ikilinganishwa na RAM. Pia inafafanuliwa katika msimbo wa chanzo kama "tabia ya kuiba kumbukumbu iliyopangwa". Ubadilishaji wa hali ya juu unamaanisha kuwa kernel itapendelea kubadilisha kurasa zilizopangwa. Thamani ya chini ya ubadilishaji inamaanisha kinyume: kernel itapungua ukurasa kutoka kwa kumbukumbu. Kwa maneno mengine, thamani ya juu vm.swappiness, ndivyo mfumo utatumia kubadilishana.

Matumizi makubwa ya kubadilishana hayafai, kwani vizuizi vikubwa vya data hupakiwa na kupakuliwa kwenye RAM. Watu wengi wanasema kuwa thamani ya swapiness inapaswa kuwa kubwa, lakini kwa uzoefu wangu, kuiweka kwa "0" husababisha utendaji bora.

Unaweza kusoma zaidi hapa - lwn.net/Articles/100978

Lakini, tena, mipangilio hii inapaswa kutumika kwa uangalifu na tu baada ya kupima programu fulani. Kwa programu za utiririshaji zilizopakiwa sana, kigezo hiki kinafaa kuwekwa kuwa "0". Inapobadilishwa kuwa "0", uitikiaji wa mfumo huboreshwa.

vm.vfs_cache_pressure

Mpangilio huu unadhibiti kumbukumbu inayotumiwa na kernel kwa saraka ya kache na vitu vya ingizo (dentry na ingizo).

Na thamani chaguo-msingi ya 100, kernel itajaribu kuachilia dentry na kache za ingizo kwa msingi wa "haki" kwa kache ya ukurasa na kubadilishana. Kupungua kwa vfs_cache_pressure husababisha kernel kuweka dentry na kashe za ingizo. Wakati thamani ni "0", kernel haitawahi kufuta dentry na kashe ya ingizo kwa sababu ya shinikizo la kumbukumbu, na hii inaweza kusababisha kosa la nje ya kumbukumbu kwa urahisi. Kuongezeka kwa vfs_cache_pressure zaidi ya 100 husababisha kernel kutanguliza meno na kusafisha ingizo.

Wakati wa kutumia GlusterFS, watumiaji wengi walio na idadi kubwa ya data na faili nyingi ndogo wanaweza kutumia kwa urahisi kiwango kikubwa cha RAM kwenye seva kwa sababu ya uhifadhi wa ingizo / meno, ambayo inaweza kusababisha uharibifu wa utendaji kwani kernel inapaswa kusindika muundo wa data kwenye mfumo. na 40 GB ya kumbukumbu. Kuweka thamani hii zaidi ya 100 kumesaidia watumiaji wengi kufikia akiba ya haki na kuboresha uitikiaji wa kernel.

vm.dirty_background_ratio na vm.dirty_ratio

Kigezo cha kwanza (vm.dirty_background_ratio) huamua asilimia ya kumbukumbu na kurasa chafu, baada ya kufikia ambayo ni muhimu kuanza kufuta kurasa chafu kwa nyuma kwenye diski. Hadi asilimia hii ifikiwe, hakuna kurasa zinazotolewa kwenye diski. Na wakati upya unapoanza, huendesha nyuma bila kukatiza michakato inayoendesha.

Kigezo cha pili (vm.dirty_ratio) inafafanua asilimia ya kumbukumbu inayoweza kuchukuliwa na kurasa chafu kabla ya kuanza kwa kulazimishwa. Mara tu kiwango hiki kitakapofikiwa, michakato yote huwa sawa (imezuiwa) na hairuhusiwi kuendelea hadi I/O waliyoomba ikamilike na data iko kwenye diski. Na I/O nzito, hii husababisha shida kwa sababu hakuna kache ya data na michakato yote inayofanya I/O imezuiwa kungoja I/O. Hii inasababisha idadi kubwa ya michakato ya kunyongwa, mzigo mkubwa, kutokuwa na utulivu wa mfumo na utendaji mbaya.

Kupunguza mipangilio hii husababisha data kusafishwa hadi kwenye diski mara kwa mara na kutohifadhiwa kwenye RAM. Hii inaweza kusaidia mifumo yenye kumbukumbu nyingi ambapo ni kawaida kuweka akiba za kurasa za GB 45-90 hadi kwenye diski, hivyo kusababisha ucheleweshaji mkubwa wa programu za mbele, kupunguza mwitikio wa jumla na mwingiliano.

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

Cache ya ukurasa ni cache inayohifadhi data ya faili na programu zinazoweza kutekelezwa, yaani, hizi ni kurasa zilizo na maudhui halisi ya faili au kuzuia vifaa. Cache hii hutumiwa kupunguza idadi ya usomaji wa diski. Thamani ya "1" inamaanisha kuwa 1% ya RAM inatumika kwa kache na kutakuwa na usomaji mwingi kutoka kwa diski kuliko kutoka kwa RAM. Sio lazima kubadilisha mpangilio huu, lakini ikiwa una shaka juu ya kudhibiti kashe ya ukurasa, unaweza kuitumia.

"tarehe ya mwisho" > /sys/block/sdc/queue/scheduler

Kipanga ratiba cha I/O ni kijenzi cha Linux ambacho hushughulikia foleni za kusoma na kuandika. Kwa nadharia, ni bora kutumia "noop" kwa kidhibiti smart cha RAID, kwa sababu Linux haijui chochote juu ya jiometri ya diski, kwa hivyo ni bora zaidi kumruhusu mtawala, ambaye anajua jiometri ya diski vizuri, kushughulikia ombi haraka iwezekanavyo. inawezekana. Lakini inaonekana kama "tarehe ya mwisho" inaboresha utendaji. Unaweza kusoma zaidi kuhusu wapangaji katika hati za msimbo wa chanzo cha Linux kernel: linux/Documentation/block/*osched.txt. Na pia nimeona ongezeko la kusoma wakati wa shughuli mchanganyiko (wengi huandika).

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

Idadi ya maombi ya I/O kwenye bafa kabla ya kupitishwa kwa kiratibu. Ukubwa wa foleni ya ndani ya baadhi ya vidhibiti (kina_cha_foleni) ni kubwa kuliko nr_requests za mratibu wa I/O, kwa hivyo kipanga ratiba cha I/O kina nafasi ndogo ya kuweka kipaumbele na kuunganisha maombi ipasavyo. Kwa tarehe ya mwisho na vipanga ratiba vya CFQ, ni bora wakati nr_requests ni mara 2 ya foleni ya ndani ya mtawala. Kuunganisha na kupanga upya maombi husaidia kipanga ratiba kuwa msikivu zaidi chini ya mzigo mzito.

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

Kigezo cha nguzo ya ukurasa hudhibiti idadi ya kurasa ambazo zimeandikwa kwa kubadilishana kwa wakati mmoja. Katika mfano hapo juu, thamani imewekwa "16" kulingana na saizi ya mstari wa RAID wa 64 KB. Haina maana na swappiness = 0, lakini ikiwa utaweka swappiness hadi 10 au 20 basi kutumia thamani hii itakusaidia wakati saizi ya mstari wa RAID ni 64K.

blockdev --setra 4096 /dev/<jina la dev> (-sdb, hdc au dev_mapper)

Mipangilio chaguomsingi ya kifaa cha kuzuia kwa vidhibiti vingi vya RAID mara nyingi husababisha utendakazi mbaya. Kuongeza chaguo hapo juu huweka usomaji-mbele kwa sekta za 4096 * 512-byte. Angalau, kwa shughuli za utiririshaji, kasi huongezeka kwa kujaza kashe ya diski kwenye-chip na kusoma mbele wakati wa kipindi kinachotumiwa na kernel kuandaa I/O. Akiba inaweza kuwa na data ambayo itaombwa kwenye usomaji unaofuata. Uletaji mapema zaidi unaweza kuua I/O nasibu kwa faili kubwa ikiwa itatumia wakati wa diski uwezao kuwa muhimu au kupakia data nje ya akiba.

Chini ni mapendekezo machache zaidi katika kiwango cha mfumo wa faili. Lakini bado hawajajaribiwa. Hakikisha mfumo wako wa faili unajua saizi ya mstari na idadi ya diski kwenye safu. Kwa mfano, kwamba hii ni safu ya 5K stripe raid64 ya diski sita (kwa kweli tano, kwa sababu diski moja hutumiwa kwa usawa). Mapendekezo haya yanatokana na mawazo ya kinadharia na kukusanywa kutoka kwa blogu/makala mbalimbali na wataalamu wa RAID.

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

Kwa faili kubwa, zingatia kuongeza ukubwa wa mistari iliyoorodheshwa hapo juu.

UTAJIRI! Kila kitu kilichoelezwa hapo juu ni cha kibinafsi kwa aina fulani za programu. Makala haya hayahakikishi uboreshaji wowote bila majaribio ya awali ya mtumiaji wa programu zinazohusiana. Inapaswa kutumika tu ikiwa ni muhimu kuboresha mwitikio wa jumla wa mfumo, au ikiwa hutatua matatizo ya sasa.

Vifaa vya ziada:

Kusanidi kinu cha Linux kwa GlusterFS

Soma zaidi

Chanzo: mapenzi.com

Kuongeza maoni