20 év után a Real-Time Linux (PREEMPT_RT) végre bekerül a fő kernelbe 2024.11.17 -én :
https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12
Linus Torvalds megáldotta a kódot a 2024 -es Open Source Summit Europe rendezvényen. Miért nagy dolog ez?
A valós idejű rendszerek olyan szoftverek, amelyek képesek biztosítani, hogy bizonyos feladatok meghatározott időkeretek között teljesüljenek. Ezen rendszerek használata különösen fontos olyan területeken, mint az autóipar, az orvosi technológiák és az ipari automatizálás. A klasszikus Linux kernel nem volt optimalizálva ezekre az igényekre, ezért a fejlesztők sokáig külső megoldásokat kerestek.
Most, 20 év elteltével végre elérkeztünk odáig, hogy a valós idejű Linux hivatalosan is része legyen a kernelnek. Ez azt jelenti, hogy a fejlesztők mostantól közvetlenül hozzáférhetnek a real-time funkciókhoz anélkül, hogy különböző patch-eket vagy külső modulokat kellene alkalmazniuk.
Először is, ez megkönnyíti a fejlesztők munkáját, hiszen egységes platformon dolgozhatnak. Az új funkciók beépítése és karbantartása sokkal egyszerűbbé válik, ami gyorsabb innovációt eredményezhet.
Másodszor, a megnövekedett megbízhatóság és stabilitás segíthet abban, hogy a Linux még szélesebb körben elterjedjen az ipari alkalmazásokban. Az olyan környezetekben, ahol minden milliszekundum számít – például autonóm járművek vagy valós idejű adatfeldolgozás esetén – ez kulcsfontosságú tényező lehet. Az IoT (Internet of Things) eszközök fejlődése mellett különösen izgalmas lehetőségek nyílnak meg az automatizált rendszerek és okos eszközök terén.
Ellentétben az általános célú operációs rendszerekkel, mint például a Windows vagy a macOS, az RTOS-t úgy építették fel, hogy szigorú időkorlátokon belül reagáljon az eseményekre és feldolgozza az adatokat, gyakran ezredmásodpercekben vagy mikroszekundumokban mérve. Ahogy Steven Rostedt, egy elismert (valós idejű Linux) fejlesztő és a Google mérnöke fogalmazott: „A valós idejű a leggyorsabb, legrosszabb eset.”
Ez azt jelenti, hogy az RTOS alapvető jellemzője a determinisztikus viselkedés.
A számítástechnikában a determinisztikus algoritmusok mindig ugyanazt az eredményt adják, ha ugyanazzal a bemeneti adattal indulnak el. Ezek az algoritmusok nem tartalmaznak véletlenszerű elemeket, és mindig pontosan megjósolhatóak.
Az RTOS garantálja, hogy a kritikus feladatokat meghatározott határidőn belül teljesítik. Sokan azt feltételezik, hogy az ROST -ek gyors folyamatokra valók. Nem azok. Az RTOS -ekben nem a sebesség a lényeg, hanem a megbízhatóság. Ez a kiszámíthatóság kulcsfontosságú olyan alkalmazásokban, ahol elengedhetetlen az időzítés, mint például az ipari vezérlőrendszerek, orvosi eszközök és repülőgép-ipari berendezések.
A manapság használt valós idejű operációs rendszerek egyik példája a VxWorks, amelyet a NASA Mars-járóiban használnak, hogy irányítsák őket, és a Boeing 787 Dreamliner repülőgépeken a repüléselektronikai rendszerek vezérlésére, biztosítva a valós idejű reagálást a repülésvezérlésre. Egy másik példa a QNX Neutrino, amelyet széles körben használnak az autókban információs és szórakoztató rendszerként, valamint olyan fejlett vezetőt segítő rendszereket, mint például a blokkolásgátló fékek.
A valós idejű Linux-kód a Linux 6.12-es kerneltől kezdve minden Linux disztribúcióban megtalálható. Ez azt jelenti, hogy hamarosan megjelenik a kritikusabb eszközökben és ipari hardverekben is.
A valós idejű Linux története az 1990-es évek végén kezdődött és az erőfeszítések külön valós idejű kernelek létrehozására irányultak, amelyek a Linux kernel mellett futottak.
Ingo Molnar, egy vezető Linux kernel fejlesztő 2004 -ben kezdte el összegyűjteni és átalakítani ezeknek a technológiáknak a darabjait, hogy megalapozza a PREEMPT_RT valós idejű PREEMPTÍV javítás- (patch) készletet.
Ingo Molnar wikipédia oldala: https://hu.wikipedia.org/wiki/Moln%C3%A1r_Ingo
Az operációs rendszerek esetében a folyamatok együttműködése alapján megkülönböztetünk környezetváltásos, preemptív és kooperatív többfeladatos rendszert.
A preemptív esetben az operációs rendszer magja, a kernel képes arra, hogy egy megadott idő után a CPU használati jogát elvegye az éppen futó folyamattól és egy várakozónak adja át. Így stabilabb és folyamatosabb működést biztosítanak kooperatív társaiknál, mert esetükben a rosszul megírt vagy rosszindulatú programok nem képesek más feladatok futását meggátolni vagy hátráltatni olyan módon, hogy hosszú ideig nem adják vissza a vezérlést.
Ez a megközelítés különbözött a korábbi valós idejű Linux megoldásoktól, mivel a meglévő Linux kernelt módosította, ahelyett, hogy külön valós idejű kernelt hozott volna létre. 2006-ra ez a megoldás eléggé elterjedt ahhoz, hogy Linus Torvalds megjegyezze: „Egy lézer irányítása Linuxszal őrültség, de ebben a szobában mindenki őrült a maga módján. Szóval ha Linuxot akarsz használni egy ipari hegesztő lézer vezérlésére, akkor nincs problémám azzal, ha a PREEMPT_RT-t használod”.”
2009-re a kernelfejlesztők egy kis csapata, köztük Thomas Gleixner, Peter Ziljstra és Rostedt, befejezte a korábbi prototípusos fejlesztések egységes, fán kívüli patch-készletbe történő összefoglalását, ekkor számos vállalat kezdte el használni ezt a patch-készletet olyan ipari rendszerek építéséhez, amelyek milliszekundumos pontosságú, komoly, valós idejű tulajdonságokat igényelnek.
Valószínűleg még sosem hallottál például a „NO_HZ”-ról, amely csökkenti az energiafogyasztást az üresjáratban lévő rendszerekben. A NO_HZ az, ami lehetővé teszi a Linux hatékony futtatását a több ezer CPU-val rendelkező gépeken. „Nem is gondolnád, hogy a Linux mennyit javult a valós idejű javítás miatt” – hangsúlyozta Rostedt. „Az egyetlen ok, amiért a Linux ma adatközpontokban fut, az az általunk végzett munka”. Enélkül lényegében a Linux nem futna minden adatközpontban. Ez viszont megmagyarázza, hogy miért fut a Linux a felhőben. Nem tudom pontosan, hogy nézne ki a világ e valós idejű hozzájárulás nélkül, de egyáltalán nem úgy nézne ki, mint ma.
A valós idejű Linux olyan módon is hasznosnak bizonyult, amiről kezdetben senki sem álmodott.
Rostedt így emlékezett vissza: „2005-ben kaptam egy valós idejű hibajelentést, és küldtem egy javítást, és azt mondtam:
„Hé, itt a javítás. Tudod alkalmazni?
Erre a srác azt válaszolta:
„Nem tudom, mit csinálok.”
‘Várj, nem vagy kernelfejlesztő?’
Azt válaszolta: ‘Gitáros vagyok’.
Kiderült, hogy a korai valós idejű javításokat használta, mert a JACK-et, az alacsony késleltetésű audiokapcsolatok hangkiszolgálóját használta, mert a legtöbb zenészhez hasonlóan túlságosan le volt égve volt ahhoz, hogy csúcskategóriás felszerelést vásároljon, így – folytatta Rostedt – „így meg lett egy olcsó laptopja Linuxszal és JACK-kel, mert a valós idejű patch-el jó felvételt készíthet úgy, hogy nem akadozik, mikor elkezd írni a merevlemezre”.
Kiderült, hogy sok zenész korai valós idejű Linux-felhasználó volt, mert lehetővé tette számukra, hogy olcsón jó minőségű felvételeket készítsenek. Ki tudta? Egyéb valós idejű Linux-szolgáltatások, amelyek az évek során bekerültek a fő kernelbe:
- A mutexek bevezetése (A mutex név a kölcsönös kizárás angol elnevezésének (mutual exclusion) rövidítése. Többfeladatos programozásnál előfordul, hogy két vagy több programszál egyidejűleg ugyanazt az erőforrást akarja használni, ami nem engedhető meg, mert pl. összekeverednének a soros porton vagy az USB porton kiküldött adatok. A programszálak tehát kölcsönösen kizárják egymást a kritikus szakaszon, nem fordulhat elő, hogy egyidejűleg vezérlik a közös használatú perifériát.)
- Ftrace, vitathatatlanul a legfontosabb Linux hibakereső eszköz (Function Tracer a kernel futása közben végrehajtott különféle függvényhívásokkal kapcsolatos információkat rögzít)
- Prioritás öröklődés a felhasználói térbeli alkalmazásokhoz
Mi tartott ennyi ideig a Real-Time Linuxnak? Tehát miért csak most van teljesen áldott a Real-Time Linux a kernelben?
„Valójában nem tolnánk fel valamit, hacsak nem gondolnánk, hogy kész” – magyarázta Rostedt.
„Szinte mindent általában legalább háromszor átírtak, mielőtt bekerült volna a fővonalba, mert olyan magas volt a mércénk, hogy mi kerüljön be.” Ráadásul a fővonalhoz vezető út nem csak a technikai kihívásokról szólt. A politika és a felfogás is szerepet játszott. „Kezdetben még csak említeni sem tudtuk a valós időt” – emlékezett vissza Rostedt.
„Mindenki azt mondta: Ó, minket nem érdekel a valós idő.” A másik probléma a pénz volt. A valós idejű Linux finanszírozása sok éven át kiszámíthatatlan volt. 2015-ben a Linux Foundation létrehozta a Real-Time Linux (RTL) együttműködési projektet, hogy összehangolja a PREEMPT_RT fővonalazásával kapcsolatos erőfeszítéseket.
A teljes integráció végső akadálya a kernel print_k függvényének átdolgozása volt, amely egy kritikus hibakereső eszköz, amely 1991-ből származik.
Torvalds különösen védte a printk-et — Ő írta az eredeti kódot, és még mindig azt használja hibakeresésre. A printk azonban kemény késleltetést is tesz egy Linux-programba, amikor azt meghívják.
Ez a fajta lassulás elfogadhatatlan a valós idejű rendszerekben. Rostedt kifejtette: „A Printk -nak ezer változata van ezer különböző helyzet kezelésére. Valahányszor módosítottuk a printk -t, hogy valamit megtegyen, az megtörte az egyik ilyen folyamatot. A printk -ban az a nagyszerű a hibakeresésben, hogy pontosan tudod, hol voltál, amikor egy folyamat összeomlott.
Amikor nagyon-nagyon keményen kalapáltam a rendszert és a várakozási idő hirtelen körülbelül öt ezredmásodpercre ugrott.” Ez a késés volt a printk üzenet.
Sok munka, heves vita és számos elutasított javaslat után az év elején kompromisszum született. Torvalds boldog, a valós idejű Linux fejlesztők boldogok, a printk felhasználók boldogok, és végre a valós idejű Linux valódi.
A Printk hivatalos kézikönyve: https://docs.kernel.org/core-api/printk-basics.html
Két évtizedes fejlesztés után a Linux valós idejű javítása végre beolvadt a fő kernelbe. Ez a mérföldkő a kernelfejlesztők több éves munkájának csúcspontja, hogy determinisztikus, alacsony késleltetésű teljesítményt hozzanak a Linuxba.
Determinisztikusság vagy meghatározottság:
- adott bemenő adatok mindig ugyanazokat a kimenő adatokat fogják szolgáltatni
- az ún. „rejtett paraméterek” ki vannak küszöbölve
Ezzel a Linux kernel teljes mértékben preempív, ami lehetővé teszi számára, hogy mikromásodperceken belül reagáljon az eseményekre.
Ez a képesség kulcsfontosságú a pontos időzítést igénylő alkalmazásoknál, mint például az ipari vezérlőrendszerek, a robotika és a hanggyártás.
A valós idejű javítás összeolvadásával a Linux komoly szereplővé válik az RTOS világában. Ez nem csak a valós idejű gyártók, hanem az összes Linux-felhasználó győzelme.
Forrás: https://www.zdnet.com/article/20-years-later-real-time-linux-makes-it-to-the-kernel-really/