410 likes | 641 Views
SNZI: Scalable Non-Zero Indicator. Yossi Lev (Brown University & Sun Microsystems Laboratories) Joint work with: Faith Ellen (University of Toronto) Victor Luchangco and Mark Moir (Sun Microsystems Laboratories). Presence Indicator. Threads Arrive and Depart a room
E N D
SNZI: ScalableNon-Zero Indicator Yossi Lev (Brown University & Sun Microsystems Laboratories) Joint work with: Faith Ellen (University of Toronto) Victor Luchangco and Mark Moir (Sun Microsystems Laboratories)
Presence Indicator • Threads Arrive and Depart a room • Query: Is there anybody in there? Room
Simple Solution: Counter • Threads Arrive and Depart a room • Query: Is there anybody in there? • Problem: Not Scalable Room 0 1 2 1 0 Counter
Simple Solution: Counter • Problem: Not Scalable • Arrive/Depart nonscalable • Query nonscalable • Observation:Counter Semantics too strong • Answers: how many threads in room • All we asked: are there any threads in room • Task: Exploit weaker semantics to develop A Scalable Non-Zero Indicator (SNZI)
SNZI Specification • State: • Surplus: a nonnegative integer • Operations: • Arrive: increment surplus • Depart: decrement surplus • Query: return whether surplus ≠ 0 • Well Formedness: Surplus ≥ 0
Solution’s Requirements • Linearizable • Lock Free • Query reads a 1-bit indicator in a given word • Update using LL/SC • Captures modifications by the outside world (spurious failures) • Scalability: Minimize modifications to indicator bit
Agenda • Two SNZI solutions • Base solution: Separate indicator and surplus data (Query scalability) • Hierarchical solution: Implement one SNZI using the other (Arrive/Depart scalability) • Applications • Performance
Separate Surplus and Indicator:Naïve Attempt • A simple counter and an indicator bit • Set or UnSet bit after updating counter • 0 1 transition: set the bit • 1 0 transition: unset the bit Room 0 1 2 1 0 Counter Indicator
Separate Surplus and Indicator:Naïve Attempt • A simple counter and an indicator bit • Set or UnSet bit after updating counter • What can go wrong? Zzzz… Oh oh…I’m in the dark! Room 0 1 2 1 0 Zzzz… Counter Indicator
Separate Surplus and Indicator:Naïve Attempt • A simple counter and an indicator bit • Set or UnSet bit after updating counter • What can go wrong? • Delay in setting bit causes unnoticed arrivals • Delay in unsetting bit causes obsolete writes
Separate Surplus and Indicator:Our solution • 1. Add an “Announce” bit to the counter word:Says: “Indicator needed to be set” • Set announce on 0 1 transition • Clearannounce after setting indicator • “Help” setting indicator if announce bit set
Separate Surplus and Indicator:Our solution • 1. Add an “Announce” bit to the counter word:Says: “Indicator needed to be set” • Set announce on 0 1 transition • Clearannounce after setting indicator • “Help” setting indicator if announce bit set 0 false Room 0 1 2 1 Counter &Announce bit Indicator
Separate Surplus and Indicator:Our solution • 1. Add an “Announce” bit to the counter word:Says: “Indicator needed to be set” • Set announce on 0 1 transition • Clearannounce after setting indicator • “Help” setting indicator if announce bit set Zzzz… 1 true Room 0 1 2 1 Counter &Announce bit Indicator
Separate Surplus and Indicator:Our solution • 1. Add an “Announce” bit to the counter word:Says: “Indicator needed to be set” • Set announce on 0 1 transition • Clearannounce after setting indicator • “Help” setting indicator if announce bit set Zzzz… 2 true Room 0 1 2 1 Counter &Announce bit Indicator
Separate Surplus and Indicator:Our solution • 1. Add an “Announce” bit to the counter word:Says: “Indicator needed to be set” • Set announce on 0 1 transition • Clearannounce after setting indicator • “Help” setting indicator if announce bit set Zzzz… 2 false Room 0 1 2 1 Counter &Announce bit Indicator
Separate Surplus and Indicator:Our solution • 2. Prevent obsolete writes:Unset the indicator using LL/SC • Read counter in between, unset only if still 0 1 false Room 0 1 2 1 Counter &Announce bit Indicator
Wasn’t writtenbefore LL Indicatorwasn’t writtenin between Separate Surplus and Indicator:Our solution • 2. Prevent obsolete writes:Unset the indicator using LL/SC • Read counter in between, unset only if still 0 LL( ) Read Counter, If still 0 SC(, false) 0 false Room 0 1 2 1 Counter &Announce bit Indicator
Base SNZI Hierarchical SNZI Hierarchical SNZI • Base SNZI took care of Query Scalability • Hierarchical SNZI: Arrive/Depart Scalability • Implement SNZI using a parent SNZI • Parent surplus > 0 iff a child surplus > 0 • Arrange solution in treeArrive/Depart at leaves, Query the root Filter
Hierarchical SNZI:The Basics • Invariant: Parent surplus > 0 iff child surplus > 0 • Similar to base SNZI, use a counter • 0 1 transition triggers Arrive at parent • 1 0transition triggers Depart at parent • Help arriving at parent during 0 1 transition • Unlike base SNZI • Use intermediate value ½ : 0 ½ 1 • Parent is not a bit: it has a surplus • Undo extraarrivals
Hierarchical SNZI Increment Counter • Invariant: Parent surplus > 0 iff child surplus > 0 Room 0 0 Counter Parent SNZISurplus
Hierarchical SNZI Increment Counter: 0 ½ • Invariant: Parent surplus > 0 iff child surplus > 0 Room ½ 0 Counter Parent SNZISurplus
Hierarchical SNZI Increment Counter: 0 ½ Arrive at Parent Try ½ 1 transition • Invariant: Parent surplus > 0 iff child surplus > 0 Room ½ 1 Counter Parent SNZISurplus
Hierarchical SNZI Increment Counter: 0 ½ Arrive at Parent Try ½ 1 transition • Invariant: Parent surplus > 0 iff child surplus > 0 Room 1 1 Counter Parent SNZISurplus
Hierarchical SNZI Increment Counter: 0 ½ Arrive at Parent Try ½ 1 transition • Invariant: Parent surplus > 0 iff child surplus > 0 Room ½ 1 Counter Parent SNZISurplus
Hierarchical SNZI Increment Counter: 0 ½ Arrive at Parent Read Counter as ½: Help Arrive at Parent • Invariant: Parent surplus > 0 iff child surplus > 0 Room ½ 1 Counter Parent SNZISurplus
Hierarchical SNZI Increment Counter: 0 ½ Arrive at Parent Read Counter as ½: Help Arrive at Parent Try ½ 1 transition • Invariant: Parent surplus > 0 iff child surplus > 0 Room ½ 2 Counter Parent SNZISurplus
Only one succeeds: single contribution to parent per 01 Hierarchical SNZI Increment Counter: 0 ½ Arrive at Parent Try ½ 1 transition Undo: Depart at Parent Read Counter as ½: Help Arrive at Parent Try ½ 1 transition Update counter for myself • Invariant: Parent surplus > 0 iff child surplus > 0 Room 1 2 1 Counter Parent SNZISurplus
Caveats • Counter must have a version number • Avoid the ABA problem • Also in Base algorithm • Undoing arrives at parent must happen after the executing Arrive incremented the counter • Helper defers undoing an Arrive operation until after incrementing the counter for itself • Otherwise indicator might “flicker” Detailed scenarios in the paper
Applications • Hybrid Transactional Memory (ASPLOS 06) • HW and SW transactions run concurrently • HW transactionspay overhead for conflict detection with SW transactions • Avoid overhead if no SW transactions are running: Are there any SW transactions out there? • Query performance is importantExecuted by HW transactions
Read Indicators • STM: Read OwnershipIs any transaction reading this location? • In addition: • Reset operation: • All readers logically “disappear” • New readers can arrive and depart before old readers departed • Indicator should work as if old readers are not there • Needed because writer invalidate old readers
1975 SNZI-R • Added an Epoch to the indicator • Indicator set iff someone in room that arrived in the current epoch • Operations: • Reset starts a new epoch • Arrive at current epoch • Depart at the epoch we arrived at • Query returns bit and current epoch Reset 2007 Epoch 1975 Room Indicator
1975 2007 SNZI-R • Added an Epoch to the indicator • Indicator set iff someone in room that arrived in the current epoch • Operations: • Reset starts a new epoch • Arrive at current epoch • Depart at the epoch we arrived at • Query returns bit and current epoch Epoch 2007 Room Indicator
Evaluation • System: 48-processor Sun FireTM 6800 • Experiment: • Visiting threads: keep arriving and departing. • Query thread: keeps querying the indicator. • Various tree depths • Measured: • Visit (Arrive+Depart) and Query throughput when varying #visiting threads • Compared with a simple counter implementation
Performance: Visiting Scalability • SuperSNZI: Simple counter with a SNZI indicator • Arrive by modifying counter if not contended • Use SNZI otherwise • Depart accordingly
Performance: SuperSNZI • SuperSNZI: Simple counter with a SNZI indicator • Arrive by modifying counter if not contended • Use SNZI otherwise • Depart accordingly
Conclusion • Presence indicator • Can be implemented using a simple counter • Counter semantics too strong Doesn’t scale • Exploits the weaker semantics we needto provide SNZI: A Scalable Non-Zero IndicatorPerform much better than a simple counter • Useful in practice