[论文解读] Don't Persist All : Efficient Persistent Data Structures
本文提出了一种在持久内存中对数据结构实现部分持久化的方案,仅持久化关键数据字段(例如链表中的 next 指针),而冗余字段(例如 prev 指针)则在崩溃后重建。通过减少所需刷新次数,该方法在以刷新为主导的工作负载中实现了最高 165% 的性能提升,平均性能提升达 15%,优于完全持久化方案。
Data structures used in software development have inbuilt redundancy to improve software reliability and to speed up performance. Examples include a Doubly Linked List which allows a faster deletion due to the presence of the previous pointer. With the introduction of Persistent Memory, storing the redundant data fields into persistent memory adds a significant write overhead, and reduces performance. In this work, we focus on three data structures - Doubly Linked List, B+Tree and Hashmap, and showcase alternate partly persistent implementations where we only store a limited set of data fields to persistent memory. After a crash/restart, we use the persistent data fields to recreate the data structures along with the redundant data fields. We compare our implementation with the base implementation and show that we achieve speedups around 5-20% for some data structures, and up to 165% for a flush-dominated data structure.
研究动机与目标
- 减少持久内存系统中频繁缓存刷新导致的性能开销。
- 探究仅持久化关键数据字段而非所有冗余字段是否能提升持久数据结构的性能。
- 设计高效的重建算法,在系统重启后于易失性内存中重建冗余字段。
- 评估选择性持久化对常见数据结构(如双向链表、B+树和哈希表)的性能影响。
- 证明最小化持久写入可显著提升应用性能,且不损害正确性或可靠性。
提出的方法
- 仅将关键数据字段(如双向链表中的 'next' 指针)持久化到非易失性内存,而冗余字段(如 'prev' 指针)则不持久化。
- 崩溃后,系统仅利用持久化字段在易失性内存中重建完整数据结构,利用数据结构的结构不变性。
- 重建过程经过性能优化,耗时因数据结构复杂度而异(例如,1.2 GB 的链表重建耗时 2 秒,类似大小的哈希表耗时 7 秒)。
- 该方法采用两阶段设计:操作在易失性内存中进行,仅在必要时才将数据刷新到持久内存,从而最小化持久写入。
- 实现中选择性使用内存屏障和缓存刷新,仅作用于关键数据字段,从而降低整体刷新开销。
- 系统包含正确性检查,确保刷新操作仅作用于持久内存区域,并在注入故障后验证恢复能力。
实验结果
研究问题
- RQ1减少数据结构中持久化字段的数量是否能在持久内存系统中带来可测量的性能提升?
- RQ2在以刷新为主导的工作负载下,选择性持久化对常见数据结构(如链表、B+树和哈希表)的性能有何影响?
- RQ3在崩溃后于易失性内存中重建冗余数据字段的性能开销是多少?该开销是否足够低,足以证明减少持久写入的合理性?
- RQ4数据对齐如何影响持久内存中刷新操作的性能,尤其是在复用同一缓存行时?
- RQ5在不损害数据一致性或正确性的前提下,通过最小化刷新操作能实现多大程度的性能提升?
主要发现
- 部分持久化方法相较于朴素的全持久化实现,平均性能提升了 15%。
- 在以刷新为主导的工作负载中,该方法通过大幅减少所需刷新次数,最高实现 165% 的性能提升。
- 1.2 GB 的哈希表重建耗时 7 秒,而类似大小的链表仅需 2 秒,表明重建时间与数据结构类型密切相关。
- 非对齐数据刷新相比对齐的 64 字节刷新,性能下降了 61.3%,凸显了在持久内存访问中缓存行对齐的重要性。
- 在故障注入测试中,系统保持了正确性:在刷新前注入的错误可通过重建机制成功恢复。
- 性能提升在高写入和高刷新频率的工作负载中最为显著,因为此时减少持久写入的影响最大。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。