Linux jako real-time syst´ em Red Hat Czech Michal Schmidt
[email protected] Duben 2009
ˇ ast I C´ ´ Uvod do real-time
´ Uvod do real-time
1 Real-time u ´loha
2 Soft vs. hard real-time
3 Real-time operaˇ cn´ı syst´ emy (RTOS)
Section 1 Real-time u ´loha
Real-time u ´loha
Kdy se jedn´ a o real-time probl´ em
Na zpracov´an´ı jsou kladena ˇcasov´a omezen´ı V´ypoˇcet mus´ı b´yt dokonˇcen pˇred ˇcasov´ym limitem (deadline) Pˇrekroˇcen´ı deadline se povaˇzuje za chybu Real-time neznamen´a dos´ahnout co nejvyˇsˇs´ıho v´ykonu
Real-time u ´loha
Uˇ zitkov´ a funkce Uˇziteˇcnost v´ysledku v ˇcase
Section 2 Soft vs. hard real-time
Soft vs. hard real-time
Rozd´ıl z hlediska pˇr´ıpadn´ ych n´ asledk˚ u nedodrˇ zen´ı deadline
Hard RT – pˇri selh´an´ı m˚ uˇze b´yt ohroˇzeny ˇzivoty, zdrav´ı, nebo m˚ uˇzou vzniknout velk´e ˇskody Soft RT – nedodrˇzen´ı deadline nen´ı fat´aln´ı, zhorˇsen´a kvalita produktu (Ale jsou i jin´e pohledy na rozd´ıl mezi hard a soft RT.)
Soft vs. hard real-time
Co nen´ı nutnˇ e mˇ eˇr´ıtkem hard RT
Velikost ˇcasov´ych konstant nehraje d˚ uleˇzitou roli pˇri rozliˇsen´ı soft a hard RT. Nen´ı pravda, ˇze hard RT u ´lohy maj´ı vˇzdy kr´atk´e deadline. Hard RT u ´lohy m˚ uˇzou b´yt i relativnˇe pomal´e Stroj se pˇrehˇreje, kdyˇz se chlazen´ı nezapne do 1 minuty
Soft RT u ´loha naopak s kr´atkou deadline ˇ ı pˇr´ıchoz´ıch dat ze s´ıt’ov´e karty je vhodn´e stihnout ve Cten´ zlomku sekundy
Soft vs. hard real-time
Pˇr´ıklady RT u ´loh
Zpracov´an´ı audio/video Mˇeˇren´ı a z´ısk´av´an´ı dat ˇ ızen´ı (logick´e, PID, . . . ) R´ Pr˚ umyslov´a automatizace Robotika L´ekaˇrsk´e stroje Auta ...
Section 3 Real-time operaˇ cn´ı syst´ emy (RTOS)
Real-time operaˇ cn´ı syst´ emy (RTOS)
´ e nejlepˇs´ı RTOS Uplnˇ
Nejlepˇs´ı RTOS == obej´ıt se u ´plnˇe bez OS ;-) HW vyhrazen´y pouze pro danou u ´lohu specializovan´e obvody mikrokontrolery
Snadno zaruˇc´ıme pˇredv´ıdatelnost ˇ adn´e dalˇs´ı bˇeˇz´ıc´ı procesy Z´ Velmi vhodn´e pro jednoduˇsˇs´ı u ´lohy Ale nem´ame pohodl´ı a v´yhody OS
Real-time operaˇ cn´ı syst´ emy (RTOS)
Operaˇ cn´ı syst´ emy pro obecn´ eu ´ˇ cely
OS pro univerz´aln´ı u ´ˇcely (jako Linux) Vˇetˇsinou optimalizovan´e na vysok´y celkov´y v´ykon Pˇredv´ıdatelnost je aˇz druhoˇrad´a Mohou poskytovat real-time sluˇzby, ale bez z´aruk (best-effort) funkce POSIX real-time (SCHED FIFO, SCHED RR, . . . ) Pro mnoh´e soft RT u ´lohy staˇc´ı
Real-time operaˇ cn´ı syst´ emy (RTOS)
Real-time operaˇ cn´ı syst´ em OS specializovan´y na real-time u ´lohy Pˇri spr´avn´em pouˇzit´ı dok´aˇze poskytnout z´aruky, ˇze dodrˇz´ıme deadline Pˇredv´ıdatelnost a pˇresn´e ˇcasov´an´ı jsou cenˇeny v´ıce neˇz vysok´y v´ykon Zaj´ımav´e je zn´at chov´an´ı v nejnepˇr´ıznivˇejˇs´ım stavu (worst-case) Pouˇz´ıv´a real-time pl´anovaˇc proces˚ u (scheduler) Preemptivn´ı pl´anovaˇc podle priorit Nejbliˇzˇs´ı deadline nejdˇr´ıve (EDF) Rate-Monotonic Scheduler
Real-time operaˇ cn´ı syst´ emy (RTOS)
Pˇr´ıklady RTOS
Free software Speci´aln´ı: eCos, FreeRTOS, TRON, . . . zaloˇzen´e na Linuxu: RTLinux, RTAI, Xenomai, Linux + realtime-preempt patch
Propriet´arn´ı LynxOS, QNX, VxWorks, PikeOS, Windows CE, Win+RTX ...
Real-time operaˇ cn´ı syst´ emy (RTOS)
Mˇ eˇr´ıtka RTOS
D˚ uleˇzit´e hodnoty jsou interrupt latency (ˇcekac´ı doba pˇreruˇsen´ı) – vyvol´ano pˇreruˇsen´ı; za jak dlouho se spust´ı jeho obsluˇzn´a rutina? scheduling latency (ˇcekac´ı doba pl´anov´an´ı) – proces s nejvyˇsˇs´ı prioritou je pˇripraven k bˇehu; za jak dlouho dostane pˇridˇelen CPU? jitter (chvˇen´ı) – nechtˇen´a promˇenlivost periody
Real-time operaˇ cn´ı syst´ emy (RTOS)
RTLinux RTLinux (V. Yodaiken, FSMLabs, nyn´ı Wind River) Prvn´ı snaha dostat Linux do svˇeta RT RTLinux Free, RTLinux Pro Mal´e RT j´adro – Linux bˇeˇz´ı jako proces s n´ızkou prioritou Patentov´ano – kontroverzn´ı Real-time programy jsou vlastnˇe moduly pro RTLinux j´adro, pouˇz´ıvaj´ı jeho API Ostatn´ı procesy bˇeˇz´ı pod Linux j´adrem. Komunikace RT↔ne-RT prostˇrednictv´ım FIFO nebo sd´ılen´e pamˇeti
Real-time operaˇ cn´ı syst´ emy (RTOS)
Xenomai
M´a za c´ıl poskytovat API tradiˇcn´ıch RTOS, pro snadn´e portov´an´ı program˚ u Pod Linuxem je nanokernel Adeos/I-pipe R˚ uzn´e ’skiny’ poskytuj´ı r˚ uzn´a API pro real-time procesy POSIX, pSOS+, VxWorks, RTAI, . . .
Pl´anuje se i moˇznost bˇehu na Linuxu s realtime-preempt
Real-time operaˇ cn´ı syst´ emy (RTOS)
Oboj´ı jsou ˇreˇsen´ı s du´ aln´ım kernelem
Vlastnosti ˇreˇsen´ı se dvˇema kernely: V´yborn´e n´ızk´e latence (des´ıtky µs) pro RT procesy Speci´aln´ı API pro RT programy, nejsou to norm´aln´ı procesy v Linuxu. Chtˇeli bychom RT procesy jako norm´aln´ı linuxov´e programy v userspace.
ˇ ast II C´ RT-preempt
RT-preempt
4 Preemptivn´ı j´ adro
5 RT-preempt patch
Section 4 Preemptivn´ı j´ adro
Preemptivn´ı j´ adro
Preemptivn´ı j´ adro
Linux odjakˇziva pl´anoval procesy v userspace preemptivnˇ e Aˇz po Linux 2.4.x – kooperativn´ı multitasking pro k´od v j´ adˇre Pr´ace na ˇsk´alovatelnosti v SMP – jemnˇejˇs´ı zamyk´an´ı v j´adˇre M˚ uˇzeme preemptnout proces v j´adˇre, pokud zrovna nen´ı v kritick´e sekci! Nelze kdyˇz: drˇz´ı spinlock, pˇristupuje k per-CPU promˇenn´ym, ...
Linux 2.6 – preemptivn´ı j´ adro (volba CONFIG PREEMPT)
Preemptivn´ı j´ adro
Vliv preemptivn´ıho j´ adra
Maliˇcko vˇetˇs´ı reˇzie – spinlocky nyn´ı zakazuj´ı preempci Pr˚ umˇern´a pl´anovac´ı latence se sn´ıˇzila St´ale dlouh´e latence v nejhorˇs´ıch pˇr´ıpadech
Preemptivn´ı j´ adro
Odkud se berou latence
Kritick´e sekce se spinlocky a rwlocky Kritick´e sekce pˇri ˇcten´ı v mechanismu RCU K´od, kde se v´yslovnˇe zakazuj´ı pˇreruˇsen´ı nebo preempce Vykon´av´an´ı obsluh pˇreruˇsen´ı a softIRQ Inverze priorit
Section 5 RT-preempt patch
RT-preempt patch
RT-preempt patch
Chce vˇsechny ty zdroje latenc´ı zruˇsit Dˇel´a z Linuxu RTOS Norm´aln´ı userspace programy mohou bˇeˇzet v realtime ˇ adn´y druh´y kernel Z´ V´yvoj: Ingo Molnar, Thomas Gleixner, Steven Rostedt, . . . jmenovan´ı pracuj´ı pro Red Hat, umˇej´ı spolupracovat s upstreamem, od zaˇc´atku jasn´a snaha zaˇcleˇ novat tam postupnˇe ˇc´asti patche
RT-preempt patch
SoftIRQs
Nejsn´aze se lze vypoˇr´adat s latencemi od softIRQ. Co jsou SoftIRQs v norm´aln´ım Linuxu Jsou to ”spodn´ı poloviny” zpracov´an´ı pˇreruˇsen´ı (ˇcasovaˇce, s´ıt’. TX/RX, . . . ) Bˇeˇz´ı s povolen´ymi IRQ Ale nejsou to procesy – nelze jim sebrat CPU a pˇridˇelit ho procesu Ochrana proti pˇret´ıˇzen´ı od softIRQ ksoftirqd – jadern´e vl´akno pro odloˇzen´e zpracov´an´ı softIRQ
RT-preempt patch
Preemptivn´ı SoftIRQs Uˇz jsme se sm´ıˇrili s t´ım, ˇze softIRQ mohou b´yt odloˇzeny na pozdˇeji do vl´akna M˚ uˇzeme je tam odloˇzit vˇ zdy A kdyˇz uˇz, tak rovnou samostatn´e vl´akno pro kaˇzd´y typ softIRQ $ ps -eo pid,pri,rtprio,cmd PID PRI RTPRIO CMD 4 90 50 [softirq-high/0] 5 90 50 [softirq-timer/0] 6 90 50 [softirq-net-tx/] 7 90 50 [softirq-net-rx/] 8 90 50 [softirq-block/0] 9 90 50 [softirq-tasklet] 10 90 50 [softirq-sched/0] 11 90 50 [softirq-hrtimer] 12 90 50 [softirq-rcu/0]
RT-preempt patch
Obsluha IRQ ve vl´ aknech V norm´aln´ım Linuxu m´a obsluha kaˇzd´eho IRQ pˇrednost pˇred vˇsemi procesy To i tehdy, kdyˇz proces m´a realtime prioritu Spouˇstˇejme obsluhy IRQ tak´e ve vl´aknech (preemptivn´ı) PID PRI RTPRIO CMD 304 90 50 [IRQ-8] 347 90 50 [IRQ-15] 381 90 50 [IRQ-12] 382 90 50 [IRQ-1] 393 90 50 [IRQ-4] 400 90 50 [IRQ-16] 401 90 50 [IRQ-18] 402 90 50 [IRQ-17] 413 90 50 [IRQ-19]
RT-preempt patch
Klasick´ a obsluha IRQ
(1) service the device; device driver's interrupt handler (2) EOI; generic IRQ code
I/O APIC device
CPU APIC bus PCI INT line
Local APIC
RT-preempt patch
Obsluha IRQ z vl´ akna (2) service the device; device driver's threaded IRQ handler (1) mask&ack, then wake up the thread; generic IRQ code
I/O APIC device
mask regs.
CPU APIC bus
Local APIC
PCI INT line
(3) unmask; generic IRQ code, in the thread
RT-preempt patch
Sp´ıc´ı spinlocky
Potˇrebujeme se zbavit dalˇs´ıho zdroje latenc´ı – sekc´ı se spinlocky Jsou nutn´e pro pˇr´ıstup ke sd´ılen´ym zdroj˚ um na SMP Vˇetˇsinou kr´atk´e kritick´e sekce, ale najdou se i dlouh´e Potˇrebujeme, aby byly preemptivn´ı N´ahrada spinlock˚ u sp´ıc´ımi z´amky – mutexy Aby to fungovalo, IRQ mus´ı b´yt ve vl´aknech Jen nˇekolik vybran´ych z˚ ust´av´a jako raw spinlock t
RT-preempt patch
Inverze priorit
. . . je kdyˇz proces s vysokou prioritou mus´ı ˇcekat na proces s prioritou niˇzˇs´ı Nevyhnuteln´e, pokud oba pˇristupuj´ı ke sd´ılen´emu prostˇredku – mus´ı poˇckat, aˇz druh´y proces uvoln´ı z´amek
ˇ Spatn´ a je ale neohraniˇ cen´ a inverze priorit
RT-preempt patch
Neohraniˇ cen´ a inverze priorit
preempt
C
block
B
preempt
A
t
RT-preempt patch
Dˇ ediˇ cnost priorit
ˇ sen´ı prioritn´ı inverze Reˇ Kdyˇz prioritn´ı proces ˇcek´a na uvolnˇen´ı zdroje drˇzen´eho niˇzˇs´ım procesem, priorita niˇzˇs´ıho procesu je doˇcasnˇe pov´yˇsena na u ´roveˇ n toho ˇcekaj´ıc´ıho Tento mechanismus vyuˇz´ıvaj´ı rt-mutexy
RT-preempt patch
Dˇ ediˇ cnost priorit
unblock
C
block
B
preempt
A
t
RT-preempt patch
ˇ Casovaˇ ce s vysok´ ym rozliˇsen´ım
RT aplikace chtˇej´ı jemn´e ˇcasov´an´ı clock sources (zdroje hodin) gettimeofday()
clock events (ud´alosti od hodin) nanosleep(), POSIXov´e ˇcasovaˇce
Padlo omezen´ı na rozliˇsen´ı periodick´eho tiku (HZ) API pouˇz´ıv´a nanosekundy – skuteˇcn´a pˇresnost a rozliˇsen´ı je d´ano schopnostmi HW
RT-preempt patch
Dalˇs´ı lah˚ udky Valid´ator z´amk˚ u (lockdep) Naˇsel mnoho chyb v zamyk´an´ı Dok´aˇze detekovat tˇeˇzko vyvolateln´a uv´aznut´ı (deadlock), aniˇz by k nim muselo opravdu doj´ıt
Sledovaˇc latenc´ı (latency tracer) Tak´e s jeho pomoc´ı bylo nalezeno mnoho chyb Vyvinul se z nˇej dneˇsn´ı ftrace (CONFIG FTRACE)
Detektor SMI System Management Interrupt SMM – reˇzim CPU kde si firmware dˇel´a, co chce, bez ohledu na OS SMI zp˚ usobuj´ı neˇcekan´e prodlevy
RT-preempt patch
V´ ykon
Latence – des´ıtky µs dosaˇziteln´e Hrub´y v´ykon o nˇeco sn´ıˇzen, ale ve vˇetˇsinˇe benchmark˚ u jen m´alo Objev´ı-li se v´yraznˇejˇs´ı propady, ˇreˇs´ı se
RT-preempt patch
Zaˇ cleˇ nov´ an´ı do upstreamu V´yvoj RT-preempt m´a jasn´y c´ıl dostat se do upstream Linuxu Mnoh´e ˇc´asti uˇz tam jsou 2.6.16 2.6.16 2.6.18 2.6.18 2.6.18 2.6.21 2.6.25 2.6.27 2.6.29
– – – – – – – – –
obecn´e semafory nahrazeny vhodnˇejˇs´ımi mutexy ˇcasovaˇce s vysok´ym rozliˇsen´ım jednotn´a instrastruktura pro IRQ: genirq robustn´ı futexy a futexy s dˇedˇen´ım priorit valid´ator z´amk˚ u lockdep j´adro bez tik´an´ı (tickless) preemptivn´ı RCU trasovac´ı n´astroj ftrace adaptivn´ı ˇcek´an´ı mutex˚ u
Nepˇr´ım´e pˇr´ızniv´e dopady Byly odhaleny ˇcetn´e chyby soubˇehu, opraveny dalˇs´ı chyby
V´yhody z existence RT patche plynou vˇsem
RT-preempt patch
Co jeˇstˇ e zb´ yv´ a zaˇ clenit
St´ale jeˇstˇe zb´yvaj´ı dvˇe nejd˚ uleˇzitˇejˇs´ı ˇc´asti IRQ a softIRQ ve vl´aknech Podpora pˇrid´ana v 2.6.30-rc1 Zat´ım pouze pro vybran´e ovladaˇce Umoˇzn´ı zjednoduˇsit k´ od ovladaˇc˚ u
Nahrazen´ı spinlock˚ u
ˇ ast III C´ Red Hat Enterprise MRG
Section 6 Messaging + Realtime + Grid
Messaging + Realtime + Grid
Nasazen´ı realtime-preempt Linuxu RT patch nen´ı jen hraˇcka. Red Hat Enterprise MRG Messaging – v´ykonn´a implementace otevˇren´eho standardu AMQP (Qpid) Realtime – kernel pro pˇredv´ıdatelnou odezvu (v MRG 1.1 zaloˇzen na 2.6.24-rt), n´astroje pro vyladˇen´ı a monitorov´an´ı Grid – distribuovan´e v´ypoˇcty (Condor) Vrstven´y produkt nad Red Hat Enterprise Linux 5 Zaruˇcena 100 % bin´arn´ı kompatibilita aplikac´ı Podporovan´a i real-time Java (specifikace RTSJ)
ˇ ast IV C´ Z´ avˇ er
Zdroje Rostedt, S., Hart, D. V.: Internals of the RT Patch. In Proceedings of The Linux Symposium, Ottawa, 2007, https://ols2006.108.redhat.com/2007/Reprints/rostedt-Reprint.pdf McKenney, P. E., Attempted summary of ”RT patch acceptance” thread, take 2, http://lwn.net/Articles/143323/ McKenney, P. E., A realtime preemption overview, http://lwn.net/Articles/146861/ Edge, J.: Moving interrupts to threads, http://lwn.net/Articles/302043/ http://rt.wiki.kernel.org http://www.kernel.org/pub/linux/kernel/projects/rt/ http://www.redhat.com/mrg/