An overview of my research

Download Report

Transcript An overview of my research

Connectivity-Based
Garbage Collection
Martin Hirzel
University of Colorado at Boulder
Collaborators: Amer Diwan, Michael Hind,
Hal Gabow, Johannes Henkel, Matthew Hertz
Garbage Collection Benefits
Garbage collection leads to simpler
• Design  no complex deallocation protocols
• Implementation  automatic deallocation
• Maintenance  fewer bugs
Benefits are widely accepted
• Java, C#, Python, …
2
Garbage Collection:
Haven’t we solved this problem yet?
• For a state-of-the-art garbage collector:
– time ~14% of execution time
– space 3x high watermark
– pauses 0.8 seconds
• Can reduce any one cost
• Challenge: reduce all three costs
3
Example Heap
o1
s1
o2
o3
s2
Boxes: heap objects
o4
o5
o6
o7
Arrows: pointers
o8
o9
g
o15
o10
o11
o14
o13
o12
Long box: stack + global variables
4
Thesis
o1
o2
o3
o4
o5
o6
o7
o8
o9
o15
o10
o11
o14
o13
stack +
globals
1. Objects form distinct
data structures
2. Connected objects
die together
3. Garbage collectors
can exploit 1. and 2.
to reclaim objects
efficiently
o12
5
Experimental Infrastructure
JikesRVM Research Virtual Machine
– From IBM Research
– Written in Java
– Application and runtime system share heap
 Good garbage collection even more important
Benchmarks
– SPECjvm98 suite and SPECjbb2000
– Java Olden suite
– xalan, ipsixql, nfc, jigsaw
6
Outline
•
•
•
•
Garbage Collector Design Principles
Family of Garbage Collectors
Design Space Exploration
Pointer Analysis for Java
7
Garbage Collector Design Principles
“Do partial collections.”
o1
o2
o3
o4
o5
Don’t collect the full heap
every time
 Shorter pause times
o6
o7
o8
o9
o15
o10
o11
o14
o13
stack +
globals
o12
8
Garbage Collector Design Principles
“Predict lifetime based on age.”
o1
o2
o3
o4
o5
o6
o7
Generational hypothesis:
Most objects die young
Generational garbage
collection:
– Partition by age
– Collect young objects
most often
o8
o9
o15
o10
o11
o14
o13
stack +
globals
o12
young generation
 Low time overhead
That’s the state of the art.
old generation
9
Garbage Collector Design Principles
Generational GC Problems
o1
o2
o3
o4
o5
o6
o7
o8
o9
o15
o10
Regular full collections
 Long peak pause
Old-to-young pointers
 Need bookkeeping
~37.5% long-lived objects
 Pig in the python
o11
o14
o13
stack +
globals
o12
young generation
old generation
10
Garbage Collector Design Principles
“Collect connected objects together.”
Likelihood that two objects die at the same time:
Connectivity
Example
Likelihood
Any pair
o1
o2
33.1%
Weakly connected
o1
o2
46.3%
Strongly connected
o1
o2
72.4%
Direct pointer
o1
o2
76.4%
?
11
Garbage Collector Design Principles
“Focus on objects with few ancestors.”
Median number of
Lifetime
ancestor objects
Short
2 objects
Long
83,324 objects
 Shortlived objects are easy to collect
12
Garbage Collector Design Principles
“Predict lifetime based on roots.”
o1
s
o2
g
o3
Lifetime
Objects reachable … Short Long
indirectly from stack 25.6% 16.2%
only directly from stack 32.9%
o4
from globals
0.8%
4.0% 20.5%
Total 62.5% 37.5%
stack +
globals
For details, see our [ISMM’02] paper.
13
Outline
•
•
•
•
Garbage Collector Design Principles
Family of Garbage Collectors
Design Space Exploration
Pointer Analysis for Java
14
CBGC Family of Garbage Collectors:
Connectivity-Based Garbage Collection
p1
o1
o2
p2
o3
o4
o5
o6
o7
o8
o9
p3
o15
o10
o11
o14
o13
stack +
globals
o12
p4
• Do partial collections.
• Collect connected
objects together.
• Predict lifetime based
on age.
• Focus on objects with
few ancestors.
• Predict lifetime based
on roots.
15
Family of Garbage Collectors
Components of CBGC
Before allocation:
1. Partitioning
Decide into which partition to put each object
Collection algorithm:
2. Estimator
Estimate dead + live objects for each partition
3. Chooser
Choose “good” set of partitions
4. Partial collection
Collect chosen partitions
16
Family of Garbage Collectors
Partitioning Problem
p1
o1
o2
p2
o3
o4
o5
o6
o7
o8
o9
p3
o15
o10
Find fine-grained
partitions, where
• Partition edges
respect pointers
• Objects don’t move
between partitions
o11
o14
o13
stack +
globals
o12
p4
17
Family of Garbage Collectors
Partitioning Solutions
p1
o1
o2
p2
o3
o4
– o1 may point to o2 if
o1 has a field of a
type compatible to o2
o5
o6
o7
o8
o9
p3
o15
o10
o11
o14
o13
stack +
globals
o12
Pointer analysis
• Type-based [Harris]
p4
• Constraint-based
[Andersen]
– We will discuss this
later in the talk
18
Family of Garbage Collectors
Estimator Problem
p1 1 dead + 2 live
p2
– Objects that can be
reclaimed
– Pay-off
3 dead + 3 live
p3
2 dead + 2 live
stack +
globals
For each partition guess
dead
live
2 dead + 0 live
p4
– Objects that must be
traversed
– Cost
19
Family of Garbage Collectors
Estimator Solutions
p1 1 dead + 2 live
p2
3 dead + 3 live
p3
2 dead + 2 live
stack +
globals
2 dead + 0 live
p4
Heuristics
• Connected objects die
together
• Most objects die
young
• Objects reachable
from globals live long
• The past predicts the
future
20
Family of Garbage Collectors
Chooser Problem
p1 1 dead + 2 live
p2
3 dead + 3 live
p3
7 dead + 5 live
2 dead + 2 live
stack +
globals
2 dead + 0 live
Pick subset of partitions
• Maximize total dead
• Minimize total live
• Closed under
predecessor relation
 No bookkeeping
for external
pointers
p4
21
Family of Garbage Collectors
Chooser Solutions
p1 1 dead + 2 live
p2
3 dead + 3 live
p3
7 dead + 5 live
2 dead + 2 live
stack +
globals
Optimal algorithm
based on network
flow [TR]
Simpler, greedy
algorithm
2 dead + 0 live
p4
22
Family of Garbage Collectors
Partial Collection Problem
rest of heap
o2
p2
o55
o6
o7
o88
o9
p3
o15
o10
10
o13
stack +
globals
o11
11
o12
Look only at
chosen partitions
Traverse o
reachable objects
o
Reclaim
unreachable objects
o14
p4
23
Family of Garbage Collectors
Partial Collection Solutions
rest of heap
o2
p2
o55
o6
o7
o88
o9
p3
o15
o10
10
o13
stack +
globals
o11
11
o12
o14
Generalize canonical
full-heap algorithms
• Mark and sweep
[McCarthy’60]
• Semi-space copying
[Cheney’70]
• Treadmill
[Baker’92]
p4
24
Outline
•
•
•
•
Garbage Collector Design Principles
Family of Garbage Collectors
Design Space Exploration
Pointer Analysis for Java
25
Design Space Exploration
Questions
How good is a naïve CBGC?
How good could CBGC be in 20 years?
How well does CBGC do in a JVM?
26
Design Space Exploration
Simulator Methodology
Garbage collection simulator (under GPL)
– Uses traces of allocations and pointer writes
from our benchmark runs
Simulator advantages
– Easier to implement variety of collector algorithms
– Know entire trace beforehand:
can use that for “in 20 years” experiments
Simulator disadvantages
– No bottom-line performance numbers
Currently adding CBGC to JikesRVM
27
Design Space Exploration
How good is a naïve CBGC?
jack xalan jbb javac
jack xalan jbb javac
jack xalan jbb javac
1.72
Cost in
time
0
0.87
Cost in
space
0
0.22
Pause
times
0
Full-heap
CBGC-naïve
Semi-space
copying
• Type-based
partitioning [Harris]
• Heuristics
estimator
Appel
Copying
generational
28
Design Space Exploration
How good could CBGC be in 20 years?
jack xalan jbb javac
jack xalan jbb javac
jack xalan jbb javac
1.72
Cost in
time
0
0.87
Cost in
space
0
0.22
Pause
times
0
Full-heap
CBGC-oracles
Appel
Semi-space
copying
Partitioning
and estimator
based on trace
Copying
generational
29
Design Space Exploration
How good could CBGC be in 20 years?
CBGC with oracles beats Appel
– We did not find a “performance wall”
– CBGC has potential
The performance gap between
CBGC with oracles and naïve CBGC is large
– Research challenges
30
How well does CBGC do
in a Java virtual machine?
Implementation in progress
Need a pointer analysis for the partitioning
31
Outline
•
•
•
•
Garbage Collector Design Principles
Family of Garbage Collectors
Design Space Exploration
Pointer Analysis for Java
32
Pointer Analysis for Java
Which analysis do we need?
Cost in time
jack xalan jbb javac
jack xalan jbb javac
jack xalan jbb javac
jack xalan jbb javac
jack xalan jbb javac
1.7
0
Full-heap
Semi-space
copying
CBGC
Type-based
partitioning
[Harris]
Type-based
partitioning
(oracles)
Appel
Allocation site
partitioning
(oracles)
Copying
generational
[Andersen]
33
Pointer Analysis for Java
Andersen’s Analysis
• Allocation-site granularity
• Set-inclusion constraints
• Flow and context insensitive
can’t analyze Java
ahead of time!
What
When
Constraint
generation
Model flow of
pointers
Ahead-of-time
compilation
Constraint
propagation
Find fixed-point
solution
Ahead-of-time
compilation
34
Pointer Analysis for Java
Andersen for all of Java
Do
as little as possible
as late as possible
What
Constraint
generation
Model flow of
pointers
Constraint
propagation
Find next fixedpoint solution
When
•
•
•
•
•
•
VM build and start-up
Class loading
Type resolution
Method compilation (JIT)
Execution of reflection
Execution of native code
Points-to information used
(before garbage collection)
35
Pointer Analysis for Java
Correctness Properties
…
Constraint
propagation
Constraint
generation
…
time
If
there is a pointer
then the results predict it
Can not do any better for Java!
36
Pointer Analysis for Java
Analysis Cost
Constraint
generation
Constraint propagation
Eager
At GC
At End
Seconds
Count
Seconds
Count
Seconds
Count
Seconds
compress
21.4
130
3.2
5
40.4
1
67.4
db
20.1
143
3.6
5
42.9
1
71.4
mtrt
20.3
265
2.1
5
46.2
1
68.1
mpegaudio
20.6
319
2.2
5
46.1
1
66.6
jack
21.2
397
4.2
7
49.0
1
78.2
jess
22.3
733
6.8
8
49.7
1
85.7
javac
21.1 1,107
5.9
10
87.4
1
187.6
xalan
20.1 1,728
4.9
8
85.7
1
215.7
 Expensive, but once behavior stabilizes,
costs diminish to zero
37
Pointer Analysis for Java
Validation
Lots of corner cases
– Dynamic class loading
– Reflection
– Native code
Missing any one leads to nasty bugs
– CBGC relies on conservative results
We performed validation runs
– Check analysis results against pointers in
heap during garbage collection
38
Wrapping Up
39
Related Work: Using Program
Analysis for Garbage Collection
Stack allocation [ParkGoldberg’92, …]
Regions [TofteTalpin’97, …]
Liveness analysis [AgesenDetlefsMoss’98, …]
Early reclamation [Harris’99]
Thread-local heaps [Steensgaard’00, …]
Object inlining [DolbyChien’00]
Write-barrier removal [ZeeRinard’02, Shuf’02]
…
40
Related Work:
Pointer analyses for Java
Andersen’s analysis for “static Java”
[RountevMilanovaRyder’01]
[LiangPenningsHarrold’01]
[WhaleyLam’02]
[LhotakHendren’03]
Weaker analyses with dynamic class loading
DOIT – [PechtchanskiSarkar’01]
XTA – [QianHendren’04]
Ruf’s escape analysis – [BogdaSingh’01, King’03]
Demand-driven / incremental analysis
41
Other Research Interests
Accuracy of Garbage Collection
[M.S.Thesis,ISMM’00,ECOOP’01,TOPLAS’02]
Profiling
[FDDO’01,Patent’01a]
Dynamic Optimizations, Prefetching
[PLDI’02,Patent’02b]
Future directions:
More techniques for performance improvement
Reducing bugs, improving productivity
42
Contributions presented in this talk
Connectivity-based GC design principles
[ISMM’02]
CBGC, a new family of garbage collectors;
Design space exploration with simulator
[OOPSLA’03]
First non-trivial pointer analysis for Java
[ECOOP’04 (to appear)]
http://www.cs.colorado.edu/~hirzel
43