HICAMP:
Architectural Support for Efficient Concurrency-Safe Shared Structured Data Access Cheriton et al., ASPLOS 2012 Yoongu Kim 11/18/2013
1
HICAMP: Architectural Support for Efficient Concurrency-Safe Shared - - PowerPoint PPT Presentation
HICAMP: Architectural Support for Efficient Concurrency-Safe Shared Structured Data Access Cheriton et al., ASPLOS 2012 Yoongu Kim 11/18/2013 1 INTRODUCTION 2 Intro: Shared Data DRAM 4GB Thread 1 Private Shared Data Thread 2 Private
1
2
3
4
a[0] a[1] a[999]
5
– Only one thread can access shared data ... – ... the thread that holds the lock
– Example: Bank database – When an auditing thread accesses the bank database, all other threads would starve
6
– Speculatively allow multiple threads to access shared data in a concurrent manner – If lucky no conflict – If unlucky undo changes to shared data & retry
– 100% chance of being unlucky – Undoing/retrying a transaction is wasteful
7
8
12 24 36 48 12 24 36 48
Throughput Number of Cores Ideal Actual
9
Boyd-Wickizer et al., OSDI’10
before after before after before after before after before after before after
10
11
12
13
New Data
14
15
16
17
18
19
20
21
22
23
24
25
26
new copy new copy
27
28
29
30
31
32
33
34
35
36
37
A4 A10 Data10 Data3 Data1 Data2 A1 A2 A4 A3
1: it = obj.begin(); 2: it++; 3: it++; 4: *it = newVal; 5: it->tryCommit();
38
/* it = iterator */
Data3 Data1 Data2 A1 A2 A4 A3
1: it = obj.begin(); 2: it++; 3: it++; 4: *it = newVal; 5: it->tryCommit();
39
Data3 Data1 Data2 A1 A2 A4 A3
/* it = iterator */
(VSID)
1: it = obj.begin(); 2: it++; 3: it++; 4: *it = newVal; 5: it->tryCommit();
40
Data3 Data1 Data2 A1 A2 A4 A3
/* it = iterator */
(VSID)
1: it = obj.begin(); 2: it++; 3: it++; 4: *it = newVal; 5: it->tryCommit();
41
Data3 Data1 Data2 A1 A2 A4 A3
/* it = iterator */
(VSID)
copy copy
1: it = obj.begin(); 2: it++; 3: it++; 4: *it = newVal; 5: it->tryCommit();
42
(VSID)
Data3 Data1 Data2 A1 A2 A4 A3
/* it = iterator */
A4 A10 newVal
copy copy
1: it = obj.begin(); 2: it++; 3: it++; 4: it = newVal; 5: it->tryCommit();
43
(VSID)
Data3 Data1 Data2 A1 A2 A4 A3
/* it = iterator */
A4 A10 newVal