PREEMPT_RT uitgelegd: Real-time kernelfuncties
PREEMPT_RT transformeert de Linux-kernel in een realtime besturingssysteem, waardoor nauwkeurige timing voor kritieke taken wordt gegarandeerd. Volledig geïntegreerd in Linux 6.12 (uitgebracht op 20 september 2024), maakt het realtime mogelijkheden mogelijk voor architecturen zoals x86, ARM64 en RISC-V. Dit is wat u moet weten:
- Belangrijkste kenmerken:
- Vervangt traditionele spinlocks door preemptieve slaaplocks.
- Zet interrupt-handlers om in threads, waardoor ze planbaar en onderbreekbaar worden.
- Implementeert prioriteitsovererving om problemen met prioriteitsinversie aan te pakken.
- Maakt RCU-bewerkingen (Read-Copy-Update) volledig onderbreekbaar.
- Toepassingen:
- Gebruikt in sectoren zoals de auto-industrie, robotica, telecommunicatie en medische apparatuur, waar nauwkeurige timing cruciaal is.
- Levert stroom aan systemen zoals industriële automatiseringstools, vluchtbesturingssystemen en hostingomgevingen die stroom nodig hebben. virtuele privéservers met lage latentie.
- Instellen:
- Inschakelen
CONFIG_PREEMPT_RTin de kernelconfiguratie. - Verfijn de instellingen zoals
CONFIG_NO_HZ_FULLenCONFIG_RCU_BOOSTvoor optimale prestaties. - Gebruik hulpmiddelen zoals
cyclische testom de latentie te meten en de prestaties te valideren.
- Inschakelen
PREEMPT_RT geeft prioriteit aan timing boven doorvoer, waardoor Linux geschikt is voor toepassingen waar deadlines niet onderhandelbaar zijn. Het is een baanbrekende technologie voor industrieën die deterministische prestaties vereisen.
PREEMPT_RT Kernfuncties: Hoe Linux realtime prestaties bereikt
PREEMPT_RT uitgelegd: Linux-kernel bouwen en optimaliseren voor realtime en ultralage latentie
sbb-itb-59e1987
PREEMPT_RT Kernfuncties
PREEMPT_RT richt zich op vier primaire functies die zijn ontworpen om niet-onderbreekbare code te verminderen en de controle over taakplanning te verbeteren. Hieronder een nadere beschrijving van elk van deze functies.
Volledige kernelpreëmptie
Een van de grootste updates is de transformatie van standaard spinlocks (spinlock_t) en lezer-schrijversloten (rwlock_t) naar binnen op mutex gebaseerde slapende spinlocks. Traditionele spinlocks kunnen vertragingen veroorzaken omdat ze preëmptie uitschakelen, waardoor taken in een actieve wachtpositie terechtkomen. PREEMPT_RT verandert dit door locks te introduceren die taken in staat stellen te slapen en te worden gepreëmpt, zelfs wanneer ze een resource in bezit hebben.
Dit betekent dat taken met hoge prioriteit taken met lagere prioriteit kunnen onderbreken, zelfs als de taken met lagere prioriteit vergrendelingen vasthouden. Voor bepaalde kritieke bewerkingen – zoals de scheduler of hardware-ingangspunten – behoudt PREEMPT_RT echter de vergrendelingen. ruwe_spinlock_t, wat zich gedraagt als de oorspronkelijke niet-preëmptieve vergrendelingen. Zoals Paul McKenney, een vooraanstaand ingenieur, het verwoordt:
""Het belangrijkste doel van de PREEMPT_RT-patch is het minimaliseren van de hoeveelheid kernelcode die niet-onderbreekbaar is, en tegelijkertijd het minimaliseren van de hoeveelheid code die moet worden aangepast om deze extra onderbreekbaarheid te bieden.""
Laten we vervolgens eens kijken hoe interruptafhandeling baat heeft bij deze aanpak.
Gecombineerde interrupties
PREEMPT_RT verplaatst de meeste hardware-interrupt-handlers van de "harde IRQ"-context naar kernel threads Deze aanpassing maakt het mogelijk om interrupt-handlers te prioriteren, te onderbreken of zelfs te blokkeren.
In een standaard Linux-kernel kan een langlopende interrupt-handler leiden tot onbeperkte latentie, omdat deze alle andere uitvoeringen blokkeert. Interrupts in threads lossen dit probleem op. Standaard draaien deze interrupt-threads met een SCHED_FIFO De prioriteit is 50, maar beheerders kunnen hun prioriteiten aanpassen met behulp van tools zoals chrt. Je zou bijvoorbeeld de interrupt van een netwerkkaart voor industriële besturing prioriteit kunnen geven, terwijl je de prioriteit voor schijf-I/O verlaagt. Omdat deze threads gebruikmaken van slapende spinlocks in plaats van ruwe spinlocks, hoeven ze hardware-interrupts niet uit te schakelen terwijl ze een lock vasthouden.
Laten we nu eens bekijken hoe PREEMPT_RT omgaat met uitdagingen die te maken hebben met prioriteit.
Prioriteitsovererving en Rtmutex
Prioriteitsomkering Dit is een groot probleem waarbij een taak met hoge prioriteit vast komt te zitten in afwachting van een resource die in gebruik is door een taak met lage prioriteit, terwijl een taak met gemiddelde prioriteit (die de resource niet nodig heeft) de taak met lage prioriteit onderbreekt. PREEMPT_RT lost dit op met prioritaire overerving, waardoor de prioriteit van de taak met lage prioriteit tijdelijk wordt verhoogd tot dezelfde prioriteit als de taak met de hoogste prioriteit die op de betreffende resource wacht.
De rtmutex Primitive is het hulpmiddel dat dit mogelijk maakt. Het zorgt ervoor dat wanneer er een conflict ontstaat, de taak met lage prioriteit een prioriteitsverhoging krijgt om het kritieke gedeelte af te ronden zonder interferentie van taken met gemiddelde prioriteit. Als de taak met prioriteitsverhoging vastloopt op een andere vergrendeling, wordt de prioriteitsverhoging doorgegeven aan de rest van de afhankelijkheidsketen. Zoals de Linux-kerneldocumentatie uitlegt:
""Prioriteitsovererving stelt goed ontworpen applicaties in staat om gebruikersruimtevergrendelingen te gebruiken in kritieke delen van een thread met hoge prioriteit, zonder de deterministische werking te verliezen.""
Om dit te bereiken, rtmutex Het maakt gebruik van een vlag en een prioriteitsgeordende boomstructuur om wachtende taken te beheren, waardoor de overhead laag blijft op ondersteunde architecturen.
Laten we tot slot eens kijken hoe PREEMPT_RT de RCU-werking verbetert.
Preemptieve RCU (Lezen-Kopiëren-Bijwerken)

Read-Copy-Update (RCU) is een synchronisatietechniek die veelvuldig wordt gebruikt in de Linux-kernel. In standaardkernels zijn RCU-leessecties niet-onderbreekbaar, wat kan leiden tot onvoorspelbare vertragingen. PREEMPT_RT verandert dit door RCU-leessecties wel onderbreekbaar te maken. volledig voorkoopbaar, Dit zorgt ervoor dat de deadlines voor realtime taken niet in gevaar komen. Deze aanpassing is essentieel voor het bereiken van het voorspelbare gedrag dat vereist is in realtime systemen.
Hoe PREEMPT_RT te configureren en te gebruiken
PREEMPT_RT is volledig geïntegreerd in de hoofdversie van de Linux-kernel, wat betekent dat externe patches niet langer nodig zijn. Het is echter nog steeds raadzaam om de nieuwste patches toe te passen voor betere architectuurondersteuning en verbeterde grafische prestaties. Zodra de kernel gereed is, moet u de instellingen aanpassen om optimaal gebruik te maken van de mogelijkheden.
Kernelconfiguratie-instellingen
Om een volledig preemptieve kernel in te schakelen, moet u het volgende inschakelen: CONFIG_PREEMPT_RT. In nieuwere kernels bevindt deze instelling zich onder "Algemene instellingen", maar mogelijk moet u deze inschakelen. CONFIG_EXPERT Om het eerst zichtbaar te maken in het configuratiemenu.
Voor productie dedicated servers En in andere veeleisende omgevingen kunnen extra opties de prestaties verder optimaliseren:
CONFIG_NO_HZ_FULL: Vermindert interrupties van de planningsklok op drukke CPU's, wat helpt om jitter te minimaliseren.CONFIG_RCU_BOOSTVoorkomt dat RCU-lezers die onder de preemptieregeling vallen, de respijtperiodes vertragen.CONFIG_RCU_NOCB_CPU: Verplaatst de afhandeling van RCU-callbacks naar specifieke CPU's, waardoor de interferentie met realtime taken wordt verminderd.
Het is ook cruciaal om debugopties uit te schakelen die een hoge latentie kunnen veroorzaken. Schakel instellingen uit zoals CONFIG_DEBUG_LOCKDEP, CONFIG_DEBUG_PREEMPT, CONFIG_DEBUG_OBJECTS, En CONFIG_SLUB_DEBUG. Hoewel deze tools nuttig zijn voor de ontwikkeling, kunnen ze de latency-doelstellingen aanzienlijk negatief beïnvloeden. Zoals kernelconfig.io uitlegt:
""Deze optie maakt van de kernel een realtime-kernel door verschillende vergrendelingsprimitieven (spinlocks, rwlocks, enz.) te vervangen door varianten die gebruikmaken van preemptieve prioriteitsovererving.""
Zodra je kernel is gecompileerd en opgestart, controleer je of PREEMPT_RT actief is door het volgende commando uit te voeren: cat /sys/kernel/realtime. Een retourwaarde van 1 Geeft aan dat het gelukt is. Je kunt dit ook controleren door te kijken of "PREEMPT_RT" in de uitvoer staat. uname -a.
Foutopsporing en prestatieoptimalisatie
Het finetunen van de kernel is essentieel voor het bereiken van optimale prestaties bij realtime workloads. Een belangrijk aandachtspunt is de real-time throttling-mechanisme, wat standaard 50 ms per seconde reserveert voor niet-realtime taken. Als uw workload puur realtime is, kunt u dit mechanisme uitschakelen door te schrijven -1 naar /proc/sys/kernel/sched_rt_runtime_us. Zoals Jan Altenberg, Senior Open Source Consultant bij OSADL, opmerkt:
""Een 'uit de hand gelopen' realtime-taak kan het systeem overbelasten. Als beschermingsmechanisme kan de looptijd van realtime-taken worden beperkt door een waarde in microseconden in te stellen in /proc/sys/kernel/sched_rt_runtime_us."‘
Voor een verbeterde deterministische werking kunt u specifieke CPU-kernen isoleren met behulp van parameters zoals isolcpus=2,3, rcu_nocbs=2,3, nohz_full=2,3, en stel irqaffinity=0. Hierdoor worden die cores exclusief gereserveerd voor realtime taken.
Om interruptthreads te beheren, gebruikt u de chrt tool. Deze threads worden doorgaans uitgevoerd met een standaardinstelling. SCHED_FIFO De prioriteit is 50, maar u kunt deze aanpassen om conflicten met uw applicatie te voorkomen. Om bijvoorbeeld de IRQ-thread van een netwerkkaart op prioriteit 98 in te stellen, gebruikt u de volgende opdracht: chrt -p -f 98.
Na het voltooien van de configuratie is het cruciaal om de latentieprestaties te testen en te valideren. Tools zoals cyclische test kan latentie meten (bijv., cyclictest -S -m -p98 -i250), terwijl rtla (Real-time Linux-analyse) helpt bij het identificeren en analyseren van latency-pieken. Deze tools zorgen ervoor dat uw configuratie voldoet aan de eisen van realtime-applicaties.
PREEMPT_RT Toepassingen en voordelen
Gebruiksscenario's voor realtime-applicaties
PREEMPT_RT blinkt uit in systemen waar timingprecisie niet onderhandelbaar is. In ruimtevaart, Het zorgt ervoor dat de navigatie- en vluchtbesturing zonder vertragingen van microseconden werken, wat anders de veiligheid in gevaar zou kunnen brengen. Telecommunicatie Bedrijven vertrouwen erop om dataverkeer in realtime te beheren, waardoor vloeiende spraak- en videogesprekken worden gegarandeerd door het elimineren van haperingen en latentiepieken.
In de automobielindustrie, Het is een hoeksteen voor voertuigbesturingssystemen, en grote spelers zoals Continental Automotive ondersteunen de toepassing ervan. industriële automatisering, PREEMPT_RT stuurt programmeerbare logische controllers (PLC's) en SCADA-systemen aan en werkt vaak samen met protocollen zoals EtherCAT om de veiligheid en efficiëntie op de fabrieksvloer te waarborgen. Robotica Het bedrijf is ook sterk afhankelijk van deze technologie voor nauwkeurige aansturing van actuatoren en directe sensorfeedback, waardoor robots onmiddellijk kunnen reageren op veranderingen in de omgeving.
De meest cruciale toepassingen bevinden zich wellicht in medische hulpmiddelen, Waar precisie van het grootste belang is. Van patiëntmonitoren tot chirurgische robots, PREEMPT_RT levert de deterministische prestaties die nodig zijn om ervoor te zorgen dat levensreddende systemen feilloos functioneren.
Voordelen voor hostingomgevingen
De voordelen van PREEMPT_RT strekken zich ook uit tot hostingomgevingen, waar realtime responsiviteit net zo cruciaal is. VPS en dedicated servers, Het minimaliseert de latentie doordat de scheduler taken met hoge prioriteit voorrang kan geven boven minder kritieke taken. Dit zorgt voor consistente responstijden, wat een directe invloed heeft op de gebruikerservaring en de betrouwbaarheid van de service.
Het threaded interruptmodel voorkomt dat "interruptstormen" systemen overbelasten tijdens zware I/O-bewerkingen. rt_mutex, Prioriteitsovererving zorgt ervoor dat achtergrondtaken met een lage prioriteit geen kritieke hostingdiensten blokkeren. Timers met hoge resolutie maken nauwkeurige planning op microsecondeniveau mogelijk, waardoor jitter in gevirtualiseerde omgevingen wordt verminderd. Hostingproviders, zoals Serverion, bieden aangepaste kernelbuilds met PREEMPT_RT, waardoor beheerders de flexibiliteit hebben om configuraties nauwkeurig af te stemmen op specifieke workloads. Door parameters te gebruiken zoals isolcpus en irqaffiniteit, Providers kunnen CPU-cores toewijzen aan prestatiekritieke taken, terwijl routinematige systeemprocessen geïsoleerd blijven.
Conclusie
Deze handleiding gaat dieper in op hoe PREEMPT_RT Het transformeert Linux in een realtime besturingssysteem door de scheduler bijna volledige controle te geven. Sinds de opname in de mainline kernels vanaf Linux 6.12 (september 2024) is de behoefte aan externe patches voor architecturen zoals x86, ARM64 en RISC-V komen te vervallen.
Het concept is eenvoudig: verminder de niet-onderbreekbare code zoveel mogelijk. Door spinlocks om te zetten in slaaplocks en interrupt-handlers als threads uit te voeren, kunnen taken met hoge prioriteit bijna alle kernelactiviteiten onderbreken. Functies zoals prioriteitsovererving voorkomen dat taken met lage prioriteit kritieke bewerkingen vertragen, terwijl onderbreekbare RCU ervoor zorgt dat zelfs kritieke secties aan de leeszijde geen significante vertragingen veroorzaken. Sebastian Siewior, De beheerder van PREEMPT_RT stelt het treffend:
""Alle controle ligt bij de planner.""
Deze technologische sprong voorwaarts biedt praktische voordelen. Bijvoorbeeld:, Serverion Maakt gebruik van aangepaste PREEMPT_RT-kernelbuilds om de CPU-isolatie te verfijnen en realtime workloads te optimaliseren, waardoor stabiele responstijden worden gegarandeerd, zelfs onder intense I/O-belasting.
Wat realtime-systemen onderscheidt, is niet alleen snelheid, maar ook voorspelbaarheid. PREEMPT_RT minimaliseert jitter, waardoor taken precies op het juiste moment worden uitgevoerd. Dit is cruciaal voor toepassingen zoals industriële automatisering, telecommunicatie en prestatiekritische hostingdiensten. Het biedt het soort deterministisch gedrag dat standaardkernels simpelweg niet kunnen leveren.
Dankzij de integratie in de hoofdkernel en de ondersteuning van bedrijfsdistributies zoals Ubuntu Pro (Sinds februari 2023) is PREEMPT_RT toegankelijker geworden voor hostingproviders en systeembeheerders. Het levert de betrouwbare prestaties met lage latentie die nodig zijn voor de meest veeleisende en tijdgevoelige omgevingen van vandaag.
Veelgestelde vragen
Heb ik PREEMPT_RT nodig of is de standaard Linux-versie voldoende?
De standaard Linux-kernel, in combinatie met de PREEMPT_RT-patch, krijgt realtime-mogelijkheden. Dit maakt het een sterke keuze voor toepassingen waar lage latentie en consistente responstijden cruciaal zijn. Op zichzelf voldoet de standaard Linux-kernel echter mogelijk niet aan de strikte realtime-eisen.
Zal PREEMPT_RT de algehele doorvoer van mijn systeem verminderen?
Om realtime prestaties te bereiken, PREEMPT_RT De focus ligt op het verminderen van niet-onderbreekbare kernelcode, wat de responsiviteit van het systeem verbetert. Deze aanpak kan leiden tot een lichte afname van de algehele doorvoer, maar garandeert consistent en voorspelbaar gedrag – cruciaal voor tijdgevoelige applicaties. Deze afweging is bewust gemaakt en essentieel om te voldoen aan de eisen van realtime systemen.
Welke latentiedoelstelling is realistisch met PREEMPT_RT?
Met PREEMPT_RT, Het bereiken van een latentie in de orde van milliseconden is een realistisch doel voor zowel desktop- als embedded systemen. De daadwerkelijke prestaties zijn echter sterk afhankelijk van hoe goed het systeem is geconfigureerd en afgestemd op specifieke vereisten. Een juiste configuratie is essentieel om het gewenste responsniveau te garanderen.