Spårningsverktyg till inbyggda Linux-system

Mohammed Billoo, grundare av MAB Labs som erbjuder tjänster inom programmering av inbyggda system, använder Linux på många hårdvaruplattformar. Här går han igenom hur utvecklare kan använda det nya stödet för Linuxsystem i Percepio Tracealyzer; exemplen spänner från att analysera drivrutiner och avbrottshantering till att undersöka effekten av olika kompilatorinställningar.

Den senaste versionen av Tracealyzer använder Common Trace Format (CTF), en standard när det gäller spårning av Linuxsystem, och erbjuder nya möjligheter till felsökning och verifiering med hjälp av visualiseringar av vad som händer i systemet. Visualiseringen gör det enklare för utvecklare att se eventuella problem, och låter dem stegvis klicka sig ner djupare i detaljerna för att hitta orsaken.

Signals and Syscalls-vyn visar hur trådar och processer interagerar med Linuxkärnan samt hur signaler genereras och inte minst levereras. Communication Flow-vyn har anpassats för Linux och visar en graf över hur processer och objekt interagerar med varandra. I huvudvyn ser man bland annat vilka trådar och processer som skapas under körning, och av vem.

I exemplet utgår vi från en Yocto-baserad Linuxdistribution och kompletterar den med LTTng, standardbiblioteket för spårning i Linuxsammanhang. Med hjälp av Tracealyzer och LTTng går det att studera hur en drivrutin beter sig som en del av systemet, tillsammans med kärnan, och lokalisera eventuella prestandaproblem.

Varierande exekveringstid
Ett problem som visade sig i detta fall var att exekveringstiden för drivrutinen kunde variera kraftigt, och efter en djupare analys visade det sig att orsaken var att den enhet som skulle styras inte återställdes korrekt efter varje avbrott. Ett första försök att felsöka detta med hjälp av loggutskrifter från avbrottshanteringen hade misslyckats på grund av att själva skrivandet tog så lång tid att enheten hann återställa sig själv och felet maskerades, men med Tracealyzer kan felsökningen göras med minimal overhead, utan några utskrifter.

Testa hypotes
Ett annat exempel visar hur man kan använda Tracealyzer för Linux till att testa en hypotes om att man kan förbättra prestanda för en process genom att binda den till en specifik processorkärna, jämfört med att låta operativsystemet bestämma på vilken/vilka kärnor processen ska köras.

Linuxkärnor och drivrutiner i all ära men flertalet inbyggnadsutvecklare bygger ändå applikationer som ska köras i användarläge, och även där kan man använda Tracealyzer och LTTng för att utvärdera prestanda, felsöka och kontrollera att kraven på svarstider uppfylls. När problem upptäcks kan Tracealyzer sedan användas utvärdera olika åtgärder.

Utvärdera alternativ
Ytterligare en möjlighet är att använda Tracealyzer för att utvärdera olika alternativ under utvecklingen, som till exempel vilken algoritm som ger snabbast svar eller hur stor skillnad det gör att utnyttja processorns flyttalsinstruktioner. Om man undersöker sådant tidigt i projektet minskar risken för kostsamma justeringar i slutskedet när det kan vara både svårt och dyrt att komma till rätta med oväntade prestandaproblem.

Kraftfullt verktyg
Tracealyzer är ett kraftfullt verktyg att sätta i händerna på en utvecklare av inbyggda Linuxsystem. Vi har använt det i en rad projekt, för allt från felsökning till prestandaoptimering. Högnivåvyerna ger en utmärkt överblick och visar platser där man kan behöva borra sig djupare ner i detaljerna. Detaljvyerna visar sådant som CPU- och minnesförbrukning, I/O, hur processer interagerar, och kan skalas upp även till stora Linuxsystem med bibehållen respons och detaljrikedom. Spårningen kan anpassas till olika behov med hjälp av användardefinierade User Events som beskrivs i projektspecifika konfigurationsfiler. Eventuella tillståndsmaskiner i koden kan visualiseras i egna vyer.


Mohammed Billoo, MAB Labs

Comments are closed.