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 ¡
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,
WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡
1 ¡
WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡
2 ¡
WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡
3 ¡
WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡
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 ¡… ¡
Memory ¡ Thread-‑local ¡
4 ¡
Data ¡ Data ¡ Data ¡ Data ¡
WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡
5 ¡
1 ¡ 2 ¡ 3 ¡ 4 ¡ Lock ¡ Lock ¡ Lock ¡ Memory ¡
External ¡ Mapping ¡Table ¡
Lock ¡ Data ¡ Data ¡ Data ¡ Data ¡
WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡
6 ¡
1 ¡ 2 ¡ 3 ¡ 4 ¡ Version ¡ List ¡ Version ¡ List ¡ Version ¡ List ¡ Memory ¡ Version ¡ List ¡
External ¡ Mapping ¡Table ¡
Data ¡ Data ¡ Data ¡ Data ¡
WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡
7 ¡
1 ¡ 2 ¡ 3 ¡ 4 ¡ Version ¡ List ¡ Version ¡ List ¡ Version ¡ List ¡ Version ¡ List ¡
Memory ¡ Data ¡ Data ¡ Data ¡ Data ¡
WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡
TransacEonal ¡Interface ¡
(obj1,field) ¡ (obj2,field) ¡ (obj3,field) ¡ [metainfo1] ¡ [metainfo2] ¡ [metainfo3] ¡ Metainfo ¡table ¡ TxRead(obj, ¡field) ¡ TxWrite(obj, ¡field, ¡val) ¡
8 ¡
Object ¡ instance ¡ Field ¡
Table ¡Key ¡
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); } } ¡
9 ¡
class class C { C { int int x; @Atomic foo() { x x = x+1; } } ¡
WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡
TxRead(obj, ¡field) ¡ TxWrite(obj, ¡field, ¡val) ¡ Object ¡A ¡ field1 ¡ field1m ¡ fields* ¡ methods()* ¡
Object ¡A ¡ field1 ¡ fields* ¡ methods()* ¡ Object ¡B ¡ fields* ¡ methods()* ¡ Object ¡M ¡ [metainfo] ¡
10 ¡
TxRead(metainfo) ¡ TxWrite(metainfo, ¡val) ¡ TransacEonal ¡Interface ¡
WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡
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); } } ¡
WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡
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 ¡
WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡
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; } } ¡
WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡
14 ¡
WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡
Write-‑Update: ¡0% ¡ Using ¡Arrays ¡
15 ¡
Not ¡using ¡Arrays ¡
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%
WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡
Write-‑Update: ¡10% ¡
16 ¡
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%
WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡
17 ¡
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
18 ¡
Using ¡Arrays ¡ Not ¡using ¡Arrays ¡ Write-‑Update: ¡10% ¡
WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡
19 ¡
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
20 ¡
Using ¡Arrays ¡ Not ¡using ¡Arrays ¡ Write-‑Update: ¡10% ¡
WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡
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
WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡
22 ¡
WTM’12, ¡Bern, ¡April ¡10, ¡2012 ¡
23 ¡