software transactional memory for dynamic-sized data structures (dstm – dynamic stm)

35
Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM) Maurice Herlihy, Victor Luchangco, Mark Moir, William N. Scherer III PODC 2003 Presentation prepared by Adi Suissa for TM seminar, fall 2008/9

Upload: caitir

Post on 06-Jan-2016

52 views

Category:

Documents


0 download

DESCRIPTION

Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM). Maurice Herlihy, Victor Luchangco, Mark Moir, William N. Scherer III. PODC 2003. Presentation prepared by Adi Suissa for TM seminar, fall 2008/9. Overview. Short recap and DSTM contributions - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Software Transactional Memory for Dynamic-Sized Data Structures(DSTM – Dynamic STM)

Maurice Herlihy,Victor Luchangco,Mark Moir,William N. Scherer III

PODC 2003

Presentation prepared by Adi Suissa for TM seminar, fall 2008/9

Page 2: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Overview

•Short recap and DSTM contributions•How to use DSTM?•Example•Diving into DSTM•Example 2• Improving performance

Page 3: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

The computation modelStarting

transaction

Read-Transactional(o1)Write-Transactional(o2)

Read(o3)Write(o4)

Commit-Transaction

Page 4: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

The computation model

•Committing a transaction can have two outcomes:▫Success: the transaction’s operations take

effect▫Failure: the operations are discarded

•Library Implemented in Java and in C++

Page 5: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Comparison with the Shavit-Toutitou TM

•Only static memory – need to declare the memory that can be transactioned statically▫We want the ability to create transactional

objects dynamically•Only static transactions – transactions need

to declare which addresses they are going to access before the transaction begins▫We want to let transactions determine which

object to access based on information of objects read inside a transaction

•Obstruction-free (rather than non-blocking)

Page 6: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Overview

•Short recap and what’s new?•How to use DSTM?•Example•Diving into DSTM•Example 2• Improving performance

Page 7: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Threads

•A thread that executes transactions must inherit from TMThread

•Each thread can run a single transaction at a time

class TMThread : Thread {void beginTransaction();bool commitTransaction();void abortTransaction();

}

Page 8: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Objects (1)

•All TM objects must implement the TMCloneable interface:

•This method clones the object, but programmers don’t need to handle synchronization issues

inteface TMCloneable {Object clone();

}

Page 9: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Objects (2)

• In order to make an object transactional, need to wrap it

•TMObject is a container for regular Java objects

Object

TMObject

Page 10: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Opening an object

•Before using a TMObject in a transaction, it must be opened

•An object can either be opened for READ or WRITE (and read)

class TMObject {TMObject(Object obj);enum Mode {READ, WRITE};Object open(Mode mode);

}

Page 11: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Overview

•Short recap and what’s new?•How to use DSTM?•Example•Diving into DSTM•Example 2• Improving performance

Page 12: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

An atomic counter (1)

•The counter has a single data member and two operations:

•The object is shared among some threads

class Counter : TMCloneable {int counterValue = 0;

void inc(); // increment the valueint value(); // returns the valueObject clone();

}

Page 13: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

An atomic counter (2)

•When a thread wants to access the counter in a transaction, it must first open the object using the encapsulated version:

Counter counter = new Counter();TMObject tranCounter = new TMObject(counter);

((TMThread)Thread.currentThread).beginTransaction();…Counter counter = (Counter)tranCounter.open(WRITE);counter.inc();…((TMThread)Thread.currentThread).commitTransaction();

Returns true/false to

indicate commit status

Page 14: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Overview

•Short recap and what’s new?•How to use DSTM?•Example•Diving into DSTM•Example 2• Improving performance

Page 15: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

DSTM implementation

•Transactional object structure:

start

TMObject

transactionnew object

old object

status

Data

Data

Locator

Page 16: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Current object version

•The current object version is determined by the status of the transaction that most recently opened the object in WRITE mode:▫committed: the new object is the current▫aborted: the old object is the current▫active: the old object is the current, and

the new is tentative•The actual version only changes when the

commit succeeds

Page 17: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Opening an object (1)

•Lets assume transaction A opens object o in WRITE mode.

•Let transaction B be the transaction that most recently opened o in WRITE mode.

•We need to distinguish between the following cases:▫B is committed▫B is aborted▫B is active

Page 18: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Opening an object (2) – B committed

start

o

transactionnew object

old object

committed

Data

DataB’s Locator

1 A creates a new Locator

transactionnew object

old object

A’s Locator

2 A clones the previous new object, and sets new

Data

clone

3 A sets old object to the previous new

active4 Use CAS in

order to replace locator

If CAS fails, restarts from the beginning

Page 19: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Opening an object (3) – B aborted

start

o

transactionnew object

old object

aborted

Data

DataB’s Locator

1 A creates a new Locator

transactionnew object

old object

A’s Locator

2 A clones the previous old object, and sets new

Data

clone

3 A sets old object to the previous old

active4 Use CAS in

order to replace locator

Page 20: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Opening an object (4) – B active•Problem: B is active and can either commit

or abort, so which version (old/new) should we use?

•Answer: A and B are conflicting transactions, that run at the same time

•Use Contention Manager to decide which should continue and which should abort

• If B needs to abort, try to change its status to aborted (using CAS)

Page 21: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Opening an object (5)

•Lets assume transaction A opens object o in READ mode▫Fetch the current version just as before▫Add the pair (o, v) to the readers list (read-

only table)

Page 22: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Committing a transaction

•The commit needs to do the following:1. Validate the transaction2. Change the transaction’s status from

active to committed (using CAS)

Page 23: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Validating transactions•What?▫Validate the objects read by the transaction

•Why?▫To make sure that the transaction observes

a consistent state•How?

1.For each pair (o, v) in the read-only table, verify that v is still the most recently committed version of o

2.Check that (status == active)

If the validation fails, throw an exception so the user will restart the transaction from

the beginning

Page 24: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Validation inconsistency

•Assume two threads A and B

• If B after A, then o1 = 2, o2 = 1;• If A after B, then o1 = 1, o2 = 2• If they run concurrently we can have o1 =

1, o2 = 1 which is illegal

Thread A1. x <- read(o1)2. w(o2, x + 1)

Thread B1. y <- read(o2)2. w(o1, y + 1)

Initially:o1 = 0o2 = 0

Page 25: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Conflicts

•Conflicts are detected when:▫A transaction first opens an object and finds

that it is open for modification by another transaction

▫When the transaction validates its read set (on opening an object or commit)

Page 26: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Overview

•Short recap and what’s new?•How to use DSTM?•Example•Diving into DSTM•Example 2• Improving performance

Page 27: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Ordered Integer List – IntSet (1)

Min 3 4 8 Max

6

Page 28: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Ordered Integer List – IntSet (2)

class List implements TMCloneable {int value;TMObject next;

List(int v) { value = v; }

public Object clone() {List newList = new List(value);newList.next = next;return newList;

}}

Should have been called Element

Page 29: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Ordered Integer List – IntSet (3)

class IntSet {TMObject first; // the list’s anchor

IntSet() {List firstList = new List

(Integer.MIN_VALUE);first = new TMObject(firstList);firstList.next = new TMObject(

new List(Integer.MAX_VALUE));}

}

Page 30: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Ordered Integer List – IntSet (4)class IntSet {

boolean insert(int v) {List newList = new List(v);TMObject newNode = new

TMObject(newList);TMThread thread = Thread.currentThread();while (true) {

thread.beginTransaction();boolean result = true;try {

…} catch (Denied d) {}if (thread.commitTransaction())

return result;}

}}

Page 31: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Ordered Integer List – IntSet (5)

try {List prevList = (List)this.first.open(WRITE);List currList = (List)prevList.next.open(WRITE);while (currList.value < v) {

prevList = currList;currList = (List)currList.next.open(WRITE);

}if (currList.value == v) {

result = false;} else {

result = true;newList.next = prevList.next;prevList.next = newNode;

}}

Page 32: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Overview

•Short recap and what’s new?•How to use DSTM?•Example•Diving into DSTM•Example 2• Improving performance

Page 33: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Single entrance

•What is the problem with the previous example?

•How can it be solved?▫Opening for READ on traversal▫Maybe something more sophisticated?

Page 34: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)

Releasing an object

•An object that was open for READ can be released

•What does it imply?▫Careful planning▫Can increase performance▫What happens if we open an object, release

it and open it again in the same transaction?

▫Can lead to validation problems

Page 35: Software Transactional Memory for Dynamic-Sized Data Structures (DSTM – Dynamic STM)