Spårning av bildbehandling och inbyggd programvara

Västeråsföretaget Percepio har anpassat sitt visualiseringsverktyg Tracealyzer till OpenVX, en etablerad standard för programmering av inbyggda visions- och AI-processorer. Det innebär att Tracealyzer kan visa utvecklaren hur bilder behandlas i tillämpningen: i vilken ordning bildsegmenten hanteras, hur lång tid varje segment tar, var det uppstår fördröjningar och mycket mer. Lennart Bonnevier, Percepio AB beskriver här hur det hela går till.

Bildbehandling och datorseende är en teknik på stark frammarsch. Användningen drivs inte minst på genom utvecklingen av självkörande bilar och autonoma robotar. Modern hårdvara i form av specialiserade visions- och AI-processorer levererar den råa prestanda som krävs för att hantera beräkningarna i realtid, men för att få ut det mesta möjliga ur hårdvaran krävs att också programvaran är optimerad – och för att nå dithän behövs utvecklingsverktyg som är anpassade till problemområdet.

Det är mot den här bakgrunden som Västeråsföretaget Percepio har anpassat sitt visualiseringsverktyg Tracealyzer till OpenVX, en etablerad standard för programmering av inbyggda visions- och AI-processorer. Det innebär att Tracealyzer kan visa utvecklaren hur bilder behandlas i tillämpningen: i vilken ordning bildsegmenten hanteras, hur lång tid varje segment tar, var det uppstår fördröjningar och mycket mer. Men innan vi går in på detaljerna kan det vara på sin plats med en kort presentation av Tracealyzer.

Visualiserar
Tracealyzer är ett verktyg som utvecklare av inbyggda system använder för att visualisera vad som händer när deras applikation körs. En förutsättning är att applikationen körs i något av de realtids-OS som Tracealyzer stödjer; se percepio.com/tracealyzer för en aktuell lista.

Verktyget spelar in viktiga händelser i applikationen och operativsystemet. Exakt vilka händelser som spelas in varierar mellan olika operativsystem, men det kan till exempel vara schemaläggning, avbrott, meddelanden som skickas och processer som väntar på en semafor eller mutex. Händelseströmmen analyseras och presenteras för utvecklaren i form av en tidslinje och ett trettiotal specialiserade vyer – se några exempel här intill. Vyerna är länkade till varandra så att ett klick i någon av dem fokuserar andra, relaterade vyer på samma tidpunkt i inspelningen, och som användare väljer man själv vilka vyer som ska visas för en viss inspelning.

Och därmed är det dags att gå igenom ett exempel på vad Tracealyzer kan berätta om en OpenVX-applikation.

Tidslinjen

Tidslinjen, till vänster (klicka för större bild), är oftast den naturliga utgångspunkten när man granskar en inspelning i Tracealyzer. Den visar alla tasks som exekverar i systemet, och här kan man också snabb se till exempel om ett task blockeras av något annat som har högre prioritet. Varje task har sin egen färg, och färgkodningen är densamma i de andra vyerna för att underlätta för användaren att orientera sig.

Till höger om tidslinjen är två CPU-lastgrafer och de visar tydligt att åtminstone den ena kärnan ligger nära 100% last under stora delar av det tidsintervall som granskas. Vyerna längst till höger visar detaljer för markerat objekt, en instans av OpenVX-operationen ”Sobel 3×3” i det här fallet, respektive ger möjlighet att filtrera vad som ska visas.

Den här typen av visualisering är till stor nytta när det gäller att försäkra sig om att hårdvaran utnyttjas till fullo, vilket ofta är viktigt för vision-system med hårda realtidskrav. För en industrirobot kan ökad prestanda innebära att det går fortare att göra jobbet, vilket leder till att man sparar både tid och pengar, medan samma förbättring i en självkörande bil i en akut situation kan vara skillnaden mellan liv och död.

Tracealyzer for OpenVX kan hjälpa en utvecklare svara på frågor som om bildbehandlingen är jämnt fördelad på tillgängliga processorkärnor? Hur mycket processortid går åt för ett visst filter? Händer det ofta att applikationen blockeras i väntan på DMA-överföringar? Dessutom har man förstås tillgång till alla standardvyer i Tracealyzer, som meddelandeflöde och visualisering av tillståndsmaskiner.

Percepio har gjort anpassningen till OpenVX i samarbete med Synopsys och Tracealyzer stödjer till att börja med applikationer som körs på Synopsys DesignWare EV6x-processorer. Stöd för andra processorer och OpenVX-implementationer kommer i en senare fas.

RTOS
Vid sidan av OpenVX, som alltså är det nyaste nya för oss på Percepio, används Tracealyzer vid utveckling av traditionella inbyggda system baserade på ett realtids-OS – FreeRTOS, Micrium och VxWorks är några exempel på operativsystem som stöds. I det sammanhanget kan Tracealyzer användas parallellt med ett traditionellt IDE med debugger, som exempelvis IAR, Keil eller Eclipse, och bistår då utvecklaren med visualisering och med tidsrelaterad information som synkronisering och periodicitet som en traditionell debugger inte kan visa. Det finns också exempel där det helt enkelt inte går att stoppa systemet i debuggern: om din applikation till exempel ägnar sig åt att styra en motor kan den enda möjligheten vara att spela in händelseförloppet och granska det i efterhand.

I Snapshot-läge sparar Tracealyzer inspelningen i en buffert i målsystemet. Vid lämpligt tillfälle stoppas applikationen och inspelningen förs över till värddatorn för analys. Hur långa inspelningar som kan sparas beror då på hur mycket ledigt minne det finns i målsystemet. I de flesta RTOS kan man också använda Tracealyzer i Streaming-läge, som innebär att inspelningen kontinuerligt strömmas till värddatorn och sparas där. Streaming möjliggör i princip godtyckligt långa inspelningar. För de RTOS som stödjer den möjligheten kan Tracealyzer även visa den strömmande inspelningen live, parallellt med att den sparas.

En sista detalj att notera är att inspelningsfunktionen normalt bara kräver någon enstaka procent av processorkapaciteten i målsystemet. Det öppnar för möjligheten att lämna den aktiv i systemet även när det tas i drift. Om det senare skulle uppstå problem har utvecklarna då tillgång till inspelade händelseloggar från sina enheter som underlättar felsökningen.


Händelseloggen visar alla händelser i en inspelning. Det går att filtrera vyn så att bara de händelser man för tillfället är intresserad av visas.


Communication Flow-vyn visar hur meddelanden skickas i systemet och ger en snabb överblick över arkitekturen (klicka för större bild)


State Machine.


Tracealyzer kan producera statistik för olika RTOS-objekt – i det här exemplet visas hur stor del av tiden som en tillståndsmaskin har tillbringat i olika tillstånd (klicka för större bild)

Lennart Bonnevier, Percepio AB

Länk till ”Visualisering förenklar RTOS-felsökning” av Johan Kraft, Elektronik i Norden oktober 2015

Comments are closed.