Konfiguration av Linux-kÀrnan för GlusterFS

ÖversĂ€ttningen av artikeln Ă€r framtagen inför kursstarten «Linux Administrator. Professionell».

Konfiguration av Linux-kÀrnan för GlusterFS

Ibland dyker frÄgor upp hÀr och dÀr angÄende Glusters rekommendationer för kÀrninstÀllningar och om det verkligen Àr nödvÀndigt.

SÄdana behov uppstÄr sÀllan. I de flesta belastningar fungerar kÀrnan mycket bra. Men det finns Àven en annan sida. Historiskt sett Àr Linux-kÀrnan benÀgen att konsumera mycket minne om man ger den möjligheten, inklusive för caching som det primÀra sÀttet att öka prestanda.

I de flesta fall fungerar detta utmÀrkt, men vid hög belastning kan det leda till problem.

Vi har stor erfarenhet av system som anvÀnder mycket minne, som CAD, EDA och liknande, som började bromsa vid hög belastning. Och ibland har vi stött pÄ problem med Gluster. Genom att noggrant övervaka minnesanvÀndning och diskens svarstider under flera dagar har vi fÄtt dem att överbelastas, med enorma iowait, kÀrnfel (kernel oops), frysningar osv.

Denna artikel Àr resultatet av mÄnga experiment med instÀllning av parametrar utförda under olika förhÄllanden. Tack vare dessa parametrar har bÄde responsiviteten förbÀttrats och klustrets stabilitet ökat avsevÀrt.

NÀr det kommer till minnesinstÀllningar Àr det först och frÀmst viktigt att titta pÄ det virtuella minnessystemet (VM, virtual memory), som har mÄnga alternativ som kan förvirra.

vm.swappiness

Parameter vm.swappiness bestÀmmer hur mycket kÀrnan anvÀnder swap (utbyte) jÀmfört med det fasta minnet. I kÀllkoden definieras det ocksÄ som «tendency to steal mapped memory» (tendens att stjÀla kartlagt minne). Ett högt vÀrde av swappiness betyder att kÀrnan kommer att ha en större benÀgenhet att avlasta kartlagda sidor. Ett lÄgt vÀrde av swappiness innebÀr det motsatta: kÀrnan kommer att avlasta sidor mindre frÄn minnet. Med andra ord, ju högre vÀrde, vm.swappiness, desto mer kommer systemet att anvÀnda swap.

Ett stort anvÀndande av swap Àr oönskat, eftersom stora datamÀngder laddas in och ut ur RAM-minnet. MÄnga hÀvdar att vÀrdet för swappiness bör vara högt, men enligt min erfarenhet ger en instÀllning pÄ «0» ökad prestanda.

Mer information kan lĂ€sas hĂ€r — lwn.net/Articles/100978

Men Äterigen, dessa instÀllningar bör tillÀmpas med försiktighet och endast efter att ha testat den specifika applikationen. För högbelastade strömmande applikationer bör detta vÀrde sÀttas till "0". NÀr det Àndras till "0" förbÀttras systemets respons.

vm.vfs_cache_pressure

Denna parameter kontrollerar minnet som anvÀnds av kÀrnan för att cachea katalogobjekt och indexeringsbeskrivare (dentry och inode).

Med standardvÀrdet pÄ 100 kommer kÀrnan att försöka frigöra dentry- och inode-cache rÀttvist i förhÄllande till pagecache och swapcache. Att minska vfs_cache_pressure resulterar i att kÀrnan behÄller dentry- och inode-cachar. NÀr vÀrdet Àr "0" kommer kÀrnan aldrig att rensa dentry- och inode-cache pÄ grund av minnesbrist, och detta kan lÀtt leda till en out-of-memory-fel. Att öka vfs_cache_pressure till mer Àn 100 ger kÀrnan prioritet för att frigöra dentry- och inode-cache.

NÀr man anvÀnder GlusterFS kan mÄnga anvÀndare med stora datamÀngder och mÄnga smÄ filer lÀtt anvÀnda en betydande mÀngd RAM pÄ servern pÄ grund av caching av inode/dentry, vilket kan leda till minskad prestanda, eftersom kÀrnan mÄste hantera datastrukturer i ett system med 40 GB minne. Att stÀlla in denna parameter till över 100 har hjÀlpt mÄnga anvÀndare att uppnÄ mer rÀttvis caching och förbÀttra kÀrnans respons.

vm.dirty_background_ratio och vm.dirty_ratio

Den första parametern (vm.dirty_background_ratio) definierar procentandelen av minnet med smutsiga sidor, efter att ha nÄtt vilket man mÄste börja en bakgrundsskrivning av smutsiga sidor till disk. SÄ lÀnge denna procentandel inte har nÄtts skrivs sidor inte till disk. Och nÀr skrivningen börjar sker den i bakgrunden utan att avbryta pÄgÄende processer.

Den andra parametern (vm.dirty_ratio) definierar procentandelen minne som kan anvÀndas av smutsiga sidor innan en tvingad skrivning (forced flash) börjar. NÀr denna tröskel nÄs blir alla processer synkrona (blockeras), och de ges inget tillstÄnd att fortsÀtta förrÀn den begÀrda in- och utdataoperationen faktiskt har slutförts och data Àr pÄ disken. Vid högbelastad in- och utdata skapar detta problem eftersom datacachning saknas, och alla processer som utför in- och utdata blockeras i vÀntan pÄ in- och utdata. Detta leder till ett stort antal hÀngande processer, hög belastning, instabil drift av systemet och dÄlig prestanda.

Att sĂ€nka vĂ€rdena för dessa parametrar gör att data oftare skrivs till disken och inte lagras i RAM. Detta kan hjĂ€lpa system med mycket minne, dĂ€r det Ă€r normalt att skriva $45–90 GB sidcache till disken, vilket leder till enorma vĂ€ntetider för frontend-applikationer och minskar den övergripande responsiviteten och interaktiviteten.

«1» > /proc/sys/vm/pagecache

Sidcache (page cache) Àr en cache dÀr data frÄn filer och körbara program lagras, det vill sÀga sidor med den faktiska innehÄllet frÄn filer eller blockenheter. Denna cache anvÀnds för att minska antalet lÀsningar frÄn disken. VÀrdet «1» betyder att cachen anvÀnder 1% av RAM och antalet lÀsningar frÄn disken kommer att vara fler Àn frÄn RAM. Det Àr inte nödvÀndigt att Àndra detta parameter, men om du Àr paranoid över kontrollen av sidcache, kan du anvÀnda den.

«deadline» > /sys/block/sdc/queue/scheduler

In- och utdata-schemalÀggaren (I/O scheduler) Àr en komponent i Linux-kÀrnan som hanterar köer för lÀsning och skrivning. Teoretiskt sett Àr det bÀttre att anvÀnda «noop» för en smart RAID-kontroller, eftersom Linux inte vet nÄgot om diskens fysiska geometri, sÄ det Àr mer effektivt att lÄta kontroller som vÀl kÀnner till diskens geometri bearbeta begÀran sÄ snabbt som möjligt. Men det verkar som att «deadline» ökar prestandan. Mer information om schemalÀggarna kan lÀsas i dokumentationen till Linux-kÀrnans kÀllkod: linux/Documentation/block/*osched.txt. Och jag har ocksÄ observerat en ökning av lÀshastigheten under blandade operationer (mÄnga skrivoperationer).

«256» > /sys/block/sdc/queue/nr_requests

Antalet in- och utdatafrÄgor i bufferten innan de överförs till schemalÀggaren. Storleken pÄ den interna kön för vissa kontroller (queue_depth) Àr större Àn nr_requests för in- och utdata-schemalÀggaren, vilket gör att schemalÀggaren har fÄ chanser att korrekt prioritera och genomföra sammanfogning av förfrÄgningar. För deadline- och CFQ-schemalÀggare Àr det bÀttre nÀr nr_requests Àr dubbelt sÄ stort som den interna kön för kontrollern. Sammanfogning och omstrukturering av förfrÄgningar hjÀlper schemalÀggaren att vara mer responsiv under hög belastning.

echo «16» > /proc/sys/vm/page-cluster

Parametern page-cluster styr antalet sidor som skrivs till swap Ät gÄngen. I ovanstÄende exempel sÀtts vÀrdet till "16" enligt storleken pÄ stripe (stripe size) för RAID pÄ 64 KB. Detta Àr meningslöst vid swappiness = 0, men om du har stÀllt in swappiness pÄ 10 eller 20, kommer anvÀndning av detta vÀrde hjÀlpa nÀr storleken pÄ RAID-stripe Àr 64 KB.

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

StandardinstĂ€llningarna för blockenheter för mĂ„nga RAID-kontroller leder ofta till usel prestanda. Genom att lĂ€gga till den ovanstĂ„ende parametern stĂ€ller du in förhandslĂ€sning för 4096 * 512-byte sektorer. Åtminstone för strömmande operationer ökar hastigheten genom att fylla det inbyggda diskkaket via förhandslĂ€sning under den tid som kĂ€rnan anvĂ€nder för att förbereda in- och utdata. Data som kommer att begĂ€ras vid nĂ€sta lĂ€sning kan placeras i cache. För mycket förhandslĂ€sning kan förstöra slumpmĂ€ssig in- och utdata för stora filer om det utnyttjar potentiellt nyttig disk tid eller laddar data utanför cachen.

Nedan följer nÄgra fler rekommendationer pÄ filsystemsnivÄ. Men de har inte testats Ànnu. Se till att ditt filsystem kÀnner till storleken pÄ stripe och antalet diskar i arrayen. Till exempel, att detta Àr en RAID5-array med stripe-storlek pÄ 64K av sex diskar (egentligen fem, eftersom en disk anvÀnds för paritet). Dessa rekommendationer baseras pÄ teoretiska antaganden och har samlats frÄn olika bloggar/artiklar av experter inom RAID.

-> ext4 fs, 5 diskar, 64K stripe, enheter i 4K block
mkfs -text4 -E stride=$((64/4))
-> xfs, 5 diskar, 64K stripe, enheter i 512-byte sektorer
mkfs -txfs -d sunit=$((64*2)) -d swidth=$((5*64*2))

För stora filer kan du övervÀga att öka de angivna stripstorlekarna ovan.

VARNING! Allt som beskrivs ovan Àr ytterst subjektivt för vissa typer av applikationer. Denna artikel garanterar inte nÄgra förbÀttringar utan föregÄende testning av de berörda applikationerna av anvÀndaren. Den bör endast tillÀmpas om det Àr nödvÀndigt att förbÀttra systemets övergripande respons eller om den löser aktuella problem.

Ytterligare material:

Konfiguration av Linux-kÀrnan för GlusterFS

LĂ€s mer

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster