Monisäikeisyys on iso haaste sulautettujen sovellusten mikro-ohjaimille ja niiden reaaliaikakäyttöjärjestelmille. Apua kehittäjille tuo Zephyr RTOS, joka on suunniteltu turvallisuutta sekä nopeaa ja tehokasta kehitystä silmällä pitäen.
Artikkelin on kirjoittanut Percepion perustaja ja toimitusjohtaja Johan Kraft. Hän on Percepio Tracealyzerin alkuperäinen kehittäjä. Se on visuaalisen jäljityksen diagnostiikkatyökalu, joka tarjoaa tietoa ajonaikaisista järjestelmistä sulautettujen ohjelmistojen kehittämisen nopeuttamiseksi. Hänen soveltava akateeminen tutkimustyönsä keskittyi yhteistyössä teollisuuden kanssa sulautettujen ohjelmistojen ajoitusanalyysiin. Ennen Percepion perustamista vuonna 2009 hän työskenteli sulautettujen ohjelmistojen kehittämisessä ABB Roboticsilla. Koulutukseltaan Kraft on tietojenkäsittelytieteen tohtori. |
Viimeisten viiden vuoden aikana Zephyr-projekti on kehittänyt monisäikeistä avoimen lähdekoodin reaaliaikaista käyttöjärjestelmää eli RTOSia sulautetuille suunnitteluille.
RTOS tukee tällä hetkellä yli 200 korttia, joissa on sulautettuja mikro-ohjaimia Arm:sta ja RISC-V:stä Tensilicaan, NIOSiin ja ARC:een yksi- ja moniytimisinä järjestelminä. Lisäksi korteilla on yhteyksiä kuten Bluetooth Low Energy, Wi-Fi ja 802.15.4 Matter, 6LoWPAN, CoAP, Ethernet, USB, CAN ja Thread. BSD-paketit sisältävät kirjastot, joiden avulla kehittäjien on helppo saada RTOS käyttöön.
Yksi tärkeä näkökohta Zephyr-projektissa on, että RTOS on suunniteltu turvallisuutta sekä nopeaa ja tehokasta kehitystä silmällä pitäen. Osana The Linux Foundationia projektia tukee tuotehäiriöiden vastaustiimi, auditoitava koodikanta, joka on kehitetty turvallisuussertifioinneilla, sekä pitkäaikainen tuki (LTS) tietoturvapäivityksillä.
Kaikki tämä mahdollistaa sirujen nopean ja turvallisen liittämisen mihin tahansa pilvipalveluun. Tähän voidaan käyttää erilaisia siruja ja kortteja teollisuuden, autoteollisuuden, älykkäiden kaupunkien ja älykkään kodin markkinoilla. Covid 19 -pandemia on lisännyt tarvetta kontaktien jäljittämiseen puettavissa varusteissa, etäisyydenseurantalaitteissa ja jopa älykkäissä turvajalkineissa, jotka kaikki on rakennettu Zephyrillä jopa vain kolmessa kuukaudessa sen pienen koon, integroitujen pinojen ja luotettavuuden takia.
Yksi puettava seurantalaite/monianturisuunnittelu tarjoaa kontaktien jäljityksen ja lataa tapahtumalokin yhdyskäytävään ja siirrettäväksi pilveen mobiiliverkon yli. Tämä luo yhteydet ja tunnistaa ihmiset, jotka ovat olleet kosketuksissa tartunnan saaneen henkilön kanssa.
Toinen kehittäjä on lisännyt älykkäisiin kenkiinsä älykkään henkilökohtaisen suojausominaisuuden, joka varoittaa työntekijää värisyttämällä kenkiä, kun on olemassa vaara, että joku pääsee liian lähelle. Kun työntekijä saa tämän signaalin, hän voi joko pukea naamion tai siirtyä kauemmaksi toisesta työntekijästä. Toinen Zephyria käyttävä uusi tuote on etäisyysmittari, joka seuraa kahden tai useamman henkilön välistä etäisyyttä työpaikalla.
Mutta vaikka turvallisuus olisi kehityksen ytimessä, ongelmia voi ilmaantua sekä Zephyr-ytimessä että sovelluskoodissa. Zephyr-projekti pitää luetteloa löydetyistä ja korjatuista haavoittuvuuksista, mukaan lukien BadAlloc-ongelma sekä USB- ja Bluetooth-kirjastojen haavoittuvuudet. Tämä korostaa turvallisen sulautetun järjestelmän kehittämisen haasteita.
Sulautettu järjestelmä, jossa on yhteys pilveen, sisältää kohtuullisen määrän koodia ja on siten varsin monimutkainen. "Hello world" -projekti, jossa on AWS-yhteys MQTT:n ja TLS:n kautta, tuottaa satojen kilotavujen kokoisen binäärikoodin. Useimmissa RTOS-sovelluksissa on paljon monimutkaisia vuorovaikutuksia, joissa virheet ovat melko yleisiä, mukaan lukien haavoittuvuudet, joita voidaan hyödyntää päästäkseen kiinni laitteeseen ja mahdollisesti muuhun verkkoon. Jos järjestelmä ei ole suojattu, se ei ole turvallinen, ja mahdollisilla haavoittuvuuksilla voi olla dramaattisia seurauksia teollisiin tai lääketieteellisiin järjestelmiin.
Zephyrin kaltainen RTOS lisää toisen kerroksen monimutkaisuutta, joka sulautettujen suunnittelijoiden on otettava huomioon eli monisäikeisyyden. Tämä mahdollistaa koodin jakamisen erillisiin säikeisiin, jotka toimivat itsenäisesti, ainakin teoriassa. Käytännössä säikeiden välillä on usein riippuvuuksia, jotka lisäävät monimutkaisuutta. Jotkut ovat tarkoitettuja ja tarpeellisia, koska säikeiden on usein kommunikoitava, mutta toiset ovat tahattomia ja joskus ongelmallisia. Ne eivät useinkaan näy lähdekoodissa, ja on vaikea ennustaa, kuinka ne vaikuttavat ajonaikaiseen käyttäytymiseen.
Tämä on haaste mikro-ohjaimille (MCU), joita käytetään yleisesti IoT-sovelluksissa, koska niissä ei aina ole muistinsuojausta. Siten bugeja ei eristetä, ja ne voivat vaikuttaa mihin tahansa ajonaikaisen järjestelmän osaan datan korruptoitumisen kautta. Yhdessä monisäikeisyyden kanssa, jossa muut säikeet voivat estää suorittamisen melkein milloin tahansa ja jossa säieriippuvuudet lisäävät monimutkaisuutta, on olemassa suurempi riski epädeterministiselle käytökselle, vaikeasti havaittaville virheille/bugeille ja haavoittuvuuksille.
Deterministinen suorittaminen on ratkaisevan tärkeää testattavuuden, tietoturvan ja turvallisuuden kannalta ja edellyttää, että ohjelmiston ajoituksen vaihtelut minimoidaan eivätkä ne vaikuta tärkeiden tapahtumien järjestykseen. Muuten voi tuloksena olla tähtitieteellinen määrä mahdollisia toteutusskenaarioita, joita on mahdotonta testata.
Vaikka turvallisuuden varmistusmenetelmiä on useita, ei ole yhtä ainoaa ratkaisua, joka kattaisi kaikki mahdolliset haavoittuvuudet. Deterministisen suorittamisen varmistaminen RTOS-järjestelmässä edellyttää ajonaikaisen käyttäytymisen analysointia. Tämä pitää sisällään ajoitusvaihtelut ja ytimen aikataulutuksen ja API-kutsujen kaavat.
Yksi tapa tutkia Zephyr RTOS:ssa ajettavan monisäikeisen ohjelmiston ajonaikaista käyttäytymistä on käyttää ohjelmiston jäljitystyökalua. Nämä työkalut käyttävät ytimen koodin strategisissa paikoissa olevia ”koukkuja” tapahtumien tallentamiseen ja Zephyrissä ajettavan sovelluksen jäljittämiseen. Tällaisten työkalujen käyttäminen ei vaadi Zephyrin lähdekoodin manuaalista muokkaamista, vain uudelleenkoonnin (rebuild), jotta koukut voidaan ottaa käyttöön.
Zephyrin versiossa 2.6.0 jäljitysalijärjestelmää laajennettiin lisäkoukuilla ja työkalutuella, jotta suorituksen analysointi olisi parempi. Jäljitystyökalut voivat tarjota visuaalisen aikajanan, joka helpottaa virheenkorjausta sekä prosessorin ajoituksen, pinon ja muistinkäytön (heap) profilointia kullekin tehtävälle. Jäljitystyökalut voivat myös mahdollistaa ajoitusvaihteluiden ja muiden ei-deterministisen käyttäytymisen lähteiden havaitsemisen, jotta saadaan aikaan vakaampi ja testattavampi sovellus luotettavuuden, tietoturvan ja turvallisuuden parantamiseksi.
Ohjelmistojäljitystä voidaan käyttää myös API-kutsuihin ja käyttäjän määrittämien sovellustapahtumien kirjaamiseen, joilla on laajoja sovelluksia, mukaan lukien lukkiutumien, muistivuotojen sekä puskurin ylivuotojen havaitseminen, joita yleisesti käytetään haittaohjelmien syöttämiseen.
Edistyksellinen työkaluin tuettu jäljitystietojen analysointi ja visualisointi – mitä kutsumme visuaaliseksi jäljitysdiagnostiikaksi – mahdollistaa eräänlaisen sulautettujen ohjelmistojen valvontakameran, jossa kehittäjät voivat mennä etäämmälle saadakseen yleiskuvan suorituksesta ja zoomata lähemmäksi analysoidakseen yksityiskohtia. Tämä mahdollistaa jäljitystietojen visualisoinnin monista näkökulmista ja eri abstraktiotasoilla, mikä mahdollistaa ylhäältä alas -tyyppisen eli top-down -kehityksen, jossa poikkeamat voidaan tunnistaa korkean tason katsauksissa ja sitten tutkia tarkemmin yksityiskohtaisemmissa näkymissä.
Keskeistä on, että tässä kuvattu jäljitys voidaan tehdä kokonaan ohjelmistolla, joko pitämällä viimeisimmät tapahtumat kohdelaitteen RAM-muistin rengaspuskurissa tai suoratoistamalla tapahtumia jatkuvasti TCP/IP-linkin tai virheenkorjausliitännän kautta. Näin kehitystiimit voivat seurata järjestelmää pitkiä aikoja ja tallentaa jopa erittäin harvinaisia ongelmia. Ohjelmistopohjaista jäljitystä voidaan soveltaa käytännössä kaikkiin sulautettuihin prosessoreihin ja työkaluketjuihin.
Johtopäätös
Nopeaan, tehokkaaseen kehittämiseen ja käyttöön tarkoitetun RTOS:n ansiosta mahdollisten ongelmien nopea ja helppo tunnistaminen on olennaista, jotta projekti pysyy raiteilla ja tuottaa laadukkaan tuotteen.
Luotettavuus ja turvallisuus ovat keskeisiä vaatimuksia sulautetuille järjestelmille. Zephyr v2.6.0 tuo laajennetun tuen ohjelmistonjäljittämiseen, mikä helpottaa virheenkorjausta ja parantaa luotettavuutta, tietoturvaa ja turvallisuutta. Visuaalinen jäljitysdiagnostiikka helpottaa kaoottisen, epädeterministisen ohjelmistokäyttäytymisen havaitsemista, mikä voi heikentää testattavuutta ja siten piilottaa vaikeasti havaittavia vikoja ja haavoittuvuuksia.
Visuaalisen jäljitysdiagnostiikan tarjoama näkemys mahdollistaa korkeamman tuottavuuden nopeamman virheenkorjauksen ansiosta ja parantaa testattavuutta ja sitä kautta luotettavuutta, tietoturvaa ja turvallisuutta. Nämäkaikki ovat kriittisiä tekijöitä onnistuneissa ohjelmistokehitysprojekteissa.
Kuva 1: Visuaalinen jäljitysdiagnostiikka on vähän kuin valvontakamera, joka jäljittää sulautetun ohjelmistokoodin käyttäytymistä poikkeamien havaitsemiseksi visuaalisella aikajanalla myöhempää ylhäältä alas -analyysiä varten.
Kuva 2: Visuaalinen jäljitys eli trace näyttää Zephyrin ajoituksen ja API-kutsut sekä eston.
Kuva 3: Visuaalinen jäljitystyökalu voi tarjota laajan valikoiman Zephyr RTOSin analyyseja ilman, että lähdekoodia tarvitsee muuttaa manuaalisesti.