Napredni vodnik za optimizacijo jedra Linuxa in zmanjšanje latence

Zadnja posodobitev: 1 marec 2026
  • Uglaševanje jedra Linuxa zahteva kombinacijo arhitekturne konfiguracije, sysctl in razporejanja procesorja, usmerjenega na zakasnitev.
  • Jedra po meri in popravki PREEMPT_RT omogočajo izjemno zmanjšanje latence, vendar vključujejo večjo kompleksnost in vzdrževanje.
  • Optimizacijo omrežja, pomnilnika, diska in sistemskih storitev je treba vedno meriti s strogim spremljanjem in primerjalno analizo.
  • Iterativni, na metrikah temelječ pristop izboljšave jedra spremeni v resnične koristi za aplikacije in uporabnike.

Optimizacija jedra Linuxa za zmanjšanje latence

Ko govorimo o zmogljivosti v Linuxu, skoraj vse kaže na isto mesto: na jedro kot osrednja komponenta, ki nadzoruje latenco, stabilnost in porabo virovPravilna nastavitev lahko pomeni razliko med sistemom, ki se preprosto "sprehaja" in sistemom, ki se gladko odziva na strežnikih, namiznih računalnikih, v oblačnih okoljih ali celo v zelo stara strojna oprema.

Ta priročnik se osredotoča na to, kako Optimizirajte jedro Linuxa za zmanjšanje zakasnitve brez ogrožanja varnosti ali vzdrževanjaObravnavali bomo vse od osnovnih arhitekturnih konceptov do prilagajanja s sysctl, prevajanja jeder po meri, uporabe popravkov v realnem času, prilagajanja za omrežja z nizko zakasnitvijo (kot v EC2) ter tehnik spremljanja in primerjalnega testiranja, s katerimi bomo ugotovili, ali vaše prilagajanje dejansko kaj izboljša.

Arhitektura jedra Linuxa in ključne točke za latenco

Jedro Linuxa deluje kot vmesna plast med aplikacijami in strojno opremo ter upravlja pomnilnik, procesi, prekinitve, gonilniki in datotečni sistemi. na monolitna, a modularna zasnovaZahvaljujoč naložljivim modulom vam omogoča prilagodljivo aktiviranje ali deaktiviranje funkcionalnosti brez ponovnega prevajanja celotnega sistema.

Da bi razumeli, od kod izvirajo latence, je ključnega pomena poznati več podsistemov: načrtovalec procesov (razporejevalnik)Upravljanje pomnilnika in obravnavanje prekinitev sta ključnega pomena. Slabo konfiguriran razporejevalnik, agresivna politika pomnilnika ali prekomerno število nenadzorovanih prekinitev lahko povzročijo počasen odzivni čas, tudi pri zmogljivi strojni opremi.

Konfiguracija jedra vključuje možnosti, kot so CONFIG_PREEMPT, CONFIG_PREEMPT_VOLUNTARY ali CONFIG_SMPTi dejavniki določajo, v kolikšni meri je mogoče jedro prekiniti, da se posveti nujnejšim nalogam, in kako izkorišča večjedrne sisteme. Izbira pravega modela preempcije bistveno spremeni zaznano zakasnitev na namiznih računalnikih, strežnikih z nizko zakasnitvijo ali industrijskih sistemih.

V sodobnih strežnikih je pomembna tudi topologija strojne opreme: porazdelitev jeder, vtičnic, NUMA in hierarhije predpomnilnikaNatančna nastavitev afinitet CPU-ja in pravilnikov NUMA (npr. povezovanje procesov in pomnilnika z istim vozliščem) pomaga zmanjšati čas dostopa in izboljšati stopnjo zadetkov predpomnilnika, kar je ključnega pomena, ko želimo zmanjšati tresenje in nepredvidljive zakasnitve.

Poleg tega je interakcija med razporejevalnikom procesorja in podsistemi V/I (disk in omrežje) določa prepustnost in zakasnitev od konca do konca ki jih vidijo aplikacije. Preden se česar koli dotaknete, je priporočljivo dokumentirati trenutno stanje (konfiguracija jedra, sysctl, GRUB, naloženi moduli), da se lahko hitro vrnete v prvotno stanje, če sprememba poslabša delovanje.

Prilagoditve prek sysctl za izboljšanje zakasnitve in zmogljivosti

vmesnik sysctl vam omogoča spreminjanje parametrov jedra sproti prek /proc/sys, brez ponovnega prevajanja. To je idealna vstopna točka za začetek uglaševanja, ne da bi se še utapljali v prevajanjih.

V omrežnem polju so parametri, kot so net.core.rmem_max, net.core.wmem_max ali net.ipv4.tcp_congestion_control Neposredno vplivajo na prepustnost, zakasnitev in delovanje TCP povezave. Pravilno prilagajanje medpomnilnikov in algoritma za preobremenjenost je ključnega pomena za spletne strežnike z veliko prometa ali instance v oblaku z nizko zakasnitvijo.

Za spomin, vrednosti, kot so vm.swappiness, vm.dirty_ratio, vm.vfs_cache_pressure ali vm.overcommit_memory Omogočajo vam nadzor nad količino uporabljenega swap-a, upravljanjem predpomnilnika strani in obnašanjem navideznega pomnilnika. Zmanjšanje swap-a (na primer na 10) običajno pomaga preprečiti prepogosto uporabo swap-a sistemom, kar zmanjša konice zakasnitve V/I diska.

Če delate z velikimi bazami podatkov ali aplikacijami, ki uporabljajo ogromne količine skupnega pomnilnika, je ključnega pomena, da prilagodite kernel.shmall, kernel.shmall in največje število datotek, odprtih z fs.file-max in fs.nr_openTe slabo dimenzionirane omejitve lahko povzročijo ozka grla in napake, ki jih je pod obremenitvijo težko diagnosticirati.

Najboljši pristop je uvesti majhne spremembe, izmeriti njihov vpliv z orodji za spremljanje in šele nato shranite jih v /etc/sysctl.conf ali v /etc/sysctl.d/V kontejnerskih okoljih ne pozabite, da so številni parametri jedra globalni za gostitelja: njihovo neprevidno spreminjanje lahko vpliva na vse storitve, zato je kombiniranje sysctl z cgroups in imenskimi prostori skoraj obvezno.

Prevajanje in vzdrževanje jeder po meri

Prevajanje jedra po meri ostaja zelo močno orodje, kadar želite zmanjšajte zakasnitev, odstranite nepotrebne stroške ali podprite redko strojno opremoČeprav distribucije vsebujejo precej vsestranska jedra, v nekaterih primerih določeno jedro naredi vso razliko.

  Razlike med obnovitvijo sistema in obnovitvijo na določeno točko v času

Klasični potek dela vključuje prenos kode iz kernel.org ali zakrpana drevesa, kot je xanmod ali likerin uporabite orodja, kot so make menuconfig za izbiro možnosti. Shranjevanje datoteke .config v vašem lastnem repozitoriju git skupaj s skripti za gradnjo vam omogoča reprodukcijo gradenj in ohranjanje skladnosti med različicami.

Če uporabljate Debian ali njegove izpeljanke, je zelo priročno prevesti “v slogu Debiana"Za pridobitev .deb paketov jedra, glav in pripadajočih knjižnic. To vam omogoča, da to jedro po meri namestite na več računalnikov preprosto z namestitvijo paketov in upravljanjem različic z lastnim repozitorijem."

V resničnem svetu je ročno prevajanje pogosto smiselno, če delate z stara ali zelo omejena strojna opremaTipičen primer je star prenosnik z Atom procesorjem in 1 GB RAM-a, kjer sodobno generično jedro, polno nepotrebnih gonilnikov in strežniških možnosti, uvaja latence in dodatno porabo procesorja, ki si je ne morete privoščiti.

Običajna strategija je, da začnete s trenutno konfiguracijo jedra (na primer s kopiranjem /zagonska konfiguracija) in od tam obrežete ali prilagodite. Model predkupne pravice lahko spremenite v »Prednostno jedro (namizje z nizko zakasnitvijo)"dati prednost interaktivnemu odzivu namizja ali dodati posebne razporejevalnike V/I, kot so Bfq v obliki modula za izboljšanje izkušnje na mehanskih diskih.

Da se izognete porabi polovice življenja za prevajanje, je smiselno, da gradnjo izvedete na zmogljivejšem računalniku in po potrebi uporabite navzkrižno prevajanje (Na primer, prevajanje 32-bitnega jedra za Atom iz računalnika x86_64 s preprosto prilagoditvijo ARCH-a in ustreznih orodij). Nato morate le namestiti datoteke .deb na ciljni računalnik in dodati ustrezen vnos v GRUB.

Težaven del je vzdrževanje: priporočljivo je testiranje novega jedra na vozliščih Kanarskih otokov, imeti jasne poti za povrnitev v upravitelju zagona in med prehodom beležiti dnevnike in meritve za zaznavanje nazadovanja v zmogljivosti ali združljivosti gonilnikov.

Modeli preempcije in popravki PREEMPT_RT za sisteme z nizko latenco

Model preprečevanja v jedru določa, koliko se lahko izvajajoča se naloga prekine, da se omogoči prevzem naloge z višjo prioriteto, kar neposredno vpliva na zakasnitev odzivaTo vključuje tako standardne možnosti konfiguracije kot tudi popravke v realnem času.

Generična jedra ponujajo več možnosti: brez preempcije (bolj osredotočena na prepustnost strežnika), prostovoljno preempcijo in predpogojno jedro za namizne računalnikeTo daje prednost hitremu odzivnemu času interaktivnih aplikacij. Prilagajanje te nastavitve lahko znatno izboljša delovanje namiznih sistemov, zvoka ali celo močno obremenjenih starejših računalnikov.

Ko morate iti še korak dlje, se prikaže naslednje: Obliži PREEMPT in PREEMPT_RTTe spremembe spreminjajo pomembne dele jedra, da bi zmanjšale število nepredvidenih odsekov. PREEMPT_RT je namenjen sistemom, kjer mora biti najslabša možna latenca (ne le povprečna) zelo nizka in predvidljiva: industrijska avtomatizacija, profesionalni zvok, telekomunikacije ali trgovanje z visokofrekvenco.

Odločitev o uvedbi PREEMPT_RT ne sme temeljiti na modi, temveč na specifične meritve latence in jitterjaNajprej je priporočljivo, da v celoti izkoristite nastavitve razporejevalnika, afinitete CPU-ja, sysctl in, če je primerno, konfiguracije, kot je dinamično brezstično delovanje, preden zapletete vzdrževanje z drevesom RT.

Upoštevati je treba tudi združljivost: nekatere Gonilniki in podsistemi niso popolnoma prilagojeni RT in lahko zahtevajo posebne različice ali dodatne popravke. Razumen pristop je priprava načrta vzdrževanja, ki jasno opisuje, kdaj in kako integrirati nove različice glavnega jedra z vejo RT, ki se periodično sinhronizira, vendar še vedno nekoliko zaostaja.

Nastavitev razporejanja CPU-ja, delovanje brez tikanja in izolacija jeder

Poleg izbire modela preempcije lahko zakasnitev natančno prilagodite z igranjem z razporejanjem CPU-ja in vedenjem časovnika jedra, zlasti v distribucijah, usmerjenih v podjetja, kot je RHEL.

Red Hat Enterprise Linux 8, na primer, ima jedro privzeto neaktivno za nedejavne procesorjeTo zmanjša porabo energije, saj se izogne ​​periodičnim prekinitvam, ko je jedro v mirovanju. Za delovne obremenitve, občutljive na zakasnitev, je mogoče omogočiti način. dinamično brez kljukanja v nizu jedertako da samo en CPU ("domače jedro") obravnava večino časovno omejenih nalog, ostale pa so čim bolj brez periodičnih prekinitev.

  FreeXP: Oživljanje sistema Windows XP z varnostjo Linuxa

Ta konfiguracija se izvede z dodajanjem ustreznih parametrov ukazna vrstica jedra v GRUB-uregeneriranje konfiguracije in nato prilagajanje afinitete kritičnih niti jedra, kot so niti RCU ali niti bdi-flush, tako da se nahajajo v jedru, rezerviranem za vzdrževanje.

Ta pristop je mogoče dopolniti s parametrom izolpTo omogoča izolacijo jeder od običajnih opravil v uporabniškem prostoru. V scenarijih z nizko latenco je zelo pogosto, da se več jeder rezervira izključno za kritično aplikacijo, medtem ko preostali del sistema (demoni, prekinitve itd.) obravnavajo druga jedra.

Za preverjanje delovanja dinamičnega načina brez tikanja lahko izvedete preproste teste z stress ali skripte, ki za sekundo zasedejo procesor in opazujejo števci časovnikov Kako se število prekinitev na sekundo v izoliranih jedrih zmanjša s tisoč na samo eno, kar je znak, da je periodični časovnik izginil.

Upravljanje pomnilnika in shranjevanja s poudarkom na latenci

Način, kako jedro upravlja pomnilnik in vhodno/izhodne operacije diska, ima velik vpliv na zakasnitev, ki jo zaznajo aplikacijezlasti v podatkovnih bazah in storitvah, ki izvajajo veliko majhnih in pogostih operacij.

Na strani pomnilnika zmanjšajte vm.swappiness zmanjšati uporabo swap-a (ki je skoraj vedno veliko počasnejši od RAM-a), vm.vfs_cache_pressure Nadzoruje, kako hitro sistem poskuša počistiti predpomnilnik inode in dentry, in vm.nr_hugepages Omogoča rezervacijo statičnih velikih strani (HugePages) za velike obremenitve, kot so baze podatkov ali JVM-ji, s čimer se zmanjša režijska obremenitev TLB.

V skladišču izberite ustrezen razporejevalnik V/I glede na vrsto diska To je ključnega pomena. Na sodobnih SSD-jih je običajno dobro uporabiti ... none o mq-deadlineMedtem ko so pri mehanskih diskih in večopravilnih sistemih algoritmi, zasnovani za pravičnost, morda boljši, kot na primer BfqPoleg tega je nameščanje datotečnih sistemov z možnostmi, kot so noatime y nodiratime Izogibajte se nepotrebnim pisanjem vsakič, ko dostopate do datoteke ali imenika.

Glede datotečnih sistemov, ext4 in XFS To ostajajo najpogostejše možnosti: dobro uglašen ext4 je varna stava, medtem ko se XFS običajno bolje skalira pri visoki sočasnosti. Za zelo zahtevne scenarije lahko kombinacija RAID-a (RAID 10 za baze podatkov, RAID 0 za začasno shranjevanje) z dobrim razporejevalnikom zmanjša povprečno zakasnitev in predvsem variabilnost.

Optimizacija omrežja in jedra za nizko latenco v Linuxu in EC2

V visokozmogljivih omrežnih aplikacijah latenca ni odvisna le od strojne opreme ali razdalje, temveč tudi od kako sta konfigurirana sklad TCP/IP in samo jedroTo je še posebej vidno v oblačnih primerih, kot je Amazon EC2 z vmesniki ENA.

Za začetek je ključnega pomena zmanjšati zunanje dejavnike, kot je število omrežni skoki ki jih paketi izvajajo: uporaba bolj neposrednih topologij, uravnalnikov obremenitve blizu zaledja ali optimiziranih con razpoložljivosti skrajša čas potovanja v milisekundah, še preden se sploh dotaknejo operacijskega sistema.

Znotraj jedra konfiguracija omrežja vključuje povečanje deskriptorji datotek (ulimit -n), velikost sprejemnega in pošiljalnega medpomnilnika z net.core.rmem_max, net.core.wmem_max, net.ipv4.tcp_rmem, net.ipv4.tcp_wmemin aktivirajte možnosti, kot so TCP Fast Open za zmanjšanje zakasnitve vzpostavljanja povezave.

V vmesnikih AWS ENA ima moderiranje prekinitev pomembno vlogo: gonilnik privzeto združuje pakete, da zmanjša število IRQ-jev. rx-usecs in tx-usecsČe želite zmanjšati zakasnitev na absolutni minimum, lahko to moderiranje onemogočite tako, da ethtool -CČe parameter rx-usecs in tx-usecs nastavite na nič, se zmanjša zakasnitev, vendar se povečajo stroški prekinitev, zato je treba najti ravnovesje glede na obremenitev.

Uporablja se lahko tudi irqbalance za porazdelitev IRQ-jev po več jedrihali pa ga onemogočite in ročno nastavite afinitete prekinitev in omrežne čakalne vrste (RSS/RPS) za določena jedra, kar je zelo značilno v okoljih z izjemno nizko latenco ali pri uporabi DPDK in preskoku dobrega dela jedrnega sklada.

Drug parameter, ki ga je treba upoštevati, je Stanja CPU CStanja globokega spanja zmanjšajo porabo energije, vendar povzročijo zamude, ko se jedro "prebudi". Če želite zmanjšati odzivno zakasnitev, lahko omejite ta globoka stanja in sprejmete večjo porabo energije ter manj prostora za Turbo Boost na drugih jedrih. Vsako okolje ima svojo idealno točko med porabljenimi vati in pridobljenimi mikrosekundami.

  Čista namestitev sistema Windows 11 23H2: vodnik po korakih in znižanje različice 24H2

Optimizacija procesorja, storitev in aplikacij za zmanjšanje zakasnitve

Poleg samega jedra ima tudi okolica veliko povedati o skupni latenci: od aktivne storitve v sistemu glede na specifično konfiguracijo vsake aplikacije.

Visokozmogljiv strežnik naj bi izvajal samo demoni, ki so resnično potrebniStoritve, kot so Bluetooth, tiskanje ali samodejno odkrivanje omrežja (CUPS, Avahi itd.) na zalednih računalnikih porabljajo le procesor, pomnilnik in vhodno/izhodne operacije, ne da bi pri tem nudile kakršno koli korist. Preglejte z systemctl list-unit-files --state=enabled In onemogočanje nepotrebnih stvari je ena najcenejših in najučinkovitejših stvari, ki jih lahko storite.

Za določanje prioritet kritičnih procesov lahko uporabite orodja, kot so renice, chrt in tasksetPrilagajanje prioritete procesa (renice), določanje razporejanja v realnem času (chrt -f 99) ali dodeljevanje določenim jedrom (taskset) zmanjša motnje v drugih nalogah in izboljša predvidljivost CPU-ja za baze podatkov, VoIP, pretakanje ali trgovalne storitve.

Na ravni aplikacije je uglaševanje prav tako pomembno kot uglaševanje jedra. Spletni strežniki, kot so Nginx ali Apache Potrebujejo natančno nastavitev delavcev, keepalive, predpomnilnikov in stiskanja. Podatkovne baze, kot so PostgreSQL ali MySQL Pregledati morajo velikosti medpomnilnikov, kontrolne točke, nabor povezav in parametre sinhronega pisanja, da dosežejo nizke in stabilne latence.

Tudi JVM-ji igrajo vlogo: izbirajo zbiralnike smeti, kot je G1GC ali ZGC Prilagajanje velikosti kopice lahko zmanjša premore, ki se z zunanjega vidika pojavijo kot zakasnitev. V virtualiziranih in kontejneriziranih okoljih je pravilna porazdelitev ključnega pomena. kvote vCPU, vRAM in V/I Izogiba se tihim konfliktom, ki se kasneje pojavijo kot neskončne čakalne vrste na disku ali preobremenjen procesor.

Spremljanje in primerjalno testiranje jedra in sistema

Vse to uglaševanje je neuporabno, če ne izmeriš vpliva. Ključ je v kombiniranju. neprekinjeno spremljanje s ponovljivimi testi delovanjatako da je mogoče vsako spremembo jedra ali sysctl ovrednotiti z objektivnimi podatki.

Za ogled celotnega stanja sistema lahko uporabite klasična orodja, kot so htop, vmstat, iotop o sarKo potrebujete več podrobnosti, pridejo v poštev specifična orodja jedra, kot so perf in ftraceki vam omogočajo, da s precejšnjo natančnostjo sledite vedenju razporejevalnika, prekinitev in notranjih klicev.

V produkcijskih okoljih je priporočljivo uvesti sisteme metrik, kot so Prometheus, collectd ali sysstat z izvozniki ki razkrivajo števce procesorja, V/I, latence diska in omrežja, čakalne vrste procesov itd. Ti podatki, vizualizirani v Grafani ali podobnih orodjih, pomagajo odkriti regresije ali anomalije, preden končni uporabnik opazi težave.

Za primerjalno analizo je ideja ponoviti dejansko delovno obremenitev in primerjati stanje »pred in po« vsaki spremembi. Orodja, kot so sysbench (za CPU-je in baze podatkov), fio (za disk) ali iperf3 (Za omrežja) omogočajo izdelavo ponovljivih scenarijev. Dokumentacija je bistvenega pomena. različice jedra, konfiguracije sysctl, strojna oprema in testni parametri da bodo primerjave sčasoma smiselne.

V praksi je optimizacija jedra Linuxa iterativni proces: preizkusite vrsto prilagoditev, izmerite rezultate, ohranite tisto, kar prinaša resnično korist, in ostalo zavržete. Z dobrim upravljanjem sprememb lahko izboljšave v novih različicah jedra (kot so nedavne serije z izboljšavami razporejevalnika, grafike, porabe energije ali omrežja) pretvorite v merljive koristi za vaše aplikacije, ne glede na to, ali so na strežnikih na lokaciji, v oblaku ali na zahtevnih delovnih postajah.

Kombinacija poznavanja arhitekture jedra, natančnega uglaševanja s sysctl, nadzorovanega prevajanja, selektivne uporabe popravkov v realnem času in dobrega sistema metrik omogoča skrbniku ali operacijski ekipi, da doseže Hitrejši odzivi, nižja latenca in izboljšana splošna stabilnost brez potrebe po menjavi strojne opreme ob najmanjši provokaciji ali ogrožanju varnosti sistema.

Linux 6.14–0
Povezani članek:
Linux 6.14: Kaj je novega, varnostne izboljšave in podpora za strojno opremo