580 likes | 842 Views
Exploiting Distributed Version Concurrency in a Transactional Memory Cluster. Kaloian Manassiev, Madalin Mihailescu and Cristiana Amza University of Toronto, Canada. Transactional Memory Programming Paradigm. Each thread executing a parallel region: Announces start of a transaction
E N D
Exploiting Distributed Version Concurrency in a Transactional Memory Cluster Kaloian Manassiev, Madalin Mihailescu and Cristiana Amza University of Toronto, Canada
Transactional Memory Programming Paradigm Each thread executing a parallel region: • Announces start of a transaction • Executes operations on shared objects • Attempts to commit the transaction • If no data race, commit succeeds, operations take effect • Otherwise commit fails, operations discarded, transaction restarted • Simpler than locking!
Transactional Memory • Used in multiprocessor platforms • Our work: the first TM implementation on a cluster • Supports both SQL and parallel scientific applications (C++)
TM in a Multiprocessor Node T1: Active Copy of A T2: Active A T2: Write(A) T1: Read(A) • Multiple physical copies of data • High memory overhead
TM on a ClusterKey Idea 1. Distributed Versions • Different versions of data arise naturally in a cluster • Create new version on different node, others read own versions read write read read
Exploiting Distributed Page Versions Distributed Transactional Memory (DTM) network mem0 v3 mem1 v2 mem2 v1 memN v0 ... txn0 txn1 txn2 txnN
v1 v1 v2 v2 v2 v2 Key Idea 2: Concurrent “Snapshots” Inside Each Node Txn1 (v2) Txn0 (v1) read
v1 v1 v1 v1 v2 v2 v2 v2 v2 v2 v2 v2 Key Idea 2: Concurrent “Snapshots” Inside Each Node Txn1 (v2) Txn0 (v1) read
v1 v1 v1 v1 v2 v1 v2 v2 v2 v2 v2 v2 Key Idea 2: Concurrent “Snapshots” Inside Each Node Txn1 (v2) Txn0 (v1) read
Distributed Transactional Memory A novel fine-grained distributed concurrency control algorithm • Low memory overhead • Exploits distributed versions • Supports multithreading within the node • Provides 1-copy serializability
Outline • Programming Interface • Design • Data access tracking • Data replication • Conflict resolution • Experiments • Related work and Conclusions
Programming Interface • init_transactions() • begin_transaction() • allocate_dtmemory() • commit_transaction() • Need to declare TM variables explicitly
Data Access Tracking • DTM traps reads and writes to shared memory by either one of: • Virtual memory protection • Classic page-level memory protection technique • Operator overloading in C++ • Trapping reads: conversion operator • Trapping writes: assignment ops (=, +=, …) & increment/decrement(++/--)
Data Replication T1(UPDATE) Page 1 Page 1 Page 2 Page 2 …… …… Page n Page n
Twin Creation Wr p1 T1(UPDATE) P1 Twin Page 1 Page 1 Page 2 Page 2 …… …… Page n Page n
Twin Creation Wr p2 T1(UPDATE) P1 Twin Page 1 Page 1 P2 Twin Page 2 Page 2 …… …… Page n Page n
Diff Creation T1(UPDATE) Page 1 Page 1 Page 2 Page 2 …… …… Page n Page n
Broadcast of the Modifications at Commit Latest Version = 7 Latest Version = 7 T1(UPDATE) Page 1 Page 1 Diff broadcast (vers 8) v2 v1 Page 2 Page 2 v1 …… …… Page n Page n
Other Nodes Enqueue Diffs Latest Version = 7 Latest Version = 7 T1(UPDATE) Page 1 Page 1 Diff broadcast (vers 8) v8 v2 v1 Page 2 Page 2 v8 v1 …… …… Page n Page n
Update Latest Version Latest Version = 7 Latest Version = 8 T1(UPDATE) Page 1 Page 1 v8 v2 v1 Page 2 Page 2 v8 v1 …… …… Page n Page n
Other Nodes Acknowledge Receipt Latest Version = 7 Latest Version = 8 T1(UPDATE) Page 1 Page 1 Ack (vers 8) v8 v2 v1 Page 2 Page 2 v8 v1 …… …… Page n Page n
T1 Commits Latest Version = 8 Latest Version = 8 T1(UPDATE) Page 1 Page 1 v8 v2 v1 Page 2 Page 2 v8 v1 …… …… Page n Page n
Lazy Diff Application Latest Version = 8 T2(V2): Rd(…, P1, P2) V0 Page 1 V8 V2 V1 V0 Page 2 V8 V1 . . . V3 Page N V5 V4
Lazy Diff Application Latest Version = 8 T2(V2): Rd(…, P1, P2) V2 Page 1 V8 V0 Page 2 V8 V1 . . . V3 Page N V5 V4
Lazy Diff Application Latest Version = 8 T2(V2): Rd(…, P1, P2) V2 Page 1 V8 V1 Page 2 V8 . . . V3 Page N V5 V4
Lazy Diff Application Latest Version = 8 T2(V2): Rd(…, P1, P2) V2 Page 1 V8 V1 Page 2 V8 . . . V3 Page N T3(V8): Rd(PN) V5 V4
Lazy Diff Application Latest Version = 8 T2(V2): Rd(…, P1, P2) V2 Page 1 V8 V1 Page 2 V8 . . . V5 Page N T3(V8): Rd(PN)
Waiting Due to Conflict Latest Version = 8 T2(V2): Rd(…, P1, P2) V2 Page 1 V8 V1 Wait until T2 commits Page 2 V8 . . . V5 Page N T3(V8): Rd(PN, P2)
Transaction Abort Due to Conflict Latest Version = 8 T2(V2): Rd(…, P1, P2) V2 Page 1 V8 V0 Page 2 V8 V1 . . . V3 Page N T3(V8): Rd(P2) V5 V4
Transaction Abort Due to Conflict Latest Version = 8 T2(V2): Rd(…, P1, P2) V2 Page 1 V8 V8 Page 2 CONFLICT! . . . V3 Page N T3(V8): Rd(P2) V5 V4
Write-Write Conflict Resolution • Can be done in two ways • Executing all updates on a master node, which enforces serialization order OR • Aborting the local update transaction upon receiving a conflicting diff flush • More on this in the paper
Experimental Platform • Cluster of Dual AMD Athlon Computers • 512 MB RAM • 1.5GHz CPUs • RedHat Fedora Linux OS
Benchmarks for Experiments • TPC-W e-commerce benchmark • Models an on-line book store • Industry-standard workload mixes • Browsing (5% updates) • Shopping (20% updates) • Ordering (50% updates) • Database size of ~600MB • Hash-table micro-benchmark (in paper)
Application of DTM for E-Commerce We use a Transactional Memory Cluster as the DB Tier
Implementation Details • We use MySQL’s in-memory HEAP tables • RB-Tree main-memory index • No transactional properties • Provided by inserting TM calls • Multiple threads running on each node
Baseline for Comparison • State-of-the-art Conflict-aware protocol for scaling e-commerce on clusters • Coarse grained (per-table) concurrency control (USITS’03, Middleware’03)
Related Work • Distributed concurrency control for database applications • Postgres-R(SI), Wu and Kemme (ICDE’05) • Ganymed, Plattner and Alonso (Middleware’04) • Distributed object stores • Argus (’83), QuickStore (’94), OOPSLA’03 • Distributed Shared Memory • TreadMarks, Keleher et al. (USENIX’94) • Tang et al. (IPDPS’04)
Conclusions • New software-only transactional memory scheme on a cluster • Both strong consistency and scaling • Fine-grained distributed concurrency control • Exploits distributed versions, low memory overheads • Improved throughput scaling for e-commerce web sites
Example Program #include <dtm_types.h> typedef struct Point { dtm_int x; dtm_int y; } Point; init_transactions(); for (int i = 0; i < 10; i++) { begin_transaction(); Point * p = allocate_dtmemory(); p->x = rand(); p->y = rand(); commit_transaction(); }