Professional Documents
Culture Documents
Dr Cliff Click
Distinguished Engineer
Azul Systems
blogs.azulsystems.com/cliff
TS-2862
2007 JavaOneSM Conference | Session TS-2862 |
Think Concurrently!
Agenda
Motivation
Uninteresting Hash Table Details
State-Based Reasoning?
Resize
Performance
Q&A
Hash Tables
> 1MLOC
HashMap
java.util.concurrent.ConcurrentHashMap
No spin-locks
No blocking while holding locks
All CAS spin-loops bounded
Make progress even if other threads die
CAS (Compare-And-Swap)
LL/SC (Load-Linked/Store-Conditional, PPC only),
or similar
Agenda
Motivation
Uninteresting Hash Table Details
State-Based Reasoning?
Resize
Performance
Q&A
Uninteresting Details
Reprobe on collision
Stride1 reprobe: Better cache behavior
10
// reprobing loop
k = get_key(idx);
h = get_hash(idx);
// reprobe
11
Uninteresting Details
12
Agenda
Motivation
Uninteresting Hash Table Details
State-Based Reasoning!
Resize
Performance
Q&A
13
14
State-Based Reasoning
Proof is simple!
2007 JavaOneSM Conference | Session TS-2862 |
15
Valid States
nullempty
Ksome Key; can never change again
nullempty
Ttombstone, for deleted values
Vsome Values
16
State Machine
deleted key
{null,null}
insert
insert
delete
Empty
{K,T}
{K,null}
Partially inserted K/V pair
change
{null,T/V}
Partially inserted K/V pair Reader-only state
{K,V}
17
18
19
// Key-Claim stanza
// State: {k,?}
CAS_key(idx,null,key) )
break;
h = get_hash(idx);
// State: {key,?}
// get memoized hash
// State: {key,?}
// reprobe
}
2007 JavaOneSM Conference | Session TS-2862 |
20
// State: {key,oldval}
// Adjust size
} else {
// Transition failed; oldval has changed
// We can act as if our put() worked but
// was immediately stomped over
}
return oldval;
2007 JavaOneSM Conference | Session TS-2862 |
21
Free on Azul
2007 JavaOneSM Conference | Session TS-2862 |
22
Agenda
Motivation
Uninteresting Hash Table Details
State-Based Reasoning!
Resize
Performance
Q&A
23
24
Resizing
25
26
null, T, V
Xuse new table, not any valid Value
null {T,V}* X
2007 JavaOneSM Conference | Session TS-2862 |
27
kill
{null,null}
Deleted key
Empty
{K,T}
insert
kill
delete
insert
{K,null}
{null,T/V/X}
Partially inserted
K/V pair
change
{K,X}
{K,V}
28
{X,null}
29
{X,null}
{K,X}
30
{X,null}
{K,X}
{K,X}
old table
new table
{K,V2}
{K,V2}
2007 JavaOneSM Conference | Session TS-2862 |
31
32
null, K, X
null, T, V, X
T',V' primed versions of T and V
Old things copied into the new table
2-phase commit
null {T',V'}* {T,V}* X
33
insert
{X,null}
Deleted key
{K,T}
{K,null}
kill
delete
insert
copy in from
older table
{K,X}
{K,T'/V'}
{null,T/T'/V/V'/X}
Partially inserted
K/V pair
{K,V}
Standard K/V pair
34
insert
{X,null}
Deleted key
{K,T}
{K,null}
kill
delete
insert
copy in from
older table
{K,X}
{K,T'/V'}
{null,T/T'/V/V'/X}
Partially inserted
K/V pair
{K,V}
Standard K/V pair
35
insert
{X,null}
Deleted key
{K,T}
{K,null}
kill
delete
insert
copy in from
older table
{K,X}
{K,T'/V'}
{null,T/T'/V/V'/X}
Partially inserted
K/V pair
{K,V}
Standard K/V pair
36
{K,X}
old
new
{K,V'x}
read V'x
{K,V'1}
partial copy
{K,V1}
Fence
Fence
{K,V'1}
copy
complete
37
38
Agenda
Motivation
Uninteresting Hash Table Details
State-Based Reasoning?
Resize
Performance
Q&A
39
Microbenchmark
40
30
NB99
25
25
CHM99
20
M-ops/sec
20
M-ops/sec
1M Table
NB75
15
CHM75
10
15
10
0
1
Threads
NB
CHM
1
Threads
2007 JavaOneSM Conference | Session TS-2862 |
41
Niagara8x4 CPUs
80
80
70
70
60
60
CHM99, NB99
50
M-ops/sec
M-ops/sec
1K Table
40
CHM75, NB75
30
50
40
20
10
10
16
24
32
40
Threads
48
56
64
NB
30
20
1M Table
CHM
0
0
16
24
32
Threads
2007 JavaOneSM Conference | Session TS-2862 |
42
40
48
56
64
1M Table
500
500
400
400
300
300
M-ops/sec
M-ops/sec
NB99
CHM99
200
200
NB75
100
100
CHM75
0
100
200
Threads
300
400
0
0
100
200
Threads
2007 JavaOneSM Conference | Session TS-2862 |
43
300
400
1M Table
1200
1200
1000
1000
800
800
M-ops/sec
M-ops/sec
NB99
CHM99
600
600
NB
400
400
NB75
200
200
CHM75
0
CHM
0
Threads
100
200
300
400
500
Threads
2007 JavaOneSM Conference | Session TS-2862 |
44
600
700 800
Summary
45
Summary
https://sourceforge.net/projects/high-scale-lib
http://www.azulsystems.com/blogs/cliff/
46
Q&A
47