持久化内存挑战

翻译自论文:Memory Management Techniques for Large-Scale Persistent-Main-Memory Systems

Storage Class Memory (SCM) 带来的独特机遇带来了一系列新的编程挑战:
(1) data consistency 数据一致性;
(2) 数据恢复 data recovery;
(3) persistent memory leaks 持久性内存泄漏;
(4) partial writes 部分写入;
(5) persistent memory fragmentation 持久化内存碎片;
(6) virtual address space fragmentation虚拟地址空间碎片化。
我们将在下面详细介绍这些挑战。

1、Data consistency

SCM 使用支持 SCM 的文件系统进行管理,该系统允许应用层通过内存映射直接访问 SCM。这使 CPU 能够通过加载(Load)和存储(store)语义直接访问 SCM。如图 1 所示,从 SCM 到 CPU 寄存器的路径很长并且大部分是易失性的。它包括store buffers、CPU caches和memory controller buffers,软件几乎无法控制所有这些缓冲区。此外,现代 CPU 实现了复杂的无序执行(out-of-order execution)和partial store ordering(Intel x86)或relaxed-memory ordering(IBM PowerPC)。因此,内存存储需要明确排序和持久化以确保一致性。当前的 x86 CPU 提供 CLFLUSH、MFENCE、SFENCE 和non-temporal store指令来强制执行内存排序和数据持久性。此外,CLFLUSHOPT 和 CLWB :CLFLUSH 同步驱逐cache line并将其写回内存。因此,数据需要与cache line边界对齐,以避免错误地意外驱逐共享的数据。 SFENCE 是一个内存屏障,它序列化所有挂起的store,而 MFENCE 序列化挂起的load和store。Non-temporal stores通过写入特殊buffer来绕过cache,该buffer在已满或发出 SFENCE 时被逐出。 CLFLUSHOPT 是 CLFLUSH 的异步版本,需要一个 MFENCE 进行序列化。最后,CLWB 将cache line写回内存而不将其驱逐,这在数据持久化后不久被访问时很有用。

图一 Volatility chain in x86-like CPUs

直到最近,memory controller buffers才被认为是易失性链的一部分。 从那时起,英特尔宣布在所有支持持久化内存的平台中支持Asynchronous DRAM Self-Refresh (ADR)。 ADR 使用电容器保护memory controller buffers中仍待处理的数据免受电源故障的影响。 因此,可以安全地假设cache line 刷新保证持久性。

2、Data recovery

当程序重启时,它会丢失其先前的地址空间,从而使存储的虚拟指针无效。 因此,需要设计发现和恢复存储在 SCM 中的数据的方法。 在 SCM 之上使用文件系统提供了一种在重新启动后发现数据的方法。
读取和写入由 SCM-aware文件系统创建的文件和内存映射是通过直接加载和存储指令进行的。 因此,SCM-aware文件系统不应对应用程序产生负面性能影响。 最先进的数据恢复技术是使用文件 ID 和相对于该文件的偏移量形式的持久指针。

3、persistent memory leaks

与易失性内存相比,内存泄漏给持久化内存带来了更大的问题。 此外,持久化内存面临着由软件故障导致的一类新的内存泄漏。 例如:考虑链表(linked-list)插入,如果在分配新节点之后但在链接到前一个节点之前发生崩溃,persistent allocator会记住分配,而数据结构不会,从而导致持久化内存泄漏。(被分配出去的内存,但是是无法被使用的)

4、partial writes

将 p-atomic store定义为在单个 CPU 周期内执行的存储;也就是说,一个不受部分写入影响的存储。 当前的 x86 CPU 仅支持 8 字节 p-atomic存储;较大的写入操作易出现部分写入,因为 CPU 可能随时推测性地驱逐cache line。 例如,如果一个线程正在写入 64 字节cache-line对其的字符串,它可能会写入 16 字节,然后被取消descheduled。 同时,CPU 可能会驱逐字符串所在的cache line,保留写入的前 16 个字节。 此时的故障将破坏 SCM 中的字符串。 解决此问题的常用方法是使用flag来来指示较大的写入操作是否已完成达到p-atomic目的。

5、persistent memory fragmentation

持久化内存分配比transient内存分配具有更长的生命周期,因此对整个应用程序的影响更大。虽然重启是对易失性(volatile)内存进行碎片整理的有效的最后的手段,但它在持久内存的情况下无效。这与文件系统的问题类似。然而,文件系统碎片整理解决方案不能应用于 SCM,因为文件系统有一个额外的间接步骤:它们使用虚拟内存映射和 DRAM 中的buffer pages,这使它们能够透明地移动物理页面来解决碎片化内存。(这是什么意思???)相反地,持久内存映射提供应用层的直接的对物理内存访问,而无需在 DRAM 中进行buffer。因此,持久内存不能透明地移动,因为它绑定到它的内存映射。因此,避免碎片是任何持久内存分配器的核心要求。

6、virtual address space fragmentation

鉴于存在具有数十TB主存的系统,并且目前软件和硬件支持的地址空间数量有限,预计 SCM 支持的更大主存容量将对地址空间碎片带来前所未有的挑战。事实上,SCM 支持数百 TB 的主内存容量。当前的 Intel x86 处理器使用 48 位地址空间,最大容量为 256 TB。然而,Linux 只使用 47 位,因为一位是为内核保留的。因此,Linux 目前最多支持 128 TB 的地址空间。出现了以下两个挑战:这种容量对于使用 SCM 的下一代服务器来说是不够的,物理内存量接近可用虚拟地址空间的限制,使后者容易碎片化。因此,由于缺少足够大的连续虚拟内存区域,内存映射 SCM 中的文件可能会失败。为了解决这个问题,从 Linux 内核 v4.12 开始,页表将扩展到 5 级而不是 4 级,从而支持 128 PB 的虚拟地址空间。

从所有这些挑战中,得出以下对持久分配器的要求:提供数据发现和恢复机制,防止持久内存泄漏,并最大限度地减少碎片,甚至更好的是,提供碎片整理机制。

持久化内存挑战PERSISTENT MEMORY CHALLENGES相关推荐

  1. 基于可持久化内存-AEP的KV存储引擎

    基于可持久化内存-AEP的KV存储引擎 一份简单的AEP上手指南 QuicklyStart 切换到测试程序目录 cd ../judge 通过judge程序对KV存储进行一些测试 ** -s :set ...

  2. WORT: Write Optimal Radix Tree for Persistent Memory Storage Systems

    WORT: Write Optimal Radix Tree for Persistent Memory Storage Systems FAST17的一篇文章,介绍了内存索引中使用基数树保证数据一致 ...

  3. Oracle 20c 新特性:持久化内存数据库 - Persistent Memory Database

    导读:随着硬件技术的不断进步,PMEM (Persistent Memory)已经足够成熟,开始进入到数据库加速领域,在 DRAM 和 Flash 之间提供能更强的 IO 层支撑.自 Oracle 2 ...

  4. 持久内存开发套件(Persistent Memory Development Kit-PMDK) - pmem.io: PMDK

    目录 libpmemobj libpmemblk libpmemlog libpmem libpmem2 libvmem libvmmalloc libpmempool pmempool librpm ...

  5. Intel Optane DC Persistent Memory Module (PMM)持久内存

    英特尔已经公开讨论了一年多的Optane DC Persistent Memory Module(PMM),体现了一种新的以数据为中心的体系结构,在这个体系结构中,PMM位于DRAM和Optane D ...

  6. 4篇Optane DC Persistent Memory Module 测试与评估报告

    (一)An Empirical Guide to the Behavior and Use of Scalable Persistent Memory(fast 20) 本文将 Optane DC P ...

  7. Persistent Memory优化实践

    Persistent Memory优化实践 Persistent Memory的优缺点 相关论文 A Study of Application Performance with Non-Volatil ...

  8. 【论文笔记】Understanding the Idiosyncrasies of Real Persistent Memory

    Abstract DCPMM出来之后很多学者开始评估PM.早期的评估结果显示DCPMM的表现是nuanced,idiosyncratic 有细微差别.怪异的.有些设计方案所依赖的性能假设不正确.一些怪 ...

  9. Persistent Memory编程简介

    Persistent Memory编程简介 编程 libpmem 持久化函数 libpmemobj 跟对象 root object 例程 事务支持 type safety 线程安全 管理工具 ipmc ...

  10. Oracle 20c数据库开启原生的区块链表、AutoML以及持久化内存支持

    按照Oracle的版本策略,在2020年将会发布Oracle Database 20c版本.那么在这个版本中将会发布哪些新特性呢?在2019 Oracle OOW大会上,一些新特性已经被展示出来. 新 ...

最新文章

  1. Objective-C语法简记
  2. 好骚气的树状数组的解释
  3. python采集第一步
  4. Centos 7.2搭建MariaDB数据库服务器应用与管理
  5. java小编程--二分查找和插入排序
  6. python安装pyinstaller出现错误_pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)...
  7. sqlcipher java_纯java环境下sqlsqlcipher解密sqlite数据库文件
  8. chartjs和echartsjs库简介
  9. Spring mvc 重定向
  10. JVM 内存区域方面的面试题
  11. 堆排序(C++实现,非常简洁明了)
  12. linux tcp_nodelay,仔细看参数--NGINX之tcp_nodelay
  13. java.sql.SQLException: No database selected
  14. 计算机专业报瑞士酒店管理,我适合去瑞士读酒店管理吗?
  15. 微信公众号之错误返回码
  16. qq 表情gif免费下载
  17. Traffic Server Net子系统分析
  18. kaldi学习笔记-三音素训练2
  19. 计算机南北桥芯片的作用
  20. 使用Scratch进行少儿编程

热门文章

  1. draco3D轻量化技术在Unity3D中应用
  2. 精美摘抄,献给每一位喜欢文学的人
  3. r 语言计算欧氏距离_R语言-KNN算法
  4. 浅谈企业IT技术运营中台
  5. python海龟绘图颜色_Python:海龟绘图(六)——来点颜色看看
  6. (转)怎样更好地理解并记忆泰勒展开式?
  7. 1006:Hello World
  8. java实现即时通讯软件
  9. 活出富有成效和充实的十年:让新的一年有个好开始的三条秘诀
  10. eclipse项目名前出现红色感叹号,小红叉解决(转)