- Linux-ytimen virittäminen vaatii arkkitehtuurikonfiguraation, sysctl-komennon ja latenssipohjaisen suorittimen ajoituksen yhdistämistä.
- Mukautetut ytimet ja PREEMPT_RT-korjaukset mahdollistavat äärimmäisen viiveen pienentämisen, mutta ne ovat monimutkaisempia ja vaativat enemmän ylläpitoa.
- Verkon, muistin, levyn ja järjestelmäpalveluiden optimointia tulisi aina mitata tiukalla seurannalla ja vertailuanalyyseillä.
- Iteratiivinen, metriikoihin perustuva lähestymistapa muuttaa ytimen parannukset todellisiksi hyödyiksi sovelluksille ja käyttäjille.

Kun puhumme Linuxin suorituskyvystä, lähes kaikki päätyy samaan paikkaan: ydin keskeisenä komponenttina, joka hallitsee latenssia, vakautta ja resurssien käyttöäSen hienosäätö oikein voi olla ratkaiseva tekijä siinä, onko järjestelmä "pärjää" vai toimiiko se sujuvasti palvelimilla, työpöydillä, pilviympäristöissä tai jopa sisäisissä sovelluksissa. erittäin vanhaa laitteistoa.
Tämä opas keskittyy siihen, miten Optimoi Linux-ydin viiveen minimoimiseksi vaarantamatta turvallisuutta tai ylläpidettävyyttäKäsittelemme kaikkea arkkitehtuurin perusperiaatteista sysctl-syötteen hienosäätöön, mukautettujen ytimien kääntämiseen, reaaliaikaisten korjauspäivitysten käyttöön, matalan latenssin verkkojen virittämiseen (kuten EC2:ssa) sekä seuranta- ja vertailutekniikoihin, joilla mitataan, parantavatko tekemäsi muutokset todella mitään.
Linux-ytimen arkkitehtuuri ja latenssin kannalta keskeiset kohdat
Linux-ydin toimii välikerroksena sovellusten ja laitteiston välillä ja hallitsee muisti, prosessit, keskeytykset, ajurit ja tiedostojärjestelmät. päälle monoliittinen mutta modulaarinen rakenneLadattavien moduulien ansiosta voit joustavasti aktivoida tai deaktivoida toimintoja ilman koko järjestelmän uudelleenkääntämistä.
Latenssien alkuperän ymmärtämiseksi on tärkeää tuntea useita alijärjestelmiä: prosessisuunnittelija (aikatauluttaja)Muistinhallinta ja keskeytysten käsittely ovat ratkaisevan tärkeitä. Huonosti konfiguroitu ajoitusohjelma, aggressiivinen muistikäytäntö tai liian suuri määrä hallitsemattomia keskeytyksiä voivat johtaa hitaisiin vasteaikoihin jopa tehokkaalla laitteistolla.
Ytimen konfigurointiin kuuluu vaihtoehtoja, kuten CONFIG_PREEMPT, CONFIG_PREEMPT_VOLUNTARY tai CONFIG_SMPNämä tekijät määräävät, missä määrin ydintä voidaan keskeyttää kiireellisempien tehtävien hoitamiseksi ja miten se hyödyntää moniydinjärjestelmiä. Oikean ennakointimallin valitseminen muuttaa merkittävästi havaittua latenssia pöytätietokoneilla, matalan latenssin palvelimilla tai teollisuusjärjestelmissä.
Nykyaikaisissa palvelimissa myös laitteistotopologialla on merkitystä: ytimien, sokettien, NUMA:n ja välimuistihierarkian jakaumaSuorittimen affiniteettien ja NUMA-käytäntöjen hienosäätö (esim. prosessien ja muistin kiinnittäminen samaan solmuun) auttaa lyhentämään käyttöaikoja ja parantamaan välimuistin osumisnopeutta, mikä on avainasemassa, kun halutaan minimoida jitteriä ja arvaamattomia latensseja.
Lisäksi CPU-aikatauluttajan ja alijärjestelmien välinen vuorovaikutus I/O (levy ja verkko) määrittää läpimenon ja päästä päähän -latenssin että sovellukset näkevät. Ennen kuin kosket mihinkään, on suositeltavaa dokumentoida nykyinen tila (ytimen kokoonpano, sysctl, GRUB, ladatut moduulit), jotta voit nopeasti palauttaa sen, jos muutos heikentää suorituskykyä.
Sysctl-komennon kautta tehtävät säädöt latenssin ja suorituskyvyn parantamiseksi
käyttöliittymä sysctl-komennon avulla voit muokata ytimen parametreja lennossa /proc/sys-tiedoston kautta ilman uudelleenkääntämistä. Se on ihanteellinen lähtökohta asetusten säätämiseen ilman, että jumiudut vielä käännöksiin.
Verkkokentässä parametrit, kuten net.core.rmem_max, net.core.wmem_max tai net.ipv4.tcp_congestion_control Ne vaikuttavat suoraan läpäisykykyyn, latenssiin ja TCP-yhteyden toimintaan. Puskurien ja ruuhka-algoritmin asianmukainen säätäminen on elintärkeää paljon liikennöidyille web-palvelimille tai matalan latenssin omaaville pilvi-instansseille.
Muistin osalta arvoja, kuten vm.swappiness, vm.dirty_ratio, vm.vfs_cache_pressure tai vm.overcommit_memory Niiden avulla voit hallita swap-muistin käyttöä, sivuvälimuistin hallintaa ja virtuaalimuistin toimintaa. Swappimisasteen vähentäminen (esimerkiksi 10:een) auttaa yleensä estämään järjestelmää käyttämästä swap-muistia liian usein, mikä vähentää levyn I/O-viiveen piikkejä.
Jos työskentelet suurten tietokantojen tai sovellusten kanssa, jotka käyttävät valtavia määriä jaettua muistia, on tärkeää säätää kernel.shmmax, kernel.shmall ja avattujen tiedostojen enimmäismäärä fs.file-max ja fs.nr_openNämä huonosti mitoitetut rajat voivat aiheuttaa pullonkauloja ja virheitä, joita on vaikea diagnosoida kuormituksen aikana.
Paras lähestymistapa on toteuttaa pieniä muutoksia, mitata niiden vaikutusta seurantatyökaluilla ja vasta sitten säilytä ne tiedostossa /etc/sysctl.conf tai /etc/sysctl.d/Konttiympäristöissä on muistettava, että monet ytimen parametrit ovat globaaleja isännälle: niiden huolimaton muuttaminen voi vaikuttaa kaikkiin palveluihin, joten sysctl:n yhdistäminen cgroups- ja namespaces-ryhmiin on lähes pakollista.
Mukautettujen ytimien kääntäminen ja ylläpito
Mukautetun ytimen kääntäminen on edelleen erittäin tehokas työkalu, kun haluat vähentää viivettä, poistaa tarpeetonta lisäkuluja tai tukea harvinaisia laitteitaVaikka jakeluissa on melko monipuoliset ytimet, tietyissä tilanteissa tietty ydin tekee kaiken eron.
Klassinen työnkulku sisältää koodin lataamisen osoitteesta kernel.org tai paikatut puut, kuten xanmod tai liquorixja käytä työkaluja, kuten make menuconfig valitaksesi asetuksia. .config-tiedoston tallentaminen omaan git-arkistoon yhdessä koontikomentosarjojen kanssa mahdollistaa koontiversioiden toistamisen ja versioiden välisen yhtenäisyyden säilyttämisen.
Jos käytät Debiania tai sen johdannaisia, on erittäin kätevää kääntää "Debian-tyylinen"Hankkiaksesi .deb-paketit ytimestä, otsikoista ja niihin liittyvistä kirjastoista. Näin voit ottaa mukautetun ytimen käyttöön useilla koneilla yksinkertaisesti asentamalla paketit ja hallitsemalla versioita omasta arkistostasi."
Todellisessa maailmassa manuaalinen kääntäminen on usein järkevää, kun työskentelet vanhaa tai hyvin rajallista laitteistoaTyypillinen esimerkki on vanha netbook Atom-prosessorilla ja 1 Gt:n RAM-muistilla, kun taas moderni geneerinen ydin, täynnä tarpeettomia ajureita ja palvelinasetuksia, tuo mukanaan latensseja ja ylimääräistä prosessorin kulutusta, johon sinulla ei ole varaa.
Yleinen strategia on aloittaa nykyisestä ytimen kokoonpanosta (esimerkiksi kopioimalla /boot-asetukset) ja sieltä voit rajata tai säätää. Voit muuttaa ennakkomaksumalliksi ”Preemptible Kernel (matalan viiveen työpöytä)"priorisoidaksesi interaktiivisen työpöytävasteen tai lisätäksesi tiettyjä I/O-ajoittajia, kuten Bfq moduulin muodossa mekaanisten levyjen käyttökokemuksen parantamiseksi.
Jotta et tuhlaisi puolta elämästäsi kääntämiseen, on järkevää tehdä käännös tehokkaammalla koneella ja tarvittaessa käyttää ristiinkääntäminen (Esimerkiksi 32-bittisen Atom-ytimen kääntäminen x86_64-tietokoneelta yksinkertaisesti säätämällä ARCHia ja vastaavia työkaluketjuja). Sitten sinun tarvitsee vain asentaa .deb-tiedostot kohdekoneelle ja lisätä sopiva merkintä GRUBiin.
Hankala osa on huolto: se on suositeltavaa uuden ytimen testaaminen Kanariansaarten solmuilla, käytä selkeät palautuspolut käynnistyksen hallinnassa ja tallenna lokit ja mittarit siirtymän aikana suorituskyvyn tai ajurien yhteensopivuuden regression havaitsemiseksi.
Preemption-mallit ja PREEMPT_RT-korjaukset matalan latenssin järjestelmille
Ytimen etuoikeusmalli sanelee, kuinka paljon käynnissä olevaa tehtävää voidaan keskeyttää, jotta korkeamman prioriteetin tehtävä voi ottaa sen haltuunsa, mikä vaikuttaa suoraan vasteen latenssiTämä sisältää sekä vakiokonfiguraatiovaihtoehdot että reaaliaikaiset korjauspäivitykset.
Yleiset ytimet tarjoavat useita vaihtoehtoja: ei ennakko-oikeutta (keskittyen enemmän palvelimen läpäisykykyyn), vapaaehtoinen ennakko-oikeus ja ennaltaehkäisevä ydin työpöydälleTämä priorisoi interaktiivisten sovellusten nopeaa vasteaikaa. Tämän asetuksen säätäminen voi parantaa merkittävästi pöytätietokoneiden, äänentoiston tai jopa raskaasti kuormitettujen vanhempien koneiden suorituskykyä.
Kun sinun on mentävä askeleen pidemmälle, näkyviin tulee seuraava: PREEMPT- ja PREEMPT_RT-korjauksetNämä muutokset muuttavat merkittäviä osia ytimestä minimoidakseen ei-preemptoitavia osia. PREEMPT_RT on tarkoitettu järjestelmille, joissa pahimman mahdollisen latenssin (ei vain keskiarvon) on oltava erittäin pieni ja ennustettava: teollisuusautomaatio, ammattimainen äänentoisto, televiestintä tai suurtaajuuskaupankäynti.
PREEMPT_RT:n käyttöönottoa ei pitäisi tehdä muodin, vaan latenssin ja jitterin konkreettiset mittauksetEnsinnäkin on suositeltavaa hyödyntää täysimääräisesti ajastusasetuksia, suorittimen affiniteetteja, sysctl-ominaisuutta ja tarvittaessa konfiguraatioita, kuten dynaamista tickless-ominaisuutta, ennen kuin monimutkaistat ylläpitoa RT-puulla.
Myös yhteensopivuus on otettava huomioon: jotkut Ohjaimet ja alijärjestelmät eivät ole täysin sopeutuneet RT:hen ja saattaa vaatia tiettyjä versioita tai lisäkorjauksia. Järkevä lähestymistapa on laatia ylläpitosuunnitelma, jossa selkeästi esitetään, milloin ja miten pääytimen uudet versiot integroidaan RT-haaraan, joka synkronoituu säännöllisesti, mutta on silti jonkin verran jäljessä.
CPU-ajoituksen viritys, häiriötön toiminta ja ytimen eristäminen
Preemption-mallin valitsemisen lisäksi voit hienosäätää latenssia pelaamalla suorittimen ajoituksella ja ytimen ajastimen toiminnalla, erityisesti yrityskeskeisissä jakeluissa, kuten RHEL.
Esimerkiksi Red Hat Enterprise Linux 8 sisältää ydin toimii oletuksena ticklessinä käyttämättömille suorittimilleTämä vähentää energiankulutusta välttämällä säännöllisiä keskeytyksiä ytimen ollessa käyttämättömänä. Viiveherkille työkuormille voidaan ottaa käyttöön tila. dynaaminen tikitön ydinjoukossaniin että vain yksi CPU ("kotiydin") käsittelee suurimman osan aikaperusteisista tehtävistä ja loput ovat mahdollisimman vapaita säännöllisistä keskeytyksistä.
Tämä konfigurointi tehdään lisäämällä sopivat parametrit GRUBin ytimen komentorivikonfiguraation uudelleenluonti ja sitten kriittisten ytimen säikeiden, kuten RCU-säikeiden tai säikeiden, affiniteetin säätäminen bdi-flush, niin että ne sijaitsevat ylläpitoa varten varatussa ytimessä.
Tätä lähestymistapaa voidaan täydentää parametrilla isolkpusTämä mahdollistaa ytimien eristämisen normaaleista käyttäjätilan tehtävistä. Alhaisen latenssin skenaarioissa on hyvin yleistä varata useita ytimiä yksinomaan kriittiselle sovellukselle, kun taas muut ytimet hoitavat järjestelmän muun osan (daemonit, keskeytykset jne.).
Dynaamisen, tikittömän tilan toiminnan varmistamiseksi voidaan suorittaa yksinkertaisia testejä stress tai skriptejä, jotka pitävät suorittimen kiireisenä sekunnin ajan ja tarkkailevat ajastimen tikkilaskurit Kuinka keskeytysten määrä sekunnissa putoaa tuhansista vain yhteen erillisissä ytimissä, mikä on merkki siitä, että jaksollinen ajastin on kadonnut.
Muistin ja tallennustilan hallinta keskittyen latenssiin
Ytimen muistin ja levyn I/O:n hallintatavalla on valtava vaikutus sovellusten havaitsema viiveerityisesti tietokannoissa ja palveluissa, jotka suorittavat monia pieniä ja usein toistuvia toimintoja.
Muistin puolella, vähennä vm.swappiness minimoi swap-muistin käyttö (joka on lähes aina paljon hitaampi kuin RAM), vm.vfs_cache_pressure Se hallitsee sitä, kuinka nopeasti järjestelmä yrittää tyhjentää inode- ja dentry-välimuistin, ja vm.nr_hugepages Se mahdollistaa staattisten HugePages-sivujen varaamisen raskaille kuormille, kuten tietokannoille tai JVM-koneille, mikä vähentää TLB-yleiskuormitusta.
Valitse varastossa oleva sopiva I/O-aikatauluttaja levytyypin mukaan Se on kriittistä. Nykyaikaisilla SSD-levyillä on yleensä hyvä käyttää... none o mq-deadlineMekaanisissa levyissä ja moniajojärjestelmissä reilulle suorituskyvylle suunnitellut algoritmit saattavat olla parempia, kuten BfqLisäksi tiedostojärjestelmien liittäminen vaihtoehdoilla, kuten noatime y nodiratime Vältä tarpeettomia kirjoituksia aina, kun tiedostoon tai hakemistoon päästään käsiksi.
Tiedostojärjestelmien osalta, ext4 ja XFS Nämä ovat edelleen yleisimmät vaihtoehdot: hyvin viritetty ext4 on varma valinta, kun taas XFS skaalautuu yleensä paremmin korkean samanaikaisuuden aikana. Erittäin vaativissa tilanteissa RAIDin (RAID 10 tietokannoille, RAID 0 väliaikaiselle naarmutallennukselle) yhdistäminen hyvään ajastimeen voi vähentää keskimääräistä viivettä ja ennen kaikkea vaihtelua.
Verkko- ja kernelin optimointi Linuxin ja EC2:n matalan viiveen saavuttamiseksi
Suorituskykyisissä verkkosovelluksissa latenssi ei riipu pelkästään laitteistosta tai etäisyydestä, vaan myös miten TCP/IP-pino ja itse ydin on konfiguroituTämä on erityisen näkyvää pilvi-instansseissa, kuten Amazon EC2:ssa ENA-rajapinnoilla.
Aluksi on tärkeää vähentää ulkoisia tekijöitä, kuten verkkohyppyjä että paketit toimivat: suorempien topologioiden, taustajärjestelmän lähellä olevien kuormituksen tasaajien tai optimoitujen saatavuusvyöhykkeiden käyttö lyhentää siirtoaikoja millisekunneissa ennen kuin ne edes koskettavat käyttöjärjestelmää.
Ytimen sisällä verkon konfigurointiin kuuluu lisääminen tiedostokuvaajat (ulimit -n), kokoa vastaanotto- ja lähetyspuskurit net.core.rmem_max, net.core.wmem_max, net.ipv4.tcp_rmem, net.ipv4.tcp_wmemja aktivoi vaihtoehtoja, kuten TCP Fast Open yhteyden muodostumisviiveen vähentämiseksi.
AWS ENA -rajapinnoissa keskeytysten moderointi on tärkeässä roolissa: oletusarvoisesti ajuri ryhmittelee paketteja vähentääkseen keskeytysten määrää. rx-usecs ja tx-usecsJos haluat minimoida viiveen, voit poistaa tämän moderoinnin käytöstä ethtool -CRx-usecs- ja tx-usecs-arvojen asettaminen nollaksi pienentää latenssia, mutta lisää keskeytyskuormaa, joten tasapaino on löydettävä kuormituksen mukaan.
Sitä voidaan käyttää myös irqbalance jakaa IRQ:t useille ytimille, tai poistaa sen käytöstä ja asettaa manuaalisesti keskeytys- ja verkkojonojen (RSS/RPS) affiniteetit tiettyihin ytimiin, mikä on hyvin tyypillistä erittäin matalan viiveen ympäristöissä tai käytettäessä DPDK:ta ja ohitettaessa suuri osa ytimen pinosta.
Toinen huomioon otettava parametri on CPU C -tilatSyvät lepotilat vähentävät virrankulutusta, mutta aiheuttavat viiveitä ytimen "heräämisessä". Voit vähentää vasteen viivettä rajoittamalla näitä syviä tiloja, jolloin muiden ytimien virrankulutus on suurempi ja Turbo Boost -teholle jää vähemmän pelivaraa. Jokaisella ympäristöllä on oma optimaalinen keskiarvonsa kulutettujen wattien ja voitettujen mikrosekuntien välillä.
Suorittimen, palvelun ja sovellusten optimointi viiveen vähentämiseksi
Ytimen itsensä lisäksi ympäröivällä ympäristöllä on paljon sanottavaa kokonaislatenssista: järjestelmän aktiiviset palvelut aina kunkin sovelluksen erityiskokoonpanosta lähtien.
Suorituskykyisen palvelimen tulisi käyttää vain demonit, jotka ovat todella välttämättömiäPalvelut, kuten Bluetooth, tulostus tai verkon automaattinen tunnistus (CUPS, Avahi jne.) taustakoneissa kuluttavat vain suoritinta, muistia ja I/O:ta tarjoamatta mitään hyötyä. Tarkista asia systemctl list-unit-files --state=enabled Ja tarpeettomien asioiden poistaminen käytöstä on yksi halvimmista ja tehokkaimmista asioista, joita voit tehdä.
Kriittisten prosessien priorisointiin voit käyttää työkaluja, kuten renice, chart ja tasksetProsessin prioriteetin muuttaminen (renice), reaaliaikaisen aikataulutuksen antaminen (chrt -f 99) tai sen osoittaminen tietyille ytimille (taskset) vähentää häiriöitä muiden tehtävien kanssa ja parantaa suorittimen ennustettavuutta tietokannoissa, VoIP:ssä, suoratoistossa tai kaupankäyntipalveluissa.
Sovellustasolla virittäminen on aivan yhtä tärkeää kuin ytimen virittäminen. Verkkopalvelimet, kuten Nginx tai Apache Ne vaativat työläisten hienosäätöä, keepalive-toimintoja, välimuistien käyttöä ja pakkausta. Tietokannat, kuten PostgreSQL tai MySQL Heidän on tarkistettava puskurien koot, tarkistuspisteet, yhteyspooli ja synkronisen kirjoituksen parametrit saavuttaakseen alhaiset ja vakaat latenssit.
Myös JVM:illä on rooli: ne valitsevat roskienkerääjiä, kuten G1GC tai ZGC Keon koon säätäminen voi vähentää taukoja, jotka ulkoisesta näkökulmasta näkyvät latenssina. Virtualisoiduissa ja konttiympäristöissä asianmukainen jakelu on ratkaisevan tärkeää. vCPU-, vRAM- ja I/O-kiintiöt Se välttää hiljaisen kilpailun, joka myöhemmin ilmenee loputtomina jonoina levyllä tai ylikuormittuneena suorittimena.
Ytimen ja järjestelmän valvonta ja vertailuanalyysit
Kaikki tämä viritys on hyödytöntä, jos vaikutusta ei mitata. Avain on yhdistämisessä. jatkuva valvonta toistettavien suorituskykytestien avullajotta jokainen ytimen tai sysctl:n muutos voidaan arvioida objektiivisten tietojen avulla.
Järjestelmän yleisen tilan näkemiseen voit käyttää klassisia työkaluja, kuten htop, vmstat, iotop o sarKun tarvitset lisätietoja, erityiset ytimen työkalut tulevat käyttöön, kuten suorituskyky ja ftracejoiden avulla voit jäljittää ajoittajan, keskeytysten ja sisäisten puheluiden toimintaa huomattavalla tarkkuudella.
Tuotantoympäristöissä on suositeltavaa ottaa käyttöön mittarijärjestelmiä, kuten Prometheus, kerätty tai sysstat-tiedosto viejien kanssa jotka paljastavat suorittimen laskurit, I/O:n, levyn ja verkon latenssit, prosessijonot jne. Nämä Grafanassa tai vastaavissa työkaluissa visualisoidut tiedot auttavat havaitsemaan regressiot tai poikkeamat ennen kuin loppukäyttäjä huomaa ongelmia.
Vertailuanalyysin ideana on toistaa todellinen työmäärä ja verrata kunkin muutoksen "ennen ja jälkeen" -tilannetta. Työkaluja, kuten sysbench (suorittimille ja tietokannoille) FIO (levylle) tai iperf3 (Verkostoille) ne mahdollistavat toistettavien skenaarioiden rakentamisen. Dokumentointi on olennaista. ytimen versiot, sysctl-kokoonpanot, laitteisto ja testiparametrit jotta vertailut olisivat ajan myötä järkeviä.
Käytännössä Linux-ytimen optimointi on iteratiivinen prosessi: testataan useita muutoksia, mitataan tuloksia, säilytetään ne, joista on todellista hyötyä, ja hylätään loput. Hyvän muutoshallinnan avulla voidaan uusien ytimen versioiden parannukset (kuten viimeaikaiset sarjat, joissa on ajastus-, grafiikka-, teho- tai verkkoparannuksia) muuntaa mitattavaksi hyödyksi sovelluksille, olivatpa ne sitten paikallisia palvelimia, pilvessä tai vaativissa työasemissa.
Ytimen arkkitehtuuritietämyksen, sysctl-hienosäädön, hallitun kääntämisen, reaaliaikaisten korjauspäivitysten valikoivan käytön ja hyvän metriikkajärjestelmän yhdistelmä antaa järjestelmänvalvojalle tai operatiiviselle tiimille mahdollisuuden saavuttaa Nopeammat vasteet, pienempi latenssi ja parempi yleinen vakaus ilman, että laitteistoa tarvitsee vaihtaa pienimmästäkään syystä tai vaarantaa järjestelmän turvallisuutta.
Sisällysluettelo
- Linux-ytimen arkkitehtuuri ja latenssin kannalta keskeiset kohdat
- Sysctl-komennon kautta tehtävät säädöt latenssin ja suorituskyvyn parantamiseksi
- Mukautettujen ytimien kääntäminen ja ylläpito
- Preemption-mallit ja PREEMPT_RT-korjaukset matalan latenssin järjestelmille
- CPU-ajoituksen viritys, häiriötön toiminta ja ytimen eristäminen
- Muistin ja tallennustilan hallinta keskittyen latenssiin
- Verkko- ja kernelin optimointi Linuxin ja EC2:n matalan viiveen saavuttamiseksi
- Suorittimen, palvelun ja sovellusten optimointi viiveen vähentämiseksi
- Ytimen ja järjestelmän valvonta ja vertailuanalyysit