ppt - University of Utah School of Computing
Download
Report
Transcript ppt - University of Utah School of Computing
Analyzing the CRF Java Memory Model
Yue Yang
Ganesh Gopalakrishnan
Gary Lindstrom
School of Computing
University of Utah
Outline
Java Memory Model (JMM) introduction
Why current JMM is broken
Overview of the CRF JMM
Our formal executable model
Analysis results
Introduction of JMM
Language level support for multi-threading
Need a memory model (thread semantics) to
specify how threads interact
Current Java Memory Model (JMM)
•
•
•
•
Chap 17 of Java Language Specification
Thread-local execution engine and working memory
Threads interact via shared main memory
Sets of actions constrained by different rules
Current JMM is broken
Too strong
• Prohibits important compiler optimizations
Too weak
• Object escaping from construction
• No specification for final fields
Example – Object Escape Problem
Initially, p = null
Thread 1
synchronized (this) {
p = new Point(1, 2);
}
Thread 2
if (p != null) {
a = p.x;
}
Finally, can it result in a = 0?
Result: possible under the existing JMM
• Thread 2 is not synchronized Race Condition
• Some aggressive architecture allows p to be
fetched from a stale cache line
The Bad Consequence
Immutable objects are not truly immutable
• Changing the field type to “final” does not help
“/tmp/system” might be read as “/system”
• Serious security hole
Popular programming patterns are broken
• e.g., double-checked locking algorithm
Challenging JMM Issues
Maintain safety guarantees
Support multiple architectures
• JMM designers - identify reasonable requirements
• JVM implementers - ensure compliance
Cover all related language semantics
• Final / volatile fields, constructors, finalizers, etc.
Deal with run-time complexities
• Aliasing, dynamic method invocation, etc.
New Replacement Proposals
Bill Pugh’s model
The CRF model
• By Maessen, Shen, and Arvind at MIT
CRF JMM Overview
CRF stands for Commit / Reconcile / Fence
Java memory operations are translated into
fine-grained CRF instructions
Java memory model is specified by CRF
rewrite rules and reordering rules
CRF Instructions
Instruction
Description
Loadl
Load value from local cache
Storel
Store value to local cache
Commit
Ensure write back from cache to memory
Reconcile
Ensure update from memory to cache
Fence
Ensure ordering restrictions
Lock
Acquire a lock
Unlock
Release a lock
Freeze
Complete a final field operation
Java to CRF Translation
Two kinds of memory operations
• Read / Write operations
Defined based on variable types: Regular / Final / Volatile
• Synchronization operations
Enter lock / Exit lock / EndCon
Example:
Java Operation
Translation
Write a, v;
Storel a, v;
Commit a;
v = Read a;
Reconcile a;
v = Loadl a;
CRF Rewrite Rules
CRF local rules
• Operational semantics for CRF instructions
• Only affect local cache
CRF background rules
• Synchronize cache and shared memory
CRF Ordering Rules
(Blank entries may be reordered)
Our Formal Executable Model
Inspired by Dill and Park’s work on SPARC
Implemented as Mur rules and functions
Two logical components
• The CRF JMM engine
Acts as a black box that defines thread semantics
• A test suite
Each test is designed to reveal a specific property
The CRF JMM Engine
Local rules
• Randomly choose one eligible instruction
Guarding conditions enforce reordering rules
• Execute it according to the CRF local rules
Background rules
•
•
•
•
Purge (unmap a cache entry)
Cache (update cache from memory)
Write Back (update memory from cache)
Acquire/Release locks
The Test Suite
Add test cases via Mur Startstates
• Setup thread instructions for each test case
• Java to CRF translation is automated by
Procedure AddInstruction
Two ways to check results
• Output single violation trace (use Mur invariants)
• Output all interleaving results (use special
completion rules)
Analysis of the CRF JMM
Ordering properties
Constructor properties
Synchronization idioms
Ordering properties of CRF
Ordering Properties
Results
Comparison with Coherence
Coherence is not enforced by CRF
Comparison with PRAM
PRAM is not enforced by CRF
Prescient Store
Allowed only for non-aliased variables
Write Atomicity
Guaranteed by CRF
Causality
Not enforced by CRF
Example: Test of Coherence
Initially, A = 0
Thread 1
Thread 2
A = 1;
A = 2;
X = A;
Y = A;
Finally, can it result in X = 2 & Y = 1?
Result: Yes
• Coherence is not enforced by CRF
Constructor Properties of CRF
(Models the object escape scenario)
Initially, A = B = 0 (A: reference, B: field)
Thread 1
B = 1;
EndCon;
A = 1;
Thread 2
X = A;
Y = B;
Finally, can it result in X = 1 & Y = 0?
Result: it works only under certain conditions
• Must enforce data dependency for dereference
• EndCon must be ahead of the reference assignment
The Double-Checked Locking Algorithm
public static Helper get() {
if (helper == null) {
synchronized (this) {
if (helper == null)
helper = new Helper();
}
}
return helper;
}
Commonly used for Singleton (created once) objects
Tries to limit locking overhead to the constructing thread
Broken under the current JMM (object escape problem)
Test for Double-Checked Locking
Initially, A = B = 0 (A: reference, B: field)
Thread 1
EnterMonitor;
X = A;
B = 1;
EndCon;
A = 1;
ExitMonitor;
Thread 2
Y = A;
Z = B;
Finally, can it result in X = 0 & Y = 1 & Z = 0?
• Result: test successfully passed
• The presence of EndCon is essential
A closely related version (without EndCon) would be broken
Usage of Our Framework
Helpful for understanding JMM
• JMM designers: can use it as a powerful debug tool
• Users: can treat the JMM as a black box
Gaining extra confidence
• Checking programming idioms
• Checking compiler transformation patterns
• Comparison with conventional models
A well designed test suite can be served as a
valuable QA benchmark
Discussion - Advantages
Executable model
• See effects of changes immediately
Exhaustive enumeration
• Reveal subtle corner cases
Rigorous specification
• Reduce ambiguities
Discussion - Limitations
State explosion
More complex language features not
supported yet
• Thread creation, termination,
interruption, etc.
Future Directions
JMM implication for compiler optimizations
• Synchronization optimizations
• Dependency Analysis
JMM implication for hardware architectures
Targeting real Java code
• Abstraction / slicing techniques
• Pattern annotation / recognition techniques
Links to Related Resources
JMM discussion group
• http://www.cs.umd.edu/~pugh/java/memoryModel
JMM and Thread Specification Revision
• JSR-133 (http://jcp.org/jsr/detail/133.jsp)
Our Mur program
• http://www.cs.utah.edu/~yyang/research/crf.m
Our email: [email protected]
Thank You!