PREEMPT_RT IsiFundo kwiLinux: uFakelo, uVavanyo, kunye noThungelwano

  • I-PREEMPT_RT iyanciphisa ixesha lokulinda kwaye ngoku ingaqwalaselwa kwi-kernel engundoqo ye-x86, i-ARM64, kunye ne-RISC-V.
  • Faka i-RT yokubini (umzekelo, iDebian) okanye uqokelele ngezikripthi, ukhubaze iinketho zolungiso onyusa ijita.
  • Qinisekisa nge-cyclictest/rtla kwaye uhlengahlengise ii-IRQs, izinto eziphambili, kunye nokwahlulwa kwe-CPU kumthwalo obalulekileyo womsebenzi.
  • Ixhasa iimeko eziphambili: abaqhubi be-NVIDIA kwi-RT kunye ne-RTVM ene-ACRN kunye nokuzinikela okugqithisiweyo.

PREEMPT_RT Linux umfanekiso ophambili wokufundisa

Ukuba usebenza kunye neenkqubo apho ixesha lokuphendula liyinto yonke, i-PREEMPT_RT sisithako esijika iLinux "eqhelekileyo" ibe yinkqubo elungele ixesha lokwenyani. Sithetha malunga ne-latencies elawulwayo, abacwangcisi abanokubaluleka okungqongqo, kunye nezixhobo zokuhlalutya ezivumela ukulungiswa kakuhle ukuya kwi-microsecond yokugqibela.Kule dossier yokufundisa uya kufumana, ngendlela ecwangciswe kakuhle, yintoni i-PREEMPT_RT, imeko yayo kwi-kernel, indlela yokuyifaka okanye ukuyiqokelela, indlela yokuyilinganisa kunye nokuyiphucula, kunye nendlela yokuyimisa kwi-VM yexesha langempela nge-ACRN.

Ukongeza kwithiyori, ndikuzisela imiyalelo esebenzayo exhaswa zizikripthi ezenza ngokuzenzekelayo ukuqulunqwa kwee-RT kernels, iipakethe ezilungele ukusetyenziswa kwiindawo ezithandwayo, kunye neeresiphi ze-Yocto. Uya kubona kwakhona indlela yokuqinisekisa ukuba inkqubo iyasebenza kwimo ye-RT, yeyiphi i-kernel ongakhetha ukuyikhubaza ukunqanda i-latency spikes, kunye nendlela yokulungisa kakuhle i-IRQs, i-CPU, kunye neenkonzo.Siye sagubungela ukuhambelana komqhubi we-NVIDIA kwindawo ye-PREEMPT_RT kunye nemeko yehlabathi yokwenyani kunye ne-Linux ecacileyo kwi-Intel NUC eyenzelwe imisebenzi ebalulekileyo yobuthunywa.

Yintoni PREEMPT_RT kwaye ingena phi kwikernel?

I-PREEMPT_RT yenziwe njengoluhlu lweepatches eziguqula i-Linux ibe yinkqubo yexesha langempela, ngenjongo yokunciphisa i-latency kunye nokuqinisekisa ukuqikelela. Iprojekthi yaqalwa ngo-2005 phantsi kwesambulela se-Realtime-Preempt (-rt), edluliselwe kwi-Linux Foundation ngo-2015 kwaye ibe ngundoqo kumacandelo afana nezezimali, i-audio yobugcisa / ividiyo, i-aviation, iyeza, i-robotics, i-telecom kunye ne-industrial automation..

Ukusukela ngo-2019, ikhowudi yayo iye yanyuselwa kwi-kernel ephambili. Uluhlu lwe-6.12 luvumela ukucwangciswa kwexesha langempela kwi-kernel ephambili ye-x86, i-ARM64, kunye ne-RISC-V, ivuliwe emva kokuhlanganiswa kwezinto ezibalulekileyo zeprintk kunye nenkxaso ye-atomic console.Umlawuli we-UART 8250 unekhonsoli ye-athomu, ngelixa ezinye izakhiwo ezifana ne-ARM kunye ne-POWERPC zisafuna ukudityaniswa kweendawo ezibalulekileyo, ngoko inkxaso yabo epheleleyo inokufika emva kwexesha ukuba yonke into ayifakwanga ngexesha.

Nangona inkxaso esisiseko iphela kwi-6.12, abagcini batusa ukuba balandele iipatches ze-PREEMPT_RT zakutsha nje kumgca we-RT xa befuna ukusebenza kakuhle (uyilo olutsha, i-tweaks yeegraphics ezikhawulezayo, kunye nophuculo oluhlala lufika kuqala kwi-patch queue). Kwiimeko zemveliso, kuyacetyiswa ukuba usebenzise inguqulelo yamva nje ezinzileyo yomthi we-RT..

Ngokwengqiqo, utshintsho oluphambili kukukwazi ukukhupha phantse nayiphi na indawo ye-kernel, ukunciphisa iifestile ezingenakuphazamiseka. Oku kuguqulela kwi-jitter encinci kunye neempendulo eziqikelelwayo ngakumbi xa kuthelekiswa ne-generic kernel, into eyimfuneko xa umsebenzi ungenako ukulinda.

PREEMPT_RT Luqwalaselo lweLinux

Uqwalaselo lwe-kernel olubalulekileyo lwexesha lokwenyani

Esona sicwangciso singundoqo kukuvumela ikernel ebonelelwa ngokupheleleyo: CONFIG_PREEMPT_RT. Kwiinkozo zakutsha nje, ibonakala phantsi ko "Seto Jikelele," kwaye ukuba awuyiboni, ukwenza iCONFIG_EXPERT ihlala iveza ukhetho.Kwiinguqulelo zangaphambili, i-PREEMPT_RT isenokuba ibikwi-"Preemption Model" menu.

Kukho iisetingi eziqhelanisiweyo zolungiso-ziphene ezonyusa ukubambezeleka kwaye kufuneka zingasebenzi xa ujonge ukusebenza ngexesha lokwenyani. Imizekelo eqhelekileyo ekufuneka uyiphetshwe: DEBUG_LOCKDEP, DEBUG_PREEMPT, DEBUG_OBJECTS, kunye SLUB_DEBUGUkuba uqala nge .config ifayile yonikezelo, kusenokwenzeka ukuba enye yezi iyasebenza. khangela kwaye uyicoce ukunciphisa i-jitter.

Ukwakha kunye nokuqalela ikernel nge PREEMPT_RT ayahlukanga kakhulu kwi kernel eqhelekileyo, ngaphandle kokhetho olukhankanywe ngasentla. Qaphela ukuba ezinye izixhobo zokwakha zitshintsha ngobuqili ukuqala ngeLinux 6.x, kwaye amanyathelo athile anokufuna iipakethe ezongezelelweyo. (Uya kubona iinkcukacha ezisebenzayo ngezantsi ngexesha loqulunqo oluzenzekelayo).

Ufakelo olukhawulezayo kunikezelo kunye nokuqinisekisa imo ye-RT

Ukufakwa kwiDebian:

sudo apt-get install linux-image-rt-amd64

I-Yocto ineresiphi ethile ye-RT kernel kunye nomnye umfanekiso owusebenzisa ngokungagqibekanga. Umboneleli we kernel uqhele ukusetwa kwi local.conf, bblayers.conf, okanye $MACHINE.conf:

Umzekelo weYocto:

PREFERRED_PROVIDER_virtual/kernel = "linux-yocto-rt"

Ukuba umisela i-BSP efuna ukusebenzisa i-linux-yocto-rt ngokungagqibekanga, yongeza kwakhona olu cwangciso kwi-bbappend ye-linux-yocto-rt: Oku kunciphisa inkxaso kumatshini wakho kwaye kuthintela imiba engafunekiyo ehambelanayo.:

Umzekelo bbappend:

COMPATIBLE_MACHINE:$MACHINE = $MACHINE

Emva kokuqalisa, khangela ukuba ngenene ukwixesha lokwenyani. Jonga i-PREEMPT_RT isalathisi kwi-uname kwaye uqinisekise /sys/kernel/realtime:

Jonga imo ye-RT:

uname -a
cat /sys/kernel/realtime   # debe devolver 1

Enye ingongoma ebalulekileyo lixesha le-CPU eligcinelwe imisebenzi engeyiyo ye-RT, ethi ngokungagqibekanga inqande intambo yexesha langempela ekuthinteleni inkqubo. Lungisa umda wehlabathi SCHED_FIFO/SCHED_RR kwii-microseconds okanye uyivale ukuba uyayazi into oyenzayo.:

RT useto lwexesha:

cat /proc/sys/kernel/sched_rt_runtime_us   # por defecto ~50000 (50 ms por segundo)
# Para desactivarlo (sin reservas para tareas no RT):
echo -1 | sudo tee /proc/sys/kernel/sched_rt_runtime_us

Ukuqulunqwa okuzenzekelayo kunye nokuthunyelwa kunye nezikripthi

Ukuba ukhetha ukuqokelela kunye nokufaka i-RT kernel yakho, kukho izikripthi ezenza oko phantse ngokuzenzekelayo, kuquka ukhetho loguqulelo kunye nenkxaso eyongezelelweyo (Docker, NVIDIA, njl.). Ukuqukuqela okuqhelekileyo kuqala ngokuchonga ikernel yakho yangoku ukukhetha uguqulelo olusondeleyo lweRT:

Khangela inguqulelo yakho:

uname -r   # por ejemplo: 5.15.XX-generic → elegir 5.15.XX-rt-YY o lo más próximo

Umzekelo wokusebenzisa indawo yokugcina enemibhalo yokuqulunqa kwaye ufake iPREEMPT_RT ngendlela ekhokelwayo kwiDebian/Ubuntu, ngaphakathi kwendawo yokusebenza yendawo. La manyathelo azenzekela ukuxhomekeka, ukhuphelo lwemvelaphi, kunye nokupakishwa.:

cd tu_workspace
git clone https://github.com/2b-t/docker-realtime.git
cd docker-realtime/src
chmod +x install_debian_preemptrt
chmod +x compile_kernel_preemptrt
mkdir tmp && cd tmp
./../compile_kernel_preemptrt

Ngexesha lophunyezo uya kukwazi ukukhetha uguqulelo lwekernel kunye nemo yofakelo (Debian). Ukuba ulwakhiwo luyasilela, khangela kwaye ulungise ifayile ye.config; kwezinye iinguqulelo ze-6.1.x, umzekelo, kwakuyimfuneko ukongeza iipakethe kunye nokutshintsha i-target target.:

# Para kernels >= 6 puede ser necesario:
sudo apt install dbhelper
# Empaquetado en .deb desde el árbol de fuentes del kernel
sudo make -j$(nproc) bindeb-pkg

Emva kofakelo, yenza iqela leemvume ze-RT kwaye wongeze umsebenzisi wakho. Oku kukuvumela ukuba unikeze izinto eziphambili kunye notshixo lwenkumbulo ngaphandle kokufuna iingcambu zeenkonzo zayo yonke imiyalelo.:

sudo addgroup realtime
sudo usermod -a -G realtime $(whoami)

Qwalasela imida kwi /etc/security/limits.conf ukuze amalungu "exesha lokwenyani" abe nokuphambili okufanelekileyo kunye ne-memlock. Olu seto lunqanda ukungaphumeleli komda womsebenzisi ngokuphakamisa okuphambili okanye ukuvala inkumbulo:

# Edita el fichero de límites con tu editor favorito
sudo editor /etc/security/limits.conf

@realtime soft rtprio 99
@realtime soft priority 99
@realtime soft memlock 102400
@realtime hard rtprio 99
@realtime hard priority 99
@realtime hard memlock 102400

Ukuba ufumana iimpazamo zeeheader ezilahlekileyo emva kokufaka i-kernel, khangela / usr / src kwaye, ukuba kuyimfuneko, faka iphakheji yeentloko ezihambelanayo. Kubalulekile ukukhetha iphakheji ye-RT echanekileyo:

cd /ruta/donde/compilaste/el/kernel
sudo dpkg -i linux-headers-*<TAB TAB>   # elige el que termine en -rt

Kubaqhubi be-NVIDIA kwi-RT, unokunyanzela ufakelo ngokungahoyi ubhaqo lwe-PREEMPT_RT. Oku kwenza kube lula kwi-DKMS ukuqulunqa iimodyuli kwi-kernel yexesha lokwenyani:

export IGNORE_PREEMPT_RT_PRESENCE=1
sudo -E apt-get install nvidia-driver-XXX   # p.ej. XXX=535

Ukuba umqhubi wayesele efakiwe phambi kwe patch ye-RT, faka ngesandla imodyuli yoguqulelo lwakho kunye nekernel. Qinisekisa ukuba ukhomba inombolo echanekileyo yoguqulelo lomqhubi kunye ne-kernel -rt:

ls /usr/src   # identifica nvidia/<versión> y tu versión de kernel
export IGNORE_PREEMPT_RT_PRESENCE=1
sudo -E dkms install nvidia/535.XX.XX -k 5.15.XX-rt

Izixhobo zovavanyo: cyclictest, timerlat, kunye nokunye

Ukulinganisa umgangatho we-RT, isixhobo se-classic yi-cyclictest, inxalenye yephakheji yovavanyo lwe-rt, ekhoyo kwii-distros ezininzi. KwiDebian/derivatives ufakelo luthe ngqo:

sudo apt-get install rt-tests

Umzekelo wovavanyo usungula intambo enye nge-CPU nge-SCHED_FIFO 98, ikhefu le-250 µs, kwaye ibonisa latencies kwi-microseconds. Le pateni ilinganisa ukulayishwa kwe-RT rhoqo ukubona ii-spikes kunye nejitter:

sudo cyclictest -S -m -p98 -i250

Ngexesha lokwenyani, kusetyenziswe iiklasi ezimbini zokucwangcisa: SCHED_FIFO kunye ne-SCHED_RR. I-FIFO iphumeza ngokuphambili okusisigxina (1..99) de i-CPU ikhululwe okanye kufike umsonto ophambili ophambili; I-RR yahlula ixesha xa kukho imisonto emininzi kwindawo yokuqala efanayoUkukhetha iklasi elungileyo kwenza umahluko ocacileyo kwimigca esezantsi yokulinda ixesha elide.

I-kernel ibandakanya iitrayisi ezinceda ukufumanisa ukubaleka kokuvuka. I-timerlat tracer kunye nesixhobo se-rtla somsebenzisi ikuvumela ukuba ujonge kwaye ulungelelanise ukulibaziseka kwi-IRQs, iintambo zekernel, kunye nemisonto yomsebenzisi.Imeko yokusetyenziswa eqhelekileyo, ukumisa ngokuzenzekelayo ukuba umda ugqithisiwe, iya kuba:

Ukusetyenziswa okuqhelekileyo kwe-rtla:

sudo rtla timerlat top -a 4000 -Pf:98
# ... al superar 4000 µs detiene el tracing y muestra posibles causas

Uluntu lwe-OSADL lugcina iipetshi eziluncedo zokuvavanya i-latencies usebenzisa i-histograms kwi-kernel ngokwayo. Ukusuka kwii-debugfs unokufunda ubukhulu be-CPU kwaye ubone ukuba ngowuphi umsebenzi obandakanyekayo kolona libaziseko lukhulu:

Latency histogram:

cd /sys/kernel/debug/latency_hist/timerandwakeup
cat max_latency-CPU*

Inqaku elisebenzayo: kwezinye ii-distros kukho iinkonzo zenkqubo (umzekelo, i-NTP ethile) eqala ngokubaluleka kwe-RT kwaye inokuphazamisana nemisonto yakho ebalulekileyo. Qhuba i-top-odelwe phambili/i-ps ukufumana iinkqubo nge-SCED_FIFO/RR esebenzayo kwaye ulungise ukuba kuyimfuneko..

Ukulungiswa kweSistim: iziphazamisi, izinto eziphambili, kunye nondoqo wokwahlukaniswa

Ngokungagqibekanga, phazamisa imisonto eqhutywa nge SCHED_FIFO kwindawo ephambili 50. Unokuphakamisa izinto eziphambili kwii-IRQs ezibalulekileyo (umzekelo, ukusuka kwi-NIC) kwaye ulungelelanise ne-NAPI ukunciphisa i-network latency.:

Umzekelo useto lwe-IRQ:

# Localiza threads de IRQ y NAPI para tu interfaz (ej. enp4s0)
ps aux | grep enp4s0
# Ajusta prioridades (ejemplos)
sudo chrt -p -f 98 658
sudo chrt -p -f 98 659
sudo chrt -p -f 97 752
sudo chrt -p -f 97 753

Ukunikezela ngee-cores ezipheleleyo kumthwalo we-RT, ungahlukanisa ii-CPU kumcwangcisi jikelele kunye nokuphazamiseka kwendlela. Ezi parameters ze kernel kumgca wokuqala zinceda ukunciphisa ukuphazamiseka kwimisebenzi yenkqubo:

isolcpus=2,3 rcu_nocbs=2,3 nohz_full=2,3 irqaffinity=0

Yabela unxulumano lwe-IRQ:

echo 4 | sudo tee /proc/irq/<irq_number>/smp_affinity

Ukuqinisekisa iziphumo, phinda uvavanyo nge-cyclictest/rtla kwaye uqinisekise ukuba imigca yesicelo sakho kunye nee-IRQs ezinxulumene nazo zihlala kunye nosukuzwano oluncinci. Khumbula ukuba kuya kuhlala kukho imisebenzi ethile yokugcina indlu apho inkqubo iya kugcina i-100% ngaphandle kolawulo lwakho..

Ukuhambisa i-VM yexesha lokwenyani nge-ACRN (Cima iLinux kwi-Intel NUC)

Enye into enokwenzeka kukuqhuba undwendwe lweLinux lwexesha lokwenyani kwi-ACRN hypervisor. Kwi-RTVM (i-Real-Time VM) udinga izixhobo zayo zokudlula ukuba zinikezelwe kwaye phantsi kwabalawuli be-PCI abahlukileyo kwezo ze-SOS (iNkonzo ye-OS)I-Intel KBL NUC (njenge-NUC7ixDNHE) iyasebenza kakhulu kuba ine-NVMe eyahlukileyo kunye ne-SATA drives.

Umzekelo wokuhamba komsebenzi uya kuba: ukufaka i-Linux ecacileyo (v29400) kuzo zombini ii-NVMe kunye ne-SATA drives; ukuqwalasela i-SATA drive njenge-SOS kunye nokongeza i-hypervisor kwi-partition ye-EFI. Emva koko, lungiselela kwaye uqalise undwendwe lwe-RT kwi-NVMe kunye nemithwalo efanelekileyo kunye neemodyuli..

Amanyathelo asebenzayo: Yongeza i-kernel-lts2018-preempt-rt bundle, kopisha imodyuli ye-preempt-rt kwidiski ye-NVMe, kwaye ufumane ii-ID ze-PCI zokudlula (umzekelo, [01: 00.0] kunye ne- [8086: f1a6]). Guqula iskripthi se-launch_hard_rt_vm.sh ukudlulisa i-NVMe kwindwendwe kwaye uqwalasele inethiwekhi ngokweemfuno zakho.:

Ukhetho lwenethiwekhi:

# Opción 1: virtio-net
# Opción 2: passthrough de una NIC PCIe

Qala i-VM ngexesha langempela kwaye ukhangele i-kernel nge-uname -a ngaphakathi kweendwendwe. Nje ukuba usebenze, faka iimvavanyo ze-rt kwaye usebenzise i-cyclictest ukuqinisekisa ukuziphatha:

sudo cyclictest -S -m -p98 -i250

Ukwandisa ngakumbi, hlengahlengisa i-BIOS/UEFI ngokukhubaza itekhnoloji egcina amandla kodwa yazisa i-latency, kunye nokuvumela amandla okubona. Isalathiso sesalathiso seBIOS samaqonga alolu hlobo siya kubandakanya into enje:

Into Ukulunga
VMX Kunikwe
VT-d Kunikwe
Ukuxutywa kweHyper Abakhubazekileyo
Inyathelo lesantya Abakhubazekileyo
I-Speed ​​Shift Abakhubazekileyo
C-State Abakhubazekileyo
UkuPhuculwa kombane Abakhubazekileyo
GT RC6 Abakhubazekileyo
Imowudi yaMandla aPhantsi ye-Gfx Abakhubazekileyo
SA GV Abakhubazekileyo
Inkxaso ye-LPM enolaka Abakhubazekileyo
Inkxaso ye-ACPI S3 Abakhubazekileyo
I-ASPM yoMthonyama Abakhubazekileyo

Amanqaku, iimbekiselo, kunye nezixhobo ezixhasayo

Ukuba ufuna ukuphengulula nzulu kwiikhonsepthi, ii-subsystems, kunye notshintsho oluvumela imo ye-RT (ibandakanya uyilo, abacwangcisi, kunye neenkcukacha zoyilo), uya kufumana imathiriyeli yoqeqesho ebanzi kakhulu. Umzekelo, ezi zilayidi zinikezelwe kwiPREEMPT_RT zingaluncedo kakhulu kuwe.: Khuphela i-PDF

Olunye unikezelo lunikeza iibhinari zeRT ezakhelwe ngaphambili okanye udibaniso kwiinkqubo zabo zokwakha. Sisiqalo esihle sokuvavanya ngaphandle kokuqokelela ukusuka ekuqaleni kunye nokuthelekisa iziphumo kunye ne-kernel yakho yesiko..

Imibuzo ebuzwa rhoqo: ukwenza kusebenze, i-distros, kunye neengxoxo zekernel

Ngokufika kwe-6.12, ukhetho lwe-PREEMPT_RT ludibaniswe kwi-kernel ephambili yezakhiwo ezahlukeneyo. Nokuba yenziwe ngokungagqibekanga kuxhomekeke kunikezelo: ezinye zigcina okwahlukileyo ukwahluka kwe-RT, ezinye zibonelela ngeepakethe ezithile, kwaye ezinye ziyishiya kulwakhiwo lwesiko.Ngalo lonke ixesha ujonga amanqaku okukhutshwa kwe-distro kwaye, ukuba kukho "i-linux-image-rt" okanye efanayo, yindlela ecetyiswayo yokuqalisa.

Ngokumalunga nengxabano yekernel "preempt=igcwele": ayilingani nePREEMPT_RT kwaye isiphumo sayo sixhomekeke kubumbeko oluhlanganisiweyo. Ukuba ugqithiso `preempt=gcwele` kwiinkozo zakutsha nje (umzekelo, ukusuka ku-6.10.6 ukuya phambili) akuqalisi inkqubo yakho, susa loo parameter kwaye ujonge uqwalaselo lwekernel olululo.Ngexesha lokwenyani elingqongqo, indlela kukwenza/ukuqwalasela iCONFIG_PREEMPT_RT okanye ufake i-RT kernel yonikezelo lwakho.

Soloko ujonga ukuba /sys/kernel/realtime ngu-1 kwaye uname ibonisa PREEMPT_RT. Kuphephe ukudibanisa okulindelweyo "kwexesha eliphantsi" kunye "nexesha lokwenyani"; ziiprofayili ezahlukeneyo ezineenjongo ezahlukeneyo.Ukuba ufuna i-RT enzima, beka phambili i-RT kernel ezinzileyo kunye nezixhobo zokuxilonga (cyclictest/rtla) phambi kokuba uchukumise iimpikiswano ezinobundlobongela kwi-bootloader.

Ukuseta inkqubo yeLinux yexesha lokwenyani namhlanje kucace ngakumbi enkosi ngokufika kuka-PREEMPT_RT kumgca ongundoqo, njengoko kukho iipakethe, iiresiphi, kunye nezikripthi ezikugcina iiyure. Qala ngokuqinisekisa ngeebhinari ze-RT apho zikhoyo, umlinganiselo nge-cyclictest/rtla, khubaza iinketho zokulungisa ezonakalisa i-latency, lungisa izinto eziphambili / ii-IRQ, kwaye uhlukanise ii-CPU xa umthwalo wakho womsebenzi uzifuna.Ukuba uyaqulunqa, sebenzisa izikripthi ezivelisa iifayile ze-.deb kwaye ubeke imida yomsebenzisi womsebenzi weRT; ukuba usebenzisa i-NVIDIA GPU, khumbula i-IGNORE_PREEMPT_RT_PRESENCE eguquguqukayo. Kwaye ukuba ityala lakho lifuna i-virtualization eqinisekileyo, i-ACRN ene-passthrough ezinikeleyo kwi-NUC ene-NVMe + SATA isiseko esiluqilima se-RTVM ephendula ngqo ngaphandle kwebhokisi.