TurboHash: A Hash Table for Key-value Store on Persistent Memory

Major efforts on the design of persistent hash table on a non-volatile byte-addressable memory focus on efficient support of crash consistency with fence/flush primitives as well on non-disruptive table rehashing operations. When a data entry in a hash bucket cannot be updated with one atomic write, out-of-place update, instead of in-place update, is required to avoid data corruption after a failure. This often causes extra fences/flushes. Meanwhile, when open addressing techniques, such as linear probing, are adopted for high load factor, the scope of search for a key can be large. Excessive use of fence/flush and extended key search paths are two major sources of performance degradation with hash tables in persistent memory. To address the issues, we design a persistent hash table, named TurboHash, for building high-performance key-value store. Turbo-Hash has a number of much desired features all in one design. (1) It supports out-of-place update with a cost equivalent to that of an in-place write to provide lock-free reads. (2) Long-distance linear probing is minimized (only when necessary). (3) It conducts only shard resizing for expansion and avoids expensive directory-level rehashing; And (4) it exploits hardware features for high I/O and computation efficiency, including Intel's Optane DC's performance characteristics and Intel AVX instructions. We have implemented TurboHash on the Optane persistent memory and conducted extensive evaluations. Experiment results show that TurboHash improves state-of-the-arts by 2-8 times in terms of throughput and latency.

[1]  William Kuszmaul,et al.  IcebergHT: High Performance PMEM Hash Tables Through Stability and Low Associativity , 2022, ArXiv.

[2]  J. Rao,et al.  Characterizing the performance of intel optane persistent memory: a close look at its on-DIMM buffering , 2022, EuroSys.

[3]  Wei Cao,et al.  Revisiting the Design of LSM-tree Based OLTP Storage Engine with Persistent Memory , 2021, Proc. VLDB Endow..

[4]  Song Jiang,et al.  ChameleonDB: a key-value store for optane persistent memory , 2021, EuroSys.

[5]  Jianhua Sun,et al.  Persistent Memory Hash Indexes: An Experimental Evaluation , 2021, Proc. VLDB Endow..

[6]  Tianzheng Wang,et al.  Dash , 2020, Proc. VLDB Endow..

[7]  Song Jiang,et al.  RapidCDC: Leveraging Duplicate Locality to Accelerate Chunking in CDC-based Deduplication Systems , 2019, SoCC.

[8]  Taesoo Kim,et al.  Recipe: converting concurrent DRAM indexes to persistent-memory indexes , 2019, SOSP.

[9]  Erez Petrank,et al.  Efficient lock-free durable sets , 2019, Proc. ACM Program. Lang..

[10]  Steven Swanson,et al.  An Empirical Guide to the Behavior and Use of Scalable Persistent Memory , 2019, FAST.

[11]  Steven Swanson,et al.  Pangolin: A Fault-Tolerant Persistent Memory Programming Library , 2019, USENIX Annual Technical Conference.

[12]  Sam H. Noh,et al.  Write-Optimized Dynamic Hashing for Persistent Memory , 2019, FAST.

[13]  Peter Sanders,et al.  Concurrent Hash Tables , 2019, ACM Transactions on Parallel Computing.

[14]  Jie Wu,et al.  Write-Optimized and High-Performance Hashing Index Scheme for Persistent Memory , 2018, OSDI.

[15]  Andrea C. Arpaci-Dusseau,et al.  Redesigning LSMs for Nonvolatile Memory with NoveLSM , 2018, USENIX Annual Technical Conference.

[16]  Yu Hua,et al.  A Write-Friendly and Cache-Optimized Hashing Scheme for Non-Volatile Memory Systems , 2018, IEEE Transactions on Parallel and Distributed Systems.

[17]  Song Jiang,et al.  Search lookaside buffer: efficient caching for index data structures , 2017, SoCC.

[18]  Dean M. Tullsen,et al.  Horton Tables: Fast Hash Tables for In-Memory Data-Intensive Computing , 2016, USENIX Annual Technical Conference.

[19]  Ismail Oukid,et al.  FPTree: A Hybrid SCM-DRAM Persistent and Concurrent B-Tree for Storage Class Memory , 2016, SIGMOD Conference.

[20]  Sven Karlsson,et al.  A scalable lock-free hash table with open addressing , 2016, PPoPP.

[21]  Asim Kadav,et al.  Revisiting Hash Table Design for Phase Change Memory , 2016, OPSR.

[22]  Peter Sanders,et al.  Concurrent hash tables: fast and general?(!) , 2016, PPoPP.

[23]  Mohammed G. Khatib,et al.  Revisiting hash table design for phase change memory , 2015, INFLOW '15.

[24]  Tudor David,et al.  Asynchronized Concurrency: The Secret to Scaling Concurrent Search Data Structures , 2015, ASPLOS.

[25]  Garth A. Gibson,et al.  Scale and Concurrency of GIGA+: File System Directories with Millions of Files , 2011, FAST.

[26]  Jin Li,et al.  FlashStore , 2010, Proc. VLDB Endow..

[27]  Adam Silberstein,et al.  Benchmarking cloud serving systems with YCSB , 2010, SoCC '10.

[28]  Maurice Herlihy,et al.  Hopscotch Hashing , 2008, DISC.

[29]  Timothy J. Purcell Sorting and searching , 2005, SIGGRAPH Courses.

[30]  Hui Gao,et al.  Almost wait-free resizable hashtables , 2004, 18th International Parallel and Distributed Processing Symposium, 2004. Proceedings..

[31]  Frank B. Schmuck,et al.  Proceedings of the Fast 2002 Conference on File and Storage Technologies Gpfs: a Shared-disk File System for Large Computing Clusters , 2022 .

[32]  Rasmus Pagh,et al.  Cuckoo Hashing , 2001, Encyclopedia of Algorithms.

[33]  Ronald Fagin,et al.  Extendible hashing—a fast access method for dynamic files , 1979, ACM Trans. Database Syst..

[34]  Changwoo Min,et al.  TIPS: Making Volatile Index Structures Persistent with DRAM-NVMM Tiering , 2021, USENIX Annual Technical Conference.

[35]  Yu Hua,et al.  One-sided RDMA-Conscious Extendible Hashing for Disaggregated Memory , 2021, USENIX Annual Technical Conference.

[36]  Youyou Lu,et al.  Nap: A Black-Box Approach to NUMA-Aware Persistent Memory Indexes , 2021, OSDI.

[37]  Bo Ding,et al.  Lock-free Concurrent Level Hashing for Persistent Memory , 2020, USENIX Annual Technical Conference.

[38]  Jiguang Wan,et al.  MatrixKV: Reducing Write Stalls and Write Amplification in LSM-tree Based KV Stores with Matrix Container in NVM , 2020, USENIX Annual Technical Conference.

[39]  Sam H. Noh,et al.  SLM-DB: Single-Level Key-Value Store with Persistent Memory , 2019, FAST.

[40]  Mike Paleczny,et al.  Scaling Memcache at Facebook , 2013, NSDI.

[41]  Keir Fraser,et al.  Practical lock-freedom , 2003 .

[42]  Donald E. Knuth,et al.  The art of computer programming, volume 3: (2nd ed.) sorting and searching , 1998 .

[43]  D. Andersen,et al.  MemC3: Compact and Concurrent MemCache with Dumber Caching and Smarter Hashing , 2013, NSDI.