持久化内存挑战PERSISTENT MEMORY CHALLENGES
持久化内存挑战
翻译自论文: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相关推荐
- 基于可持久化内存-AEP的KV存储引擎
基于可持久化内存-AEP的KV存储引擎 一份简单的AEP上手指南 QuicklyStart 切换到测试程序目录 cd ../judge 通过judge程序对KV存储进行一些测试 ** -s :set ...
- WORT: Write Optimal Radix Tree for Persistent Memory Storage Systems
WORT: Write Optimal Radix Tree for Persistent Memory Storage Systems FAST17的一篇文章,介绍了内存索引中使用基数树保证数据一致 ...
- Oracle 20c 新特性:持久化内存数据库 - Persistent Memory Database
导读:随着硬件技术的不断进步,PMEM (Persistent Memory)已经足够成熟,开始进入到数据库加速领域,在 DRAM 和 Flash 之间提供能更强的 IO 层支撑.自 Oracle 2 ...
- 持久内存开发套件(Persistent Memory Development Kit-PMDK) - pmem.io: PMDK
目录 libpmemobj libpmemblk libpmemlog libpmem libpmem2 libvmem libvmmalloc libpmempool pmempool librpm ...
- Intel Optane DC Persistent Memory Module (PMM)持久内存
英特尔已经公开讨论了一年多的Optane DC Persistent Memory Module(PMM),体现了一种新的以数据为中心的体系结构,在这个体系结构中,PMM位于DRAM和Optane D ...
- 4篇Optane DC Persistent Memory Module 测试与评估报告
(一)An Empirical Guide to the Behavior and Use of Scalable Persistent Memory(fast 20) 本文将 Optane DC P ...
- Persistent Memory优化实践
Persistent Memory优化实践 Persistent Memory的优缺点 相关论文 A Study of Application Performance with Non-Volatil ...
- 【论文笔记】Understanding the Idiosyncrasies of Real Persistent Memory
Abstract DCPMM出来之后很多学者开始评估PM.早期的评估结果显示DCPMM的表现是nuanced,idiosyncratic 有细微差别.怪异的.有些设计方案所依赖的性能假设不正确.一些怪 ...
- Persistent Memory编程简介
Persistent Memory编程简介 编程 libpmem 持久化函数 libpmemobj 跟对象 root object 例程 事务支持 type safety 线程安全 管理工具 ipmc ...
- Oracle 20c数据库开启原生的区块链表、AutoML以及持久化内存支持
按照Oracle的版本策略,在2020年将会发布Oracle Database 20c版本.那么在这个版本中将会发布哪些新特性呢?在2019 Oracle OOW大会上,一些新特性已经被展示出来. 新 ...
最新文章
- Objective-C语法简记
- 好骚气的树状数组的解释
- python采集第一步
- Centos 7.2搭建MariaDB数据库服务器应用与管理
- java小编程--二分查找和插入排序
- python安装pyinstaller出现错误_pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)...
- sqlcipher java_纯java环境下sqlsqlcipher解密sqlite数据库文件
- chartjs和echartsjs库简介
- Spring mvc 重定向
- JVM 内存区域方面的面试题
- 堆排序(C++实现,非常简洁明了)
- linux tcp_nodelay,仔细看参数--NGINX之tcp_nodelay
- java.sql.SQLException: No database selected
- 计算机专业报瑞士酒店管理,我适合去瑞士读酒店管理吗?
- 微信公众号之错误返回码
- qq 表情gif免费下载
- Traffic Server Net子系统分析
- kaldi学习笔记-三音素训练2
- 计算机南北桥芯片的作用
- 使用Scratch进行少儿编程