In-Place Metainfo Support in DeuceSTM Ricardo J. Dias , - - PowerPoint PPT Presentation

in place metainfo support in deucestm
SMART_READER_LITE
LIVE PREVIEW

In-Place Metainfo Support in DeuceSTM Ricardo J. Dias , - - PowerPoint PPT Presentation

In-Place Metainfo Support in DeuceSTM Ricardo J. Dias , Tiago M. Vale and Joo M. Loureno CITI / Universidade Nova de Lisboa WTM12, Bern,


slide-1
SLIDE 1

WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡

In-­‑Place ¡Metainfo ¡Support ¡in ¡ DeuceSTM ¡

Ricardo ¡J. ¡Dias, ¡Tiago ¡M. ¡Vale ¡and ¡João ¡M. ¡Lourenço ¡ CITI ¡/ ¡Universidade ¡Nova ¡de ¡Lisboa ¡

1 ¡

slide-2
SLIDE 2

WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡

MoEvaEon ¡

  • Fair ¡comparison ¡of ¡different ¡STM ¡algorithms ¡
  • Require ¡a ¡flexible ¡framework ¡to ¡support ¡

different ¡STM ¡implementaEons ¡

– MulE-­‑version, ¡lock-­‑based, ¡… ¡ – Same ¡transacEonal ¡interface ¡ – Same ¡benchmarking ¡applicaEons ¡

2 ¡

slide-3
SLIDE 3

WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡

The ¡DeuceSTM ¡

  • J

J ¡TransacEons ¡defined ¡by ¡a ¡single ¡Java ¡method ¡ annotaEon: ¡@Atomic ¡

  • J

J ¡Well-­‑defined ¡API ¡for ¡implemenEng ¡STM ¡algorithms ¡

  • J

J ¡Efficient ¡implementaEon ¡of ¡some ¡STM ¡algorithms, ¡ e.g., ¡TL2, ¡LSA, ¡… ¡

  • J

J ¡Macro-­‑benchmarks ¡available ¡

  • L

L ¡Does ¡not ¡allow ¡the ¡efficient ¡implementaEon ¡of ¡

  • ther ¡STM ¡algorithms, ¡e.g., ¡mulE-­‑version ¡ ¡
  • L

L ¡Fair ¡comparison ¡is ¡not ¡possible ¡

3 ¡

slide-4
SLIDE 4

WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡

TransacEonal ¡InformaEon ¡

Thread ¡1 ¡ Thread ¡2 ¡ Thread ¡3 ¡

… ¡

1 ¡ 2 ¡ 3 ¡ 4 ¡ TxWrite ¡ T x R e a d ¡ Tx ¡Desc. ¡ Clock ¡= ¡3 ¡ Tx ¡Desc. ¡ Clock ¡= ¡2 ¡ Tx ¡Desc. ¡ Clock ¡= ¡3 ¡ Lock, ¡ version ¡… ¡ Lock, ¡ version ¡… ¡ Lock, ¡ version ¡… ¡ Lock, ¡ version ¡… ¡

Metainfo ¡

Memory ¡ Thread-­‑local ¡

4 ¡

Data ¡ Data ¡ Data ¡ Data ¡

slide-5
SLIDE 5

WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡

Out-­‑place: ¡N-­‑1 ¡

5 ¡

… ¡

1 ¡ 2 ¡ 3 ¡ 4 ¡ Lock ¡ Lock ¡ Lock ¡ Memory ¡

  • Efficient ¡implementaEon ¡

using ¡an ¡hash ¡funcEon ¡

  • False ¡sharing ¡ ¡
  • Algorithms: ¡

– TL2, ¡SwissTM, ¡LSA ¡

… ¡

External ¡ Mapping ¡Table ¡

Lock ¡ Data ¡ Data ¡ Data ¡ Data ¡

slide-6
SLIDE 6

WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡

Out-­‑place: ¡1-­‑1 ¡

6 ¡

… ¡

1 ¡ 2 ¡ 3 ¡ 4 ¡ Version ¡ List ¡ Version ¡ List ¡ Version ¡ List ¡ Memory ¡ Version ¡ List ¡

  • Hash ¡table ¡with ¡collision ¡list ¡
  • Bad ¡performance ¡
  • Algorithms: ¡

– MulE-­‑version ¡algorithms ¡

… ¡

External ¡ Mapping ¡Table ¡

Data ¡ Data ¡ Data ¡ Data ¡

slide-7
SLIDE 7

WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡

In-­‑place: ¡1-­‑1 ¡

7 ¡

1 ¡ 2 ¡ 3 ¡ 4 ¡ Version ¡ List ¡ Version ¡ List ¡ Version ¡ List ¡ Version ¡ List ¡

  • Direct ¡access ¡to ¡metainfo ¡

using ¡memory ¡reference ¡

  • Mostly ¡used ¡in ¡managed ¡

runEmes ¡(OO ¡languages) ¡

  • Algorithms: ¡

– TL2, ¡SwissTM, ¡LSA, ¡MulE-­‑ version ¡algorithms ¡

… ¡

Memory ¡ Data ¡ Data ¡ Data ¡ Data ¡

Add ¡support ¡for ¡In-­‑place ¡in ¡DeuceSTM ¡

slide-8
SLIDE 8

WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡

TransacEonal ¡Interface ¡

Out-­‑place ¡in ¡DeuceSTM ¡

(obj1,field) ¡ (obj2,field) ¡ (obj3,field) ¡ [metainfo1] ¡ [metainfo2] ¡ [metainfo3] ¡ Metainfo ¡table ¡ TxRead(obj, ¡field) ¡ TxWrite(obj, ¡field, ¡val) ¡

8 ¡

Object ¡ instance ¡ Field ¡

  • ffset ¡

Table ¡Key ¡

slide-9
SLIDE 9

WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡

class class C { C { int int x; static static int int x_off x_off = = Offset(x); ); @Atomic foo() { int int t = = TxRead(this this, , x_off x_off ); ); TxWrite(this this, , x_off x_off , t+1); , t+1); } } ¡

Out-­‑place ¡InstrumentaEon ¡

9 ¡

class class C { C { int int x; @Atomic foo() { x x = x+1; } } ¡

slide-10
SLIDE 10

WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡

TxRead(obj, ¡field) ¡ TxWrite(obj, ¡field, ¡val) ¡ Object ¡A ¡ field1 ¡ field1m ¡ fields* ¡ methods()* ¡

Our ¡In-­‑place ¡Approach ¡

Object ¡A ¡ field1 ¡ fields* ¡ methods()* ¡ Object ¡B ¡ fields* ¡ methods()* ¡ Object ¡M ¡ [metainfo] ¡

10 ¡

TxRead(metainfo) ¡ TxWrite(metainfo, ¡val) ¡ TransacEonal ¡Interface ¡

slide-11
SLIDE 11

WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡

Our ¡In-­‑place ¡Approach ¡

11 ¡

class class C { C { int int x; @Atomic foo() { x x = x+1; } } ¡ class class C { C { int int x; TxField TxField x_m x_m = = new TxField(); (); @Atomic foo() { int int t = = TxRead(x_m x_m); ); TxWrite(x_m x_m, t+1); , t+1); } } ¡

slide-12
SLIDE 12

WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡

Metainfo ¡and ¡arrays ¡

5 ¡

[0] ¡

3 ¡

[1] ¡

8 ¡

[2] ¡

Original ¡array: ¡int[] ¡ New ¡array: ¡TxArrField[] ¡

[0] ¡ [1] ¡ [2] ¡

TxArrField ¡ array ¡ index ¡= ¡0 ¡ [metainfo] ¡ TxArrField ¡ array ¡ index ¡= ¡1 ¡ [metainfo] ¡ TxArrField ¡ array ¡ index ¡= ¡2 ¡ [metainfo] ¡ 12 ¡

slide-13
SLIDE 13

WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡

Metainfo ¡and ¡arrays ¡

13 ¡

class class C { C { int int[] [] a = = new new int int[10]; [10]; @Atomic foo() { a[1] = a[2]+1; } void void bar() { a[2] = 3; } } ¡ class class C { C { TxArrInt[] a = new new TxArrInt[10]; { int int[] [] t = = new new int int[10]; for for (int int i=0; i < 10; i++) { a[i] = new new TxArrInt(i, t); } } TxField a_m = new new TxField(); @Atomic foo() { int int t = = TxRead(a[2]); TxWrite(a[1], t+1); } void void bar() { { a[0].array[3] = 3; } } ¡

slide-14
SLIDE 14

WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡

Experimental ¡EvaluaEon ¡

Overhead ¡

  • Benchmarking ¡algorithm: ¡TL2 ¡using ¡a ¡lock ¡

table ¡

  • Base ¡case: ¡

– Using ¡out-­‑place ¡strategy ¡(original ¡DeuceSTM) ¡

  • Comparing ¡case: ¡

– Using ¡in-­‑place ¡strategy ¡

  • Metainfo ¡objects ¡are ¡created ¡for ¡each ¡field ¡
  • We ¡use ¡the ¡metainfo ¡object ¡as ¡the ¡key ¡for ¡the ¡external ¡

lock ¡table ¡

14 ¡

slide-15
SLIDE 15

WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡

Experimental ¡EvaluaEon ¡

Overhead ¡

Write-­‑Update: ¡0% ¡ Using ¡Arrays ¡

No ¡arrays: ¡overhead ¡3% ¡ With ¡arrays: ¡overhead ¡20% ¡

15 ¡

Not ¡using ¡Arrays ¡

Overhead ¡in ¡% ¡

5 10 15 20 25 30 35 1 2 4 8 16 24 32 40 Overhead (%) Threads IntSet RBTree, update=0% 5 10 15 20 25 30 35 1 2 4 8 16 24 32 40 Overhead (%) Threads IntSet SkipList, update=0%

slide-16
SLIDE 16

WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡

Experimental ¡EvaluaEon ¡

Overhead ¡

Write-­‑Update: ¡10% ¡

No ¡arrays: ¡overhead ¡7% ¡ With ¡arrays: ¡overhead ¡25% ¡

16 ¡

Overhead ¡in ¡% ¡

Using ¡Arrays ¡ Not ¡using ¡Arrays ¡

5 10 15 20 25 30 35 1 2 4 8 16 24 32 40 Overhead (%) Threads IntSet RBTree, update=10% 5 10 15 20 25 30 35 1 2 4 8 16 24 32 40 Overhead (%) Threads IntSet SkipList, update=10%

slide-17
SLIDE 17

WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡

Experimental ¡Results ¡

In-­‑place ¡vs. ¡Out-­‑place ¡for ¡MulE-­‑version ¡

  • Two ¡implementaEons ¡of ¡JVSTM ¡in ¡DeuceSTM ¡ ¡

– Out-­‑place ¡strategy ¡

  • Versions ¡kept ¡in ¡external ¡table ¡with ¡collision ¡list ¡

– In-­‑place ¡strategy ¡

  • No ¡external ¡table ¡
  • Versions ¡kept ¡in ¡meta-­‑info ¡field ¡
  • How ¡much ¡faster ¡is ¡the ¡in-­‑place ¡

implementaEon? ¡

17 ¡

slide-18
SLIDE 18

WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡

5 10 15 20 25 30 35 1 2 4 8 16 24 32 40 Speedup (x faster) Threads IntSet RBTree, update=10% 5 10 15 20 25 30 35 1 2 4 8 16 24 32 40 Speedup (x faster) JVSTM-In Threads IntSet SkipList, update=10% JVSTM-In

Experimental ¡EvaluaEon ¡

MulE-­‑version ¡ Average ¡5 ¡Mmes ¡faster ¡

18 ¡

Speedup ¡in ¡X ¡faster ¡

Using ¡Arrays ¡ Not ¡using ¡Arrays ¡ Write-­‑Update: ¡10% ¡

slide-19
SLIDE 19

WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡

Experimental ¡Results ¡

MulE-­‑version ¡

  • JVSTM ¡algorithm ¡has ¡a ¡performance ¡

bopleneck ¡in ¡garbage ¡collecEon ¡of ¡unused ¡ versions ¡

– Is ¡it ¡limiEng ¡the ¡speedup ¡for ¡in-­‑place? ¡

  • JVSTM-­‑noGC: ¡an ¡extension ¡of ¡JVSTM ¡where ¡

– Version ¡lists ¡are ¡fixed ¡sized ¡ – No ¡garbage ¡collecEon ¡of ¡unused ¡versions ¡

19 ¡

slide-20
SLIDE 20

WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡

5 10 15 20 25 30 35 1 2 4 8 16 24 32 40 Speedup (x faster) Threads IntSet RBTree, update=10% 5 10 15 20 25 30 35 1 2 4 8 16 24 32 40 Speedup (x faster) JVSTM-In JVSTM-noGC Threads IntSet SkipList, update=10% JVSTM-In JVSTM-noGC

Experimental ¡EvaluaEon ¡

MulE-­‑version ¡ Average ¡20—25 ¡Mmes ¡faster ¡

20 ¡

Speedup ¡in ¡X ¡faster ¡

Using ¡Arrays ¡ Not ¡using ¡Arrays ¡ Write-­‑Update: ¡10% ¡

slide-21
SLIDE 21

WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡

Experimental ¡EvaluaEon ¡

JVSTM ¡vs ¡TL2 ¡

21 ¡

Using ¡Arrays ¡ Not ¡using ¡Arrays ¡ Write-­‑Update: ¡10% ¡

0.5 1 1.5 2 2.5 3 3.5 4 4.5 1 2 4 8 16 32 Throughput (transactions/s x 1e6) Threads IntSet RBTree, update=10% TL2 JVSTM-noGC 0.5 1 1.5 2 2.5 3 3.5 4 4.5 1 2 4 8 16 32 Throughput (transactions/s x 1e6) Threads IntSet SkipList, update=10% TL2 JVSTM-noGC

slide-22
SLIDE 22

WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡

Concluding ¡Remarks ¡

  • In-­‑place ¡strategy ¡support ¡allows: ¡

– Efficient ¡support ¡of ¡primiEve ¡types ¡

  • Avoids ¡boxing ¡and ¡unboxing ¡

– Efficient ¡ImplementaEon ¡of ¡mulE-­‑version ¡ algorithms ¡ – Fair ¡comparison ¡of ¡different ¡kinds ¡of ¡STM ¡ algorithms ¡ – Support ¡for ¡distributed ¡STM ¡algorithms ¡

  • Ongoing ¡work ¡

22 ¡

slide-23
SLIDE 23

WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡

The ¡End ¡

23 ¡