JavaScript is currently disabled.Please enable it for a better experience of Jumi. Möter den parallella kodutmaningen

vector

Möter den parallella kodutmaningen

EMBEDDED WORLD Utvecklingsverktyget Pareon Verify hittar fel i parallell programkod. Analysen är dynamisk, verktyget simulerar vad som skulle hända under en verklig programkörning.

Verktyget kommer från nederländska Vector fabrics och släpps nu i sin första skarpa version.

Martijn Rutten, Vector Fabrics
Martijn Rutten

– Folk kan inte multitaska – varken i verkliga livet eller i programvara, skrattar Martijn Rutten, Vector Fabrics grundare och vd.

Ovana programmerare kan enligt Martijn Rutten exempelvis försöka implementera kommunikation mellan parallella programtrådar via gemensamt minne och ett direktiv kallat volatile i programspråket C. Men det fungerar inte.

Han pekar ut som fordonselektronik som ett stort problem som tornar upp sig vid horisonten när det gäller parallella buggar.

– Om du tittar inom automotive så handlar de flesta återkallanden redan om dynamiska buggar. Och nu kommer förarassistanssystem, lidar, kameror och allt mer processorkraft och multikärnor. Jag oroar mig för vad som ska bli resultatet av det.

– Och källkoden blir allt större och release cycles allt tätare, så det finns allt mindre tid att testa. Så det behövs verktyg som snabbt kan peka ut buggar.

Parallellism i programvara är en utmaning på grund av det som kallas ”heisenbuggar” – buggar  som är svåra att reproducera eftersom ingen körning är exakt den andra lik när det gäller timingen i hur cpu:n växlar mellan programtrådar.

Heisenbuggar har dödat människor. Ett känt fall är röntgenapparaten Therac-25 som på 80-talet sporadiskt gav patienter hundra gånger överdos av strålning.

Det som hände i Therac-25 var att ett program läste data från ett annat program, men olyckligtvis innan det andra programmet hunnit skriva dessa data. Felet inträffade enbart när en viss felaktig tangentbordssekvens matades in. Dessutom endast om inmatningen skedde snabbt vilket betydde att felet inte började uppträda förrän operatörerna hunnit bli vana och flinka i fingrarna. Och därmed dök felet upp först efter en tids skarp drift.

Timingfel av denna typ kallas race conditions och är ett av de fel som Pareon Verify kan peka ut.

Andra heisenbuggar Pareon Verify hittar är att två trådar fastnar i väntan på den andre ska bli klar (deadlock),  att programmeraren glömmer att avboka minne och det tillgängliga minnet därför sakta krymper, att programmet använder minne som det inte reserverat, och att programmet läser från en minnescell som aldrig initierats.

En vanlig debugger kan ha svårt att hitta heisenbuggar eftersom debugger-programmet i sig ruckar på de timingomständigheter som gäller för att buggen ska uppträda.

– Det kan ta veckor att reproducera felen. Och även om man lyckas reproducera dem, kanske man inte hittar grundorsaken, säger Martijn Rutten.

Orsaken till det är att buggen inte manifesterar sig och får programmet att göra fel där det egentliga felet finns, utan långt senare.

Vector Fabrics presenterar sig som ett komplement till så kallad statisk kodanalys, som enbart undersöker programmet syntaktiska struktur. Statisk kodanalys kan i princip rapportera samma sorters fel.

– Men verktyg för statisk analys har inte samma överblick.  Verktyget måste gissa vad som händer när programmet körs, men det är omöjligt för exempelvis minnesallokering.

Dynamisk analys hittar fler fel och kan dessutom avskriva potentiella fel för att de i praktiken inte inträffar.

Pareon Verify stoppar in extra analyskod mellan programmets egna kodrader och kör sedan programmet på den avsedda hårdvaran. Utdata blir en stor fil med spårningsdata som därefter analyseras av en annan dator.

Pareon Verify stöder C och C++. Detta är inte bara de vanligaste språken för inbyggda system, utan också de språk som de maskinnära biblioteken för exempelvis Android är skrivna i.

Om läsaren känner igen namnet Vector fabrics kan det bero på att företaget sedan år 2010 säljer verktyget VF Analyst som hjälper utvecklare att parallellisera gammal seriell programkod.

– Många inbyggnadsprogrammerare har svårt att förstå hårdvara. Det skapar en röra. Vi skapar verktyg åt dem så att de kan fokusera på funktionen medan vi programmerar effektiv kod för multikärnor.

Ett verktyg som parallelliserar seriell kod effektivt är vad världen drömmer om, och det var lätt att få finansiering från Kiseldalens affärsänglar. Men det har tagit lång tid – sju år enligt Martijn Rutten –  att få VF Analyst att fungera riktigt bra. Och det verkar ta ännu längre tid att få utvecklare att börja använda det.  

– Den släpptes lite för tidigt. Folk är fortfarande rädda för att sjösätta parallell kod. De är rädda för felen. Så det har varit svårt att sälja produkten.

Vector Fabrics grundades 2007. Företaget har 20 anställda i Nederländerna och växer fortfarande, men går ännu inte med vinst. Nordisk distributör är Nohau.

MER LÄSNING:
 
KOMMENTARER
Kommentarer via Disqus

Anne-Charlotte Lantz

Anne-Charlotte
Lantz

+46(0)734-171099 ac@etn.se
(sälj och marknads­föring)
Per Henricsson

Per
Henricsson
+46(0)734-171303 per@etn.se
(redaktion)

Jan Tångring

Jan
Tångring
+46(0)734-171309 jan@etn.se
(redaktion)