Contacteu-nos

info@serverion.com

PREEMPT_RT explicat: característiques del nucli en temps real

PREEMPT_RT explicat: característiques del nucli en temps real

PREEMPT_RT transforma el nucli de Linux en un sistema operatiu en temps real, garantint una sincronització precisa per a les tasques crítiques. Totalment integrat a Linux 6.12 (publicat el 20 de setembre de 2024), permet capacitats en temps real per a arquitectures com x86, ARM64 i RISC-V. Això és el que cal saber:

  • Característiques clau:
    • Substitueix els bloquejos giratoris tradicionals per bloquejos dormentants preemptibles.
    • Converteix els controladors d'interrupcions en fils d'execució, fent-los planificables i preemptibles.
    • Implementa l'herència de prioritats per solucionar problemes d'inversió de prioritats.
    • Fa que les operacions RCU (Read-Copy-Update) siguin totalment preemptibles.
  • Aplicacions:
    • S'utilitza en indústries com l'automoció, la robòtica, les telecomunicacions i els dispositius mèdics on la sincronització precisa és crítica.
    • Alimenta sistemes com ara eines d'automatització industrial, controls de vol i entorns d'allotjament que requereixen servidors privats virtuals de baixa latència.
  • Configuració:
    • Activa CONFIG_PREEMPT_RT en la configuració del nucli.
    • Ajusta els paràmetres com ara CONFIG_NO_HZ_FULL i CONFIG_RCU_BOOST per a un rendiment òptim.
    • Utilitzeu eines com prova cíclica per mesurar la latència i validar el rendiment.

PREEMPT_RT prioritza el temps per sobre del rendiment, cosa que fa que Linux sigui adequat per a aplicacions on els terminis no són negociables. És un punt de canvi per a les indústries que exigeixen un rendiment determinista.

Característiques principals de PREEMPT_RT: Com Linux aconsegueix rendiment en temps real

Característiques principals de PREEMPT_RT: Com Linux aconsegueix rendiment en temps real

PREEMPT_RT explicat: compilació i optimització del nucli de Linux per a temps real i latència ultrabaixa

Característiques principals de PREEMPT_RT

PREEMPT_RT se centra en quatre característiques principals dissenyades per reduir el codi no preemptible i millorar el control sobre la planificació de tasques. A continuació, analitzarem cadascuna de més detalladament.

Preempció completa del nucli

Una de les actualitzacions més importants és la transformació dels bloquejos giratoris estàndard (spinlock_t) i bloquejos de lector-escriptor (rwlock_t) en spinlocks adormits basats en mutex. Els spinlocks tradicionals poden causar retards perquè desactiven la preempció, forçant les tasques a entrar en estat d'espera ocupada. PREEMPT_RT canvia això introduint bloquejos que permeten que les tasques dormin i siguin preemptes, fins i tot quan tenen un recurs.

Això significa que les tasques d'alta prioritat poden interrompre les de menor prioritat, fins i tot si les tasques de menor prioritat mantenen bloquejos. Tanmateix, per a certes operacions crítiques, com ara el planificador o els punts d'entrada de maquinari, PREEMPT_RT conserva raw_spinlock_t, que es comporta com els bloquejos no preemptibles originals. Com ho expressa Paul McKenney, un enginyer distingit:

""El punt clau del pegat PREEMPT_RT és minimitzar la quantitat de codi del nucli que no és preemptible, alhora que minimitza la quantitat de codi que s'ha de canviar per proporcionar aquesta preemptibilitat addicional.""

A continuació, vegem com es beneficia la gestió d'interrupcions d'aquest plantejament.

Interrupcions en fils

PREEMPT_RT desplaça la majoria dels gestors d'interrupcions de maquinari del context "IRQ dura" a fils del nucli s'executa en un context de procés. Aquest ajust permet prioritzar, avançar o fins i tot bloquejar els gestors d'interrupcions.

En un nucli Linux estàndard, un controlador d'interrupcions de llarga durada pot provocar una latència il·limitada perquè atura totes les altres execucions. Les interrupcions en fils solucionen aquest problema. Per defecte, aquests fils d'interrupció s'executen amb un SCHED_FIFO prioritat de 50, però els administradors poden ajustar les seves prioritats mitjançant eines com ara gràfic. Per exemple, podríeu prioritzar la interrupció d'una targeta de xarxa per al control industrial mentre reduïu la prioritat per a l'E/S del disc. Com que aquests fils utilitzen spinlocks inactius en lloc de spinlocks crus, eviten la necessitat de desactivar les interrupcions de maquinari mentre es manté un bloqueig.

Ara, explorem com PREEMPT_RT gestiona els reptes relacionats amb la prioritat.

Herència prioritària i Rtmutex

Inversió de prioritat és un problema important on una tasca d'alta prioritat es queda encallada esperant un recurs que té una tasca de baixa prioritat, mentre que una tasca de prioritat mitjana (que no necessita el recurs) s'apropia a la de baixa prioritat. PREEMPT_RT soluciona això amb herència prioritària, augmentant temporalment la prioritat de la tasca de baixa prioritat perquè coincideixi amb la tasca de més alta prioritat que espera el recurs.

El rtmutex La primitiva és l'eina que ho fa possible. Assegura que quan sorgeix un conflicte, la tasca de baixa prioritat rep un impuls de prioritat per acabar la seva secció crítica sense interferències de tasques de prioritat mitjana. Si la tasca impulsada es bloqueja en un altre bloqueig, l'impuls de prioritat es propaga en cascada per la cadena de dependències. Tal com explica la documentació del nucli de Linux:

""L'herència de prioritat permet que les aplicacions ben dissenyades utilitzin bloquejos d'espai d'usuari en parts crítiques d'un fil d'alta prioritat, sense perdre el determinisme.""

Per aconseguir això, rtmutex utilitza un indicador i un arbre ordenat per prioritat per gestionar les tasques en espera, mantenint la sobrecàrrega baixa en les arquitectures compatibles.

Finalment, vegem com PREEMPT_RT millora les operacions de la RCU.

RCU preemptible (Lectura-Còpia-Actualització)

UCI

Read-Copy-Update (RCU) és una tècnica de sincronització que s'utilitza àmpliament al nucli de Linux. En els nuclis estàndard, les seccions de lectura de RCU no són preemptibles, cosa que pot provocar retards imprevisibles. PREEMPT_RT canvia això fent que les seccions de lectura de RCU siguin totalment preemptible, garantint que els terminis de les tasques en temps real no es vegin compromesos. Aquest ajust és una pedra angular per aconseguir el comportament predictible que es requereix en els sistemes en temps real.

Com configurar i utilitzar PREEMPT_RT

PREEMPT_RT està completament integrat als nuclis principals de Linux, cosa que significa que ja no calen pegats externs. Tanmateix, aplicar la darrera cua de pegats continua sent una bona idea per obtenir un millor suport d'arquitectura i uns gràfics millorats. Un cop el nucli estigui a punt, haureu d'ajustar-ne la configuració per aprofitar al màxim les seves capacitats.

Configuració del nucli

Per habilitar un nucli completament preemptible, activeu CONFIG_PREEMPT_RT. En els nuclis més nous, aquesta configuració es troba a "Configuració general", però potser haureu d'habilitar-la. CONFIG_EXPERT primer per fer-ho visible al menú de configuració.

Per a la producció servidors dedicats i altres entorns d'alt rendiment, les opcions addicionals poden optimitzar encara més el rendiment:

  • CONFIG_NO_HZ_FULLRedueix les interrupcions del rellotge de planificació en CPU ocupades, cosa que ajuda a minimitzar la fluctuació.
  • CONFIG_RCU_BOOST: Evita que els lectors RCU preemptats endarrereixin els períodes de gràcia.
  • CONFIG_RCU_NOCB_CPUDescarrega la gestió de callback de la RCU a CPU específiques, reduint la interferència amb les tasques en temps real.

També és fonamental desactivar les opcions de depuració que poden introduir una latència elevada. Desactiveu configuracions com ara CONFIG_DEBUG_LOCKDEP, CONFIG_DEBUG_PREEMPT, CONFIG_DEBUG_OBJECTS, i CONFIG_SLUB_DEBUG. Tot i que aquestes eines són útils per al desenvolupament, poden perjudicar significativament els objectius de latència. Com explica kernelconfig.io:

""Aquesta opció converteix el nucli en un nucli en temps real substituint diverses primitives de bloqueig (spinlocks, rwlocks, etc.) per variants conscients de l'herència de prioritat preemptible.""

Un cop el nucli s'hagi compilat i arrencat, confirmeu que PREEMPT_RT estigui actiu executant cat /sys/kernel/realtime. Un valor de retorn de 1 indica èxit. També podeu verificar-ho comprovant si hi ha "PREEMPT_RT" a la sortida de unname -a.

Depuració i optimització del rendiment

Ajustar el nucli és essencial per aconseguir un rendiment òptim amb càrregues de treball en temps real. Una àrea clau a abordar és la mecanisme d'estrangulació en temps real, que reserva 50 ms per segon per a tasques que no són en temps real per defecte. Si la vostra càrrega de treball és purament en temps real, podeu desactivar aquest mecanisme escrivint -1 a /proc/sys/kernel/sched_rt_runtime_us. Com assenyala Jan Altenberg, consultor sènior de codi obert a OSADL:

""Una tasca en temps real 'fugitiva' pot deixar el sistema sense recursos. Com a mecanisme de protecció, el temps d'execució de les tasques en temps real es pot limitar establint un valor en microsegons a /proc/sys/kernel/sched_rt_runtime_us."‘

Per a un determinisme millorat, aïlleu nuclis de CPU específics utilitzant paràmetres com ara isolcpus=2,3, rcu_nocbs=2,3, nohz_full=2,3, i estableix irqaffinity=0. Això reserva aquests nuclis exclusivament per a tasques en temps real.

Per gestionar els fils d'interrupció, utilitzeu el gràfic eina. Aquests fils d'execució solen executar-se amb una eina predeterminada SCHED_FIFO prioritat de 50, però podeu ajustar-les per evitar conflictes amb l'aplicació. Per exemple, per establir el fil d'IRQ d'una targeta de xarxa a prioritat 98, utilitzeu l'ordre: chrt -p -f 98.

Després de completar la configuració, és crucial provar i validar el rendiment de latència. Eines com ara prova cíclica pot mesurar la latència (per exemple, prova cíclica -S -m -p98 -i250), mentre RTLA (Anàlisi de Linux en temps real) ajuda a identificar i analitzar els pics de latència. Aquestes eines garanteixen que la vostra configuració compleixi les demandes de les aplicacions en temps real.

Sol·licituds i beneficis de PREEMPT_RT

Casos d'ús d'aplicacions en temps real

PREEMPT_RT destaca en sistemes on la precisió temporal no és negociable. aeroespacial, garanteix que els controls de navegació i vol funcionin sense retards de microsegons, que d'altra manera podrien posar en perill la seguretat. Telecomunicacions les empreses hi confien per gestionar l'encaminament de dades en temps real, garantint trucades de veu i vídeo fluides eliminant els pics de jitter i latència.

En el indústria de l'automoció, és una pedra angular per als sistemes de control de vehicles, amb actors importants com Continental Automotive que donen suport a la seva adopció. automatització industrial, PREEMPT_RT alimenta els controladors lògics programables (PLC) i els sistemes SCADA, sovint treballant juntament amb protocols com EtherCAT per mantenir la seguretat i l'eficiència a les fàbriques. Robòtica també depèn en gran mesura d'aquesta tecnologia per a un control precís dels actuadors i una retroalimentació instantània dels sensors, permetent als robots respondre immediatament als canvis ambientals.

Potser les aplicacions més crítiques són a dispositius mèdics, on la precisió és primordial. Des de monitors de pacients fins a robots quirúrgics, PREEMPT_RT proporciona el rendiment determinista necessari per garantir que els sistemes crítics per a la vida funcionin a la perfecció.

Beneficis per als entorns d'allotjament

Els avantatges de PREEMPT_RT s'estenen als entorns d'allotjament, on la capacitat de resposta en temps real és igual de crucial. Per a VPS i servidors dedicats, minimitza la latència permetent que el planificador prioritzi les tasques d'alta prioritat per sobre de les menys crítiques. Això garanteix temps de resposta consistents, que afecten directament l'experiència de l'usuari i la fiabilitat del servei.

El model d'interrupcions en fils evita que les "tempestes d'interrupcions" saturin els sistemes durant operacions d'E/S intenses. Amb rt_mutex, l'herència de prioritat garanteix que les tasques en segon pla de baixa prioritat no bloquegin els serveis d'allotjament crítics. Els temporitzadors d'alta resolució permeten una precisió de programació de nivell de microsegons, reduint la fluctuació en configuracions virtualitzades. Els proveïdors d'allotjament, com ara Servidor, ofereixen compilacions de nucli personalitzades amb PREEMPT_RT, donant als administradors la flexibilitat d'ajustar les configuracions per a càrregues de treball específiques. Mitjançant l'ús de paràmetres com ara isolcpus i irqaffinity, els proveïdors poden dedicar nuclis de CPU a tasques crítiques per al rendiment i, alhora, mantenir les operacions rutinàries del sistema aïllades.

Conclusió

Aquesta guia ha aprofundit en com PREEMPT_RT converteix Linux en un sistema operatiu en temps real donant al planificador un control gairebé complet. Des de la seva inclusió als nuclis principals a partir de Linux 6.12 (setembre de 2024), ha eliminat la necessitat de pegats externs en arquitectures com x86, ARM64 i RISC-V.

El concepte és senzill: reduir el codi no preemptible tant com sigui possible. En convertir els spinlocks en bloquejos sleeping i executar els controladors d'interrupcions com a fils d'execució, les tasques d'alta prioritat poden preemptar gairebé totes les activitats del nucli. Característiques com l'herència de prioritat eviten que les tasques de baixa prioritat retardin les operacions crítiques, mentre que la RCU preemptible garanteix que fins i tot les seccions crítiques del costat de lectura no causin retards significatius. Com Sebastià Siewior, el mantenidor de PREEMPT_RT, afirma encertadament:

""Tot el control per al planificador.""

Aquest salt tècnic ofereix beneficis pràctics. Per exemple, Servidor utilitza compilacions de nuclis PREEMPT_RT personalitzades per ajustar l'aïllament de la CPU i optimitzar les càrregues de treball en temps real, garantint temps de resposta estables fins i tot sota una pressió d'E/S intensa.

El que diferencia els sistemes en temps real no és només la velocitat, sinó també la predictibilitat. PREEMPT_RT minimitza la fluctuació, garantint que les tasques s'executin amb precisió quan cal. Això és crucial per a aplicacions com l'automatització industrial, les telecomunicacions i els serveis d'allotjament crítics per al rendiment. Aporta el tipus de comportament determinista que els nuclis estàndard simplement no poden proporcionar.

Amb la seva integració al nucli principal i el suport de distribucions empresarials com ara Ubuntu Pro (des del febrer de 2023), PREEMPT_RT s'ha tornat més accessible per a proveïdors d'allotjament i administradors de sistemes. Ofereix el rendiment fiable i de baixa latència necessari per als entorns més exigents i urgents d'avui dia.

Preguntes freqüents

Necessito PREEMPT_RT o n'hi ha prou amb el Linux estàndard?

El nucli estàndard de Linux, quan es combina amb el Pegat PREEMPT_RT, obté capacitats en temps real. Això el converteix en una bona opció per a aplicacions on la baixa latència i els temps de resposta consistents són crítics. Per si sol, però, el nucli principal de Linux podria no complir amb les demandes estrictes en temps real.

PREEMPT_RT reduirà el rendiment general del meu sistema?

Per aconseguir un rendiment en temps real, PREEMPT_RT se centra en la reducció del codi del nucli no preemptible, cosa que ajuda a millorar la capacitat de resposta del sistema. Aquest enfocament pot conduir a una lleugera disminució del rendiment general, però garanteix un comportament consistent i predictible, cosa crítica per a les aplicacions sensibles al temps. Aquest compromís és intencionat i central per satisfer les demandes dels sistemes en temps real.

Quin objectiu de latència és realista amb PREEMPT_RT?

Amb PREEMPT_RT, aconseguir una latència en el rang de mil·lisegons és un objectiu realista tant per a sistemes d'escriptori com per a sistemes integrats. Tanmateix, el rendiment real depèn en gran mesura de com de bé estigui configurat i ajustat el sistema per complir els requisits específics. Una configuració adequada és clau per garantir el nivell de resposta desitjat.

Publicacions de bloc relacionades

ca