Elimina'ng ¡Read ¡Barriers ¡through ¡ Procras'na'on ¡and ¡Cleanliness ¡ KC ¡Sivaramakrishnan ¡ Lukasz ¡Ziarek ¡ Suresh ¡Jagannathan ¡
Big ¡Picture ¡ Lightweight ¡user-‑level ¡threads ¡ Lots ¡of ¡ t1 ¡ t2 ¡ tn ¡ concurrency! ¡ Scheduler ¡1 ¡ Core ¡1 ¡ Core ¡2 ¡ Core ¡n ¡ Heap ¡ 2 ¡
Big ¡Picture ¡ Big ¡Picture ¡ Expendable ¡ resource? ¡ Lots ¡of ¡ t1 ¡ t2 ¡ tn ¡ concurrency! ¡ Scheduler ¡1 ¡ Heap ¡ 3 ¡ 3 ¡
Big ¡Picture ¡ Big ¡Picture ¡ Exploit ¡program ¡concurrency ¡ ¡ to ¡ ¡ eliminate ¡read ¡barriers ¡from ¡thread-‑local ¡collectors ¡ Expendable ¡ resource? ¡ Lots ¡of ¡ t2 ¡ tn ¡ concurrency! ¡ Scheduler ¡1 ¡ t1 ¡ Alleviate ¡MM ¡ cost? ¡ Heap ¡ GC ¡OperaDon ¡ 4 ¡ 4 ¡
MulDMLton ¡ • Goals ¡ – Safety, ¡Scalability, ¡ready ¡for ¡future ¡manycore ¡processors ¡ • Parallel ¡extension ¡of ¡MLton ¡– ¡a ¡whole-‑program, ¡ opDmizing ¡SML ¡compiler ¡ • Parallel ¡extension ¡of ¡Concurrent ¡ML ¡ – Lots ¡of ¡Concurrency! ¡ – Interact ¡by ¡sending ¡messages ¡over ¡first-‑class ¡channels ¡ send ¡(c, ¡v) ¡ C ¡ v ¡ ß ¡recv ¡(c) ¡ 5 ¡
MulDMLton ¡GC: ¡ConsideraDons ¡ • Standard ¡ML ¡– ¡funcDonal ¡PL ¡with ¡side-‑effects ¡ – Most ¡objects ¡are ¡small ¡and ¡ephemeral ¡ • Independent ¡generaDonal ¡GC ¡ – # ¡MutaDons ¡<< ¡# ¡Reads ¡ • Keep ¡cost ¡of ¡reads ¡to ¡be ¡low ¡ • Minimize ¡NUMA ¡effects ¡ • Run ¡on ¡non-‑cache ¡coherent ¡HW ¡ ¡ 6 ¡
MulDMLton ¡GC: ¡Design ¡ Thread-‑local ¡GC ¡ Shared ¡Heap ¡ Local ¡Heap ¡ Local ¡Heap ¡ Local ¡Heap ¡ Local ¡Heap ¡ Core ¡ Core ¡ Core ¡ Core ¡ • NUMA ¡Awareness ¡ • Circumvent ¡cache-‑coherence ¡issues ¡ 7 ¡
Invariant ¡PreservaDon ¡ • Read ¡and ¡write ¡barriers ¡for ¡preserving ¡ invariants ¡ TransiDve ¡ closure ¡of ¡x ¡ ExporDng ¡ writes ¡ Shared ¡Heap ¡ Shared ¡Heap ¡ Target ¡ r ¡ r ¡ x ¡ r ¡:= ¡x ¡ x ¡ Mutator ¡ FWD ¡ Source ¡ needs ¡read ¡ Local ¡Heap ¡ Local ¡Heap ¡ barriers! ¡ 8 ¡
Challenge ¡ • Object ¡reads ¡are ¡pervasive ¡ – RB ¡overhead ¡ ∝ ¡cost ¡(RB) ¡* ¡frequency ¡(RB) ¡ • Read ¡barrier ¡opDmizaDon ¡ – Stacks ¡and ¡Registers ¡never ¡point ¡to ¡forwarded ¡objects ¡ Mean ¡Overhead ¡ �� ��� -‑-‑-‑-‑-‑-‑-‑-‑-‑-‑-‑-‑-‑-‑-‑-‑-‑-‑-‑-‑-‑-‑ ¡ Read ¡barrier ¡overhead ¡(%) ¡ ��� �� 20.1 ¡% ¡ ���� 15.3 ¡% ¡ �� 21.3 ¡% ¡ ������������ �� �� �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 9 ¡
Mutator ¡and ¡Forwarded ¡Objects ¡ # ¡Encountered ¡ forwarded ¡objects ¡ < ¡ 0.00001 ¡ # ¡RB ¡invocaDons ¡ Eliminate ¡read ¡barriers ¡altogether ¡ 10 ¡
RB ¡EliminaDon ¡ • Visibility ¡Invariant ¡ – Mutator ¡does ¡not ¡encounter ¡forwarded ¡objects ¡ • ObservaDon ¡ – No ¡forwarded ¡objects ¡created ¡ ⇒ ¡visibility ¡ invariant ¡ ⇒ ¡No ¡read ¡barriers ¡ • Exploit ¡concurrency ¡ à à ¡Procras(na(on! ¡ ¡ 11 ¡
ProcrasDnaDon ¡ T1 ¡ T2 ¡ Shared ¡Heap ¡ r1 ¡ r2 ¡ à ¡r1 ¡:= ¡x1 ¡ ¡ ¡ ¡ ¡ ¡ ¡r2 ¡:= ¡x2 ¡ x1 ¡ x2 ¡ Local ¡Heap ¡ à ¡T ¡is ¡ running ¡ T ¡ à ¡T ¡is ¡ suspended ¡ T ¡ à ¡T ¡is ¡ blocked ¡ T ¡ 12 ¡
ProcrasDnaDon ¡ T1 ¡ T2 ¡ Shared ¡Heap ¡ r1 ¡ r2 ¡ r1 ¡:= ¡x1 ¡ ¡ à ¡r2 ¡:= ¡x2 ¡ Control ¡ switches ¡ to ¡T2 ¡ x1 ¡ x2 ¡ Local ¡Heap ¡ à ¡T ¡is ¡ running ¡ T ¡ Delayed ¡write ¡list ¡ à ¡ à ¡T ¡is ¡ suspended ¡ T ¡ à ¡T ¡is ¡ blocked ¡ T ¡ 13 ¡
ProcrasDnaDon ¡ T1 ¡ T2 ¡ Shared ¡Heap ¡ r1 ¡ r2 ¡ r1 ¡:= ¡x1 ¡ ¡ ¡ ¡ ¡ ¡ ¡r2 ¡:= ¡x2 ¡ x1 ¡ x2 ¡ Local ¡Heap ¡ à ¡T ¡is ¡ running ¡ T ¡ Delayed ¡write ¡list ¡ à ¡ à ¡T ¡is ¡ suspended ¡ T ¡ à ¡T ¡is ¡ blocked ¡ T ¡ 14 ¡
ProcrasDnaDon ¡ T1 ¡ T2 ¡ Shared ¡Heap ¡ r1 ¡ x1 ¡ r2 ¡ x2 ¡ r1 ¡:= ¡x1 ¡ ¡ ¡ ¡ ¡ ¡ ¡r2 ¡:= ¡x2 ¡ FWD ¡ FWD ¡ Local ¡Heap ¡ à ¡T ¡is ¡ running ¡ T ¡ Delayed ¡write ¡list ¡ à ¡ à ¡T ¡is ¡ suspended ¡ T ¡ à ¡T ¡is ¡ blocked ¡ T ¡ 15 ¡
ProcrasDnaDon ¡ T1 ¡ T2 ¡ Shared ¡Heap ¡ r1 ¡ x1 ¡ r2 ¡ x2 ¡ à ¡r1 ¡:= ¡x1 ¡ ¡ ¡ ¡ ¡ ¡ ¡r2 ¡:= ¡x2 ¡ Force ¡local ¡ GC ¡ Local ¡Heap ¡ à ¡T ¡is ¡ running ¡ T ¡ Delayed ¡write ¡list ¡ à ¡ à ¡T ¡is ¡ suspended ¡ T ¡ à ¡T ¡is ¡ blocked ¡ T ¡ 16 ¡
Correctness ¡ • Does ¡ProcrasDnaDon ¡introduce ¡deadlocks? ¡ – Threads ¡can ¡be ¡procrasDnated ¡while ¡holding ¡a ¡lock! ¡ à ¡T ¡is ¡ running ¡ T ¡ ¡ T1 ¡ T2 ¡ T2 ¡ à ¡T ¡is ¡ suspended ¡ T ¡ à ¡T ¡is ¡ blocked ¡ T ¡ 17 ¡
Correctness ¡ • Does ¡ProcrasDnaDon ¡introduce ¡deadlocks? ¡ – Threads ¡can ¡be ¡procrasDnated ¡while ¡holding ¡a ¡lock! ¡ à ¡T ¡is ¡ running ¡ T ¡ ¡ T1 ¡ T2 ¡ à ¡T ¡is ¡ suspended ¡ T ¡ à ¡T ¡is ¡ blocked ¡ T ¡ • Is ¡ProcrasDnaDon ¡safe? ¡ – Yes. ¡Forcing ¡a ¡local ¡GC ¡unblocks ¡the ¡threads. ¡ – No ¡deadlocks ¡or ¡livelocks! ¡ 18 ¡
Correctness ¡ • Does ¡ProcrasDnaDon ¡introduce ¡deadlocks? ¡ – Threads ¡can ¡be ¡procrasDnated ¡while ¡holding ¡a ¡lock! ¡ à ¡T ¡is ¡ running ¡ T ¡ ¡ T1 ¡ T2 ¡ à ¡T ¡is ¡ suspended ¡ T ¡ à ¡T ¡is ¡ blocked ¡ T ¡ • Is ¡ProcrasDnaDon ¡safe? ¡ – Yes. ¡Forcing ¡a ¡local ¡GC ¡unblocks ¡the ¡threads. ¡ – No ¡deadlocks ¡or ¡livelocks! ¡ 19 ¡
Is ¡ProcrasDnaDon ¡alone ¡enough? ¡ • Efficacy ¡(ProcrasDnaDon) ¡ ∝ ¡# ¡Available ¡runnable ¡ threads ¡ ¡ M ¡ Serial ¡(low ¡thread ¡availability) ¡ F ¡ W 1 ¡ W 1 ¡ W 1 ¡ Concurrent ¡(high ¡thread ¡availability) ¡ J ¡ • With ¡ProcrasDnaDon, ¡ half ¡of ¡local ¡major ¡GCs ¡were ¡ forced ¡ Eager ¡exporDng ¡writes ¡while ¡preserving ¡ visibility ¡invariant ¡ 20 ¡
Cleanliness ¡ • A ¡clean ¡object ¡closure ¡can ¡be ¡liped ¡to ¡the ¡ shared ¡heap ¡without ¡breaking ¡the ¡visibility ¡ invariant ¡ r ¡:= ¡x ¡ inLocalHeap ¡(x) ¡ && ¡ inSharedHeap ¡(r) ¡ isClean ¡(x) ¡ Eager ¡write ¡(no ¡ProcrasDnaDon) ¡ 21 ¡
Cleanliness: ¡IntuiDon ¡ Shared ¡Heap ¡ lip ¡(x) ¡to ¡shared ¡ ¡ heap ¡ x ¡ Local ¡Heap ¡ 22 ¡
Cleanliness: ¡IntuiDon ¡ Shared ¡Heap ¡ x ¡ find ¡all ¡references ¡ ¡ to ¡FWD ¡ FWD ¡ Local ¡Heap ¡ 23 ¡
Cleanliness: ¡IntuiDon ¡ Shared ¡Heap ¡ x ¡ Need ¡to ¡scan ¡the ¡ ¡ enDre ¡local ¡heap ¡ Local ¡Heap ¡ 24 ¡
Cleanliness: ¡Simpler ¡quesDon ¡ Shared ¡Heap ¡ x ¡ Do ¡all ¡references ¡ ¡ originate ¡from ¡ ¡ heap ¡region ¡ h? ¡ FWD ¡ h ¡ Local ¡Heap ¡ sizeof ¡(h) ¡<< ¡sizeof ¡(local ¡heap) ¡ 25 ¡
Cleanliness: ¡Simpler ¡quesDon ¡ Shared ¡Heap ¡ x ¡ Only ¡scan ¡the ¡ heap ¡region ¡ h. ¡ Heap ¡ session! ¡ h ¡ Local ¡Heap ¡ sizeof ¡(h) ¡<< ¡sizeof ¡(local ¡heap) ¡ 26 ¡
Recommend
More recommend