60
Assembly Instruction Level Reverse Execution for Debugging PhD Dissertation Defense by Tankut Akgul Advisor: Vincent J. Mooney School of Electrical and Computer Engineering Georgia Institute of Technology March 2004

Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

  • Upload
    others

  • View
    24

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

Assembly Instruction Level Reverse Execution for Debugging

PhD Dissertation Defenseby

Tankut Akgul

Advisor: Vincent J. Mooney

School of Electrical and Computer EngineeringGeorgia Institute of Technology

March 2004

Page 2: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

2

OutlineBackground

Reverse ExecutionDefinitionPrevious Work

Reverse Execution Methodology

Program SlicingDefinitionPrevious Work

Program Slicing Methodology

Experimental Results

Page 3: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

3

Background

Debugging is a repetitive process!

Detect an error

Restart the program

Determine the bug

location(s)

Error-free program

Remove the bug(s) and

recompile the program

Start the program

Page 4: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

4

OutlineBackground

Reverse ExecutionDefinitionPrevious Work

Reverse Execution Methodology

Program SlicingDefinitionPrevious Work

Program Slicing Methodology

Experimental Results

Page 5: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

5

Definition of Reverse Execution

Reverse execution: Taking a program T from its current state Si to a previous state Sj

Source code level reverse execution: Reverse execution where Sj can be as early as one source code statement before state Si

Instruction level reverse execution: Reverse execution where Sj can be as early as one assembly instruction before state Si

Page 6: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

6

Previous Work

DebuggingOptimistic SimulationsDatabase ApplicationsInteractive Systems

EditorsProgram development environments

Page 7: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

7

Previous Work in Reverse Execution

Restore earlier statePeriodic checkpointingIncremental checkpointing

Regenerate part of earlier stateSource transformation

Build a reversible processor with reversible circuit elements (Pendulum)

Page 8: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

8

Previous Work in Reverse Execution

12KB 12KB+ = 60KBMemory usage for state saving: 12KB + 12KB + + 12KB

8KB 4KB+ = 24KBMemory usage for state saving: 4KB + 4KB + + 4KB

Periodic Periodic checkpointingcheckpointing::

Incremental Incremental checkpointingcheckpointing::

= 4KB

Page 9: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

9

Previous Work in Reverse Execution

Sample () {int x, y;y = 0;x += 10;if (x > 15)

y++;else

y--;}

Source Transformation:Source Transformation:

Source code

Sample () {int x, y;save y;y = 0;x += 10;if (x > 15) {

b = 0;y++;

} else {b = 1;y--;

}}

Transformed code

Sample_rev () {int x, y;if (b == 0)

y--;else

y++;x -= 10;restore y;

}Reverse code

State saved for each destructive operation

Destructive operation: An operation whose target operand is different than its source operands

C. Carothers, K. Perumalla and R. Fujimoto, “Efficient Optimistic Parallel Simulations using Reverse Computation,” in Proceedings of ACM/IEEE/SCS Workshop on Parallel and DistributedSimulation (PADS), Atlanta, USA, May 1999.

Page 10: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

10

Previous Work in Reverse Execution

Heavy use of state saving

State saving = memory and timeoverheads during forward execution

No direct instruction level reverse execution support

Page 11: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

11

OutlineBackground

Reverse ExecutionDefinitionPrevious Work

Reverse Execution Methodology

Program SlicingDefinitionPrevious Work

Program Slicing Methodology

Experimental Results

Page 12: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

12

Reverse Execution Methodology

Assumptions:Assumptions:State that cannot be modified directly does not include debugging information

E.g., condition status register

Physical memory is treated as a uniform entity Exact physical memory state is not preservedE.g., a value not in cache can be brought into cache after recovery

Sequential execution modelIndirect calls are made to well-defined target points

Page 13: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

13

Reverse Execution MethodologyWe define the state of a processor as follows:

S = ( PC , M' , R' )PC : program counterM' : directly modified memory valuesR' : directly modified register values

In order to reverse execute a program, do the following:

Construct a reverse program RT for an input program TRecover M' and R' by executing RT in place of TRecover the program counter value by using the correspondence between T and RT

Page 14: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

14

Reverse Execution Methodology

Reverse Code Generation (RCG) steps:

1. Divide the original program into program partitions2. Generate the reverse of the instructions. The reverse of

an instruction is called a Reverse Instruction Group(RIG)

3. Combine the RIGs3.a Combine the RIGs to generate the reverse of each

basic block (RBB)3.b Combine the RBBs to generate the reverse of each

partition3.c Combine the reverse partitions to generate the

reverse of whole program

Page 15: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

15

Reverse Execution Methodology

Partition the input program while constructing a call graph

Read an instruction α from current partition

Generate a RIG for α

Build a modified value graph for current partition

end of BB?

end of partition?

end of program?

Connect the RBB to reverse program

Connect the reverse partition to reverse program, go to next partition

YN

YN

endY

N

start

Page 16: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

16

Step 1: Program Partitioning

Partitions are regions of code delimited by “function call” or “indirect branch” instructions that may exist within the original code

e.g., in PowerPC instruction set:bl : function call instructionblr : branch to link register instruction (indirect)

Page 17: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

17

Step1: Program Partitioningfirst partition

of main

second partition of main

single partition of foo

main:li r3,0x5bl fooaddi r12, r12, 1blr

foo:li r11, 3ori r12, r3, 15divw r10, r3, r11cmpwi r10, 100bg L1sub r11, r3, r12b L2

L1: addi r12, r10, 1sub r11, r12, r3

L2: mullw r12, r11, r10blr

main:li r3,0x5bl fooaddi r12, r12, 1blr

foo:li r11, 3ori r12, r3, 15divw r10, r3, r11cmpwi r10, 100bg L1sub r11, r3, r12b L2

L1: addi r12, r10, 1sub r11, r12, r3

L2: mullw r12, r11, r10blr

Page 18: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

18

Methodology (Continued)

Reverse Code Generation (RCG) steps:

1. Divide the program into program partitions (single entry-single exit regions).

2. Generate the reverse of the instructions. The reverse of an instruction is called a Reverse Instruction Group(RIG)

3. Combine the RIGs3.a Combine the RIGs to generate the reverse of each

basic block (RBB)3.b Combine the RBBs to generate the reverse of each

partition3.c Combine the reverse partitions to generate the

reverse of whole program

Page 19: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

19

Step 2: RIG Generation

Three techniques to generate a RIG:

1. Re-define technique

2. Extract-from-use technique

3. State saving technique

Page 20: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

20

start

Step 2: RIG Generation (Cont.)

exit

r1 = r2 + r3

r4 = r1 + r3

r1 = r2 - 4

r1 = r2

r2 < 0

PP

Find the definitions of r1 reaching PPRecover r1 by selectively re-executingthe found definitions or by selectively extracting the found definitions out of later uses of those definitions

α

false true

if r2 < 0r1 = r4 – r3 r1 = r2

r1 = r2 + r3

elseRIG for α : or

Extract-from-use Re-define

Page 21: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

21

start

Step2: RIG Generation (Cont.)

r13 = Φ(r1

1,r12)

exit

Rename ValuesGenerate a directed graph called modified value graph (MVG)

r1 = r2 + r3

r4 = r1 + r3

r1 = r2 - 4

r1 = r2

r2 < 0

PP

PP''

Find the definition of r1 reaching PP

r11

r20 r3

0

r12

r40

r41

r13

r10

r14

r 20 < 0 r2 0 ≥ 0Φ

Recover r1 using available nodes at PP''

r1 = r4 – r3

if r2 < 0r1 = r2

r1 = r2 + r3

elseRIG for α : or

α

r11 r1

2

r14

r41

Select operator

false true

+

+

Page 22: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

22

Methodology (Continued)

Three steps to generate a complete reverse program:

1. Divide the program into program partitions (single entry-single exit regions).

2. Generate the reverse of the instructions. The reverse of an instruction is called a Reverse Instruction Group(RIG)

3. Combine the RIGs3.a Combine the RIGs to generate the reverse of each

basic block (RBB)3.b Combine the RBBs to generate the reverse of each

partition3.c Combine the reverse partitions to generate the

reverse of whole program

Page 23: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

23

Step 3.a: Constructing the RBBs

i1i2

i3i4

i5i6i7

BB1

BB2 BB3

BB4

RIG2RBB1

RIG1

RIG4RBB2

RIG3

RIG7RBB3

RIG6

RIG8RBB4

RIG5

Bottom-up placement order within BBs

i8

Page 24: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

24

Step 3.b: Combining the RBBs

start

exit

α2

α3α4

α5α6

α8 α7

α9

?

?

?α1BB1

BB2 BB3

BB4

BB: Basic Block

BB6

start

exit

RIG9RBB6

RBB5 RBB4

RBB3RBB2

RBB1

RIG7 RIG8

RIG4RIG3

RIG6RIG5

RIG2RIG1

cb

cb

cb

RBB: Reverse of a BBcb: Conditional branch

BB5

Page 25: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

25

Step 3.c: Combining the Reverse Partitions

m1 g1

h

g2m2

end

start

A0

A0

A2A2

A2

A4

A3

A3

A1

mm11

mm22

gg11

gg22

hh

A0

A2

A1

A3

A4

main:cmp r1, r2bl g; // call g

…blr // return

g: …mtlr r0 // set a func. ptr.bclrl // call by the func. ptr.

…blr // return

h:…blr // return

Push addresses on the dynamically taken edges into stackPop the addresses from stack during reverse execution and branch to reverses of popped addresses

A2A2

Page 26: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

26

Recovering the Program Counter

Input Input ProgramProgram

0x0 0x4000

0x4 0x3FFC

0x8 0x3FE0

… …

Input Input instruction instruction

addressaddress

RIG RIG addressaddress

Designates the entry point into the reverse program for every instruction in the input program

Program being debugged

Reverse of the input program

RCG algorithm

ReverseReverseProgramProgram

InversionInversionTableTable

Page 27: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

27

ComplexityN : number of nodes in an MVG ≅ # of

assembly instructions in a code M : average degree of a node (# of

neighbors)K : maximum number of repetitive

applications of re-define and extract-from-use techniques allowed

M is independent of total code size for fixed partition size

Complexity = O(N×MK)

On a 1 GHz CPU, 1 iteration ≅ 1 nsec

N = 1,000,000, M = 10, K = 3 1 sec

Byte Recover (Node n){

if (n.available == true) return true;

∀m ∈ children(n) do {stat = Recover(m);

if stat != availablebreak;

}∀m ∈ parents(n) do {

stat = Recover(m);if (stat == available) {

∀z ∈ siblings(n) do {stat = Recover(z);if (stat != available)

break;}

}if (stat == available)

break;}Write_RIG();

}

Page 28: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

28

OutlineBackground

Reverse ExecutionDefinitionPrevious Work

Reverse Execution Methodology

Program SlicingDefinitionPrevious Work

Program Slicing Methodology

Experimental Results

Page 29: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

29

Program SlicingStatic SliceStatic Slice: A set of program statements that may influence a variable V at statement S.

C = (V, S) is a static slicing criterion.

Dynamic SliceDynamic Slice: A set of program statements that influence a variable V at an execution instance q of statement S given a set of program inputs X.

C = (X, V, Sq) is a dynamic slicing criterion.

Page 30: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

30

Program SlicingTwo ways to influence a variable:

Data dependencyy = z;x = y + 1;x is data dependent on y and z

Control dependencyif (y < 0)

x = 1;x is control dependent on y

A slice is a set of all statements that compute dependencies of a variable

Page 31: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

31

Program SlicingPass = 0 ;Fail = 0 ;Count = 0 ;while (!eof()) {

TotalMarks=0;scanf("%d",Marks);if (Marks >= 40)

Pass = Pass + 1;if (Marks < 40)

Fail = Fail + 1;Count = Count + 1;TotalMarks = TotalMarks+Marks ;

}average = TotalMarks/Count;/* This is the point of interest */printf("The average is %d\n",average) ;PassRate = Pass/Count*100 ;printf(“Pass rate is %d\n",PassRate) ;

while (!eof()) {TotalMarks=0;scanf("%d",Marks);Count = Count + 1;TotalMarks = TotalMarks+Marks;

}average = TotalMarks/Count;printf("The average is %d\n",average) ;

Original ProgramOriginal Program

Slice Slice w.r.tw.r.t. “. “averageaverage””

Example is taken from Prof. Mark Harman’s webpage at http://www.brunel.ac.uk/~csstmmh2/exe1.html

Page 32: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

32

Previous Work in Program SlicingStatic Slicing (Weiser)

Control flow graph analysisNo runtime information

Static Slicing (Ottenstein et al.)Program dependency graph analysisNo runtime information

Dynamic Slicing (Korel and Laski)Control flow graph analysisProgram execution trajectory

Dynamic Slicing (Agrawal et al.)Dynamic dependence graph (DDG) analysisProgram execution trajectory

Page 33: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

33

OutlineBackground

Reverse ExecutionDefinitionPrevious Work

Reverse Execution Methodology

Program SlicingDefinitionPrevious Work

Program Slicing Methodology

Experimental Results

Page 34: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

34

RCG with Slicing (RCGS)

Reverse executionalong a

dynamic slice

Dynamic slicingtable

Global MVG

Reducedreverse program

Input program

Reverse program

Green arrows indicate the actions performed by the debugger

Orange arrows indicate the base static analysis performed only once per programBlue arrows indicate the extended static analysis performed for each dynamic slice

Full-scale reverse execution

Forwardexecution

local MVGs

Page 35: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

35

Contributions of RCGS

Reverse execution along a dynamic sliceFaster reverse execution

No complete execution trajectory is requiredLess runtime memory usage

Not only reveals dynamic slice instructions but also obtains runtime values of variables

More efficient debugging

Page 36: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

36

Reverse Execution Along a Dynamic Slice

stw %r0,0x4(%r1)li %r8,0x64li %r10,0x1ori %r12,%r10,0x0li %r11,0x1

cmpw %r8,%r11blt- 0x1000c0

add %r9,%r12,%r10ori %r10,%r12,0x0ori %r12,%r9,0x0addi %r11,%r11,0x1b 0x1000a4

bclr 0x14,0x0

Determine data dependencies statically

Determine control flow dynamically

Merge static information with dynamic information to reverse execute along the dynamic slice

Page 37: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

37

Generation of a Reduced Reverse Program

Page 38: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

38

Experimentation Platform

Background Debug Mode (BDM) Interface

PCWindows 2000

MBX860MPC860 processor

4MB DRAM, 2MB Flash RTC, four 16-bit timers, watchdog

Page 39: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

39

Comparisons

Reverse Execution with Incremental State Saving (ISS)

Save state before each instructionReverse Execution with Incremental State Saving for Destructive Instructions (ISSDI)

Save state before each destructive instruction

Reverse Execution with RCG

Page 40: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

40

Benchmarks

4636LZW

6908ADPCM encoder

3308Matrix multiply

3104Selection sort

Executable object size (bytes)Executable object size (bytes)BenchmarkBenchmark

ADPCM: Adaptive Differential Pulse Code ModulationLZW: Lempel Ziv Welch

Page 41: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

41

Benchmarks

194,451,339LZW (16KB input data)16,063,096LZW (4KB input data)

1,380,413LZW (1KB input data)

1,496,649ADPCM (128KB input data)751,280ADPCM (64KB input data)378,294ADPCM (32KB input data)

457,183,831Matrix multiply (400x400)472,044Matrix multiply (40x40)

650Matrix multiply (4x4)

198,539,130Selection sort (10000 inputs)2,000,202Selection sort (1000 inputs)

21,187Selection sort (100 inputs)

Raw Execution Time Raw Execution Time ((decrementerdecrementer ticks)ticks)BenchmarkBenchmark

1 tick = 0.4 microseconds on MBX860

Page 42: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

42

Experiment 1

Instrument each benchmark with state saving instructions at appropriate points for ISS, ISSDI and RCGForward execute each instrumented benchmark from the beginning until the endMeasure forward execution times

Page 43: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

43

Instrumented Forward Execution Time

ISS: Incremental State Saving, ISSDI: Incremental State Saving for Destructive Instructions

1.31X1.53X288077045378614957439424024LZW (16KB input data)

1.34X1.52X238132303194283836319691LZW (4KB input data)

1.31X1.52X205465726992873126206LZW (1KB input data)

1.20X1.31X246423229505623223166ADPCM (128KB input data)

1.20X1.31X123211014752761611572ADPCM (64KB input data)

1.20X1.31X616101737720805972ADPCM (32KB input data)

1.90X2.32X4586916378705399811064415269Matrix multiply (400x400)

1.88X2.29X4762438957031092872Matrix multiply (40x40)

1.70X2.02X70811971432Matrix multiply (4x4)

1.27X1.40X280677488356208073394063091Selection sort (10000 inputs)

1.27X1.40X284102935952133979802Selection sort (1000 inputs)

1.24X1.38X311133849642984Selection sort (100 inputs)

ISSDI/ISSDI/RCGRCG

ISS/ISS/RCGRCGRCGRCGISSDIISSDIISSISSBenchmarkBenchmark

Page 44: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

44

Forward Execution Time Overhead98.4898.97102.88

79.4181.70 79.74

41.3742.0446.90

0.00

20.00

40.00

60.00

80.00

100.00

120.00

Selection Sort(100)

Selection Sort(1000)

Selection Sort(10000)

ISS

ISSDI

RCG

% O

verh

ead

120.31131.52 132.82

84.1590.4189.75

0.330.898.920.00

20.0040.0060.0080.00

100.00120.00140.00

Matrix Multiply(4x4)

Matrix Multiply(40x40)

Matrix Multiply(400x400)

ISS

ISSDI

RCG

126.47 126.11 125.98

95.54 94.7198.86

48.84 48.1548.25

0.00

20.00

40.00

60.00

80.00

100.00

120.00

140.00

LZW (1KB) LZW (4KB) LZW (16KB)

ISS

ISSDI

RCG

115.36114.51113.05

96.37 97.1495.01

64.00 64.6562.86

0.0020.0040.0060.0080.00

100.00120.00140.00

ADPCM(32KB)

ADPCM(64KB)

ADPCM(128KB)

ISS

ISSDI

RCG

% O

verh

ead

% O

verh

ead

% O

verh

ead

instrumented execution time – raw execution timeraw execution time

Overhead =

Page 45: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

45

Experiment 2

Reverse execute each benchmark from the end until the beginning (by executing the reverse versions)

Measure reverse execution times

Page 46: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

46

Reverse Execution TimeISSDI/ISSDI/RCGRCG

ISS/ISS/RCGRCGRCGRCGISSDIISSDIISSISSBenchmarkBenchmark

0.74X0.78X367192713728724Selection sort (100 inputs)

--3516414--Selection sort (1000 inputs)

-----Selection sort (10000 inputs)

0.60X0.66X1325784880Matrix multiply (4x4)

0.53X0.61X1088827578556660189Matrix multiply (40x40)

--1070219421--Matrix multiply (400x400)

0.82X0.86X765036628958656702ADPCM (32KB input data)

0.82X-15288071257770-ADPCM (64KB input data)

--3057176--ADPCM (128KB input data)

--2619106--LZW (1KB input data)

--30596864--LZW (4KB input data)

--371045637--LZW (16KB input data)

Page 47: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

47

Experiment 3

Forward execute each instrumented benchmark from the beginning until the end

Measure memory usage for state saving

Page 48: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

48

Memory Usage for State Saving

354X589X1331471140784336LZW (16KB input data)

112X185X3513916364970LZW (4KB input data)

35X57X98.434255630LZW (1KB input data)

2X2.5X246447676175ADPCM (128KB input data)

2X2.5X123223843088ADPCM (64KB input data)

2X2.5X61611921544ADPCM (32KB input data)

1404X2206X125017550062756883Matrix multiply (400x400)

143X224X12.618012820Matrix multiply (40x40)

14X21X0.172.353.6Matrix multiply (4x4)

55X82X7237397913593389Selection sort (10000 inputs)

27X40X15140656032Selection sort (1000 inputs)

6.3X9X7.546.968.2Selection sort (100 inputs)

ISSDI /RCG

ISS /RCG

RCG (KB)

ISSDI (KB)

ISS (KB)

Page 49: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

49

Experiment 4

Forward execute original 400x400 matrix multiply from the beginning to various intermediate points and measure the execution timesReverse execute 400x400 matrix multiply using RCG from the end to various intermediate points and measure reverse execution times

Page 50: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

50

Program Re-execute Approach vs. RCG

0

100

200

300

400

500

0 100 200 300 400

Outermost loop iteration count

Tim

e (s

econ

ds)

Forward execution Reverse execution via RCG

400x400 matrix multiplystarting point for reverse execution

starting point for forward execution

Page 51: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

51

Experiment 5

Extract three slices for each benchmark Reverse execute each benchmark fully starting from end of each slice until beginning of each sliceReverse execute each benchmark along computed slices onlyMeasure the reverse execution times

Page 52: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

52

Full-scale Reverse Execution vs. Reverse Execution Along a Slice

356.5

189.5

522.5

12 10 70

100200300400500600

slice1 slice2 slice3

time

(mic

rose

cond

s)

141.5

83

202.5

40.572

106

0

50

100

150

200

250

slice1 slice2 slice3

time

(mic

rose

cond

s)

1.441.13

0.831.1 0.90.6

0.0

0.5

1.0

1.5

2.0

slice1 slice2 slice3

time

(sec

onds

)

1.96

54.22

114.34

0.719.8

40.5

0.020.040.060.080.0

100.0120.0140.0

slice1 slice2 slice3

time

(sec

onds

)

Selection Sort (10 inputs) Matrix Multiply (4x4)

ADPCM Encoder (128KB input)

LZW (128KB input)

full reverse execution reverse execution along a dynamic slice

Page 53: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

53

Full-scale Reverse Execution vs. Reverse Execution Along a Slice

3.56E+02

2.72E+05

2.68E+08

1.41E+021.63E+019.67E+00

1.00E+001.00E+011.00E+021.00E+031.00E+041.00E+051.00E+061.00E+071.00E+081.00E+09

4x4 multiply 40x40 multiply 400x400 multiply

time

(mic

rose

cond

s)

full reverse execution reverse execution along the dynamic slice

1.42E+02

1.33E+04

1.30E+06 6.54E+05

6.71E+03

7.28E+01

1.00E+001.00E+011.00E+021.00E+031.00E+041.00E+051.00E+061.00E+07

10 integers 100 integers 1000 integerstime

(mic

rose

cond

s)

Matrix Multiply

Selection Sort

Page 54: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

54

Experiment 6

Extract three slices for each benchmarkMeasure average runtime memory requirement for reverse execution along three slices with RCGS Measure average runtime memory requirement for reverse execution along three slices with ISS plus execution trajectory (ET) approach

Page 55: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

55

Runtime Memory Requirements

1984

140

140

0

500

1000

1500

2000

2500

RCGS ISS+ET

byte

s

680

113

230

0

200

400

600

800

1000

RCGS ISS+ET

byte

s

5542

870

1694

01000200030004000500060007000

RCGS ISS+ET

kilo

byte

s

94

0.1

1.0

10.0

100.0

1000.0

RCGS ISS+ETm

egab

ytes

2350.6

Selection Sort (10 inputs) Matrix Multiply (4x4)

ADPCM Encoder (128KB input)

LZW (128KB input)

RCGS: RCG with Slicing ET: Execution Trajectory

RCGS memory usage ISS memory usage ET memory usage

Page 56: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

56

Reverse Debugger

Execute forward Step forward Execute backward Step backward

Memory window

Breakpoint window

Register window

Source window

Page 57: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

57

Reverse Debugger

19Number of files

~7000Number of C lines

Reverse Debugger Code SpecsReverse Debugger Code Specs

Page 58: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

58

Conclusion

Reduced debugging time with localized re-executionsVery low time and memory overheads in forward execution by using reverse codeReverse execution up to an assembly instruction level granularityDynamic slicing support to speed up reverse execution without execution trajectory requirement

Page 59: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

59

PublicationsT. Akgul, V. J. Mooney and S. Pande, “A Fast Assembly Level Reverse Execution Method via Dynamic Slicing,” accepted for publication inProceedings of the 26th International Conference on Software Engineering(ICSE'04), May 2004.T. Akgul and V. J. Mooney, “Assembly Instruction Level Reverse Execution for Debugging,” submitted to Transactions on Software Engineering and Methodology (TOSEM) on December 2002, accepted with minor revision.T. Akgul and V. J. Mooney, “Instruction-level Reverse Execution for Debugging,” Proceedings of the Workshop on Program Analysis for Software Tools and Engineering (PASTE'02), pp. 18-25, November 2002.T. Akgul and V. J. Mooney, “Instruction-level Reverse Execution for Debugging,” Technical Report GIT-CC-02-49, September 2002.http://codesign.ece.gatech.edu/publications/index.htmT. Akgul, P. Kuacharoen, V. Mooney and V. Madisetti, "A Debugger RTOS for Embedded Systems," Proceedings of the 27th EUROMICRO Conference(EUROMICRO'01), pp. 264-269, September 2001. P. Kuacharoen, T. Akgul, V. Mooney and V. Madisetti, "Adaptability, Extensibility, and Flexibility in Real-Time Operating Systems," Proceedings of the EUROMICRO Symposium on Digital Systems Design (EUROMICRO'01), pp. 400-405, September 2001. T. Akgul, P. Kuacharoen, V. J. Mooney and V. K. Madisetti, “A Debugger Operating System for Embedded Systems,'' U.S. Patent Application, no. 20030074650, April 17, 2003.P. Kuacharoen, T. Akgul, V. J. Mooney and V. K. Madisetti, “A Dynamic Operating System,'' U.S. Patent Application, no. 20030074487, April 17, 2003.

Page 60: Assembly Instruction Level Reverse Execution for Debuggingmooney.gatech.edu/codesign/publications/tankut/... · {Instruction level reverse execution: Reverse execution where S j can

60

Thank you!Thank you!