pointer and escape analysis for (multithreaded) programs martin rinard mit laboratory for computer...

Post on 18-Jan-2018

225 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Modern Escape Analysis Region of Program Procedure Thread Group of Threads Multiple-Entry Component Dynamically allocated objects Is object “captured” within region?

TRANSCRIPT

Pointer and Escape Analysis for (Multithreaded) Programs

Martin RinardMIT Laboratory for Computer Science

Traditional Escape Analysis• Procedures• Dynamically allocated objects• Does an object escape the allocating

procedure?• Is the lifetime of object contained in

lifetime of procedure?• If so, can stack allocate object

• Sequential programs

Modern Escape Analysis• Region of Program

• Procedure• Thread• Group of Threads• Multiple-Entry Component

• Dynamically allocated objects• Is object “captured” within region?

Uses of Escape Information• Negative Interaction Information• Past: Traditional Compiler Optimizations

• Stack Allocation• Synchronization Elimination• Variety of Dynamic Check Eliminations

Foundation for Interaction Analyses

• Systems built from groups of reconfigurable components

• Important to understand interactions• Safety of composition• Transform to enhance fast reconfiguration,

fault-tolerance, predictability, performance• Escape analysis focuses interaction analyses

• Eliminates host of potential interactions• Cuts away large parts of program• Enables use of more powerful interaction

analyses

Importance of Interaction Analysis

• Need a global information about properties of potential component compositions• Interaction patterns• Inter-component dependences• Theme: see across component boundaries

• Payoff• Information about behavior of potential

composed systems• Customized implementations• Functionality-improving transformations

• Reduce vulnerability to failures• Improve adaptation response times

Key Requirements• Rapid reconfiguration, adaptability,

customization• Huge range of potential customized

combinations• Envisioned large-scale transformations

impractical to perform manually• Need to automate interaction analysis and

subsequent transformations• Distributed systems inherently concurrent

• Analyze multithreaded programs• Characterize and exploit interactions between

threads

Outline• Combined Pointer and Escape Analysis

• Sequential Programs• Multithreaded Programs

• Implementation in Flex Compiler• Experimental Results

Points-to Escape Graph in Example

vector elementData [ ]

this

enum

e

dotted = outsidesolid = inside

void computeMax() { int max = 0;Enumeration enum = database.elements();while (enum.hasMoreElements()) { Employee e = enum.nextElement();if (max < e.salary()) { max = e.salary(); highestPaid = e; }}

}

database highestPaid

Definitions: node types

• NI = inside nodes• represent objects created within the

computation of the method• one inside node for each object creation

site; represents all objects created at site• NO = outside nodes

• represent objects created outside of the computation of the method

Definitions: outside node typesNP = parameter nodes

represent objects passed as incoming parameters

NL = load nodesone load node for each load statement in methodrepresents objects loaded from an escaped node

NCL = class nodesnode from which static variables are accessed

Points-to Escape Graph in Example

vector elementData [ ]

this

enum

e

dotted = outsidesolid = inside

void computeMax() { int max = 0;Enumeration enum = database.elements();while (enum.hasMoreElements()) { Employee e = enum.nextElement();if (max < e.salary()) { max = e.salary(); highestPaid = e; }}

}

database highestPaid

Points-to Escape Graph in Example

red = escapedwhite = captured

void computeMax() { int max = 0;Enumeration enum = database.elements();while (enum.hasMoreElements()) { Employee e = enum.nextElement();if (max < e.salary()) { max = e.salary(); highestPaid = e; }}

} dotted = outsidesolid = insidevector elementData [ ]

this

enum

e

database highestPaid

Escaped nodes• Escaped nodes

• parameter nodes• class nodes• thread nodes• nodes in return set• nodes reachable from other escaped

nodes• captured is the opposite of escaped

Dataflow Analysis• Computes a points-to escape graph for

each program point• Points-to escape graph is a triple

<I,O,e>• I - set of inside edges• O - set of outside edges• e - escape function

Dataflow Analysis• Initial state:

I : formals point to parameter nodes,

classes point to class nodesO: Ø

• Transfer functions:I´ = (I – KillI ) U GenI

O´ = O U GenO

• Confluence operator is U

Intraprocedural Analysis• Must define transfer functions for:

• copy statement l = v• load statement l1 = l2.f• store statement l1.f = l2

• return statement return l• object creation site l = new cl• method invocation l = l0.op(l1…lk)

copy statement l = vKillI = edges(I, l)GenI = {l} × succ(I, v)I´ = (I – KillI ) GenI

l

v

Existing edges

copy statement l = vKillI = edges(I, l)GenI = {l} × succ(I, v)I´ = (I – KillI ) GenI

Generated edges

l

v

load statement l1 = l2.fSE = {n2 succ(I, l2) . escaped(n2)}SI = {succ(I, n2,.f) . n2 succ(I, l2)}case 1: l2 does not point to an escaped node (SE = Ø)

KillI = edges(I, l1)GenI = {l1} × SI

l1

l2

Existing edges

f

load statement l1 = l2.fSE = {n2 succ(I, l2) . escaped(n2)}SI = {succ(I, n2,.f) . n2 succ(I, l2)}case 1: l2 does not point to an escaped node (SE = Ø)

KillI = edges(I, l1)GenI = {l1} × SI

Generated edges

l1

l2

f

load statement l1 = l2.fcase 2: l2 does point to an escaped node (SE Ø)

KillI = edges(I, l1)GenI = {l1} × (SI {n})GenO = (SE × {f}) × {n}

l1

l2

Existing edges

load statement l1 = l2.fcase 2: l2 does point to an escaped node (SE Ø)

KillI = edges(I, l1)GenI = {l1} × (SI {n})GenO = (SE × {f}) × {n}

Generated edges

l1

l2

f

store statement l1.f = l2

GenI = (succ(I, l1) × {f}) × succ(I, l2)I´ = I GenI

l2

Existing edges

l1

store statement l1.f = l2

GenI = (succ(I, l1) × {f}) × succ(I, l2)I´ = I GenI

Generated edges

l2

l1f

object creation site l = new clKillI = edges(I, l)GenI = {<l, n>}

l

Existing edges

object creation site l = new clKillI = edges(I, l)GenI = {<l, n>}

Generated edges

l

Method call• Transfer function for method call:

• Take points-to escape graph before the call site

• Retrieve the points-to escape graph from analysis of callee

• Map callee graph into caller graph• Result is the points-to escape graph

after the call site

Interprocedural Mapping• Set up a mapping between caller and

callee• outside nodes in the callee may refer

to any number of inside nodes in the caller

• add all reachable inside edges from callee’s graph into caller’s graph

• outside edges from a node in the callee need to be added to the mapped caller node if it escapes

Interprocedural Mapping Examplevoid printStatistics() {

BufferedReader r = new BufferedReader(new InputStreamReader(System.in));

EmployeeDatabase e = new EmployeeDatabase(r);e.computeMax();System.out.println(“max salary = “ + e.highestPaid);

}

Interprocedural Mapping Example

egraph before call site

elementData [ ]database

void printStatistics() {BufferedReader r = new BufferedReader(

new InputStreamReader(System.in));EmployeeDatabase e = new EmployeeDatabase(r);e.computeMax();System.out.println(“max salary = “ + e.highestPaid);

}

Interprocedural Mapping Example

callee graph

graph before call site

Enum object is not present because it was captured in the callee.

elementData [ ]this database

e elementData [ ]database

void printStatistics() {BufferedReader r = new BufferedReader(

new InputStreamReader(System.in));EmployeeDatabase e = new EmployeeDatabase(r);e.computeMax();System.out.println(“max salary = “ + e.highestPaid);

}

highestPaid

Step 1: Map formals to actuals

graph before call site

e elementData [ ]database

void printStatistics() {BufferedReader r = new BufferedReader(

new InputStreamReader(System.in));EmployeeDatabase e = new EmployeeDatabase(r);e.computeMax();System.out.println(“max salary = “ + e.highestPaid);

}

callee graph

elementData [ ]this database

highestPaid

Step 2: Match edges to extend mapping

graph before call site

e elementData [ ]database

void printStatistics() {BufferedReader r = new BufferedReader(

new InputStreamReader(System.in));EmployeeDatabase e = new EmployeeDatabase(r);e.computeMax();System.out.println(“max salary = “ + e.highestPaid);

}

callee graph

elementData [ ]this database

highestPaid

graph before call site

e elementData [ ]database

callee graph

elementData [ ]this database

highestPaid

Step 3: Map nodes and edges to construct new graph

graph after

call sitee elementData [ ]database

highestPaid

Key Feature• Even if an object escapes one method• Often possible to recapture object in

caller methods• Common in practice

• Iterators• Objects that hold multiple return

values

Life is not so Simple• Dependences between phases• Mapping best framed as constraint

satisfaction problem• Solved using constraint satisfaction

Algorithm Features• Compositional

• Analyze each method once• Obtain parameterized result• Reuse result at different call sites• Independent preanalysis of libraries

• Partial• Can analyze method without analyzing

methods it invokes• Useful if not all code available in

analyzable form

Incrementalized Analysis• Compositional + Partial Enables

Incrementalization• Choose object to attempt to capture• Analyze method containing allocation site• Track where object escapes

• Specific call sites• Caller

• Incrementally analyze only those parts• Usual Result

• Significant reduction in analysis time• Almost all benefit of full analysis

Key Limitation (so far)• No analysis of interactions between

threads• Objects that escape from allocating

thread are NEVER recaptured• Solution: extend algorithm to analyze

interactions between threads• Challenge: avoid analyzing all

interleavings of statements from parallel threads

Interactions Between Threadsba dcHeap

Interactions Between Threadsba dcHeap

White Thread Yellow Thread

Interactions Between Threadsba dcHeap

White Thread

a.f = b;

Yellow Thread

Interactions Between Threadsba dcHeap

White Thread

a.f = b;t = a.f;

Yellow Threadt

Interactions Between Threadsba dcHeap

White Thread

a.f = b;t = a.f;t.f = c;

Yellow Threadt

Interactions Between Threadsba dcHeap

White Thread

a.f = b;

p = b.f;

t = a.f;t.f = c;

Yellow Threadp

Interactions Between Threadsba dcHeap

White Thread

a.f = b;

p = b.f;p.f = d;

t = a.f;t.f = c;

Yellow Threadp

Interactions Between Threadsba dcHeap

White Thread

a.f = b;

p = b.f;p.f = d;

t = a.f;t.f = c;

Yellow Thread

Important Properties• Result Depends on Specific Interleaving

• Analyze all Interleavings?• Iterate Across Threads to Fixed Point?

Important Properties• Result Depends on Specific Interleaving

• Analyze all Interleavings?• Iterate Across Threads to Fixed Point?

• Analyze Each Thread Once • Parameterized Analysis Result• Characterizes All Potential Interactions

• Combine Analysis Results From Different Threads to Compute Actual Interactions

• Compositional Analysis

Our Approach• Build Points-To Escape Graph• Result Characterizes Potential

Interactions• Inside Edges - Represent References Created

By Currently Analyzed Thread • Outside Edges - Represent References

Created By Parallel Threads• Inside Nodes - Represent Objects Created By

Current Analyzed Thread• Outside Nodes - Represent Objects Accessed

Via Outside Edges

Analysis of Each Thread

t = a.f;t.f = c;

Yellow Thread

Analysis Resultfor Yellow Thread

Analysis Resultfor White Thread

White Thread

a.f = b;

p = b.f;p.f = d;

ba

Analysis of Each Thread

t = a.f;t.f = c;

Yellow Thread

Analysis Resultfor Yellow Thread

Analysis Resultfor White Thread

White Thread

a.f = b;

p = b.f;p.f = d;

ba 1 Outside Edge

Analysis of Each Thread

t = a.f;t.f = c;

Yellow Thread

Analysis Resultfor Yellow Thread

Analysis Resultfor White Thread

White Thread

a.f = b;

p = b.f;p.f = d;

ba d1

Analysis of Each Thread

t = a.f;t.f = c;

Yellow Thread

2a

Analysis Resultfor Yellow Thread

Analysis Resultfor White Thread

White Thread

a.f = b;

p = b.f;p.f = d;

ba d1

Analysis of Each Thread

t = a.f;t.f = c;

Yellow Thread

2a c

Analysis Resultfor Yellow Thread

Analysis Resultfor White Thread

White Thread

a.f = b;

p = b.f;p.f = d;

ba d1

Combining Analysis Results• Match Corresponding Edges• Map Outside Nodes to Nodes that They

Represent During the Analysis• Use Mapping to Combine Graphs

2a c

ba d1

Analysis Results From Threads

Combining Analysis Results• Match Corresponding Edges• Map Outside Nodes to Nodes that They

Represent During the Analysis• Use Mapping to Combine Graphs

2a c

ba d1

Mapping

Analysis Results From Threads

Combining Analysis Results• Match Corresponding Edges• Map Outside Nodes to Nodes that They

Represent During the Analysis• Use Mapping to Combine Graphs

2a c

ba d1

Mapping

Analysis Results From Threads

Combining Analysis Results• Match Corresponding Edges• Map Outside Nodes to Nodes that They

Represent During the Analysis• Use Mapping to Combine Graphs

2a c

ba d1

Mapping

Analysis Results From Threads

Combining Analysis Results• Match Corresponding Edges• Map Outside Nodes to Nodes that They

Represent During the Analysis• Use Mapping to Combine Graphs

2a c

ba d1

Mapping

CombinedResultAnalysis Results From Threads

ba

Combining Analysis Results• Match Corresponding Edges• Map Outside Nodes to Nodes that They

Represent During the Analysis• Use Mapping to Combine Graphs

2a c

ba d1

Mapping

CombinedResultAnalysis Results From Threads

ba c

Combining Analysis Results• Match Corresponding Edges• Map Outside Nodes to Nodes that They

Represent During the Analysis• Use Mapping to Combine Graphs

2a c

ba d1

Mapping

CombinedResultAnalysis Results From Threads

ba dc

Combining Analysis Results• Match Corresponding Edges• Map Outside Nodes to Nodes that They

Represent During the Analysis• Use Mapping to Combine Graphs

2a c

ba d1

Mapping

CombinedResultAnalysis Results From Threads

ba dc

2

1

Recapturing Nodes• If a, b, c, and d may be recaptured after

analyzing interactions between threads• Have complete points-to information for

recaptured nodesCombined

Result AfterInterthread Analysis

ba dc

2

1

Combined ResultAfter

Recapturing Nodes

ba dc

Common Usage PatternCurrent Thread

Creates and Initializes Objects (Synchronization)

Passes Objects As Parameters to New Thread

Never Accesses Objects Again

New Thread Starts Running

Accesses Objects (Synchronization)

Key Enhancement• Instrument Analysis to Record

• Actions on Nodes• synchronization operations• reads and writes

• Ordering Between Actions and Thread Starts• Use Ordering to Rule Out Potential

Interactions• Synchronizations from different threads

temporally separated by thread creation events

Server Benchmark Characteristics

IR Size

(instrs)

Number of

Methods

PreAnalysis

Time (secs)

echo 4,639 131 28

time 4,573 136 29

http 10,643 292 103

phone 9,547 267 75

IntraThreadAnalysis

Time (secs)

InterThreadAnalysis

Time (secs)

74

70

199

191

73

74

269

256

Percentage of Eliminated Synchronization Operations

0

20

40

60

80

100

http phone time echo mtrt

InterproceduralOnlyInterthread

Complications• Using Connectivity Information to Define

Concepts of Escaped and Captured Nodes• Recapturing Nodes After Combining Results • Treating Escaped and Captured Nodes

Differently During Analysis and Combination• Escaped Nodes Can Have Outside Edges• Captured Nodes Have No Outside Edges

• Recursively Generated Threads• Accurate Call Graph• Modeling Caller/Callee Interaction

Application to Real-Time Java• Real-Time Java has Scoped Memory (regions)• Motivation

• Keep Java’s safe memory model (no explicit deallocation)

• Obtain predictable allocation times (no garbage collection)

• Solution:• Preallocate a subregion of memory • Task allocates its objects in predictable

time from that region • Region deallocated as a unit when done

Scoped Memory Model• Scoped Memory is a separate object• Can run a computation in a Scoped

Memory (restore old memory when finished)

• Get a tree of nested computations, each with its Scoped Memory

• Interaction with Threading• New thread can use same scoped

memory as parent thread• Or can use new scoped memory

Nested Scoped Memories

ScopedMemoryObject

Referencing Constraints

ScopedMemoryObjectReferencing

Down ScopesIs NOT OK

ReferencingUp Scopes

Is OK

Preventing Downward References

• Reference Checks Done Dynamically• At every write of a reference into an

object field or array element• Check that written object is allocated

in a scope below that of referred object• If not, throw an exception

• Drawbacks• Dynamic checking overhead• Errors when program runs

Escape Analysis• Escape analysis provides information about how

lifetimes of objects relate to computation• Use escape analysis to automatically insert

scoped memories• Use escape analysis results to check programs

with explicit scoped memories • Check that NO object escapes computation that

executes in Scoped Memory• If no object escapes, then program will never

violate referencing constraints• Eliminate dynamic checks• Eliminate potential source of errors

• Analyzing interactions between threads may be crucial (depending on usage patterns)

Implementation Status• FLEX compiler infrastructure

• Full Java compiler• Lots of utilities and packages• Support for deep program analyses and

transformations• Implemented Scoped Memory checks• Implemented combined points-to escape analysis• Used analysis results to eliminate scoped

memory checks• Benchmarks

• Matrix Multiply (with Integers)• Linked List Sum (with Integers)

Results

Checks No Checks

Matrix Multiply 35.6 31.7

LinkedList Sum 4.00 3.05

• Verified that programs do not violate ScopedMemory constraints

• Execution Times (seconds)

Conclusion• Combined Points-to and Escape Analysis• Compositional, Partial, Incrementalized• Implemented Transformations

Stack Allocation, Private Heap Allocation, Synchronization Elimination, Scoped Memory Check Elimination

• Foundation for Interaction Analysis•Information about system behavior•Customized implementations•Functionality-improving transformations•Optimized adaptation handling

top related