Kontakta oss

info@serverion.com

PREEMPT_RT förklarad: Kärnfunktioner i realtid

PREEMPT_RT förklarad: Kärnfunktioner i realtid

PREEMPT_RT omvandlar Linuxkärnan till ett realtidsoperativsystem, vilket säkerställer exakt timing för kritiska uppgifter. Helt integrerat i Linux 6.12 (släppt 20 september 2024) möjliggör det realtidsfunktioner för arkitekturer som x86, ARM64 och RISC-V. Här är vad du behöver veta:

  • Nyckelfunktioner:
    • Ersätter traditionella spinnlås med förberedbara sovlås.
    • Konverterar avbrottshanterare till trådar, vilket gör dem schemaläggbara och förebyggbara.
    • Implementerar prioritetsarv för att åtgärda problem med prioritetsinvertering.
    • Gör RCU (läs-kopiera-uppdatera) operationer helt förebyggbara.
  • Applikationer:
    • Används inom industrier som fordonsindustrin, robotteknik, telekommunikation och medicintekniska produkter där exakt timing är avgörande.
    • Driver system som industriella automationsverktyg, flygkontroller och värdmiljöer som kräver virtuella privata servrar med låg latens.
  • Inställning:
    • Aktivera CONFIG_PREEMPT_RT i kärnkonfigurationen.
    • Finjustera inställningar som KONFIG_NO_HZ_FULL och CONFIG_RCU_BOOST för optimal prestanda.
    • Använd verktyg som cykliskt test för att mäta latens och validera prestanda.

PREEMPT_RT prioriterar timing framför dataflöde, vilket gör Linux lämpligt för applikationer där deadlines inte är förhandlingsbara. Det är banbrytande för branscher som kräver deterministisk prestanda.

PREEMPT_RT Kärnfunktioner: Hur Linux uppnår realtidsprestanda

PREEMPT_RT Kärnfunktioner: Hur Linux uppnår realtidsprestanda

PREEMPT_RT förklarat: Bygg och optimera Linuxkärnan för realtid och ultralåg latens

PREEMPT_RT Kärnfunktioner

PREEMPT_RT fokuserar på fyra primära funktioner som är utformade för att minska icke-förutsebar kod och förbättra kontrollen över uppgiftsschemaläggning. Här är en närmare titt på var och en.

Fullständig kärnförmånsrätt

En av de största uppdateringarna är att omvandla standard spinlocks (spinlock_t) och läsar-skrivarlås (rwlock_t) in i mutex-baserade sovande spinlocks. Traditionella spinlocks kan orsaka förseningar eftersom de inaktiverar förvägshantering, vilket tvingar uppgifter till vänteläge. PREEMPT_RT ändrar detta genom att introducera lås som gör att uppgifter kan vila och förvägshantering, även när de innehåller en resurs.

Det här innebär att högprioriterade uppgifter kan avbryta uppgifter med lägre prioritet, även om de lägre prioriterade uppgifterna har låsningar. För vissa kritiska operationer – som schemaläggaren eller hårdvaruingångspunkter – behåller dock PREEMPT_RT raw_spinlock_t, vilket beter sig som de ursprungliga låsen utan förbehållsreglering. Som Paul McKenney, en framstående ingenjör, uttrycker det:

""Det viktigaste med PREEMPT_RT-patchen är att minimera mängden kärnkod som inte är preemptibel, samtidigt som den mängd kod som måste ändras för att ge denna ökade preemptabilitet minimeras.""

Låt oss nu se hur avbrottshantering drar nytta av den här metoden.

Trådade avbrott

PREEMPT_RT flyttar de flesta hårdvaruavbrottshanterare från kontexten "hård IRQ" till kärntrådar körs i processkontext. Denna justering gör att avbrottshanterare kan prioriteras, förekomma eller till och med blockeras.

I en vanlig Linuxkärna kan en långvarig avbrottshanterare leda till obegränsad latens eftersom den stoppar all annan exekvering. Trådade avbrott löser detta problem. Som standard körs dessa avbrottstrådar med en SCHED_FIFO prioritet 50, men administratörer kan justera sina prioriteringar med hjälp av verktyg som chrt. Till exempel kan du prioritera ett nätverkskorts avbrott för industriell styrning samtidigt som du sänker prioriteten för disk-I/O. Eftersom dessa trådar använder vilande spinlocks istället för råa spinlocks, undviker de behovet av att inaktivera hårdvaruavbrott medan ett lås hålls.

Nu ska vi utforska hur PREEMPT_RT hanterar prioritetsrelaterade utmaningar.

Prioritetsarv och Rtmutex

Prioritetsinversion är ett stort problem där en högprioriterad uppgift fastnar i väntan på en resurs som innehas av en lågprioriterad uppgift, medan en medelprioriterad uppgift (som inte behöver resursen) föregriper den lågprioriterade. PREEMPT_RT åtgärdar detta med prioriterat arv, vilket tillfälligt ökar prioriteten för den lågprioriterade uppgiften för att matcha den högst prioriterade uppgiften som väntar på resursen.

De rtmutex primitive är verktyget som gör detta möjligt. Det säkerställer att när en konflikt uppstår får den lågprioriterade uppgiften en prioritetsförstärkning för att slutföra sin kritiska sektion utan störningar från uppgifter med medelhög prioritet. Om den förstärkta uppgiften blockeras på ett annat lås, kaskadar prioritetsförstärkningen ner i beroendekedjan. Som Linuxkärndokumentationen förklarar:

""Prioritetsarv gör det möjligt för väldesignade applikationer att använda användarutrymmeslås i kritiska delar av en tråd med hög prioritet, utan att förlora determinism.""

För att uppnå detta, rtmutex använder en flagga och ett prioritetsordnat träd för att hantera väntande uppgifter, vilket håller omkostnaderna låga på stödda arkitekturer.

Slutligen, låt oss titta på hur PREEMPT_RT förbättrar RCU-operationer.

Förebyggande RCU (läs-kopiera-uppdatera)

RCU

Read-Copy-Update (RCU) är en synkroniseringsteknik som används flitigt i Linuxkärnan. I standardkärnor är RCU-lässektioner inte preemptibla, vilket kan leda till oförutsägbara fördröjningar. PREEMPT_RT ändrar detta genom att göra RCU-lässektioner helt förebyggbar, vilket säkerställer att realtidsdeadlines för uppgifter inte äventyras. Denna justering är en hörnsten för att uppnå det förutsägbara beteende som krävs i realtidssystem.

Så här konfigurerar och använder du PREEMPT_RT

PREEMPT_RT är helt integrerat i vanliga Linux-kärnor, vilket innebär att externa patchar inte längre är nödvändiga. Att använda den senaste patchkön är dock fortfarande en bra idé för bättre arkitekturstöd och förbättrad grafik. När kärnan är redo måste du justera dess inställningar för att dra full nytta av dess funktioner.

Kärnkonfigurationsinställningar

För att aktivera en helt förinställbar kärna, slå på CONFIG_PREEMPT_RT. I nyare kärnor finns den här inställningen under "Allmänna inställningar", men du kan behöva aktivera CONFIG_EXPERT först för att göra den synlig i konfigurationsmenyn.

För produktion dedikerade servrar och andra högpresterande miljöer kan ytterligare alternativ optimera prestandan ytterligare:

  • KONFIG_NO_HZ_FULLMinskar avbrott i schemaläggningsklockorna på upptagna processorer, vilket hjälper till att minimera jitter.
  • CONFIG_RCU_BOOSTFörhindrar att förbehållna RCU-läsare fördröjer respitperioder.
  • CONFIG_RCU_NOCB_CPUAvlastar RCU-återanropshantering till specifika processorer, vilket minskar störningar med realtidsuppgifter.

Det är också viktigt att inaktivera felsökningsalternativ som kan orsaka hög latens. Stäng av inställningar som CONFIG_DEBUG_LOCKDEP, CONFIG_DEBUG_PREEMPT, CONFIG_DEBUG_OBJECTS, och CONFIG_SLUB_DEBUG. Även om dessa verktyg är användbara för utveckling, kan de avsevärt skada latensmål. Som kernelconfig.io förklarar:

""Det här alternativet förvandlar kärnan till en realtidskärna genom att ersätta olika låsningsprimitiver (spinlocks, rwlocks, etc.) med förvägräckliga varianter som är medvetna om prioritetsarv.""

När din kärna är byggd och startad, bekräfta att PREEMPT_RT är aktivt genom att köra cat /sys/kernel/realtime. Ett returvärde på 1 indikerar framgång. Du kan också verifiera genom att kontrollera "PREEMPT_RT" i utdata från onamn -a.

Felsökning och prestandaoptimering

Finjustering av kärnan är avgörande för att uppnå optimal prestanda med realtidsarbetsbelastningar. Ett viktigt område att ta itu med är realtidsstrypningsmekanism, vilket som standard reserverar 50 ms per sekund för uppgifter som inte är i realtid. Om din arbetsbelastning är enbart i realtid kan du inaktivera den här mekanismen genom att skriva -1 till /proc/sys/kernel/sched_rt_runtime_us. Som Jan Altenberg, seniorkonsult inom öppen källkod på OSADL, påpekar:

""En 'skrunnande' realtidsuppgift kan svälta systemet. Som en skyddsmekanism kan körtiden för realtidsuppgifter begränsas genom att ställa in ett värde i mikrosekunder i /proc/sys/kernel/sched_rt_runtime_us."‘

För förbättrad determinism, isolera specifika CPU-kärnor med hjälp av parametrar som isolcpus=2,3, rcu_nocbs=2,3, nohz_full=2,3, och ställ in irqaffinitet=0. Detta reserverar dessa kärnor exklusivt för realtidsuppgifter.

För att hantera avbrottstrådar, använd chrt verktyg. Dessa trådar körs vanligtvis med en standard SCHED_FIFO prioritet 50, men du kan justera dem för att undvika konflikter med din applikation. Om du till exempel vill ställa in ett nätverkskorts IRQ-tråd till prioritet 98 använder du kommandot: chrt -p -f 98.

Efter att konfigurationen är klar är det avgörande att testa och validera latensprestanda. Verktyg som cykliskt test kan mäta latens (t.ex., cykliskt test -S -m -p98 -i250), medan rtla (Realtidsanalys av Linux) hjälper till att identifiera och analysera latenstoppar. Dessa verktyg säkerställer att din installation uppfyller kraven från realtidsapplikationer.

PREEMPT_RT-applikationer och fördelar

Användningsfall för realtidsapplikationer

PREEMPT_RT lyser i system där tidsprecisionen inte är förhandlingsbar. flyg- och rymdfart, säkerställer det att navigering och flygkontroller fungerar utan mikrosekundfördröjningar, vilket annars skulle kunna äventyra säkerheten. Telekommunikation företag räknar med att den hanterar datarouting i realtid, vilket säkerställer smidiga röst- och videosamtal genom att eliminera jitter och latenstoppar.

I bilindustrin, det är en hörnsten för fordonsstyrningssystem, med stora aktörer som Continental Automotive som stöder dess införande. industriell automation, PREEMPT_RT driver programmerbara logikstyrenheter (PLC) och SCADA-system, och arbetar ofta tillsammans med protokoll som EtherCAT för att upprätthålla säkerhet och effektivitet på fabriksgolv. Robotik förlitar sig också i hög grad på denna teknik för exakt ställdonsstyrning och omedelbar sensoråterkoppling, vilket gör det möjligt för robotar att reagera omedelbart på miljöförändringar.

De kanske mest kritiska applikationerna finns i medicintekniska produkter, där precision är av största vikt. Från patientmonitorer till kirurgiska robotar ger PREEMPT_RT den deterministiska prestanda som behövs för att säkerställa att livskritiska system fungerar felfritt.

Fördelar för värdmiljöer

Fördelarna med PREEMPT_RT sträcker sig även till hostingmiljöer, där realtidsresponsivitet är lika avgörande. VPS och dedikerade servrar, minimerar det latens genom att låta schemaläggaren prioritera högprioriterade uppgifter framför mindre kritiska. Detta säkerställer konsekventa svarstider, vilket direkt påverkar användarupplevelsen och tjänstens tillförlitlighet.

Den trådade avbrottsmodellen förhindrar att "avbrottsstormar" överbelastar system under tunga I/O-operationer. rt_mutex, prioritetsarv säkerställer att bakgrundsuppgifter med låg prioritet inte blockerar kritiska webbhotellstjänster. Timers med hög upplösning möjliggör schemaläggningsnoggrannhet på mikrosekundnivå, vilket minskar jitter i virtualiserade konfigurationer. Webbhotellleverantörer, som Serverion, erbjuder anpassade kärnbyggen med PREEMPT_RT, vilket ger administratörer flexibiliteten att finjustera konfigurationer för specifika arbetsbelastningar. Genom att använda parametrar som isolcpus och irqaffinitet, leverantörer kan dedikera CPU-kärnor till prestandakritiska uppgifter samtidigt som rutinmässiga systemoperationer hålls isolerade.

Slutsats

Den här guiden har fördjupat sig i hur FÖREGÅNG_RT förvandlar Linux till ett realtidsoperativsystem genom att ge schemaläggaren nästan fullständig kontroll. Sedan det inkluderades i vanliga kärnor från och med Linux 6.12 (september 2024) har det eliminerat behovet av externa patchar för arkitekturer som x86, ARM64 och RISC-V.

Konceptet är enkelt: minska icke-förutsebar kod så mycket som möjligt. Genom att konvertera spinlocks till sovande lås och köra avbrottshanterare som trådar kan högprioriterade uppgifter förbereda nästan alla kärnaktiviteter. Funktioner som prioritetsarv förhindrar att lågprioriterade uppgifter försenar kritiska operationer, medan förutsebar RCU säkerställer att även kritiska avsnitt på lässidan inte orsakar betydande förseningar. Sebastian Siewior, PREEMPT_RT-ansvarig, anger träffande:

""All kontroll till schemaläggaren.""

Detta tekniska språng erbjuder praktiska fördelar. Till exempel, Serverion använder anpassade PREEMPT_RT-kärnversioner för att finjustera CPU-isolering och optimera realtidsarbetsbelastningar, vilket säkerställer stabila svarstider även under intensiv I/O-belastning.

Det som skiljer realtidssystem från mängden är inte bara hastighet – det är förutsägbarhet. PREEMPT_RT minimerar jitter, vilket säkerställer att uppgifter utförs exakt när det behövs. Detta är avgörande för applikationer som industriell automation, telekommunikation och prestandakritiska hostingtjänster. Det ger den typ av deterministiskt beteende som standardkärnor helt enkelt inte kan erbjuda.

Med dess integration i huvudkärnan och stöd från företagsdistributioner som Ubuntu Pro (sedan februari 2023) har PREEMPT_RT blivit mer tillgängligt för webbhotellsleverantörer och systemadministratörer. Det levererar den pålitliga prestanda med låg latens som krävs för dagens mest krävande och tidskänsliga miljöer.

Vanliga frågor

Behöver jag PREEMPT_RT eller räcker det med standard Linux?

Standard Linuxkärnan, i kombination med PREEMPT_RT-patch, får realtidsfunktioner. Detta gör den till ett starkt val för applikationer där låg latens och konsekventa svarstider är avgörande. På egen hand kan dock den vanliga Linux-kärnan inte uppfylla strikta realtidskrav.

Kommer PREEMPT_RT att minska den totala dataflödet på mitt system?

För att uppnå prestanda i realtid, FÖREGÅNG_RT fokuserar på att minska icke-förutsägbar kärnkod, vilket bidrar till att förbättra systemets respons. Denna metod kan leda till en liten minskning av den totala dataflödet, men den säkerställer konsekvent och förutsägbart beteende – avgörande för tidskänsliga applikationer. Denna avvägning är avsiktlig och central för att möta kraven från realtidssystem.

Vilket latensmål är realistiskt med PREEMPT_RT?

Med FÖREGÅNG_RT, Att uppnå latens i millisekundintervallet är ett realistiskt mål för både stationära och inbyggda system. Den faktiska prestandan beror dock i hög grad på hur väl systemet är konfigurerat och inställt för att möta specifika krav. Korrekt installation är nyckeln till att säkerställa önskad responsnivå.

Relaterade blogginlägg

sv_SE