| % future/HTMtableFull.tex |
| % SPDX-License-Identifier: CC-BY-SA-3.0 |
| |
| \begin{sidewaystable*}[htbp] |
| \input{future/HTMtableColor} |
| \centering |
| \caption{Comparison of Locking (Plain and Augmented) and HTM |
| (\colorbox{plus}{Advantage}, \colorbox{minus}{Disadvantage}, |
| \colorbox{down}{Strong Disadvantage})} |
| \label{tab:future:Comparison of Locking (Plain and Augmented) and HTM} |
| \footnotesize |
| \setstretch{0.95} |
| %\renewcommand*{\arraystretch}{1.4} |
| \setlength{\tabcolsep}{3pt} |
| \resizebox{8in}{!}{ |
| \begin{tabularx}{8.5in}{p{.85in}cXcXcX} |
| \toprule |
| & |
| & \multicolumn{1}{c}{Locking} & |
| & \multicolumn{1}{c}{Locking with Userspace RCU or Hazard Pointers} & |
| & \multicolumn{1}{c}{Hardware Transactional Memory} \\ |
| \midrule |
| Basic Idea & |
| & Allow only one thread at a time to access a given set of objects. & |
| & Allow only one thread at a time to access a given set of objects. & |
| & Cause a given operation over a set of objects to execute atomically. \\ |
| \midrule |
| Scope & |
| & \Pl Handles all operations. & |
| & \Pl Handles all operations. & |
| & \Pl Handles revocable operations. \\ |
| \addlinespace[4pt] |
| & |
| & & |
| & & |
| & \Mn Irrevocable operations force fallback (typically to locking). \\ |
| \midrule |
| Composability & |
| & \Dw Limited by deadlock. & |
| & \Pl Readers limited only by grace-period-wait operations. & |
| & \Dw Limited by irrevocable operations, transaction size, and deadlock. |
| (Assuming lock-based fallback code.) \\ |
| \addlinespace[4pt] |
| & |
| & & |
| & \Mn Updaters limited by deadlock. Readers reduce deadlock. & |
| & \\ |
| \midrule |
| Scalability \& Performance & |
| & \Mn Data must be partitionable to avoid lock contention. & |
| & \Mn Data must be partitionable to avoid lock contention among updaters. & |
| & \Mn Data must be partitionable to avoid conflicts. \\ |
| \addlinespace[4pt] |
| & |
| & & |
| & \Pl Partitioning not needed for readers. & |
| & \\ |
| \cmidrule{3-7} |
| & |
| & \Dw Partitioning must typically be fixed at design time. & |
| & \Dw Partitioning for updaters must typically be fixed at design time. & |
| & \Pl Dynamic adjustment of partitioning carried out automatically |
| down to cacheline boundaries. \\ |
| \addlinespace[4pt] |
| & |
| & & |
| & \Pl Partitioning not needed for readers. & |
| & \Mn Partitioning required for fallbacks (less important for rare |
| fallbacks). \\ |
| \cmidrule{3-7} |
| & |
| & \Dw Locking primitives typically result in expensive cache misses and |
| memory-barrier instructions.& |
| & \Dw Updater locking primitives typically result in expensive cache |
| misses and memory-barrier instructions. & |
| & \Mn Transactions begin/end instructions typically do not result in |
| cache misses, but do have memory-ordering and overhead |
| consequences. \\ |
| \cmidrule{3-7} |
| & |
| & \Pl Contention effects are focused on acquisition and release, so that |
| the critical section runs at full speed. & |
| & \Pl Update-side contention effects are focused on acquisition and |
| release, so that the critical section runs at full speed. & |
| & \Mn Contention aborts conflicting transactions, even if they have been |
| running for a long time. \\ |
| \addlinespace[4pt] |
| & |
| & & |
| & \Pl Readers do not contend with updaters or with each other. & |
| & \\ |
| \cmidrule{3-7} |
| & |
| & & |
| & \Pl Read-side primitives are typically bounded wait-free with |
| low overhead. |
| (Lock-free with low overhead for hazard pointers.) & |
| & \Mn Read-only transactions subject to conflicts and rollbacks. No |
| forward-progress guarantees other than those supplied by fallback |
| code. \\ |
| \cmidrule{3-7} |
| & |
| & \Pl Privatization operations are simple, intuitive, performant, |
| and scalable. & |
| & \Pl Privatization operations are simple, intuitive, performant, |
| and scalable when data is visible only to updaters. & |
| & \Mn Privatized data contributes to transaction size. \\ |
| \addlinespace[4pt] |
| & |
| & & |
| & \Mn Privatization operations are expensive (though still intuitive |
| and scalable) for reader-visible data. & |
| & \\ |
| \midrule |
| Hardware Support & |
| & \Pl Commodity hardware suffices. & |
| & \Pl Commodity hardware suffices. & |
| & \Mn New hardware required (and is starting to become available). \\ |
| \cmidrule{3-7} |
| & |
| & \Pl Performance is insensitive to cache-geometry details. & |
| & \Pl Performance is insensitive to cache-geometry details. & |
| & \Mn Performance depends critically on cache geometry. \\ |
| \midrule |
| Software Support & |
| & \Pl APIs exist, large body of code and experience, debuggers operate |
| naturally. & |
| & \Pl APIs exist, large body of code and experience, debuggers operate |
| naturally. & |
| & \Mn APIs emerging, little experience outside of DBMS, breakpoints |
| mid-transaction can be problematic. \\ |
| \midrule |
| Interaction With Other Mechanisms & |
| & \Pl Long experience of successful interaction. & |
| & \Pl Long experience of successful interaction. & |
| & \Dw Just beginning investigation of interaction. \\ |
| \midrule |
| Practical Apps & |
| & \Pl Yes. & |
| & \Pl Yes. & |
| & \Pl Yes. \\ |
| \midrule |
| Wide Applicability & |
| & \Pl Yes. & |
| & \Pl Yes. & |
| & \Mn Jury still out. \\ |
| \bottomrule |
| \end{tabularx} |
| } |
| \end{sidewaystable*} |