文章目录

  • 前言
  • 基本架构
  • 编程模型
  • PMDK
    • 接口架构
    • 接口概览
    • pmdk 安装
    • 开发文档汇总
  • PMEM性能
    • 官方性能
    • 实测性能

前言

随着以PCM 为存储单元的3D XPoint 非易失存储介质 不断精进的工艺,以及 上层硬件协议栈的飞速发展,为非易失内存这样硬件的出现提供了技术工艺基础。
关于3D XPoint 介质 和 NAND 介质 之间的底层差异,可以参考从NMOS 和 PCM 底层存储单元 来看NAND和3D XPoint的本质区别

全新英特尔® 傲腾TM 持久型内存重新定义了传统的架构,以合 理的价格提供大型持久型内存层级。英特尔® 傲腾TM 级持久型 内存(结合第二代智能英特尔® 至强® 可扩展处理器)在内存 密集型工作负载、虚拟机密度和快速存储容量方面具有突破 性的性能水平,通过比以往更快的分析、云服务和下一代通 信服务,可加速 IT 转型以支持数据时代的需求。

基本架构

PMEM 所处 intel构建的 存储架构体系的位置 以及 它的性能量级 如下:

总的来说 PMEM处于DDR 内存性能之下,能够提供持久化能力 且 性能和 DDR 在一个量级,远低于NAND SSD。

基本特点如下:

  • 容量更大 ,更经济实惠
    能够提供128G,256G,512G 的容量,且和DDR4总线兼容。它能够插在内存条的插槽之上。

  • 字节可寻址
    可以直接加载访问,其实是以256B 为基本读写单元大小。

  • 高性能存储
    底层3d xpoint 保证了性能和非易失性

  • 支持两种操作模式
    内存模式和 APP Direct模式。
    内存模式下:

    即PMEM和内存作用一样,由MMU直接管理空间访问,同样存在易失性问题。
    不过内存模式下性能 肯定是没有 传统的DDR性能好。

    APP Direct模式如下:

    PMEM 可以代替DDR,作为内存并提供持久化能力。只是这个时候,PMEM的空间管理需要由软件层来做。

整个PMEM的完整模块系统如下:

主体部分以 持久内存的控制器功能为主,内部集成了针对3D XPoint存储介质的各个组件管理,基本的数据加密,EC校验 以及 保证PCM 存储单元的正常散热和功耗优化 的组件等。这幅图中CPU以64B访问是有一些问题,当前的PMEM版本其实是以256B来访问的。

持久内存的使用模式对比如下:

优势 劣势
持久内存
内存模式
容量大,相比于DDR 更便宜
DRAM可作为持久内存的缓存。
更大的实例容量,更多实例树木扩展
无序应用改动,容易使用
支持最新的CLX平台
持久内存
APP Direct模式
容量大,价格便宜
DRAM和持久内存空间都可用
更大的实例容量,更多实例数目扩展 ,更稳定的性能表现
持久化特性,更好的持久化性能,更快的 恢复时间
只支持最新的CLX平台
需要应用管理数据的分层,应用需要改 动
不经过kernel,所以kernel COW 不支 持

编程模型

这个针对PMEM的编程模型叫做SNIA(storage network industry association) 细节可以参考 SNIA,介绍了用户如何来通过标准接口访问PMEM低层。

  • Persistent Memory 部分中:有两种访问NVDIMMs (底层PMEM存储)的方式,第一种是pmdk,以pmem_mmap方式访问,第二种是通过pmem aware-fs来访问, 这个pmem aware-fs是pmem设备支持的一种适配文件系统,可以提供标准用户访问的API(read,write,pread,pwrite…)。
  • Block中 操作系统抽象出 NVDIMM driver可以在其上格式化标准文件系统(xfs/ext4),对外提供文件系统API;同时也能够对外提供标准设备API 来直接访问 driver。
  • 第三种就是 NVME driver提供了UI ,可以通过UI直接访问NVMDIMM。

PMDK

PMDK 则是官方为 PMEM的管理员和应用开发者抽象出来的用户态接口,能够极大得简化用户操作pmem的成本。

接口架构

persistent memory development kit 接口 提供了大量的编程接口,足以应对用户的各种复杂操作的需求。

对外接口 以及 不同的库之间关系如下:

接口概览

  • libpmem 提供最底层的库给应用,保证数据能够持久化。只是不保证原子性和一致性(没有事务),如果用户直接用这一个库,则需要自己保证这一些特性。

  • librpmem类似libpmem 提供的持久化能力 以及一些问题,只是这个库支持通过RDMA访问远端的PMEM 设备。

  • libpmemlog 提供能够持久化的log 库

  • libpmemobj 用户主要是使用的库,提供了持久化、事务、内存管理、锁、基本数据结构(链表。。),保证了原子性和一致性。

  • libpmemblk 提供持久化的块存储,保证了块数据的原子更新和下电不丢失。

  • libmemkind 用作pmem的内存模式,可以通过malloc/free申请释放空间,就像使用DDR一样。

pmdk 安装

下面主要介绍的是linux 系统的安装,关于windows 的安装,可以参考https://github.com/pmem/pmdk

  1. 依赖安装:

    yum install autoconf pkg-config ndctl-devel daxctl-devel pandoc -y
    
  2. 最新版本的pmdk 会依赖更高版本的ndctl,而这个较高版本的ndctl无法通过yum直接安装,只能通过源码编译安装。
    这个过程中遇到的问题挺多的,当然看个人系统,如果系统库安装的比较全,可能也一次通过,简单记录一下。

    git clone https://github.com/pmem/ndctl.git
    cd ndctl
    git checkout v71 # 当前的最新版本./autogen.shActivated pre-commit hook.GIT_VERSION = 71sh: aclocal: command not foundautoreconf: aclocal failed with exit status: 127 # 执行失败
    ----------------------------------------------------# 解决
    sudo yum install automake libtool -y
    autoreconf -ivf# 执行成功
    $ ./autogen.sh
    ----------------------------------------------------------------
    Initialized build system. For a common configuration please run:
    ----------------------------------------------------------------
    ./configure CFLAGS='-g -O2' --prefix=/usr --sysconfdir=/etc --libdir=/usr/lib64# 执行./configure
    ./configure CFLAGS='-g -O2' --prefix=/usr --sysconfdir=/etc --libdir=/usr/lib64
    ...
    checking for a sed that does not truncate output... (cached) /usr/bin/sed
    checking for asciidoctor... missing
    configure: error: asciidoctor needed to build documentation # 执行失败
    ----------------------------------------------------# 解决
    sudo yum install asciidoctor -y# 重新执行 ./configure
    ./configure CFLAGS='-g -O2' --prefix=/usr --sysconfdir=/etc --libdir=/usr/lib64
    ...
    checking for KMOD... no
    configure: error: Package requirements (libkmod) were not met:No package 'libkmod' foundConsider adjusting the PKG_CONFIG_PATH environment variable if you
    installed software in a non-standard prefix # 执行失败
    ----------------------------------------------------#解决
    sudo yum install kmod kmod-devel -y# 再次重新执行 ./configure
    ./configure CFLAGS='-g -O2' --prefix=/usr --sysconfdir=/etc --libdir=/usr/lib64
    ...
    configure: error: Package requirements (uuid) were not met:No package 'uuid' found #执行失败
    ----------------------------------------------------#解决
    sudo yum install libuuid-devel json-c-devel -y# 执行./configure 成功,生成 Makefile
    ./configure CFLAGS='-g -O2' --prefix=/usr --sysconfdir=/etc --libdir=/usr/lib64
    # 安装ndctl
    make && sudo make install
    
  3. 编译:

    # 获取代码
    git clone https://github.com/pmem/pmdk
    cd pmdk
    git checkout stable-1.10 # 这一步也可以跳过,直接编译master分支# 编译 ,建议以root用户来执行
    make EXTRA_CFLAGS="-Wno-error"
    make install prefix=/usr/local # 如果没有root用户,可以指定自己的安装prefix,默认是/usr/local
    

开发文档汇总

  1. PMDK官网:https://pmem.io/pmdk
  2. PMDK 开发指南 书籍:https://pmem.io/book/
  3. PMDK 开发者论坛: https://groups.google.com/forum/?utm_source=digest&utm_medium=email#!forum/pmem/topics
  4. 持久内存指南: https://software.intel.com/en-us/persistent-memory/get-started
  5. 持久内存编程示例https://software.intel.com/en-us/persistent-memory/training
  6. 分析你的系统是否适合使用PMEM 的工具: [https://software.intel.com/en- us/articles/vtune-amplifier-platform-profiler](https://software.intel.com/en- us/articles/vtune-amplifier-platform-profiler)
  7. PMDK 实践应用:
    • VMware vSphere : https://vspherecentral.vmware.com/t/hardware-acceleration/persistent-memory-pmem/
    • Microsoft Hyper-V: https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/manage/persistent-memory-cmdlets
    • pmem-redis: https://github.com/pmem/pmem-redis

PMEM性能

官方性能

参考链接: https://www.intel.com/content/www/us/en/products/docs/memory-storage/optane-persistent-memory/optane-persistent-memory-200-series-brief.html

其中 以128G容量为例:

  • 写入单元为256B时,能够提供292PB 的总写入寿命,6.8GB/s的读带宽,1.85GB/s的写带宽,依次读写延时基本都在百ns量级
  • 写入单元为64B时,寿命以及读写带宽都有下降。只能写入91PB的总数据量,读写带宽分别只有1.7Gb/s和0.45GB/s。因为PMEM的字节寻址的基本单元也是256B,也就是如果只写入64B,需要占用256B的存储空间,如果底层要写入的单元有数据,则需要先读取256B的数据单元,将64B的数据添加进去,再把256B的单元整体写入到PMEM中。这个过程会极大得降低读写性能,所以,针对PMEM的编程建议256B对齐,这样对pmem的性能更加友好。

实测性能

PMEM性能和内存处于一个量级,且PMEM是插在DIMM插槽,也就是内存条的插槽上。所以CPU访问PMEM的性能 只有绑定 NUMA 才能完整体现。

  • 硬件环境:
    CPU:Intel® Xeon® CPU E5-2680 v4 @ 2.40GHz 56core
    内存: 256G
    硬盘:pmem 128G*4 aep
    操作系统:CentOS Linux release 7.4.1708 (Core)
    文件系统:XFS(rw,noatime,attr2,dax,inode64,noquota)
    测试软件:FIO

  • fio脚本

    [global]
    ioengine=libpmem #pmem引擎
    direct=1
    norandommap=1
    randrepeat=0
    runtime=60
    time_based
    size=1G
    directory=./fio
    group_reporting
    [read256B-rand]
    bs=256B
    rw=randread
    numjobs=32
    iodepth=4
    cpus_allowed=0-15,16-31 #绑定numa
    

如果大家要对比PMEM和SSD的性能,可以同样的脚本去测试一下SSD,ioengine可以替换成libaio。

这个测试 达不到 官网给出的 单个128G 在256B的读场景下 的6.8G的带宽,我们使用的是128G*4的 pmem,总带宽实际测试也只有7.5G/s,这个目前还没有和官方核对。

其他的数据在libpmem引擎下基本一样,还有如果使用普通的libaio引擎,也就是走文件系统的调用,读写性能会有20%以上的损失,这里的损失基本是由内核文件系统带来的,libpmem引擎能够支持fio直接通过用户态调用pmdk来访问PMEM,性能相比于libaio肯定会好一些。

Intel Optane PMEM 概览相关推荐

  1. 使用Alluxio和Intel® Optane™持久内存加速和扩展大数据分析

    国际数据公司(InternationalData Corporation, IDC)报告称,全球数据容量将从2018年的33 ZB(zettabytes)增长到2025年的175 ZB.随着数据增长的 ...

  2. Intel Optane(tm) Memory Pinning 无法加载DLL“iaStorAfsServiceApi.dll“:找不到指定模块。(异常来自HRESULT:0x8007007E)

    Intel Optane™ Memory Pinning 无法加载DLL"iaStorAfsServiceApi.dll":找不到指定模块.(异常来自HRESULT:0x80070 ...

  3. oracle ssd加速,评测 | Intel Optane SSD 加速 SmartX 超融合在 Oracle 等场景下的系统性能...

    近期,SmartX 和 Intel 中国基于 Intel 第二代至强可扩展处理器平台与 Optane SSD 结合 SmartX 超融合软件 SMTX OS 进行了产品联合验证,并在 Oracle 等 ...

  4. oracle ssd加速,联合评测 | Intel Optane SSD 有效加速SmartX 超融合在Oracle等场景下的系统性能...

    众所周知,使用基于标准 x86 服务器平台的软件定义架构,是超融合能够全面提升用户IT架构敏捷性和易维护性的一个重要原因,相比于使用专有硬件的传统SAN存储,这种架构的一大优势就是可以在产品中快速引入 ...

  5. ssd的smt_联合评测 | Intel Optane SSD 有效加速 SmartX 超融合在 Oracle 等场景下的系统性能...

    众所周知,使用基于标准x86服务器平台的软件定义架构,是超融合能够全面提升用户IT架构敏捷性和易维护性的一个重要原因,相比于使用专有硬件的传统SAN存储,这种架构的一大优势就是可以在产品中快速引入业界 ...

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

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

  7. 读Intel Optane DC持久内存模块的基本性能测量有感

    读Intel Optane DC持久内存模块的基本性能测量有感 导论 为什么为写这篇博文呢,主要是受现在工业界一种真实的NVM产品即Intel optane DC PMM今年4月份发布以来,学术界和工 ...

  8. Intel Optane P4800X评测(3):Windows绑核优化篇

    据了解,使用3D XPoint Memory的Optane P4800X在国内已经开始少量供货,除了一些测试过的人之外,已经开始有采购的用户了.有朋友问我,这个卡在测试中有没有需要注意/调优的地方,以 ...

  9. Intel Optane P4800X评测(1):好钢如何用在刀刃上?

    在<Intel Optane P4800X评测(序):不用缓存和电容保护的SSD?>一文发表之后,有同行朋友不只一次询问后续测试的情况,看来大家对Optane/3D XPoint Memo ...

最新文章

  1. (转)Spring定时任务的几种实现
  2. 智能文案app_智能营销,用实力说话!按效果付费!
  3. 看了就会的 Node.js 三大基础模块常用 API
  4. 数据库实验四 用户权限管理
  5. 高桥盾react和boost_gel、react、boost三种材料的跑鞋,哪个更强呢?
  6. JDK8新特性LocalDate、LocalTime和LocalDateTime
  7. 数据库原理—数据、数据库(一)
  8. PyYAML和configparser模块讲解
  9. 一篇 JPA 总结
  10. kaggle:Costa Rican Household Poverty Level Prediction(1)DEA
  11. 3D打印软件推荐|常用3D打印软件有哪些?
  12. 手把手教你Charles抓包工具使用
  13. 2021年计算机网络常见面试题
  14. 医院信息中心机房建设
  15. 【英语语法入门】 第11讲 名词
  16. 七代处理器装win7_Intel7代处理器 win10重装win7后无法安装显卡声卡驱动的解决方案 | A小可私人狗窝...
  17. IP协议的详细知识总结
  18. mysql服务端获取数据乱码_mysql客户端数据乱码问题
  19. 微软正版验证_真正纯净无捆绑微软官方原版windows10安装教程无删减完整版
  20. 详解5种网站 静态网站、动态网站、伪静态网站、云计算网站都是什么

热门文章

  1. Vim编辑器的常用快捷键.
  2. 1m网速是什么意思,1m带宽是什么意思
  3. 关于Page翻页效果--Page View Controller
  4. php点击复制按钮到我的粘贴板,JS 实现点击按钮复制内容到粘贴板 clipboard
  5. java 外部类似_[求指点] 如何用java 实现类似linux中管道调用外部程序的功能
  6. 《OpenCV3编程入门》学习笔记8 图像轮廓与图像分割修复(二)寻找物体的凸包
  7. 和php区别_PHP中global与$GLOBALS的区别
  8. php写的接口返回数据的页面,PHP怎么解析 WEBSERVICES接口返回的数据
  9. python 自动化办公 案例_python自动化工具之pywinauto实例详解
  10. Java gdal .mif/.mid文件读取