Sulautetun Linuxin virheenkorjaus eli debuggaaminen on erittäin monimutkaista, ja se asettaa kokeneimmillekin sulautettujen järjestelmien kehittäjille monia haasteita. Visuaaliset jäljitysdiagnostiikkatyökalut, jotka tukevat erityisesti sulautettua Linuxia, voivat helpottaa työtä huomattavasti. Näin sanoo MAB Labsin perustaja Mohammed Billoo.
Artikkelin kirjoittaja Mohammed Billoo on MAB Labs LC:n perustaja. Hänellä on yli 12 vuoden kokemus sulautettujen ohjelmistojen arkkitehtuurista, suunnittelusta, toteutuksesta ja testaamisesta erityisesti sulautetussa Linuxissa. Mohammed osallistuu myös Linux-ytimen kehittämiseen ja on aktiivinen osallistuja lukuisiin avoimen lähdekoodin hankkeisiin. Mohammedilla on sähkötekniikan tutkinto The Cooper Union for the Advancement of Science and Artista, jossa hän opettaa digitaalisen logiikan suunnittelua, tietokonearkkitehtuureja ja edistyneitä tietokonearkkitehtuureja. |
Äskettäin sain tehtäväksi kehittää mukautettu Linux-ohjain kuluttamaan ulkoisen laitteen lähettämää dataa. Vaikka Linux-ytimessä on natiiveja mekanismeja, jotka varmistavat, että ohjaimen toiminta on oikea, virheenkorjaus ja suorituskyvyn arviointi on kaukana suoraviivaisesta. Siksi päätin testata, auttaisivatko - ja jos, niin miten - uudet jäljitystyökalut, kuten sulautettua Linuxia tukeva Tracealyzer, ajurin ja keskeytyskäsittelijän analysoinnista käyttäjätilan sovellusten ja kääntäjävaihtoehtojen tarkastelussa.
Käytin jäljitystyökalua Yocto-pohjaisen Linux-jakelun kanssa aloittaen mukautetun kerroksen rakentamisesta kortin BSP-pakettiin, jotta siinä voidaan käyttää avoimen lähdekoodin LTTng-kirjastoa. Tämä tarjosi lukuisia arvokkaita näkökulmia ajurin suorittamiseen osana Linux-järjestelmää, kernel mukaan lukien. Sain myös kokonaisvaltaisemman näkemyksen ajurista varmistaakseni, ettei suorituskyvyssä ole pullonkauloja tai mistä mahdolliset pullonkaulat tunnistaa.
Diagnostinen jäljitystyökalu voi myös auttaa paljastamaan IRQ-käsittelijän suorituskykyongelmia tarvitsematta käyttää pelättyä printk-lausetta. Minun tapauksessani se paljasti tarpeen kuitata laitteen keskeytys I2C-väylän kautta ruuhkautumisen (trashing) estämiseksi. Ilman jäljitystyökalua tämä piilotettu bugi olisi havaittu tai ilmaantunut vasta vähän ennen julkaisua, kun ylimääräiset printk-kutsut poistettiin. Työkalu paljasti myös printk:n keskeytyskäsittelijään sisällyttämisen vakavat vaikutukset. Jäljitystyökalun käytöllä vältyttiin tehokkaasti ajurien myöhäisvaiheen muokkausten tarpeelta, mikä olisi aiheuttanut huomattavia viivästyksiä ja kustannuksia.
Jäljitystyökalun avulla pystyin myös testaamaan hypoteesiani siitä, kuinka prosessin CPU-affiniteetin (määritys prosessoida tietyssä ytimessä) asettaminen vaikuttaisi sen suorituskykyyn. Eri suorituselementtien välisten vuorovaikutusten analysointi normaaleissa ja rasittavissa olosuhteissa osoitti Linux-ytimen parhaan suoritusalgoritmin. Tämä tunnisti tietyt alueet Linux-ytimen ajastimesta ja iperf-koodikannasta lisätutkimuksia varten.
Jäljitystyökalut voivat olla vieläkin tehokkaampia arvioitaessa käyttäjätilan suorituskykyä. Useimpien sulautettujen ohjelmistojen kehittäjien tapaan kehitän käyttäjätilasovelluksia Linux-järjestelmään. Jäljitystyökalun tuotosten yhdistäminen LTTng-jäljityspisteisiin tarjoaa korvaamattoman keinon, jolla voin määrittää sovellukseni suorituskyvyn, miten se tunnistaa poikkeavia toimintoja, sekä tarjoamaan korkean tason ajoitustilastoja. Tämän jälkeen voin käyttää työkalua ajoitusongelmien vianmääritykseen ja sovelluksen suorituskyvyn parantamiseen.
Pidin myös jäljitystyökalun ja LTTng-kirjaston yhdistelmän erittäin tehokkaana, koska se auttoi nopeasti ymmärtämään tiettyjen kääntäjävaihtoehtojen vaikutuksen liukulukuja suorittavien käyttäjätilasovellusten suorituskykyyn. Yleensä tällainen analyysi tehdään jälkikäteen, kun sovellus on valmis, mutta sen suorituskyky ei vastaa haluttua. Tämä analyysi vie kuitenkin paljon aikaa. Jäljitystyökalun käyttäminen kehityksen aikana ohjelmiston ajoituksen tarkistamiseen auttoi välttämään suorituskyvyn heikkenemisen.
Kaiken kaikkiaan huomasin, että jäljitystyökalut, kuten Tracealyzer, voivat olla tehokas elementti piilossa olevien vikojen löytämisessä ja sulautettujen Linux-järjestelmien suorituskyvyn optimoinnissa.
Korkean tason yleiskatsaukset ylhäältä alas (top-down) suuntautuvaa tutkivaa analysointia varten - mukaan lukien prosessien vuorovaikutus, prosessien haaroittuminen, suorittimen käyttö, RAM-käyttö, I/O-käyttö, tiedostojen käyttö, tilakoneet ja käyttäjän määrittämät mittarit - tarjoavat korvaamattomia ja intuitiivisia jäljitysnäkymiä yksityiskohtien näyttämiseen. Nämä skaalautuvat suuriin Linux-jälkiin sekä responsiivisuuden että selkeyden suhteen. Tiettyihin käyttötapauksiin mukautettavan tapahtumatulkinnan avulla kaikki käyttäjän määrittämät datasarjat, kuten intervallit ja tilakoneet, voidaan näyttää pitkälle konfiguroitavissa näkymissä.
Lopuksi avoimen lähdekoodin LTTng-kirjaston käyttö avaa laajan valikoiman ominaisuuksia sulautetun Linux-suunnittelun eri näkökohtien tutkimiseen ajureista ja keskeytyskäsittelijöistä käyttäjätilan sovelluksiin ja kääntäjävaihtoehtoihin. Tällaisen yhdistelmän käyttäminen kehitysprosessin aikana paitsi lisää näkyvyyttä, myös ratkaisee ongelmia aikaisemmassa vaiheessa prosessia. Erittäin kokeneen kehittäjän näkökulmasta tämä auttaa välttämään piilotetut virheet, ja säästää aikaa ja kustannuksia myöhemmin projektin aikana.
Kuva 1. Avoimen lähdekoodin LTTng-kirjaston käyttö yhdessä jäljitystyökalun kanssa voi tuoda esiin suorituskykyongelmia arvioitaessa mukautettua Linux-ydintä (kuvassa).
Kuva 2: Tämä pystysuuntainen jäljitysnäkymä näyttää tapahtumat pystysuuntaisen aikajanan avulla. Se alkaa ylhäältä ja aika etenee alaspäin. Jokainen sarake edustaa yhtä suorituskontekstia järjestelmässä – yleensä tehtävää tai keskeytyskäsittelijää – ja sarakkeen sisällä olevat suorakulmiot osoittavat, milloin tietty tehtävä oli käynnissä. Vasemmalla on kuvattu tallennettuja ohjelmistotapahtumia.
Lisää tietoa
Jos haluat lukea yksityiskohtaisemman selostuksen siitä, kuinka voit hyödyntää Tracealyzerin uutta sulautettua Linux-tukea saadaksesi enemmän näkyvyyttä järjestelmistäsi, havaitaksesi ongelmat aikaisemmin ja nopeuttaaksesi virheenkorjausta, tutustu kuusiosaiseen blogisarjaani täällä.