PREEMPT_RT útskýrt: Rauntíma kjarnaeiginleikar
PREEMPT_RT breytir Linux kjarnanum í rauntíma stýrikerfi og tryggir nákvæma tímasetningu fyrir mikilvæg verkefni. Það er að fullu samþætt í Linux 6.12 (gefin út 20. september 2024) og gerir rauntímavirkni mögulega fyrir arkitektúr eins og x86, ARM64 og RISC-V. Þetta er það sem þú þarft að vita:
- Helstu eiginleikar:
- Skiptir út hefðbundnum snúningslásum fyrir forgangslása með svefnlásum.
- Breytir truflunarhöndlurum í þræði, sem gerir þá tímasetta og fyrirbyggjandi.
- Innleiðir forgangserfðir til að takast á við vandamál með forgangssnúning.
- Gerir RCU (Read-Afrita-Update) aðgerðir fullkomlega fyrirbyggjanlegar.
- Umsóknir:
- Notað í atvinnugreinum eins og bílaiðnaði, vélfærafræði, fjarskiptum og lækningatækjum þar sem nákvæm tímasetning er mikilvæg.
- Knýja kerfi eins og iðnaðarsjálfvirkniverkfæri, flugstýringar og hýsingarumhverfi sem krefjast sýndar einkaþjónar með lágum töfum.
- Uppsetning:
- Virkja
CONFIG_PREEMPT_RTí kjarnastillingunni. - Fínstilla stillingar eins og
CONFIG_NO_HZ_FULLogCONFIG_RCU_BOOSTfyrir bestu mögulegu afköst. - Notaðu verkfæri eins og
hringlaga próftil að mæla seinkun og staðfesta afköst.
- Virkja
PREEMPT_RT forgangsraðar tímasetningu fram yfir afköst, sem gerir Linux hentugt fyrir forrit þar sem frestar eru óumflýjanlegar. Það er byltingarkennt fyrir atvinnugreinar sem krefjast ákveðinna afkasta.
Kjarnaeiginleikar PREEMPT_RT: Hvernig Linux nær rauntímaafköstum
PREEMPT_RT útskýrt: Smíða og fínstilla Linux kjarna fyrir rauntíma og mjög lága seinkun
sbb-itb-59e1987
Kjarnaeiginleikar PREEMPT_RT
PREEMPT_RT einbeitir sér að fjórum megineiginleikum sem eru hannaðir til að draga úr kóða sem ekki er hægt að forgangsraða og bæta stjórn á verkefnaáætlun. Hér er skoðað nánar hvern og einn.
Full kjarnaforgangsröðun
Ein af stærstu uppfærslunum er að umbreyta stöðluðum snúningslásum (snúningslás_t) og lesandi-skrifandi læsingar (rwlock_t) inn í svefnlásar byggðir á mutex. Hefðbundnar snúningslásar geta valdið töfum þar sem þær gera forgangsröðun óvirka, sem neyðir verkefni til að bíða. PREEMPT_RT breytir þessu með því að kynna lása sem leyfa verkefnum að sofa og vera forgangsraðað, jafnvel þegar þau geyma auðlind.
Þetta þýðir að verkefni með háan forgang geta truflað verkefni með lægri forgang, jafnvel þótt verkefni með lægri forgang haldi læsingum. Hins vegar, fyrir ákveðnar mikilvægar aðgerðir - eins og tímaáætlun eða aðgangspunkta vélbúnaðar - heldur PREEMPT_RT raw_spinlock_t, sem hegðar sér eins og upprunalegu lásarnir sem ekki eru forgangslæsanlegir. Eins og Paul McKenney, virtur verkfræðingur, orðar það:
"Lykilatriðið í PREEMPT_RT uppfærslunni er að lágmarka magn kjarnakóða sem ekki er hægt að forgangsraða, en jafnframt að lágmarka magn kóða sem þarf að breyta til að veita þessa auknu forgangsraða."
Næst skulum við skoða hvernig þessi aðferð gagnast við meðhöndlun truflana.
Þráðaðar truflanir
PREEMPT_RT færir flesta truflanameðhöndlara vélbúnaðar úr "hörðum IRQ" samhengi í kjarnaþræðir keyra í ferlissamhengi. Þessi stilling gerir kleift að forgangsraða, koma í veg fyrir eða jafnvel loka fyrir truflunarmeðhöndlara.
Í venjulegum Linux kjarna getur langvarandi truflunarmeðhöndlun leitt til ótakmarkaðrar seinkunar þar sem hún stöðvar alla aðra keyrslu. Þráðaðar truflanir leysa þetta vandamál. Sjálfgefið er að þessir truflunarþræðir keyra með SCHED_FIFO forgangur 50, en stjórnendur geta aðlagað forgangsröðun sína með verkfærum eins og chrt. Til dæmis gætirðu forgangsraðað truflunum á netkorti fyrir iðnaðarstýringu en lækkað forganginn fyrir diska-I/O. Þar sem þessir þræðir nota sofandi snúningslása í stað hrára snúningslása, forðast þeir þörfina á að slökkva á truflunum á vélbúnaði á meðan lás er haldið.
Nú skulum við skoða hvernig PREEMPT_RT tekst á við forgangstengdar áskoranir.
Forgangserfðir og Rtmutex
Forgangsumsnúningur er stórt vandamál þegar verkefni með háan forgang festist í bið eftir auðlind sem verkefni með lágan forgang heldur, á meðan verkefni með miðlungs forgang (sem þarfnast ekki auðlindarinnar) tekur á undan verkefni með lágan forgang. PREEMPT_RT leysir þetta með forgangsarf, sem eykur tímabundið forgang verkefnis með lágan forgang til að passa við verkefnið með hæsta forgang sem bíður eftir auðlindinni.
The rtmutex Frumstæð er tólið sem gerir þetta mögulegt. Það tryggir að þegar árekstrar koma upp fær verkefni með lágan forgang forgangsaukningu til að klára mikilvægan hluta sinn án truflana frá verkefnum með miðlungs forgang. Ef verkefnið sem hefur verið aukið lokast á annarri lás, þá fer forgangsaukningin niður eftir ósjálfstæðiskeðjunni. Eins og kjarnaskráning Linux útskýrir:
"Forgangserfðir gera vel hönnuðum forritum kleift að nota notendarýmislása í mikilvægum hlutum forgangsþráðar, án þess að missa ákveðni."
Til að ná þessu, rtmutex notar fána og forgangsraðað tré til að stjórna biðverkefnum og halda kostnaði lágum á studdum arkitektúr.
Að lokum, skulum við skoða hvernig PREEMPT_RT bætir RCU aðgerðir.
Fyrirbyggjandi RCU (Lesa-Afrita-Uppfæra)

Read-Copy-Update (RCU) er samstillingartækni sem er mikið notuð í Linux kjarnanum. Í stöðluðum kjarna eru leshlutar RCU ekki forgangshæfir, sem getur leitt til ófyrirsjáanlegra tafa. PREEMPT_RT breytir þessu með því að gera leshluta RCU að leshlutum. fullkomlega fyrirbyggjandi, sem tryggir að rauntímafrestar verkefna séu ekki í hættu. Þessi aðlögun er hornsteinn þess að ná fram þeirri fyrirsjáanlegu hegðun sem krafist er í rauntímakerfum.
Hvernig á að stilla og nota PREEMPT_RT
PREEMPT_RT er að fullu samþætt í aðalkjarna Linux, sem þýðir að utanaðkomandi uppfærslur eru ekki lengur nauðsynlegar. Hins vegar er enn góð hugmynd að nota nýjustu uppfærslubiðröðina til að fá betri stuðning við arkitektúr og betri grafík. Þegar kjarninn er tilbúinn þarftu að fínstilla stillingar hans til að nýta alla möguleika hans til fulls.
Kjarnastillingar
Til að virkja fullkomlega forgangshæfan kjarna skaltu kveikja á honum CONFIG_PREEMPT_RT. Í nýrri kjarnaútgáfum er þessi stilling staðsett undir "Almenn uppsetning", en þú gætir þurft að virkja hana. CONFIG_EXPERT fyrst til að gera það sýnilegt í stillingarvalmyndinni.
Til framleiðslu hollur netþjóna og önnur afkastamikil umhverfi, geta viðbótarvalkostir bætt afköst enn frekar:
CONFIG_NO_HZ_FULLMinnkar truflanir á áætlanagerðarklukku á uppteknum örgjörvum, sem hjálpar til við að lágmarka titring.CONFIG_RCU_BOOSTKemur í veg fyrir að fyrirfram ákveðnir RCU-lesarar tefji frest.CONFIG_RCU_NOCB_CPUFærir afgreiðslu RCU-kalls á tiltekna örgjörva og dregur úr truflunum á rauntímaverkefnum.
Það er líka mikilvægt að slökkva á villuleitarvalkostum sem geta valdið mikilli seinkun. Slökktu á stillingum eins og CONFIG_DEBUG_LOCKDEP, CONFIG_DEBUG_PREEMPT, CONFIG_DEBUG_OBJECTS, og CONFIG_SLUB_DEBUG. Þó að þessi verkfæri séu gagnleg fyrir þróun geta þau haft veruleg áhrif á leyndarmörk. Eins og kernelconfig.io útskýrir:
"Þessi valkostur breytir kjarnanum í rauntímakjarna með því að skipta út ýmsum læsingarfrumstæðum (snúningslásum, rwlásum o.s.frv.) fyrir forgangserfðafræðilegar afbrigði sem eru meðvituð um forgang."
Þegar kjarninn þinn hefur verið smíðaður og ræstur skaltu staðfesta að PREEMPT_RT sé virkt með því að keyra köttur /sys/kjarni/rauntíma. Skilagildi upp á 1 gefur til kynna árangur. Þú getur einnig staðfest með því að haka við "PREEMPT_RT" í úttaki ónafn -a.
Villuleit og afkastahagræðing
Fínstilling kjarnans er nauðsynleg til að ná sem bestum árangri með rauntíma vinnuálagi. Eitt lykilatriði sem þarf að taka á er rauntíma þröskuldunarkerfi, sem sjálfkrafa tekur frá 50ms á sekúndu fyrir verkefni sem ekki eru í rauntíma. Ef vinnuálagið þitt er eingöngu í rauntíma geturðu slökkt á þessum aðferðum með því að skrifa -1 til /proc/sys/kernel/sched_rt_runtime_us. Eins og Jan Altenberg, yfirráðgjafi í opnum hugbúnaði hjá OSADL, bendir á:
"Rauðarverkefni sem hlaupa úr vegi getur svelt kerfið. Sem varnarkerfi er hægt að takmarka keyrslutíma rauntímaverkefna með því að stilla gildi í míkrósekúndum í /proc/sys/kernel/sched_rt_runtime_us.‘
Til að auka ákveðni, einangraðu tiltekna örgjörvakjarna með því að nota breytur eins og ísólpús = 2,3, rcu_nocbs=2,3, nohz_full=2,3, og setja ósamræmi = 0. Þetta áskilur þessa kjarna eingöngu fyrir rauntímaverkefni.
Til að stjórna truflunarþráðum skaltu nota chrt tól. Þessir þræðir keyra venjulega með sjálfgefnu SCHED_FIFO forgangur 50, en þú getur stillt þá til að forðast árekstra við forritið þitt. Til dæmis, til að stilla IRQ þráð netkorts á forgang 98, notaðu skipunina: chrt -p -f 98.
Eftir að stillingum er lokið er mikilvægt að prófa og sannreyna seinkun. Tól eins og hringlaga próf getur mælt seinkun (t.d., hringlaga próf -S -m -p98 -i250), á meðan rtla (Rauntíma Linux Greining) hjálpar til við að bera kennsl á og greina seinkunartoppa. Þessi verkfæri tryggja að uppsetningin þín uppfylli kröfur rauntímaforrita.
PREEMPT_RT Umsóknir og ávinningur
Notkunartilvik í rauntímaforritum
PREEMPT_RT skín í kerfum þar sem nákvæmni tímasetningar er óumdeilanleg. geimferðafræði, það tryggir að leiðsögu- og flugstýring virki án míkrósekúndna tafa, sem annars gæti stofnað öryggi í hættu. Fjarskipti Fyrirtæki treysta á það til að stjórna gagnaleiðsögn í rauntíma, sem tryggir greiða tal- og myndsímtöl með því að útrýma titringi og töf.
Í bílaiðnaðurinn, það er hornsteinn fyrir stjórnkerfi ökutækja, og stórir aðilar eins og Continental Automotive styðja notkun þess. iðnaðar sjálfvirkni, PREEMPT_RT knýr forritanlegar rökstýringar (PLC) og SCADA kerfi, og vinnur oft samhliða samskiptareglum eins og EtherCAT til að viðhalda öryggi og skilvirkni í verksmiðjum. Vélmenni treystir einnig mjög á þessa tækni fyrir nákvæma stjórnun á stýribúnaði og tafarlausa skynjaraviðbrögð, sem gerir vélmennum kleift að bregðast tafarlaust við breytingum á umhverfinu.
Kannski eru mikilvægustu forritin í lækningatæki, þar sem nákvæmni er í fyrirrúmi. Frá sjúklingaskjám til skurðlækningavélmenna býður PREEMPT_RT upp á þá afköst sem þarf til að tryggja að lífsnauðsynleg kerfi virki gallalaust.
Kostir fyrir hýsingarumhverfi
Kostir PREEMPT_RT ná einnig til hýsingarumhverfa, þar sem rauntímaviðbrögð eru jafn mikilvæg. VPS og sérstakir netþjónar, það lágmarkar seinkun með því að leyfa tímaáætluninni að forgangsraða verkefnum með mikla forgang fram yfir þau sem eru minna mikilvæg. Þetta tryggir stöðuga svörunartíma, sem hefur bein áhrif á notendaupplifun og áreiðanleika þjónustunnar.
Þráðaða truflunarlíkanið kemur í veg fyrir að "truflunarstormar" yfirhlaði kerfi við miklar I/O aðgerðir. rt_mutex, forgangsarf tryggir að bakgrunnsverkefni með lágan forgang loki ekki fyrir mikilvægar hýsingarþjónustur. Tímamælar með mikilli upplausn gera nákvæmni í áætlanagerð á örsekúndustigi kleift, sem dregur úr titringi í sýndaruppsetningum. Hýsingaraðilar, eins og Serverion, bjóða upp á sérsniðnar kjarnaútgáfur með PREEMPT_RT, sem gefur stjórnendum sveigjanleika til að fínstilla stillingar fyrir tiltekið vinnuálag. Með því að nota breytur eins og einangrun og ósannindi, geta þjónustuaðilar tileinkað örgjörvakjarna fyrir verkefni sem skipta máli fyrir afköst en haldið reglubundnum kerfisrekstri einangruðum.
Niðurstaða
Þessi handbók hefur kafað djúpt í hvernig FORRÉTT_RT breytir Linux í rauntíma stýrikerfi með því að gefa tímaáætluninni nánast fulla stjórn. Frá því að það var tekið inn í aðalkjarna frá og með Linux 6.12 (september 2024) hefur það útrýmt þörfinni fyrir utanaðkomandi uppfærslur á arkitektúrum eins og x86, ARM64 og RISC-V.
Hugmyndin er einföld: að draga úr kóða sem ekki er hægt að forgangsraða eins mikið og mögulegt er. Með því að breyta snúningslásum í svefnlása og keyra truflunarmeðhöndlara sem þræði geta verkefni með mikla forgang forgangsraðað nánast öllum kjarnastarfsemi. Eiginleikar eins og forgangserfðir koma í veg fyrir að verkefni með litla forgang tefji mikilvægar aðgerðir, á meðan forgangsraðað RCU tryggir að jafnvel mikilvægir hlutar á leshlið valda ekki verulegum töfum. Sebastian Siewior, PREEMPT_RT viðhaldsaðilinn, segir réttilega:
""Öll stjórn í höndum tímaáætlunargerðarmannsins.""
Þetta tæknilega stökk býður upp á hagnýtan ávinning. Til dæmis, Serverion notar sérsniðnar PREEMPT_RT kjarnauppsetningar til að fínstilla einangrun örgjörva og hámarka rauntíma vinnuálag, sem tryggir stöðugan svörunartíma jafnvel við mikla I/O pressu.
Það sem greinir rauntímakerfi frá öðrum er ekki bara hraði heldur fyrirsjáanleiki. PREEMPT_RT lágmarkar titring og tryggir að verkefni keyri nákvæmlega þegar þörf krefur. Þetta er mikilvægt fyrir forrit eins og iðnaðarsjálfvirkni, fjarskipti og afkastamiklar hýsingarþjónustur. Það býður upp á þá tegund af ákveðinni hegðun sem hefðbundnir kjarnar geta einfaldlega ekki boðið upp á.
Með samþættingu þess við aðalkjarna og stuðningi frá fyrirtækjadreifingum eins og Ubuntu Pro (frá febrúar 2023) hefur PREEMPT_RT orðið aðgengilegra fyrir vefþjónustuaðila og kerfisstjóra. Það býður upp á áreiðanlega og lága seinkunarframmistöðu sem krafist er fyrir krefjandi og tímanæmustu umhverfi nútímans.
Algengar spurningar
Þarf ég PREEMPT_RT eða er venjulegt Linux nóg?
Staðlaða Linux kjarninn, þegar hann er sameinaður PREEMPT_RT uppfærsla, fær rauntímagetu. Þetta gerir það að sterkum valkosti fyrir forrit þar sem lág seinkun og stöðugur svartími eru mikilvæg. Hins vegar gæti aðal Linux kjarninn einn og sér ekki uppfyllt strangar rauntímakröfur.
Mun PREEMPT_RT draga úr heildarafköstum kerfisins míns?
Til að ná fram rauntímaafköstum, FORRÉTT_RT leggur áherslu á að draga úr kjarnakóða sem ekki er hægt að forgangsraða, sem hjálpar til við að bæta viðbragðshraða kerfisins. Þessi aðferð gæti leitt til lítils háttar lækkunar á heildarafköstum, en hún tryggir samræmda og fyrirsjáanlega hegðun - sem er mikilvægt fyrir tímanæm forrit. Þessi málamiðlun er vísvitandi og lykilatriði til að uppfylla kröfur rauntímakerfa.
Hvaða seinkunarmarkmið er raunhæft með PREEMPT_RT?
Með FORRÉTT_RT, Að ná leynd á millisekúndna bilinu er raunhæft markmið, bæði fyrir borðtölvur og innbyggð kerfi. Hins vegar fer raunveruleg afköst mjög eftir því hversu vel kerfið er stillt og stillt til að uppfylla sérstakar kröfur. Rétt uppsetning er lykillinn að því að tryggja æskilegt viðbragðsstig.