Evaluation - example plot 2.5 2 speedup 1.5 1 0.5 0 1 x 1 1 x 2 1 x 3 2 x 3 4 x 3 8 x 3 16 x 3 # threads: top-level txs x nested txs (6 transactions) vs (2 top-level × 3 parallel nested) 18/29
Evaluation - benchmarks STMBench7 - 3 workloads, varying read/write Lee-TM - 4 workloads, varying transaction size Vacation from STAMP - 2 workloads, varying contention 19/29
Evaluation - benchmarks STMBench7 - 3 workloads, varying read/write Lee-TM - 4 workloads, varying transaction size Vacation from STAMP - 2 workloads, varying contention Manual approach to identify target transactions 19/29
Evaluation - STMBench7 2.5 2 speedup 1.5 1 0.5 0 1x1 1x2 1x3 2x3 4x3 8x3 16x3 # threads: top-level txs x nested txs balanced read-write workload; untap two-fold speedup 20/29
Evaluation - Lee-TM - long transactions 2.5 2 speedup 1.5 1 0.5 0 1x1 1x2 1x3 2x3 4x3 8x3 16x3 # threads: top-level txs x nested txs similar improvements with parallel nesting 21/29
Evaluation - Lee-TM - short transactions 2.5 2 speedup 1.5 1 0.5 0 1x1 1x2 1x3 2x3 4x3 8x3 16x3 # threads: top-level txs x nested txs inner-parallelism does not pay off 22/29
Evaluation - Vacation - high contention 14 12 10 speedup 8 6 4 2 0 1x1 1x2 1x4 1x8 1x16 2x16 3x16 # threads: top-level txs x nested txs improvement of 170% 23/29
Evaluation - Vacation - low contention 18 16 14 12 speedup 10 8 6 4 2 0 1x1 1x2 1x4 1x8 1x16 2x16 3x16 # threads: top-level txs x nested txs barely any conflicts to overcome 24/29
Evaluation - Comparison of STMs NeSTM [SPAA10] — eager conflict management; blocking PNSTM [PPoPP10] — conflict resolution independent of access type 25/29
Evaluation - Vacation 70 jvstm-tl 60 nestm-tl throughput (105 ops/sec) 50 pnstm-tl 40 30 20 10 1x1 1x2 1x4 1x8 1x16 2x16 3x16 # threads 26/29
Evaluation - Vacation 70 jvstm-tl 60 jvstm-pn nestm-tl throughput (105 ops/sec) nestm-pn 50 pnstm-tl pnstm-pn 40 30 20 10 1x1 1x2 1x4 1x8 1x16 2x16 3x16 # threads 26/29
Overhead with nesting depth 6 jvstm nestm 5 pnstm throughput (10 5 ops/sec) 4 3 2 1 1 8 32 128 # depth 27/29
Overhead with nesting depth 6 jvstm nestm 5 pnstm throughput (10 5 ops/sec) 4 3 2 1 1 8 32 128 # depth 27/29
Summary Optimistic expectations can be deceived 28/29
Summary Optimistic expectations can be deceived Reducing parallelism that is suffering data contention ◮ ...and exploit inner-parallelism ◮ Parallel Nesting is key to achieve that ◮ long running transactions 28/29
Summary Optimistic expectations can be deceived Reducing parallelism that is suffering data contention ◮ ...and exploit inner-parallelism ◮ Parallel Nesting is key to achieve that ◮ long running transactions Multi-versioned STM with Practical Parallel Nesting ◮ improvements in motivation scenario ◮ ...and with respect to state of the art Full fledged lock-free JVSTM ◮ http://inesc-id-esw.github.io/jvstm/ 28/29
Thank you Questions? 29/29
JVSTM Global latest commit: 0 30/29
JVSTM Global latest commit: 0 A (rw) starting version: 0 30/29
JVSTM Global latest commit: 0 A (rw) write set: { x: 6 } starting version: 0 w(x,6) 30/29
JVSTM Global latest commit: 1 version: 1 variable X value: 6 permanent previous: tentative A (rw) write set: { x: 6 } starting version: 0 w(x,6) 30/29
JVSTM Global latest commit: 1 version: 1 variable X value: 6 permanent previous: tentative B (rw) starting version: 1 30/29
JVSTM Global latest commit: 1 version: 1 variable X value: 6 permanent previous: tentative Orec 1 B (rw) owner: B starting version: 1 status: Alive 30/29
JVSTM Global latest commit: 1 version: 1 variable X value: 6 permanent previous: tentative orec 1 orec: value: 0 previous: Orec 1 B (rw) write set: { x } owner: B starting version: 1 w(x,0) status: Alive 30/29
JVSTM Global latest commit: 2 version: version: 2 1 variable X value: value: 0 6 permanent previous: previous: tentative orec 1 orec: value: 0 previous: Orec 1 B (rw) write set: { x } owner: B starting version: 1 w(x,0) status: 2 30/29
JVSTM Global latest commit: 2 version: version: 2 1 variable X value: value: 0 6 permanent previous: previous: tentative orec 1 orec: value: 0 previous: Orec 2 Orec 1 C (rw) write set: { y, z, w, ... } owner: owner: C B starting version: 2 r(x) = ? status: status: 2 Alive 30/29
JVSTM Global latest commit: 2 version: version: 2 1 variable X value: value: 0 6 permanent previous: previous: tentative orec 1 orec: value: 0 previous: Orec 2 Orec 1 C (rw) write set: { y, z, w, ... } owner: owner: C B starting version: 2 r(x) = 0 status: status: Alive 2 30/29
JVSTM Global latest commit: 2 version: version: 2 1 variable X value: value: 0 6 permanent previous: previous: tentative orec 1 orec: value: 0 previous: Orec 2 Orec 1 C (rw) write set: { y, z, w, ... } owner: owner: C B starting version: 2 w(x,42) status: status: Alive 2 30/29
JVSTM Global latest commit: 2 version: version: 2 1 variable X value: value: 0 6 permanent previous: previous: tentative orec 2 orec: value: 42 previous: Orec 2 Orec 1 C (rw) write set: { x , y, z, w, ... } owner: owner: C B starting version: 2 w(x,42) status: status: Alive 2 30/29
JVSTM Global latest commit: 2 version: version: 2 1 variable X value: value: 0 6 permanent previous: previous: tentative orec 2 orec: value: 42 previous: Orec 2 C (rw) write set: { x, y, z, w, ... } owner: C starting version: 2 status: Abort 30/29
JVSTM Global latest commit: 2 version: version: 2 1 variable X value: value: 0 6 permanent previous: previous: tentative orec 2 orec: value: 42 previous: Orec 2 C (rw) write set: { x, y, z, w, ... } owner: C starting version: 2 status: Abort D (rw) starting version: 2 r(x) = ? 30/29
JVSTM Global latest commit: 2 version: version: 2 1 variable X value: value: 0 6 permanent previous: previous: tentative orec 2 orec: value: 42 previous: Orec 2 C (rw) write set: { x, y, z, w, ... } owner: C starting version: 2 status: Abort D (rw) write set: { } starting version: 2 r(x) = ? 30/29
Nesting in Read-sets T A 31/29
Recommend
More recommend