Racedetectie in Parallelle Programma’s door Gecontroleerde Heruitvoering Michiel Ronsse Promotoren: Prof. K. De Bosschere Prof. J. Van Campenhout Vakgroep Elektronica en Informatiesystemen
Inleiding
wielen stuur accu bougies stuurbout
Inleiding wielen stuur accu bougies stuurbout
Inleiding wielen stuur accu bougies stuurbout
Inleiding wielen stuur accu bougies stuurbout
Inleiding wielen stuur accu bougies stuurbout
Inleiding persoon1 persoon2 tijd Assemblage van eerste auto wielen stuur accu bougies stuurbout Assemblage van tweede auto persoon1 persoon2 wielen stuur accu bougies stuurbout race synchronisatie
Inleiding wielen stuur accu processor geheugen programmeur A 1 C B+1 B 2C programma
Inhoud Inleiding Parallelle programma´s Doelstelling Gecontroleerde heruitvoering Voorbeeld van dataracedetectie Implementatie Evaluatie Verwant werk Conclusie en eigen bijdragen
Inhoud Inleiding Parallelle programma´s Doelstelling Gecontroleerde heruitvoering Voorbeeld van dataracedetectie Implementatie Evaluatie Verwant werk Conclusie en eigen bijdragen
Parallelle programma´s Proc1: A 1 C B+1 B 2CProc2: B 2A B B+C B 2A (2) B B+C (9) B 2C(6) C B+1(3) A1A1(1)
Parallelle programma´s A1A1 B 2A B 2C C B+1 B B+C Proc1: A 1 C B+1 B 2CProc2: B 2A B B+C (2) (9) (6) (3) (1) B 2C(6) (5)
Parallelle programma´s: synchronisatie A1A1Proc1: A 1Proc2: B 2A S1S1 while (r==0){ r S S 0 } S1S1 B 2A r S (1) S0S0 S0S0 r S (0)
Parallelle programma´s: synchronisatie A1A1Proc1: A 1Proc2: B=2A S1S1 B 2A while (r==0){ r S S 0 } S1S1 B 2A r S (1) S0S0 S0S0 r S (0) V(S)
Parallelle programma´s: synchronisatie A1A1Proc1: A 1 Proc2: B 2A P(S) S1S1 B 2A P(S) V(S)
Parallelle programma´s: semafoorsynchronisatie V(S): vrijgeven P(S): passeren
Parallelle programma´s P(S) r C r r+1 C r V(S) Proc1: P(S) r C r r+1 C r V(S) Proc2: P(S) r C r r+1 C r V(S) P(S) r C r r+1 C r V(S)
Parallelle programma´s P(S) r C r r+1 C r V(S) Proc1: P(S) r C r r+1 C r V(S) Proc2: P(S) r C r r+1 C r V(S) P(S) r C r r+1 C r V(S)
Parallelle programma´s Nood aan goede ontwikkelomgevingen met debugmogelijkheden Normale debugmethode: cyclisch debuggen Eis: programma-uitvoering moet herhaalbaar zijn Probleem: niet-determinisme bij parallelle programma´s Oplossing: gecontroleerde heruitvoering
Doelstellingen Cyclisch debuggen van een niet- verstoorde uitvoering >overhead bij opname moet laag zijn >tijdens heruitvoering intrusieve analyse Races opsporen
Inhoud Inleiding Parallelle programma´s Doelstelling Gecontroleerde heruitvoering Voorbeeld van dataracedetectie Implementatie Evaluatie Verwant werk Conclusie en eigen bijdragen
Oorzaken van niet-determinisme Alle programma´s: >Invoer: van toetsenbord, netwerk, sensoren,... >Systeemoproepen: date(), random(),... Parallelle programma´s: >Volgorde van geheugenoperaties
Niet-determinisme door geheugentoegangen Ongewild niet- determinisme Gewild niet- determinisme dataracessynchronisatieraces P(S) r C r r+1 C r V(S) P(S) r C r r+1 C r V(S) P(S) r C r r+1 C r V(S) P(S) r C r r+1 C r V(S) A1A1 B 2A B 2C C B+1 B B+C A1A1 B 2A B 2C C B+1 B B+C
Gecontroleerde heruitvoering Gecontroleerde heruitvoering >opname: niet intrusief >heruitvoering: getrouw Geheugenoperaties: leesoperaties moeten terug dezelfde waarde lezen Oplossing: dring terug dezelfde volgorde van alle geheugenoperaties op
Proc1: P(S) r C r r+1 C r V(S) Gecontroleerde heruitvoering: observatiepunten programma hardware kernel libc libthread Proc1: P(S) r C r r+1 C r V(S) P(S)= while (r==0){ r S S 0 }
Gecontroleerde heruitvoering: observatiepunten programma hardware kernel libc libthread Proc1: P(S) r C r r+1 C r V(S)Proc2: P(S) r C r r+1 C r V(S)
Gecontroleerde heruitvoering: observatiepunten programma hardware kernel libc libthread P(S) r C r r+1 C r V(S) P(S) r C r r+1 C r V(S)
Gecontroleerde heruitvoering: observatiepunten programma hardware kernel libc libthread rCrC CrCr P(S) V(S)
Gecontroleerde heruitvoering: observatiepunten programma hardware kernel libc libthread rCrC CrCr P(S) V(S)
Gecontroleerde heruitvoering: observatiepunten programma hardware kernel libc libthread rCrC CrCr P(S) S0S0 r’ S (0) r’ S (1) S0S0 S1S1
Gecontroleerde heruitvoering: observatiepunten programma hardware kernel libc libthread rCrC CrCr S0S0 r’ S (0) r’ S (1) S0S0 S1S1 observatieniveau
Gecontroleerde heruitvoering: observatiepunten programma hardware kernel libc libthread rCrC CrCr S0S0 r’ S (0) r’ S (1) S0S0 S1S1 observatie
Gecontroleerde heruitvoering: observatiepunten programma hardware kernel libc libthread rCrC CrCr P(S) V(S) observatie
Gecontroleerde heruitvoering op twee niveaus Enkel synchronisatieraces heruitvoeren Werkt enkel indien geen dataraces optreden Daarom: testen op dataraces tijdens heruitvoering Voordelen: >lage overhead >onderscheid tussen data- en synchronisatieraces >dataraces kunnen verwijderd worden m.b.v. cyclisch debuggen
Volgorde synchronisatie-operaties ROLT-methode: elke synchronisatie- operatie krijgt een scalaire klokwaarde Opname: bepalen volgorde Eenvoudig, weinig overhead (tijd, ruimte)
Dataracedetectie: heruitvoering Heruitvoeren synchronisatieraces
Dataracedetectie: verzamelen van geheugenoperaties Heruitvoeren synchronisatieraces Testen of er dataraces zijn >alle lees- en schrijfoperaties onderscheppen per segment: verzamelingen L en S
Dataracedetectie: verzamelen van geheugenoperaties Heruitvoeren synchronisatieraces Testen of er dataraces zijn >alle lees- en schrijfoperaties onderscheppen per segment: verzamelingen L en S P(S) a=C a=a+1 C=a V(S) L={C} S={C}
Dataracedetectie: parallelle segmenten Heruitvoeren synchronisatieraces Testen of er dataraces zijn >alle lees- en schrijfoperaties onderscheppen per segment: verzamelingen L en S >verzamelingen van parallelle segmenten vergelijken
Dataracedetectie: parallelle segmenten Heruitvoeren synchronisatieraces Testen of er dataraces zijn >alle lees- en schrijfoperaties onderscheppen per segment: verzamelingen L en S >verzamelingen van parallelle segmenten vergelijken
Dataracedetectie: parallelle segmenten Heruitvoeren synchronisatieraces Testen of er dataraces zijn >alle lees- en schrijfoperaties onderscheppen per segment: verzamelingen L en S >verzamelingen van parallelle segmenten vergelijken V(S) P(S)
Dataracedetectie: vergelijken van parallelle segmenten Heruitvoeren synchronisatieraces Testen of er dataraces zijn >alle lees- en schrijfoperaties onderscheppen per segment: verzamelingen L en S >verzamelingen van parallelle segmenten vergelijken S(s 2 ) ( L(s 2 ) S(s 2 ) ) S(s 1 ) ( L(s 1 ) S(s 1 ) ) S(s 2 )
B2B2 Dataracedetectie: voorbeeld
B2B2 A1A1 C4C4P(S1) Dataracedetectie: voorbeeld
B2B2 A1A1 C4C4P(S1) Dataracedetectie: voorbeeld
B2B2 A1A1 C4C4P(S1) V(S1) Dataracedetectie: voorbeeld
B2B2 A1A1 C4C4P(S1) V(S1) Dataracedetectie: voorbeeld
B2B2 A1A1 C4C4P(S1) V(S1) Dataracedetectie: voorbeeld
B2B2 A1A1 C4C4P(S1) V(S1) C A+B A3A3 V(S2) Dataracedetectie: voorbeeld
B2B2 A1A1 C4C4P(S1) V(S1) C A+B A3A3 V(S2) Dataracedetectie: voorbeeld
B2B2 A1A1 C4C4P(S1) V(S1) C A+B A3A3 V(S2) P(S2) Dataracedetectie: voorbeeld
B2B2 A1A1 C4C4P(S1) V(S1) C A+B A3A3 V(S2) P(S2) Dataracedetectie: voorbeeld
B2B2 A1A1 C4C4P(S1) V(S1) C A+B A3A3 V(S2) P(S2) Dataracedetectie: voorbeeld
B2B2 A1A1 C4C4P(S1) V(S1) C A+B A3A3 V(S2) P(S2) Dataracedetectie: voorbeeld
B2B2 A1A1 C4C4P(S1) V(S1) C A+B A3A3 P(S2) V(S3) V(S2) Dataracedetectie: voorbeeld
B2B2 A1A1 C4C4P(S1) V(S1) C A+B A3A3 P(S2) V(S3) V(S2) Dataracedetectie: voorbeeld
B2B2 A1A1 C4C4P(S1) V(S1) C A+B A3A3 P(S2) V(S3) V(S2) P(S3) Dataracedetectie: voorbeeld
B2B2 A1A1 C4C4P(S1) V(S1) C A+B A3A3 P(S2) V(S3) V(S2) P(S3) Dataracedetectie: voorbeeld
B2B2 A1A1 C4C4P(S1) V(S1) C A+B A3A3 P(S2) V(S3) V(S2) P(S3) Dataracedetectie: voorbeeld
B2B2 A1A1 C4C4P(S1) V(S1) C A+B A3A3 P(S2) V(S3) V(S2) P(S3) Dataracedetectie: voorbeeld
B2B2 A1A1 C4C4P(S1) V(S1) C A+B A3A3 P(S2) V(S3) V(S2) P(S3) Dataracedetectie: voorbeeld
B2B2 A1A1 C4C4P(S1) V(S1) C A+B A3A3 P(S2) V(S3) V(S2) P(S3) Dataracedetectie: voorbeeld
Verwijderen van oude segmenten tijd Aantal segmenten Normaal Logische matrixklok Gespiekte matrixklok
Inhoud Inleiding Parallelle programma´s Doelstelling Gecontroleerde heruitvoering Voorbeeld van dataracedetectie Implementatie Evaluatie Verwant werk Conclusie en eigen bijdragen
Implementatie Detectie parallelle segmenten: vectorklokken Detectie oude segmenten: gespiekte matrixklokken Detectie synchronisatie- en geheugenoperaties: JiTI (Just in Time Instrumentation)
Geheugen
LD [100],r1 JMP LD [4],r0 ADD r0,r1 SUB r1,r0 Geheugen
LD [100],r1 JMP LD [4],r0 ADD r0,r1 SUB r1,r0 Normale programma-uitvoering ADD r0,r1 LD [100],r1 JMP +100 SUB r1,r
LD [100],r1 JMP LD [4],r0 ADD r0,r1 SUB r1,r0 Instrumentatie
LD [100],r1 JMP LD [4],r0 ADD r0,r1 SUB r1,r0 JMP ADD r0,r1 SUB r1,r instrum. LD [4],r0 LD [100],r1 Instrumentatie: klassieke manier ADD r0,r1 instrum. LD [100],r1 JMP +100 instrum.
LD [100],r1 JMP LD [4],r0 ADD r0,r1 SUB r1,r0 Instrumentatie: JiTI LD [100],r1 instrum. JMP... JMP +100 +100 JMP... SUB r1,r0 ADD r0,r1 + ADD r0,r1 JMP +100 SUB r1,r0 ADD r0,r1 JMP +100 SUB r1,r0 LD [4],r0LD [100],r1JMP...
LD [100],r1 JMP LD [4],r0 ADD r0,r1 SUB r1,r0 JMP... JMP +100 +100 JMP... SUB r1,r0 ADD r0,r1 Instrumentatie: JiTI LD [100],r1 instrum. JMP... ADD r0,r1 JMP... instrum. LD [100],r1 JMP... JMP +100 SUB r1,r
Evaluatie Implementatie voor Solaris werd getest op een SUN-multiprocessor met 4 processoren Evaluatie a.d.h.v. SPLASH-benchmark >numerieke applicaties >getest op 4 processoren
Opname >Overhead: gemiddeld 2,1% >Gemiddeld 748 bytes/s (2,5MB/h) of 2,3 bits/operatie
Heruitvoering zonder dataracedetectie >Vertraging: gemiddeld 1,7
Heruitvoering met dataracedetectie Vertraging: 8 à 80 (gemiddeld 30,6) >factor 11,3: detectie van geheugenoperaties >factor 1,7: heruitvoering >factor 1,6: vergelijken van parallelle segmenten Kan automatisch gebeuren Moet slechts éénmaal uitgevoerd worden per uitvoering
Inhoud Inleiding Parallelle programma´s Doelstelling Gecontroleerde heruitvoering Voorbeeld van dataracedetectie Implementatie Evaluatie Verwant werk Conclusie en eigen bijdragen
Verwant werk Savage et al (Eraser): >enkel voor mutexoperaties, detecteert anders valse dataraces >vertraging: factor 10 à 30 Perkovic & Keleher >CVM met mutex- en semafooroperaties >vertraging: factor 2 à 2,5 Beide: >detectie tijdens originele uitvoering >racende instructies kunnen niet bepaald worden
Conclusie Gecontroleerde heruitvoering op twee niveaus heeft voordelen: >enkel synchronisatieraces heruitvoeren efficiënte opname >automatische en intrusieve dataracedetectie is mogelijk
Belangrijkste eigen bijdragen Concept van gecontroleerde heruitvoering op twee niveaus Instrumentatietool: JiTI Beperking van geheugenverbruik tijdens dataracedetectie