Project advisory, development management and implementa on ...
Implementa*on techniques for libraries of transaconal ...
Transcript of Implementa*on techniques for libraries of transaconal ...
Implementa*on techniques for libraries of transac*onal concurrent
data types
Liuba Shrira
Brandeis University
Or: Type-Specific Concurrency Control and STM
Where Modern STMs Fail
3
I’d like a unique ID please
2011
Me too
2012
Non-transactional case
Where Modern STMs Fail
4
I’d like a unique ID please
2011
Me too
transactional case
Write conflict!
OMG!
It’s not the STMs problem really
5
Unique ID generator
Successive integers Unique IDs
Concurrent ops conflict
Concurrent ops commute
Relaxed Atomicity
WTTM2012 6-juil-17
Early release, open-nested, Eventual, elastic, ²-serializability, etc.
Popular in 80s & 90s … DB and distributed
Mostly forgotten …
Except for snapshot isolation.
Exploit
Type-Specific Concurrency Control
7
Also from 80s …
Commutativity … Non-determinism
For example Escrow …
Exo-leasing …
TM raises different questions
8
Heart of the Problem
Confusion between thread-level and transaction-level synchronization.
Needless entanglement kills concurrency
Relaxed consistency models are all about more entanglement
9
Heart of the Problem
Confusion between thread-level and transaction-level synchronization.
Needless entanglement kills concurrency
Relaxed consistency models are all about more entanglement
Short-lived, fine-grained
10
50 Shades of Synchroniza*on
Atomic instruction (CAS) Hardware Transaction Critical Sections
Long-lived, coarse-grained Software transaction
2
Transac*onal Boos*ng
11
Method for transforming….. linearizable
highly concurrent
Into … highly concurrent
black-box objects
transactional objects
12
Concurrent Objects
time
q.enq(x)
q.enq(y) q.deq(x)
q.deq(y)
time
13
Linearizability
time
q.enq(x)
q.enq(y) q.deq(x)
q.deq(y) q.enq(x)
q.enq(y) q.deq(x)
q.deq(y)
time
14
Linearizable Objects
threads
Thread-level synchronization
Linearizable object
15
Transac*onal Boos*ng
transactions
Transaction-level synchronization
Thread-level synchronization
16
Disentangled Run-Time
Library: abstract locks, Inverse logs
Your favorite fine-grained algorithms
HW transactions
17
Disentangled Reasoning
Commutativity & inverses
Linearizability e.g., rely-guarantee …
One Implementa*on
transactions Abstract locks Black-box linearizable
data object
rem(x)
Undo Logs
add(x)
x
Lets look at some code
• Example1:Transac?onalSet• implementedbyboos?ngConcurrentSkipListobject,usingLockKeyforsynchroniza?on
More examples:
• Transac?onalPriorityQueue,Pipelining,UniqueID…• implementedbyboos?ngconcurrentobjectsfromJavaconcurrencypackages
Performance of boos*ng
What’s the Catch?
24
Concurrent calls must commute Different orders yield same state, values
(Actually, all about left/right movers)
Methods must have inverses Immediately after, restores state
What’s the Catch?
25
Concurrent calls must commute Different orders yield same state, values
(Actually, all about left/right movers)
Methods must have inverses Immediately after, restores state
Boos*ng
• Reusecode,improveperformance• Butinverses
And is there ever enough performance?
How to improve performance?
Recall, we want
• Goodperformancewhensynchroniza?onisrequired• Scalability
• E.g.,forin-memorykey-valuestore
Up next: how to improve the performance of a transac*onal data structure? • MassTree:ahighperformancedatastructure• Silo:highperformancetransac?onsoverMassTreeusingadifferentapproach
• STO:ageneralframeworkandmethodologyforbuildinglibrariesofcustomizedhighperformancetransac?onalobjects
MassTree
• High-performancekey/valuestore• Insharedprimarymemory• Coresrunput,get,anddeleterequests
Review: Memory Model
• Eachcorehasacache• Hianginthecachemabersalotforreads!• Whataboutawrite?
• TSO(TotalStoreOrder)
• Threadt1modifiesxandlatery• Threadt2seesmodifica?ontoy• t2readsx
• Impliest2seesmodifica?onofx
X86-TSO
MassTree structure
• Nodesandrecords• Nodes
• Coverarangeofkeys• Interiorandleafnodes
• Records• Storethevalues
Concurrency Control
• Reader/writerlocks?
Thread-level Concurrency Control
• Baseinstruc?ons• Compareandswap
• Ononememoryword• Fence
Concurrency Control for mul*-word
• Firstwordofnodesandrecords• versionnumber(v#)andlockbit
Concurrency control
• Write• Setlockbit(spinifnecessary)
• usescompareandswap• Updatenodeorrecord• Incrementv#andreleaselock
Concurrency control
• Write(locking)• Read(nolocking)
• Spiniflocked• Readcontents• Ifv#haschangedorlockisset,tryagain
Concurrency control
• Writesarepessimis?c• Readsareop?mis?c
• Amix!• Nowritesforreads
Inser*ng new keys
• Intoleafnodeifpossible• Elsesplit
Inser*ng new keys
• Intoleafnodeifpossible• Elsesplit
• Splitlocksnodesupthepath• Nodeadlocks
Interes*ng Issue with spliYng
From MassTree to Silo
• High-performancedatabase• Withtransac?ons
Silo
• Databaseisinprimarymemory• Runsone-shotrequests
Silo
• Databaseisinprimarymemory• Runsone-shotrequests
• Atreeforeachtableorindex• Workerthreadsruntherequests
• Onethreadpercore• Workerssharememory
Transac*ons
begin{%dostuff:runqueries%usinginsert,lookup,update,delete,%andrange}
Running Transac*ons
• MassTreeopera?onsreleaselocksbeforereturning• Holdlockslonger?
Running Transac*ons
• OCC(Op?mis?cConcurrencyControl)• Threadmaintainsread-setandwrite-set
• Read-setcontainsversionnumbers• Write-setcontainsnewstate
• Atend,abemptscommit
Commit Protocol
• Phase1:lockallobjectsinwrite-set• Boundedspinning
Commit Protocol
• Phase1:lockallobjectsinwrite-set• Phase2:verifyv#’sofread-set
• Abortiflockedorchanged
Commit Protocol
• Phase1:lockallobjectsinwrite-set• Phase2:verifyv#’sofread-set• SelectTid(>v#ofr-andw-sets)
• Withoutawritetosharedstate!
Commit Protocol
• Phase1:lockallobjectsinwrite-set• Phase2:verifyv#’sofread-set• SelectTid(>v#ofr-andw-sets)• Phase3:updateobjectsinwrite-set
• UsingTidasv#
Commit Protocol
• Phase1:lockallobjectsinwrite-set• Phase2:verifyv#’sofread-set• SelectTid(>v#ofr-andw-sets)• Phase3:updateobjectsinwrite-set• Releaselocks
Addi*onal Issues
• Rangequeries• Absentkeys• Garbagecollec?on
Performance
Performance
• vs.Hstore• M.Stonebrakeretal,Theendofanarchitecturalera:(it’s?meforacompleterewrite),VLDB
‘07
Silo to STO
• STO(SoswareTransac?onalObjects)
STO
• Silotreesareanhighlyconcurrentdatastructures• Specifica?ondeterminespoten?alconcurrency• Implementa?onishidden
• Includingconcurrencycontrol
A vision for concurrent code
• Appsruntransac?ons
A vision for concurrent applica*on code, like boos*ng • Appsruntransac?ons• Usingtransac?on-awaredatatypes
• E.g.,sets,maps,arrays,boxes,queues
Transac*ons
begin{%dostuff:runqueries%usinginsert,lookup,update,delete,%andrange}
Back to our vision for concurrent code
• Appsruntransac?ons• Usingfasttransac?on-awaredatatypes
• Designedbyexperts• Requiresophis?ca?ontoimplement• ButsoareconcurrentdatatypesinJava
STO
• ThinkSilobrokenintotwoparts:• STOplatorm• Transac?on-awaredatatypes
STO PlaZorm
• Runstransac?ons• Transac?on{…}
• Providestransac?onstate• Read-andwrite-sets
• Runscommitprotocolusingcallbacks
Transac*on-aware datatypes
• Provideopsforusercode• E.g.,lookup,update,insert,delete,range
• Recordreadsandwritesviaplatorm• Providecallbacks
• lock,unlock,check,install,cleanup
Transac*on-aware datatypes
• Provideopsforusercode• Recordreadsandwritesviaplatorm• Providecallbacks
• lock,unlock,check,install,cleanup• cleanupforabort,aser-commit• E.g.,dele?ngakey
Transac*on-aware types
• Maps• Hashtables• Counters
• voidincr()vs.intincr()• Usescheckandinstall
Designing fast STO’s data types:
• Specifica?on• Somecommontricks
• Insertedelements:directupdates• Absentelements:extraversionnumbers• Read-my-writes:adjustments
• Correctness
Specifica*on
Inserted elements and repeated lookup
• Hybridstrategy• T1:insert“poisoned”element• T2:abortonobservinga“poisoned”element• T1:noneedtovalidateinser?onatcommit
Absent elements
• T1:get(K):Kisabsent• Howtovalidateatcommit?
• Extraversionnumbers• Forhashtable:onbucketofabsentkey• BTree:onparentnodeofabsentkey
Read-my-writes
• T1:scanarangeA..Z;insertakeyC• howtovalidaterange?
Correctness
• Versionnumbersonallsharedstate• Exclusivelocks• Checkmustfailifsegmentlockedorversionnumberchanged• Modifica?onsinvisibletoothertransac?onsbeforeinstall
Performance
Implementa*on
• Silo:7000linesofcode• STO-Silo:3000linesofcode
• Useshashtablesandtrees
Performance
• vs.TL2(grey)• Andboos?ng(lilac)
Op*mism vs Pessimism?
Effectsofpessimismandboos?ngonahashtablemicrobenchmark.Numbersarespeedupat16threadsrela?vetosingle-threadedSTO
More examples of powerful op*miza*ons
STO: last word for exploi*ng ADT in TM?
• Needsmorework• Moredatatypes• Methodology• Programminglanguageintegra?on• Distribu?on
Summary: Implemen*ng a Library of Transac*onal Data types:
• Dis?nc?onbetweenshortThreadlevelvscoarsegrainTransac?on-levelcoordina?oniskey
• Canre-usedatastructurecodeorco-designandcustomize:
• Boos?ng:ablackboxapproach,firstADT/STM(codere-use,restric?ons)
• STO:high-performancepessimis?c/op?mis?capproach(co-designandcustomize)
• (ThankstoM.HerlihyandB.Liskovforhelpwithslides!)
Ques*ons