hybrid stm/htm for nested transactions on openjdk

81
Hybrid STM/HTM for Nested Transactions on OpenJDK Keith Chapman Purdue U Tony Hosking ANU/Data61, Purdue U Eliot Moss UMass

Upload: antony-hosking

Post on 29-Jan-2018

264 views

Category:

Software


3 download

TRANSCRIPT

Page 1: Hybrid STM/HTM for Nested Transactions on OpenJDK

Hybrid STM/HTM for Nested Transactions on OpenJDK

Keith ChapmanPurdue U

Tony HoskingANU/Data61, Purdue U

Eliot MossUMass

Page 2: Hybrid STM/HTM for Nested Transactions on OpenJDK

MotivationSTM has been around for ages

• But STM is slow

Commodity hardware for transactions available now

• But HTM approaches are only best effort

Out goal: Accelerate STM with HTM when possible

Page 3: Hybrid STM/HTM for Nested Transactions on OpenJDK

Nested TransactionsAllow composition of transactions

Two flavors

• Closed Nested Transactions

• HTM inside STM not useful; must do all the same work

• Open Nested Transactions

• HTM inside STM avoids most TM work – HTM well-suited!

Page 4: Hybrid STM/HTM for Nested Transactions on OpenJDK

XJ: Transactional JavaXJ Language

• Supports flat and closed/open/boosted nested transactions

The implementation supports hybrid transactions

• HTM support via Intel TSX

• HTM and STM can co-exist

Uses an Optimistic-reads / Pessimistic-writes protocol

Page 5: Hybrid STM/HTM for Nested Transactions on OpenJDK

TM Metadata

Txn Log

0 0Version # 0 0 0Txn ID 1

One metadata word for every object

Page 6: Hybrid STM/HTM for Nested Transactions on OpenJDK

STM Transaction Protocol (Read)

T1 Log

0 00 0

Page 7: Hybrid STM/HTM for Nested Transactions on OpenJDK

STM Transaction Protocol (Read)

T1 Log

0 00 0

Check Mode

Page 8: Hybrid STM/HTM for Nested Transactions on OpenJDK

STM Transaction Protocol (Read)

T1 Log

0 0

0 0

T1 Read

Page 9: Hybrid STM/HTM for Nested Transactions on OpenJDK

STM Transaction Protocol (Read)

T1 Log

0 0

0 0

T1 Validate

Page 10: Hybrid STM/HTM for Nested Transactions on OpenJDK

STM Transaction Protocol (Read)

T1 Log

0 0

T1 Commit

Page 11: Hybrid STM/HTM for Nested Transactions on OpenJDK

0 0

STM Transaction Protocol (Write)

T1 Log

Page 12: Hybrid STM/HTM for Nested Transactions on OpenJDK

0 0

STM Transaction Protocol (Write)

T1 Log

Check Mode

Page 13: Hybrid STM/HTM for Nested Transactions on OpenJDK

T1 1

0 0

STM Transaction Protocol (Write)

T1 Log

T1 Write

Page 14: Hybrid STM/HTM for Nested Transactions on OpenJDK

T1 1

0 0

STM Transaction Protocol (Write)

T1 Log

T1 Write

Page 15: Hybrid STM/HTM for Nested Transactions on OpenJDK

T1 1

0 0

STM Transaction Protocol (Write)

T1 Log

T1 Write

Page 16: Hybrid STM/HTM for Nested Transactions on OpenJDK

T1 11 0

STM Transaction Protocol (Write)

T1 Log

T1 Commit

Page 17: Hybrid STM/HTM for Nested Transactions on OpenJDK

STM Conflict Detection

T1 Log

0 00 0

T2 Log

0 0

Page 18: Hybrid STM/HTM for Nested Transactions on OpenJDK

STM Conflict Detection

T1 Log

0 0

0 0

T2 Log

0 0

T1 Read

Page 19: Hybrid STM/HTM for Nested Transactions on OpenJDK

STM Conflict Detection

T1 Log

0 0

0 0

T2 Log

0 0

T2 Write

T2 1

Page 20: Hybrid STM/HTM for Nested Transactions on OpenJDK

STM Conflict Detection

T1 Log

0 0

0 0

T2 Log

0 0

T1 Validate

T2 1

Page 21: Hybrid STM/HTM for Nested Transactions on OpenJDK

STM Conflict Detection

T1 Log

0 0

T2 Log

0 0

T1 Abort

T2 1

Page 22: Hybrid STM/HTM for Nested Transactions on OpenJDK

Hybrid Transaction ProtocolSTM – HTM conflicts detected by lock word accesses

• Explicit XABORT if locked by another transaction

• HTM reads – Read the metadata word

• STM writes modify the metadata word

• Causes HTM to abort

• HTM writes – Increment version number

• Causes STM read invalidation / HTM abort

Page 23: Hybrid STM/HTM for Nested Transactions on OpenJDK

Abstract Locking &

Undo Operations

Page 24: Hybrid STM/HTM for Nested Transactions on OpenJDK

Abstract Locks for STM

Open / Boosted Atomic Method Body

Acquire abstract locks

Release abstract locks

If top level transaction

Open / Boosted Atomic Method Body

Acquire abstract locks

Log abstract locks

If nested transaction

Log undo operations

Page 25: Hybrid STM/HTM for Nested Transactions on OpenJDK

Abstract Locks for Hybrid TM

Open / Boosted Atomic Method Body

Validate abstract locks

Open / Boosted Atomic Method Body

Acquire abstract locks

Log abstract locks

If top level is HTM

Log undo operations

Page 26: Hybrid STM/HTM for Nested Transactions on OpenJDK

Why Validation Works• HTM vs STM

• If abstract locks conflict they must touch some same physical words in the abstract locking data structure — otherwise they could not detect the conflict

Open / Boosted Atomic Method Body

Validate abstract locks

Page 27: Hybrid STM/HTM for Nested Transactions on OpenJDK

Why Validation Works• HTM vs STM

• If abstract locks conflict they must touch some same physical words in the abstract locking data structure — otherwise they could not detect the conflict

• HTM vs HTM

• No conflict in the locking data structure because all accesses to it are reads

• Any real conflicts that exist will occur on the actual data structure

Open / Boosted Atomic Method Body

Validate abstract locks

Page 28: Hybrid STM/HTM for Nested Transactions on OpenJDK

STM and HTM Methods

STM needs logging HTM doesn't

Different actions during read/write

Different actions for abstract locks

HTM should fall back to STM

Page 29: Hybrid STM/HTM for Nested Transactions on OpenJDK

STM and HTM Methods

STM needs logging HTM doesn't

Different actions during read/write

Different actions for abstract locks

HTM should fall back to STM

Maintain separate HTM and STM versions of methods

Page 30: Hybrid STM/HTM for Nested Transactions on OpenJDK

STM Method Variants

Original(Non-txnal)

Page 31: Hybrid STM/HTM for Nested Transactions on OpenJDK

STM Method Variants

Original(Non-txnal)

Can callA B

Page 32: Hybrid STM/HTM for Nested Transactions on OpenJDK

STM Method Variants

Original(Non-txnal)

Top-level Txn STM

Can callA B

Page 33: Hybrid STM/HTM for Nested Transactions on OpenJDK

STM Method Variants

Original(Non-txnal)

Top-level Txn STM

Can callA B

Page 34: Hybrid STM/HTM for Nested Transactions on OpenJDK

STM Method Variants

STM Transactionalized

Original(Non-txnal)

Top-level Txn STM

Can callA B

Page 35: Hybrid STM/HTM for Nested Transactions on OpenJDK

STM Method Variants

STM Transactionalized

Original(Non-txnal)

Top-level Txn STM

Can callA B

Page 36: Hybrid STM/HTM for Nested Transactions on OpenJDK

STM Method Variants

STM Transactionalized

Original(Non-txnal)

New nested Txn STM

Top-level Txn STM

Can callA B

Page 37: Hybrid STM/HTM for Nested Transactions on OpenJDK

STM Method Variants

STM Transactionalized

Original(Non-txnal)

New nested Txn STM

Top-level Txn STM

Can callA B

Page 38: Hybrid STM/HTM for Nested Transactions on OpenJDK

STM Method Variants

STM Transactionalized

Original(Non-txnal)

New nested Txn STM

Top-level Txn STM

Can callA B

Page 39: Hybrid STM/HTM for Nested Transactions on OpenJDK

STM Method Variants

STM Transactionalized

Original(Non-txnal)

New nested Txn STM

Top-level Txn STM

Can callA B

Page 40: Hybrid STM/HTM for Nested Transactions on OpenJDK

Hybrid TM Method VariantsOriginal

(Non-txnal)

Page 41: Hybrid STM/HTM for Nested Transactions on OpenJDK

Hybrid TM Method VariantsOriginal

(Non-txnal)Can callA B

Page 42: Hybrid STM/HTM for Nested Transactions on OpenJDK

Hybrid TM Method Variants

Router

Original(Non-txnal)Can call

A B

Page 43: Hybrid STM/HTM for Nested Transactions on OpenJDK

Hybrid TM Method Variants

Router

Original(Non-txnal)Can call

A B

Page 44: Hybrid STM/HTM for Nested Transactions on OpenJDK

Hybrid TM Method Variants

Top-level Txn STM

Router

Original(Non-txnal)Can call

A B

Page 45: Hybrid STM/HTM for Nested Transactions on OpenJDK

Hybrid TM Method Variants

Top-level Txn HTM

Top-level Txn STM

Router

Original(Non-txnal)Can call

A B

Page 46: Hybrid STM/HTM for Nested Transactions on OpenJDK

Hybrid TM Method Variants

HTM Transactionalized

Top-level Txn HTM

Top-level Txn STM

Router

Original(Non-txnal)Can call

A B

Page 47: Hybrid STM/HTM for Nested Transactions on OpenJDK

Hybrid TM Method Variants

HTM Transactionalized

Top-level Txn HTM

Top-level Txn STM

Router

Original(Non-txnal)Can call

A B

Page 48: Hybrid STM/HTM for Nested Transactions on OpenJDK

Hybrid TM Method Variants

Optimized New nested Txn

HTMHTM

Transactionalized

Top-level Txn HTM

Top-level Txn STM

Router

Original(Non-txnal)Can call

A B

Page 49: Hybrid STM/HTM for Nested Transactions on OpenJDK

Hybrid TM Method Variants

Optimized New nested Txn

HTMHTM

Transactionalized

Top-level Txn HTM

Top-level Txn STM

Router

Original(Non-txnal)Can call

A B

Page 50: Hybrid STM/HTM for Nested Transactions on OpenJDK

Hybrid TM Method Variants

Optimized New nested Txn

HTMHTM

Transactionalized

Top-level Txn HTM

Top-level Txn STM

Router

Original(Non-txnal)Can call

A B

Page 51: Hybrid STM/HTM for Nested Transactions on OpenJDK

Hybrid TM Method Variants

Optimized New nested Txn

HTMHTM

Transactionalized

Top-level Txn HTM

STMTransactionalized

Top-level Txn STM

Router

Original(Non-txnal)Can call

A B

Page 52: Hybrid STM/HTM for Nested Transactions on OpenJDK

Hybrid TM Method Variants

Optimized New nested Txn

HTMHTM

Transactionalized

Top-level Txn HTM

STMTransactionalized

Top-level Txn STM

Router

Original(Non-txnal)Can call

A B

Page 53: Hybrid STM/HTM for Nested Transactions on OpenJDK

Hybrid TM Method Variants

Optimized New nested Txn

HTMHTM

Transactionalized

Top-level Txn HTM

STMTransactionalized

Top-level Txn STM

New nestedTxn STM

Router

Original(Non-txnal)Can call

A BParent is closed

A B

Page 54: Hybrid STM/HTM for Nested Transactions on OpenJDK

Hybrid TM Method Variants

Optimized New nested Txn

HTMHTM

Transactionalized

Top-level Txn HTM

STMTransactionalized

Top-level Txn STM

New nestedTxn STM

Router

Original(Non-txnal)Can call

A BParent is closed

A B

Page 55: Hybrid STM/HTM for Nested Transactions on OpenJDK

Hybrid TM Method Variants

Optimized New nested Txn

HTMHTM

Transactionalized

Top-level Txn HTM

STMTransactionalized

Top-level Txn STM

New nestedTxn STM

Router

Original(Non-txnal)Can call

A BParent is closed

A B

Page 56: Hybrid STM/HTM for Nested Transactions on OpenJDK

Hybrid TM Method Variants

Optimized New nested Txn

HTMHTM

Transactionalized

Top-level Txn HTM

STMTransactionalized

Top-level Txn STM

New nestedTxn STM

Router Nested Router

Original(Non-txnal)Can call

A BParent is closed

A B

Parent is openA B

Page 57: Hybrid STM/HTM for Nested Transactions on OpenJDK

Hybrid TM Method Variants

Optimized New nested Txn

HTMHTM

Transactionalized

Top-level Txn HTM

STMTransactionalized

Top-level Txn STM

New nestedTxn STM

Router Nested Router

Original(Non-txnal)Can call

A BParent is closed

A B

Parent is openA B

Page 58: Hybrid STM/HTM for Nested Transactions on OpenJDK

Hybrid TM Method Variants

Optimized New nested Txn

HTMHTM

Transactionalized

Top-level Txn HTM

New nestedTxn HTM

STMTransactionalized

Top-level Txn STM

New nestedTxn STM

Router Nested Router

Original(Non-txnal)Can call

A BParent is closed

A B

Parent is openA B

Page 59: Hybrid STM/HTM for Nested Transactions on OpenJDK

Hybrid TM Method Variants

Optimized New nested Txn

HTMHTM

Transactionalized

Top-level Txn HTM

New nestedTxn HTM

STMTransactionalized

Top-level Txn STM

New nestedTxn STM

Router Nested Router

Original(Non-txnal)Can call

A BParent is closed

A B

Parent is openA B

Page 60: Hybrid STM/HTM for Nested Transactions on OpenJDK

Hybrid TM Method Variants

Optimized New nested Txn

HTMHTM

Transactionalized

Top-level Txn HTM

New nestedTxn HTM

STMTransactionalized

Top-level Txn STM

New nestedTxn STM

Router Nested Router

Original(Non-txnal)Can call

A BParent is closed

A B

Parent is openA B

Page 61: Hybrid STM/HTM for Nested Transactions on OpenJDK

XJ System Architecture

Page 62: Hybrid STM/HTM for Nested Transactions on OpenJDK

XJ System Architecture

XJ source code

Page 63: Hybrid STM/HTM for Nested Transactions on OpenJDK

XJ System Architecture

XJ source code XJ Compilerstandard Java

bytecode

compile

Page 64: Hybrid STM/HTM for Nested Transactions on OpenJDK

XJ System Architecture

XJ source code XJ Compilerstandard Java

bytecode XJ Rewriterbytecode

+ run-time calls

compile load

Page 65: Hybrid STM/HTM for Nested Transactions on OpenJDK

XJ System Architecture

XJ source code

XJ run-time library

XJ Compilerstandard Java

bytecode XJ Rewriterbytecode

+ run-time callsHTM-enabled

JVM

compile load run

Page 66: Hybrid STM/HTM for Nested Transactions on OpenJDK

XJ System Architecture

HTM 4-5 times faster than STM

XJ source code

XJ run-time library

XJ Compilerstandard Java

bytecode XJ Rewriterbytecode

+ run-time callsHTM-enabled

JVM

compile load run

Page 67: Hybrid STM/HTM for Nested Transactions on OpenJDK

VM ModificationsKept to a minimum

Modifications done on OpenJDK:

• Native methods to begin, end, and abort a HW transaction

• Made them intrinsic to the HotSpot C1/C2 compilers

Had to go through several hoops to get HTM to work with HotSpot’s optimizing compilers

Page 68: Hybrid STM/HTM for Nested Transactions on OpenJDK

Results

Page 69: Hybrid STM/HTM for Nested Transactions on OpenJDK

SynchrobenchMicro-benchmarks to evaluate synchronization performance on various data structures

Added ability to run multiple operations within a single transaction (group size)

Included XJ versions of the benchmarks

• TransactionalFriendlyTreeSet

48-way, Intel Xeon E5-2690 v3 machine with 2 sockets of 12 hyperthreaded cores

Page 70: Hybrid STM/HTM for Nested Transactions on OpenJDK

Thro

ughp

ut (N

orm

aliz

ed)

0

0.2

0.4

0.6

0.8

1

Threads1 2 4 8 12 16 20 24 28 32 36 40 44 48

Thro

ughp

ut (N

orm

aliz

ed)

0

0.2

0.4

0.6

0.8

1

Threads1 2 4 8 12 16 20 24 28 32 36 40 44 48

Open nestedClosed nested

Group size 1

5% Updates

Page 71: Hybrid STM/HTM for Nested Transactions on OpenJDK

Thro

ughp

ut (N

orm

aliz

ed)

0

0.2

0.4

0.6

0.8

1

Threads1 2 4 8 12 16 20 24 28 32 36 40 44 48

Thro

ughp

ut (N

orm

aliz

ed)

0

0.2

0.4

0.6

0.8

1

Threads1 2 4 8 12 16 20 24 28 32 36 40 44 48

Group size 1Group size 2

Open nestedClosed nested 5% Updates

Page 72: Hybrid STM/HTM for Nested Transactions on OpenJDK

Thro

ughp

ut (N

orm

aliz

ed)

0

0.2

0.4

0.6

0.8

1

Threads1 2 4 8 12 16 20 24 28 32 36 40 44 48

Thro

ughp

ut (N

orm

aliz

ed)

0

0.2

0.4

0.6

0.8

1

Threads1 2 4 8 12 16 20 24 28 32 36 40 44 48

Group size 1Group size 2Group size 4

Open nestedClosed nested 5% Updates

Page 73: Hybrid STM/HTM for Nested Transactions on OpenJDK

Thro

ughp

ut (N

orm

aliz

ed)

0

0.2

0.4

0.6

0.8

1

Threads1 2 4 8 12 16 20 24 28 32 36 40 44 48

Thro

ughp

ut (N

orm

aliz

ed)

0

0.2

0.4

0.6

0.8

1

Threads1 2 4 8 12 16 20 24 28 32 36 40 44 48

Group size 1Group size 2Group size 4

Group size 8

Open nestedClosed nested 5% Updates

Page 74: Hybrid STM/HTM for Nested Transactions on OpenJDK

Thro

ughp

ut (N

orm

aliz

ed)

0

0.2

0.4

0.6

0.8

1

Threads1 2 4 8 12 16 20 24 28 32 36 40 44 48

Thro

ughp

ut (N

orm

aliz

ed)

0

0.2

0.4

0.6

0.8

1

Threads1 2 4 8 12 16 20 24 28 32 36 40 44 48

Group size 1Group size 2Group size 4

Group size 8Group size 16

Open nestedClosed nested 5% Updates

Page 75: Hybrid STM/HTM for Nested Transactions on OpenJDK

Thro

ughp

ut (N

orm

aliz

ed)

0

0.2

0.4

0.6

0.8

1

Threads1 2 4 8 12 16 20 24 28 32 36 40 44 48

Thro

ughp

ut (N

orm

aliz

ed)

0

0.2

0.4

0.6

0.8

1

Threads1 2 4 8 12 16 20 24 28 32 36 40 44 48

Group size 1Group size 2Group size 4

Group size 8Group size 16Group size 32

Open nestedClosed nested 5% Updates

Page 76: Hybrid STM/HTM for Nested Transactions on OpenJDK

0

50

100

150

200

1 2 4 8 12 16 20 24 28 32 36 40 44 48 1 2 4 8 12 16 20 24 28 32 36 40 44 48 1 2 4 8 12 16 20 24 28 32 36 40 44 48

Group size 1 Group size 2 Group size 4

com

mitt

ed o

ps a

nd a

borte

d tx

ns (1

06 )

threads

open htm commitsclosed htm commits

open stm commitsclosed stm commits

htm aborts

Page 77: Hybrid STM/HTM for Nested Transactions on OpenJDK

ConclusionsSTM and HTM can co-exist for nested transactions in Java

• Closed nesting — Similar to previous schemes

• Open nesting — Novel validation mechanism

• Implemented in OpenJDK on Intel TSX — Artifact evaluated

Page 78: Hybrid STM/HTM for Nested Transactions on OpenJDK

ConclusionsSTM and HTM can co-exist for nested transactions in Java

• Closed nesting — Similar to previous schemes

• Open nesting — Novel validation mechanism

• Implemented in OpenJDK on Intel TSX — Artifact evaluated

Page 79: Hybrid STM/HTM for Nested Transactions on OpenJDK

ConclusionsSTM and HTM can co-exist for nested transactions in Java

• Closed nesting — Similar to previous schemes

• Open nesting — Novel validation mechanism

• Implemented in OpenJDK on Intel TSX — Artifact evaluated

When it works, HTM is ~4-5× faster than STM

Page 80: Hybrid STM/HTM for Nested Transactions on OpenJDK

ConclusionsSTM and HTM can co-exist for nested transactions in Java

• Closed nesting — Similar to previous schemes

• Open nesting — Novel validation mechanism

• Implemented in OpenJDK on Intel TSX — Artifact evaluated

When it works, HTM is ~4-5× faster than STM

Open nesting increases the envelope of effectiveness for HTM

Page 81: Hybrid STM/HTM for Nested Transactions on OpenJDK

ConclusionsSTM and HTM can co-exist for nested transactions in Java

• Closed nesting — Similar to previous schemes

• Open nesting — Novel validation mechanism

• Implemented in OpenJDK on Intel TSX — Artifact evaluated

When it works, HTM is ~4-5× faster than STM

Open nesting increases the envelope of effectiveness for HTM

Production VM would need deeper modification