作者简介

惠春阳, Intel 软件工程师, 主要从事SPDK开发和存储软件性能优化的工作。

随着存储技术的发展,对存储性能的不懈追求,高性能存储开始探索向内存通道的迁移。在这样的情况下, NVDIMM 技术便应运而生了。

NVDIMM (Non-Volatile Dual In-Line Memory Module) 是一种可以随机访问的,非易失性内存, 又被称作PMem (Persistent Memory)。在之前的

SPDK 在 17.10 中开始引入对于Pmem的支持。Pmem在SPDK的bdev层暴露为一个块设备, 使用快设备接口和上层进行通信。如图(1)所示。

图(1)

从图中我们可以看到libpmemblk 把块操作转换成了字节操作。它是怎么做到的呢? 在介绍libpmemblk 和 它背后的PMDK之前, 我们了解一下基础知识。

mmap和DAX

首先,我们来看传统的I/O方式, 即缓存I/O (Buffered I/O). 大多数操作系统默认的IO操作方式都是缓存IO。该机制使IO数据缓存在操作系统的page cache 中, 也就是说, 数据会被先拷贝到操作系统的内核空间的缓冲区中,然后才会从内核空间的缓冲区拷贝到指定的用户地址空间。

图(2)

在Linux 中, 这种访问文件的方式就是通过read/write 系统调用来实现,如图(2)。接下来, 我们比较一下内存映射IO mmap().

接下来, 我们比较一下内存映射IO mmap().

图(3)

通过mmap获得了对应文件的一个指针,然后就像操作内存一样进行赋值或者做memcpy/strcpy.  这种我们称之为load/store操作(这种操作一般需要msync、fsync来落盘)。

mmap因为建立了文件到用户空间的映射关系, 可以看作是把文件直接拷贝到用户空间,减少了一次数据拷贝。但是, mmap依然需要依靠page cache。

图(4)

讲完了mmap, 那么DAX是什么呢?DAX即direct access,这个特性是基于mmap的。而DAX的区别在于完全不需要page cache. 直接对存储设备访问。 所以它就是为了NVDIMM而生的。应用对于mmap的文件操作, 是直接同步到NVDIMM上的。DAX目前在XFS, EXT4, Windows的 NTFS 上都已经支持。需要注意的是, 使用这个模式, 要对应用程序或者文件系统进行修改。

图(5)

NVM Programming Model

NVM Programming Model 大致定义了三种使用方式。

图(6)

  1. 最左边Management 主要是通过driver提供的API对NVDIMM进行管理, 比如查看容量信息, 健康状态, 固件版本, 固件升级, 模式配置等等。

  2. 中间, 作为存储快设备使用, 使用支持NVDIMM driver 的文件系统和内核, 应用程序不用做任何修改,通过标准文件接口访问NVDIMM。

  3. 第三种, 基于文件系统的DAX特性,通过load/store操作,不需要page cache, 同步落盘。没有系统调用, 没有中断。这也是NVM Programming Model 的核心, 能够充分释放NVDIMM的性能优势。但它的缺点在于,应用程序可能需要做一下改变。

PMDK

libpmemblk 实现了一个驻留在pmem中的同样大小的块的数组。里面每个块对于突然掉电,程序崩溃等情况依然保持原子事务性。libpmemblk是基于libpmem库的。

libpmem是PMDK中提供的一个更底层的库, 尤其是对于flush的支持。它能够追踪每次对pmem的store操作,并保证数据落盘为持久性数据。

除此以外, PMDK 还提供了其他编程库, 比如libpmemobj, libpmemlog, libvmmalloc 等。感兴趣的同学可以访问http://pmem.io/pmdk/ 获取更多信息。

                 SPDK实战

bdevperf测模拟NVDIMM性能

(1) 创建一个虚拟的Pmem bdev

./configure --with-pmdk

make

PMDK 已经在一些新的Linux发行版中被引入。如果configure出错,请到https://github.com/pmem/pmdk 自行安装PMDK库。

接下来, 我们可以通过SPDK RPC命令来建立一个pmem_pool。

rpc.py create_pmem_pool /path/to/pmem_pool  <TotalSize (MB) >  <BlockSize>

这里假设我们没有一个真正的NVDIMM做测试, 所以pmem_pool的路径就随便选择一个就好。比如:

rpc.py create_pmem_pool /mnt/pmem  128  4096

我们也可以用pmem_pool_info来获取创建pmem_pool的信息:

rpc.py pmem_pool_info /path/to/pmem_pool

或者,删除刚创建的pmem_pool:

rpc.py delete_pmem_pool /path/to/pmem_pool

然后, 我们在我们创建的pmem_pool上, 建立一个bdev块设备:

rpc.py construct_pmem_bdev /path/to/pmem_pool -n pmem_bdev_name

(2) 更新配置文件

更改/path/to/spdk/test/bdev/bdev.conf.in, 只保留Pmem配置的部分。

[Pmem]

Blk <pmemblk pool file name> <bdev name>

Example:

[Pmem]

Blk  /mnt/pmem-pool  pmem-bdev

(3) bdevperf 测试

./bdevperf -c ../bdev.conf.in -q <iodepth> -t <time> -w <io pattern type: write|read|randwrite|randread>-o <io size in bytes>

Example command:

./bdevperf -c ../bdev.conf.in -q 128 -t 100 -w write -o 4096

./bdevperf -c ../bdev.conf.in -q 1 -t 100 -w randwrite -o 4096

结语

至此, 对于NVDIMM硬件和软件上的不同, 大家都有了一个大致的认识。Intel 在2018年5月发布了基于3D XPoint™ 技术的Intel® Optane™ DC Persistent Memory, 引发了NVDIMM爆点。如果你对NVDIMM的用法很感兴趣,或者对于NVDIMM的应用有好的想法, 欢迎通过私信或者在评论区评论交流。希望大家继续关注NVDIMM和SPDK技术。

推荐阅读 

火爆业界的明星, 下一代存储技术的先行: NVDIMM (下篇)相关推荐

  1. 火爆业界的明星,下一代存储技术的先行: NVDIMM 你了解吗?

    作者介绍 惠春阳, Intel 软件工程师, 主要从事SPDK开发和存储软件性能优化的工作. 随着存储技术的发展, 对存储性能的不懈追求, 高性能存储开始探索向内存通道的迁移.在这样的情况下, NVD ...

  2. 下一代存储技术面临市场窗口期?

    文章经授权转载自中国电子报(ID:cena1984) 眼下的存储市场正处于多种技术路线并行迭代的关键时期.一方面,应用极为广泛的DRAM和NAND Flash,是目前存储市场上当之无愧的主流产品,但都 ...

  3. 全息存储:名气大于实力的存储技术?

    全息存储和玻璃存储.DNA存储并称当前三大数据存储前沿技术,笔者前面已经写过玻璃存储和DNA存储的文章(参见<玻璃存储,数字时代的罗塞塔石碑>.<DNA存储:数据存储的终极解决之道& ...

  4. 编解码再进化:Ali266与下一代视频技术

    过去的一年见证了人类百年不遇的大事记,也见证了多种视频应用的厚积薄发.而因此所带来的视频数据量的爆发式增长更加加剧了对高效编解码这样的底层硬核技术的急迫需求.正是在这样的大环境下,在ITU-T VCE ...

  5. 深度揭秘:腾讯存储技术发展史

    采访嘉宾 | 腾讯云副总裁谢明等 图源 | 视觉中国 来源 | CSDN(ID:CSDNnews) 在腾讯内部,负责腾讯存储技术研发的部门,一直被认为是生产技术专家的"黄埔军校". ...

  6. 编解码再进化:Ali266 与下一代视频技术

    过去的一年见证了人类百年不遇的大事记,也见证了多种视频应用的厚积薄发.而因此所带来的视频数据量的爆发式增长更加加剧了对高效编解码这样的底层硬核技术的急迫需求. 新视频编解码标准 VVC 定稿不久之后, ...

  7. 清华出品:一文看尽AI芯片两类瓶颈三大趋势,存储技术开拓新疆界 | 附全文...

    12月10日-11日,由北京未来芯片技术高精尖创新中心和清华大学微电子学研究所联合主办的「第三届未来芯片论坛:可重构计算的黄金时代」在清华大学主楼举办,并正式发布了<人工智能芯片技术白皮书(20 ...

  8. 2020年存储技术展望:AI推动数据存储理念进化

    2020年存储技术展望:AI推动数据存储理念进化 2020年以意想不到的方式在展开,让人们愈发渴望AI的到来. 大家知道早在60年前,"人工智能"概念就正式提出.其发展曾经历了两次 ...

  9. 江波龙深化存储技术优势 紧密结合物联网应用需求创新

    转自:http://www.chinaflashmarket.com/Producer/Netcom/News/142127 云计算.大数据以及移动互联网时代下,全球存储容量以爆发式的速度在增长.根据 ...

最新文章

  1. php pthread 实例,php 真正的多线程 pthread
  2. QT中关于头文件一个很奇怪的问题
  3. tracepro应用实例详解_建筑安装工程造价,高清PPT图文详解,小白也能学会的简单步骤...
  4. 美团在Redis上踩过的一些坑-2.bgrewriteaof问题
  5. 2021年,脸皮“厚“点儿
  6. Serializable的作用
  7. C#获取文件夹下的所有文件的文件名
  8. NYOJ-45 棋盘覆盖
  9. Python高级——闭包与装饰器
  10. 网易财报暗藏玄机,不经意间已编织出电商大网
  11. SpringBoot 整合 MyCat 实现读写分离
  12. 上海阅文集团android面试题,2018年阅文集团PHP工程师面试题分享
  13. QEMU CVE-2020-14364 漏洞分析(含 PoC 演示)
  14. python-《Python发展前景》
  15. python三级菜单的实现
  16. css用户界面样式(附实例、图解)
  17. Hibernate框架介绍以及入门 【一】Hibernate 快速入门 框架的概述 什么是 Hibernate Hibernate 持久层的ORM框架 下载Hibernate 官网 编写测试代码
  18. 蕃茄田宋姝梦:科技赋能时代,儿童在线艺术教育的思考
  19. echarts社区饼图 echart饼图 玫瑰图
  20. 焦点较中的网络视频相关

热门文章

  1. iOS - 内存管理
  2. 推进企业使用正版软件工作部际联席会议第四次全体会议(2010)
  3. Python画水平和垂直线
  4. 如何将平时的生活收支记录打印出来
  5. 终于给自己买了台电脑
  6. 基于MATLAB的Cholesky分解法
  7. React Native UI渲染流程分析(Android)
  8. 集丰照明|一帖说清6种防眩射灯应用在家装修上
  9. linux桌面分辨率太高,将Ubuntu调整到高DPI分辨率屏幕
  10. 二阶求导 算法 实现 寻峰问题(转)