- Ladenie jadra Linuxu vyžaduje kombináciu architektonickej konfigurácie, sysctl a plánovania CPU orientovaného na latenciu.
- Vlastné jadrá a záplaty PREEMPT_RT umožňujú extrémne zníženie latencie, ale zahŕňajú väčšiu zložitosť a náročnosť údržby.
- Optimalizácia siete, pamäte, disku a systémových služieb by sa mala vždy merať pomocou prísneho monitorovania a porovnávania.
- Iteratívny prístup založený na metrikách premieňa vylepšenia jadra na skutočné výhody pre aplikácie a používateľov.

Keď hovoríme o výkone v Linuxe, takmer všetko nakoniec poukazuje na to isté: na jadro ako centrálna súčasť, ktorá riadi latenciu, stabilitu a využitie zdrojovJeho správne doladenie môže znamenať rozdiel medzi systémom, ktorý „samo obíde“, a systémom, ktorý plynule reaguje na serveroch, desktopoch, cloudových prostrediach alebo dokonca v... veľmi starý hardvér.
Táto príručka sa zameriava na to, ako Optimalizujte jadro Linuxu s cieľom minimalizovať latenciu bez ohrozenia bezpečnosti alebo údržbyPreberieme všetko od základných architektonických konceptov až po ladenie pomocou sysctl, kompiláciu vlastných jadier, používanie záplat v reálnom čase, ladenie sietí s nízkou latenciou (ako v EC2) a techniky monitorovania a benchmarkingu na meranie, či to, čo ladíte, skutočne niečo zlepšuje.
Architektúra jadra Linuxu a kľúčové body latencie
Linuxové jadro funguje ako sprostredkovateľská vrstva medzi aplikáciami a hardvérom a spravuje... pamäť, procesy, prerušenia, ovládače a súborové systémy, jeho monolitický, ale modulárny dizajnVďaka načítateľným modulom umožňuje flexibilne aktivovať alebo deaktivovať funkcie bez nutnosti prekompilácie celého systému.
Aby sme pochopili, odkiaľ pochádzajú latencie, je kľúčové poznať niekoľko podsystémov: plánovač procesov (rozvrhovač)Správa pamäte a spracovanie prerušení sú kľúčové. Zle nakonfigurovaný plánovač, agresívna pamäťová politika alebo nadmerný počet nekontrolovaných prerušení môže viesť k pomalým časom odozvy, a to aj pri použití výkonného hardvéru.
Konfigurácia jadra zahŕňa možnosti ako napríklad CONFIG_PREEMPT, CONFIG_PREEMPT_VOLUNTARY alebo CONFIG_SMPTieto faktory určujú rozsah, v akom môže byť jadro prerušené, aby sa mohlo venovať naliehavejším úlohám, a ako využíva viacjadrové systémy. Výber správneho modelu preempcie výrazne mení vnímanú latenciu na stolových počítačoch, serveroch s nízkou latenciou alebo priemyselných systémoch.
V moderných serveroch je dôležitá aj topológia hardvéru: distribúcia jadier, soketov, NUMA a hierarchia vyrovnávacej pamäteJemné doladenie afinity CPU a politík NUMA (napr. priradenie procesov a pamäte k rovnakému uzlu) pomáha skrátiť časy prístupu a zlepšiť mieru zásahov do vyrovnávacej pamäte, čo je kľúčové, keď chceme minimalizovať chvenie a nepredvídateľné latencie.
Okrem toho interakcia medzi plánovačom CPU a podsystémami I/O (disk a sieť) určuje priepustnosť a latenciu medzi koncovými bodmi ktoré aplikácie vidia. Predtým, ako sa čohokoľvek dotknete, je vhodné zdokumentovať aktuálny stav (konfigurácia jadra, sysctl, GRUB, načítané moduly), aby ste sa mohli rýchlo vrátiť k predchádzajúcemu stavu, ak zmena zhorší výkon.
Úpravy cez sysctl na zlepšenie latencie a výkonu
rozhranie sysctl umožňuje upravovať parametre jadra za chodu cez /proc/sys, bez nutnosti rekompilácie. Je to ideálny vstupný bod pre začatie ladenia bez toho, aby ste sa museli zahltiť kompiláciami.
V sieťovom poli, parametre ako napr. net.core.rmem_max, net.core.wmem_max alebo net.ipv4.tcp_congestion_control Priamo ovplyvňujú priepustnosť, latenciu a správanie TCP pripojenia. Správne nastavenie vyrovnávacích pamätí a algoritmu preťaženia je nevyhnutné pre webové servery s vysokou návštevnosťou alebo cloudové inštancie s nízkou latenciou.
Pre pamäť, hodnoty ako napríklad vm.swappiness, vm.dirty_ratio, vm.vfs_cache_pressure alebo vm.overcommit_memory Umožňujú vám kontrolovať, koľko swapu sa používa, ako sa spravuje vyrovnávacia pamäť stránok a správanie virtuálnej pamäte. Zníženie swapovania (napríklad na 10) zvyčajne pomáha zabrániť príliš častému používaniu swapu systémom, čím sa znižujú špičky latencie I/O diskov.
Ak pracujete s rozsiahlymi databázami alebo aplikáciami, ktoré používajú obrovské množstvo zdieľanej pamäte, je dôležité upraviť kernel.shmall, kernel.shmall a maximálny počet súborov otvorených pomocou fs.file-max a fs.nr_openTieto nesprávne dimenzované limity môžu spôsobiť úzke miesta a chyby, ktoré je ťažké diagnostikovať pri zaťažení.
Najlepším prístupom je implementovať malé zmeny, merať ich vplyv pomocou monitorovacích nástrojov a až potom uložte ich do súboru /etc/sysctl.conf alebo do súboru /etc/sysctl.d/V kontajnerových prostrediach nezabudnite, že mnohé parametre jadra sú pre hostiteľa globálne: ich neopatrná zmena môže ovplyvniť všetky služby, takže kombinovanie sysctl s cgroups a mennými priestormi je takmer povinné.
Kompilácia a údržba vlastných jadier
Kompilácia vlastného jadra zostáva veľmi silným nástrojom, keď chcete znížiť latenciu, odstrániť zbytočné réžie alebo podporovať vzácny hardvérHoci distribúcie sa dodávajú s pomerne všestrannými jadrami, v určitých scenároch je konkrétne jadro rozhodujúce.
Klasický pracovný postup zahŕňa stiahnutie kódu z kernel.org alebo opravené stromy ako xanmod alebo liquorixa používať nástroje ako make menuconfig vybrať možnosti. Uloženie súboru .config do vášho vlastného git repozitára spolu so skriptami zostavenia vám umožňuje reprodukovať zostavenia a zachovať konzistenciu medzi verziami.
Ak používate Debian alebo jeho deriváty, je veľmi pohodlné kompilovať „v štýle Debianu„Získať .deb balíčky jadra, hlavičkových súborov a súvisiacich knižníc. To vám umožní nasadiť toto vlastné jadro na viacero počítačov jednoduchou inštaláciou balíčkov a správou verzií pomocou vlastného repozitára.“
V reálnom svete má manuálna kompilácia často zmysel, keď pracujete s starý alebo veľmi obmedzený hardvérTypickým príkladom je starý netbook s procesorom Atom a 1 GB RAM, kde moderné generické jadro plné nepotrebných ovládačov a serverových možností prináša latencie a dodatočnú spotrebu CPU, ktorú si nemôžete dovoliť.
Bežnou stratégiou je začať s aktuálnou konfiguráciou jadra (napríklad skopírovaním konfigurácia /boot) a odtiaľ orezať alebo upraviť. Model predbežného zobrazenia môžete zmeniť na „Preemptabilné jadro (desktop s nízkou latenciou)„uprednostniť interaktívnu odozvu pracovnej plochy alebo pridať špecifické plánovače I/O, ako napríklad Bfq vo forme modulu na zlepšenie zážitku z hry na mechanických diskoch.
Aby ste sa vyhli stráveniu polovice života kompiláciou, má zmysel vykonávať kompiláciu na výkonnejšom počítači a v prípade potreby použiť krížová kompilácia (Napríklad kompilácia 32-bitového jadra pre Atom z x86_64 PC jednoduchou úpravou ARCH a príslušných nástrojov). Potom už len stačí nainštalovať súbory .deb na cieľový počítač a pridať príslušný záznam do GRUBu.
Najzložitejšou časťou je údržba: je vhodné testovanie nového jadra na uzloch Kanárskych ostrovov, mať v správcovi zavádzania jasné cesty pre vrátenie zmien a zaznamenávať protokoly a metriky počas prechodu na zistenie regresie vo výkone alebo kompatibilite ovládačov.
Modely preempcie a záplaty PREEMPT_RT pre systémy s nízkou latenciou
Model preempcie jadra určuje, do akej miery môže byť spustená úloha prerušená, aby ju mohla prevziať úloha s vyššou prioritou, čo priamo ovplyvňuje... latencia odozvyZahŕňa to štandardné možnosti konfigurácie aj opravy v reálnom čase.
Generické jadrá ponúkajú niekoľko možností: žiadna preempcia (viac zameraná na priepustnosť servera), dobrovoľná preempcia a preemptabilné jadro pre desktopToto uprednostňuje rýchlu dobu odozvy interaktívnych aplikácií. Úpravou tohto nastavenia môžete výrazne zlepšiť výkon stolových systémov, zvuku alebo dokonca aj vysoko zaťažených starších počítačov.
Keď potrebujete ísť o krok ďalej, zobrazí sa nasledovné: Záplaty PREEMPT a PREEMPT_RTTieto úpravy menia významné časti jadra, aby sa minimalizovali neprepínateľné sekcie. PREEMPT_RT je určený pre systémy, kde musí byť najhoršia latencia (nielen priemerná) veľmi nízka a predvídateľná: priemyselná automatizácia, profesionálne audio, telekomunikácie alebo vysokofrekvenčný obchod.
Rozhodnutie zaviesť PREEMPT_RT by nemalo byť založené na móde, ale na špecifické merania latencie a jitteruPo prvé, je vhodné plne využiť nastavenia plánovača, afinity CPU, sysctl a prípadne konfigurácie, ako napríklad dynamické beztickové ovládanie, predtým, ako komplikovať údržbu stromom RT.
Je potrebné zvážiť aj kompatibilitu: niektoré Ovládače a subsystémy nie sú úplne prispôsobené pre RT a môžu vyžadovať špecifické verzie alebo ďalšie záplaty. Rozumným prístupom je pripraviť plán údržby, ktorý jasne načrtáva, kedy a ako integrovať nové verzie hlavného jadra s vetvou RT, ktorá sa periodicky synchronizuje, ale stále trochu zaostáva.
Ladenie plánovania CPU, beztieková prevádzka a izolácia jadier
Okrem výberu modelu preempcie môžete jemne doladiť latenciu aj hraním sa s plánovaním CPU a správaním časovača jadra, najmä v podnikovo orientovaných distribúciách, ako je RHEL.
Napríklad Red Hat Enterprise Linux 8 je dodávaný s jadro štandardne netika pre nečinné procesoryToto znižuje spotrebu energie tým, že sa zabráni pravidelným prerušeniam, keď je jadro nečinné. Pre pracovné zaťaženia citlivé na latenciu je možné povoliť režim. dynamický beztiekový v sade jadiertakže iba jeden procesor („domovské jadro“) spracováva väčšinu úloh založených na čase a zvyšok je čo najviac bez periodických prerušení.
Táto konfigurácia sa vykonáva pridaním príslušných parametrov do príkazový riadok jadra v GRUBeregenerácia konfigurácie a následná úprava afinity kritických vlákien jadra, ako sú napríklad vlákna RCU alebo vlákna bdi-flush, takže sa nachádzajú v jadre vyhradenom pre údržbu.
Tento prístup je možné doplniť parametrom izolcpusTo umožňuje izolovať jadrá od bežných úloh v používateľskom priestore. V scenároch s nízkou latenciou je veľmi bežné rezervovať niekoľko jadier výhradne pre kritickú aplikáciu, zatiaľ čo zvyšok systému (démony, prerušenia atď.) je zabezpečený inými jadrami.
Na overenie fungovania dynamického režimu bez ticknutia je možné spustiť jednoduché testy pomocou stress alebo skripty, ktoré na sekundu zamestnajú CPU a potom ho pozorujú počítadlá časovačov Ako počet prerušení za sekundu klesne z tisícov na iba jedno v izolovaných jadrách, čo je znakom toho, že periodický časovač zmizol.
Správa pamäte a úložiska so zameraním na latenciu
Spôsob, akým jadro spravuje pamäť a diskové I/O operácie, má obrovský vplyv na... latencia vnímaná aplikáciaminajmä v databázach a službách, ktoré vykonávajú veľa malých a častých operácií.
Na strane pamäte znížte vm.swappiness minimalizovať používanie swapu (ktorý je takmer vždy oveľa pomalší ako RAM), vm.vfs_cache_pressure Riadi, ako rýchlo sa systém pokúša vymazať vyrovnávaciu pamäť inode a dentry. vm.nr_hugepages Umožňuje rezervovať statické HugePages pre veľké záťaže, ako sú databázy alebo JVM, čím sa znižuje réžia TLB.
V úložisku vyberte vhodný plánovač I/O podľa typu disku Je to kritické. Na moderných SSD diskoch je zvyčajne dobrý nápad použiť... none o mq-deadlineZatiaľ čo v mechanických diskoch a multitaskingových systémoch by algoritmy navrhnuté pre spravodlivosť mohli byť lepšie, ako napríklad BfqOkrem toho, montáž súborových systémov s možnosťami, ako napríklad noatime y nodiratime Vyhnite sa zbytočným zápisom pri každom prístupe k súboru alebo adresáru.
Čo sa týka súborových systémov, ext4 a XFS Toto zostávajú najbežnejšie možnosti: dobre vyladený ext4 je bezpečnou voľbou, zatiaľ čo XFS má tendenciu lepšie škálovať pri vysokej súbežnosti. Pre veľmi náročné scenáre môže kombinácia RAID (RAID 10 pre databázy, RAID 0 pre dočasné úložisko) s dobrým plánovačom znížiť priemernú latenciu a predovšetkým variabilitu.
Optimalizácia siete a jadra pre nízku latenciu v Linuxe a EC2
Vo vysokovýkonných sieťových aplikáciách závisí latencia nielen od hardvéru alebo vzdialenosti, ale aj od ako je nakonfigurovaný TCP/IP stack a samotné jadroToto je obzvlášť viditeľné v cloudových inštanciách, ako je Amazon EC2 s rozhraniami ENA.
V prvom rade je kľúčové znížiť vonkajšie faktory, ako napríklad počet sieťové skoky ktoré balíky vykonávajú: použitie priamejších topológií, vyrovnávačov záťaže blízko backendu alebo optimalizovaných zón dostupnosti skracuje čas prenosu v milisekundách ešte predtým, ako sa vôbec dotknú operačného systému.
V rámci jadra zahŕňa konfigurácia siete zvyšovanie deskriptory súborov (ulimit -n), veľkosť prijímacích a odosielacích vyrovnávacích pamätí s net.core.rmem_max, net.core.wmem_max, net.ipv4.tcp_rmem, net.ipv4.tcp_wmema aktivovať možnosti ako napríklad TCP Fast Open na zníženie latencie nadväzovania pripojenia.
V rozhraniach AWS ENA hrá moderovanie prerušení dôležitú úlohu: ovládač štandardne zoskupuje pakety, aby znížil počet IRQ. rx-usecs a tx-usecsAk chcete znížiť latenciu na absolútne minimum, môžete túto moderáciu vypnúť ethtool -CNastavenie rx-usecs a tx-usecs na nulu znižuje latenciu, ale zvyšuje réžiu prerušení, takže je potrebné nájsť rovnováhu v závislosti od záťaže.
Môže sa tiež použiť irqbalance na distribúciu IRQ medzi viacero jadier, alebo ho vypnúť a manuálne nastaviť afinity prerušení a sieťového frontu (RSS/RPS) ku konkrétnym jadrám, čo je veľmi typické v prostrediach s ultranízkou latenciou alebo pri použití DPDK a preskočení veľkej časti jadrového zásobníka.
Ďalším parametrom, ktorý treba zvážiť, je Stavy CPU CStavy hlbokého spánku znižujú spotrebu energie, ale prinášajú oneskorenia pri „prebudení“ jadra. Ak chcete znížiť latenciu odozvy, môžete tieto hlboké stavy obmedziť, akceptovať vyššiu spotrebu energie a menší priestor pre Turbo Boost na ostatných jadrách. Každé prostredie má svoj vlastný optimálny pomer medzi spotrebovanými wattmi a získanými mikrosekundami.
Optimalizácia CPU, služieb a aplikácií na zníženie latencie
Okrem samotného jadra má k celkovej latencii veľa čo povedať aj okolité prostredie: od aktívne služby v systéme až po špecifickú konfiguráciu každej aplikácie.
Vysokovýkonný server by mal spúšťať iba démoni, ktorí sú skutočne nevyhnutníSlužby ako Bluetooth, tlač alebo automatické vyhľadávanie siete (CUPS, Avahi atď.) na serverových počítačoch spotrebúvajú iba procesor, pamäť a vstupno-výstupné operácie bez toho, aby poskytovali akýkoľvek úžitok. Skontrolujte s systemctl list-unit-files --state=enabled A deaktivácia nepotrebných vecí je jednou z najlacnejších a najefektívnejších vecí, ktoré môžete urobiť.
Na stanovenie priorít kritických procesov môžete použiť nástroje ako napríklad renice, chrt a tasksetÚprava priority procesu (renice), jeho plánovanie v reálnom čase (chrt -f 99) alebo jeho priradenie ku konkrétnym jadrám (taskset) znižuje interferenciu s inými úlohami, čím sa zlepšuje predvídateľnosť CPU pre databázy, VoIP, streamovanie alebo obchodné služby.
Na úrovni aplikácie je ladenie rovnako dôležité ako ladenie jadra. Webové servery, ako napríklad Nginx alebo Apache Potrebujú doladenie pracovníkov, funkcie keepalive, vyrovnávacích pamätí a kompresie. Databázy ako PostgreSQL alebo MySQL Musia skontrolovať veľkosti vyrovnávacích pamätí, kontrolné body, oblasť pripojení a parametre synchrónneho zápisu, aby dosiahli nízke a stabilné latencie.
JVM tiež zohrávajú úlohu: vyberajú si zberače odpadu, ako napríklad G1GC alebo ZGC Úprava veľkosti haldy môže znížiť pauzy, ktoré sa z vonkajšieho hľadiska javia ako latencia. Vo virtualizovaných a kontajnerových prostrediach je správna distribúcia kľúčová. Kvóty vCPU, vRAM a I/O Zabraňuje tichému súpereniu, ktoré sa neskôr prejavuje ako nekonečné fronty na disku alebo nasýtený procesor.
Monitorovanie a benchmarking jadra a systému
Všetko toto ladenie je zbytočné, ak nemeriate dopad. Kľúčom je kombinovanie. nepretržité monitorovanie s reprodukovateľnými výkonnostnými testamiaby každá zmena v jadre alebo sysctl mohla byť vyhodnotená pomocou objektívnych údajov.
Na zobrazenie celkového stavu systému môžete použiť klasické nástroje, ako napríklad htop, vmstat, iotop o sarKeď potrebujete viac podrobností, prichádzajú do úvahy špecifické nástroje jadra, ako napríklad výkon a ftracektoré vám umožňujú sledovať správanie plánovača, prerušení a interných volaní so značnou presnosťou.
V produkčných prostrediach sa odporúča nasadiť metrické systémy, ako napríklad Prometheus, collectd alebo sysstat s exportérmi ktoré odhaľujú počítadlá CPU, I/O, latencie diskov a siete, fronty procesov atď. Tieto údaje, vizualizované v Grafane alebo podobných nástrojoch, pomáhajú odhaliť regresie alebo anomálie skôr, ako si koncový používateľ všimne problémy.
Pri benchmarkingu je cieľom replikovať skutočné pracovné zaťaženie a porovnať stav „pred a po“ každej zmene. Nástroje ako napríklad sysbench (pre CPU a databázy), Fio (pre disk) alebo iperf3 (V prípade sietí) umožňujú vytváranie opakovateľných scenárov. Dokumentácia je nevyhnutná. verzie jadra, konfigurácie sysctl, hardvér a testovacie parametre aby porovnania dávali zmysel s odstupom času.
V praxi je optimalizácia jadra Linuxu iteratívny proces: otestujete sériu vylepšení, zmeriate výsledky, ponecháte si tie, ktoré prinášajú skutočný úžitok, a zvyšok zahodíte. S dobrou správou zmien môžete premeniť vylepšenia v nových verziách jadra (ako napríklad nedávne série s vylepšeniami plánovača, grafiky, napájania alebo siete) na merateľné výhody pre vaše aplikácie, či už ide o lokálne servery, cloud alebo náročné pracovné stanice.
Kombinácia znalostí architektúry jadra, jemného doladenia pomocou sysctl, riadenej kompilácie, selektívneho používania záplat v reálnom čase a dobrého systému metrík umožňuje administrátorovi alebo operačnému tímu dosiahnuť Rýchlejšie odozvy, nižšia latencia a vylepšená celková stabilita bez nutnosti meniť hardvér pri najmenšej provokácii alebo ohroziť bezpečnosť systému.
obsah
- Architektúra jadra Linuxu a kľúčové body latencie
- Úpravy cez sysctl na zlepšenie latencie a výkonu
- Kompilácia a údržba vlastných jadier
- Modely preempcie a záplaty PREEMPT_RT pre systémy s nízkou latenciou
- Ladenie plánovania CPU, beztieková prevádzka a izolácia jadier
- Správa pamäte a úložiska so zameraním na latenciu
- Optimalizácia siete a jadra pre nízku latenciu v Linuxe a EC2
- Optimalizácia CPU, služieb a aplikácií na zníženie latencie
- Monitorovanie a benchmarking jadra a systému