Skip to main content
QUICK REVIEW

[论文解读] Persistent Memory Transactions

Virendra J. Marathe, Achin Mishra|arXiv (Cornell University)|Mar 9, 2018
Distributed systems and fault tolerance参考文献 20被引用 16
一句话总结

本文对三种用于持久内存的事务运行时系统——撤销日志、重做日志和写时复制——进行了全面的性能分析,评估了其在工作负载访问模式、持久性域配置、缓存局部性以及元数据管理开销等方面的权衡。研究发现,在所有配置下并无单一运行时占据绝对优势,性能高度依赖于工作负载特性以及系统级因素(如持久化屏障延迟和内存层次结构设计)。

ABSTRACT

This paper presents a comprehensive analysis of performance trade offs between implementation choices for transaction runtime systems on persistent memory. We compare three implementations of transaction runtimes: undo logging, redo logging, and copy-on-write. We also present a memory allocator that plugs into these runtimes. Our microbenchmark based evaluation focuses on understanding the interplay between various factors that contribute to performance differences between the three runtimes -- read/write access patterns of workloads, size of the persistence domain (portion of the memory hierarchy where the data is effectively persistent), cache locality, and transaction runtime bookkeeping overheads. No single runtime emerges as a clear winner. We confirm our analysis in more realistic settings of three "real world" applications we developed with our transactional API: (i) a key-value store we implemented from scratch, (ii) a SQLite port, and (iii) a persistified version of memcached, a popular key-value store. These findings are not only consistent with our microbenchmark analysis, but also provide additional interesting insights into other factors (e.g. effects of multithreading and synchronization) that affect application performance.

研究动机与目标

  • 系统性地评估在持久内存系统中,撤销日志、重做日志和写时复制事务运行时之间的性能权衡。
  • 分析工作负载特性(尤其是读/写访问模式)与系统级因素(如持久性域设计和缓存局部性)之间的相互作用。
  • 开发并集成一种内存分配器,以减少所有三种事务运行时模型中的持久化屏障开销。
  • 在真实世界应用中验证微基准测试结果,包括一个键值存储、一个移植的 SQLite 和一个持久化的 memcached。
  • 为系统设计者提供基于工作负载和硬件配置选择事务运行时的实用建议。

提出的方法

  • 基于持久内存的撤销日志、重做日志和写时复制语义,设计并实现三种事务运行时系统。
  • 提出一种基于硬件和软件对内存层次结构中有效持久性的支持的新持久性域分类法。
  • 开发一种内存分配器,将分配跟踪与事务日志解耦,从而可在所有三种运行时模型中复用。
  • 优化所有运行时,以最小化每个事务提交所需的持久化屏障指令数量。
  • 在英特尔的软件仿真平台上对不同读/写比例和持久化屏障延迟进行微基准测试。
  • 使用三个真实世界应用验证研究结果:一个自定义键值存储、一个移植的 SQLite 和一个持久化的 memcached。

实验结果

研究问题

  • RQ1在持久内存中,不同的事务运行时策略(撤销日志、重做日志、写时复制)在不同读/写访问模式下的表现如何?
  • RQ2持久性域配置对事务运行时性能有何影响,特别是在持久化屏障开销方面?
  • RQ3缓存局部性和事务运行时元数据管理开销如何影响端到端的事务性能?
  • RQ4真实世界应用在多大程度上反映了微基准测试中观察到的性能趋势?
  • RQ5多线程和同步开销如何影响并发工作负载中的事务性能?

主要发现

  • 在所有工作负载和系统配置下,没有一种事务运行时(撤销日志、重做日志或写时复制)能始终优于其他两种。
  • 写时复制事务由于内存分配和复制开销较高,表现出较高的延迟,因此不适合高吞吐量工作负载。
  • 在高写入混合工作负载下,撤销日志在 put 操作中表现出显著更高的延迟(超过 200 微秒),尤其是在 memcached 等多线程场景中。
  • 重做日志在读取密集型工作负载中表现良好,但在读后写场景中因查找开销而性能下降,尤其在持久化屏障延迟较高的情况下。
  • 事务性能对工作负载访问模式、持久性域设计和缓存局部性之间的相互作用极为敏感,不存在放之四海而皆准的解决方案。
  • 真实世界应用(如 memcached 和键值存储)验证了微基准测试的趋势,揭示了来自同步和网络开销的额外性能瓶颈。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。