持久内存快速编程手册 (Part 1 of 7)

Introduction

英特尔®傲腾™持久内存以创新的内存技术重新定义了传统存储架构,将高性价比的大容量内存与数据持久性巧妙地结合在一起,以合理的价格提供大型持久内存层级。凭借在内存密集型工作负载,虚拟机密度和快速存储容量方面的突破性性能水平,英特尔®傲腾™持久内存 (Intel Optane®™PMem) 可加速IT转型,以支持数据时代对算力的需求。全新的PMem 200 系列与第三代英特尔®至强®可扩展处理器(Icelake, ICX)搭配,入门级PMem系列与第二代英特尔®至强®可扩展处理器(Cascalake, CLX)搭配,与针对数据库,数据分析和虚拟化等基础设施等工作负载打造的软件生态系统保持兼容,有助于更加有效地挖掘数据的潜在价值。开发人员可以利用行业标准的持久内存编程模式,构建更简单,更强大的应用,确保对数据中心的投资能够适应未来的需求。(了解更多关于英特尔®傲腾™持久内存的信息,请访问: https://www.intel.cn/content/www/cn/zh/products/memory-storage/optane-dc-persistent-memory.html )。

持久内存产品可通过不同的方法使用,有些用法对应用来说是透明的。例如,所有持久内存产品都支持存储接口和标准文件 API,就像固态盘 (Solid State Disk, SSD) 一样,访问 SSD 上的数据非常简单且易于理解,因此不在我们的讨论之列。或者将持久内存配置成内存模式,系统的持久内存的使用方式和系统内存一样,应用不需要做任何更改,所以也不在我们的讨论之列。我们将重点介绍持久内存式访问,即应用管理驻留在持久内存中的可字节寻址的数据结构。英特尔编写了一本持久内存编程的书如图 1所示,中文版已经在2021年4月出版。这个快速编程手册可以作为该书的一个补充,让开发人员快速了解持久内存相关的编程方法和重要概念。该手册不会涉及持久内存配置及使用的方方面面,而只是通过一些示例说明持久内存编程的一些重要概念。我们介绍的部分用例具有易失性,仅将持久内存用来扩展内存容量,但主要介绍持久性用例,即持久内存中的数据结构不会受到系统崩溃和电源故障的影响,在这些事件发生期间仍然确保数据结构的一致性。我们同时也会列举一些其它存储的示例,主要目的可以给大家一些直观的比较和感受。

在这里插入图片描述

每项新技术的兴起总会引发新的思考,持久内存也不例外。构建与开发解决方案时,请考虑持久内存的以下特征:

持久内存的性能(吞吐量、延迟和带宽)远高于 NAND,但是可能低于 DRAM。
不同于 NAND,持久内存很耐用。其耐用性通常比 NAND 高出多个数量级,可以超过服务器的生命周期。
持久内存模块的容量远大于 DRAM 模块,并且可以共享相同的内存通道。支持持久内存的应用可原地更新数据,无需对数据进行序列化/反序列化处理。
持久内存支持字节寻址(类似于内存)。应用可以只更新所需的数据,不会产生任何读取-修改-写入(read-modify-write,RMW)开销。
数据与 CPU 高速缓存保持一致。持久内存可提供直接内存访问 (direct memory access, DMA) 和远程直接内存访问 (remote direct memory access, RDMA) 操作。
写入持久内存的数据不会在断电后丢失。
权限检查完成后,可以直接从用户空间访问持久内存上的数据。数据访问不经过任何内核代码、文件系统页面缓存(page cache)或中断。
持久内存上的数据可立即使用,也就是说:
系统通电后即可使用数据。
应用不需要花时间来预热高速缓存。
它们可在内存映射后立即访问数据。
持久内存上的数据不占用 DRAM 空间,除非应用将数据复制到 DRAM,以便更快地访问数据。
写入持久内存模块的数据位于系统本地。应用负责在不同系统之间复制数据。
应用开发人员通常会考虑内存驻留(memory-resident)数据结构和存储驻留(storage-resident)数据结构。就数据中心应用而言,开发人员要谨慎地在存储中保持一致的数据结构,即使系统崩溃时也不例外。这个问题通常可以使用日志技巧(如预写日志)来解决,先将更改写入日志,然后再将其刷新到持久存储中。如果数据修改过程中断,应用可以借助日志中的信息,在重启时完成恢复操作。这样的技巧已存在多年;但正确的实施方法开发难度很大,维护起来也很耗时。开发人员通常要依赖于数据库、编程库和现代文件系统的组合来提供一致性。即便如此,最终还是要应用开发人员设计一种策略,在运行时和从应用和系统崩溃中恢复系统时确保存储中数据结构的一致性。

英特尔开发的PMDK 经过多年的发展,涵盖了大量开源库(如图 2所示)可帮助应用开发人员和系统管理员简化持久内存设备的管理和访问。该套件的开发工作与持久内存的操作系统支持是同步的,因此可确保库充分利用通过操作系统接口提供的所有特性。接下来的章节里,主要通过示例一一介绍PMDK相关库在持久内存编程方面的使用。

在这里插入图片描述

一个简单的声明:在这个文档中间的所有示例可能存在有一些bug,所以这些参考示例不建议作为您产品级代码的一部分。这些例子在测试中的数据,也只是给您一个参考,是在一定的条件和环境下面获得的数据,如果你不能复现这些数据(差别很大),可以联系我们。

Environment Setup

在环境设置中,我们在此并不特别限定某种环境,只是列出我们的示例运行的环境。
在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值