0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

内存之后,下一代存储技术怎么用?

SSDFans 来源:YXQ 2019-03-21 11:05 次阅读

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

NVDIMM (Non-Volatile Dual In-Line Memory Module) 是一种可以随机访问的,非易失性内存, 又被称作PMem (Persistent Memory)。在之前的微信文章中,我们介绍了NVDIMM几种硬件上的实现方式,以及为了支持和优化性能所做的硬件上的改变。今天,我们来讨论一下为了充分发挥NVDIMM的性能,软件方面做了哪些支持。有些人可能会有疑问, 为什么用起来这么麻烦?既然是持久性内存,不是应该关机什么样, 开机什么样, 就可以了吗? 其实目前来看, 这种想法还不会变为现实。 因为除了DRAM是易失性的,比如 cache,寄存器这种也是易失性的。仅仅把内存做成持久性的也不能达成这样的目的。另一个问题是, memory leak。如果发生了内存泄漏, 重启一下就好了。 那如果是持久性内存的泄漏呢?这也是一个很棘手的问题。Pmem有些方面类似于内存,也有些方面类似于存储。但是,通常上我们不会认为Pmem能够替代内存或存储。其实,可以把它看作是一种补充,填补了内存和存储之间巨大的差异。

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)

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

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

第三种, 基于文件系统的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

这里假设我们没有一个真正的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

Example:

[Pmem]

Blk /mnt/pmem-pool pmem-bdev

(3) bdevperf 测试

./bdevperf -c ../bdev.conf.in -q -t

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技术。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储技术
    +关注

    关注

    5

    文章

    746

    浏览量

    45872
  • 内存
    +关注

    关注

    8

    文章

    3052

    浏览量

    74267

原文标题:内存之后,下一代存储技术怎么用?

文章出处:【微信号:SSDFans,微信公众号:SSDFans】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    SK海力士开发出下一代智能内存芯片技术PIM

    SK海力士(或‘公司’)今日宣布,公司已开发出具备计算功能的下一代内存半导体技术“PIM(processing-in-memory,内存中处理)”1)。
    发表于 02-16 11:04 1642次阅读
    SK海力士开发出<b class='flag-5'>下一代</b>智能<b class='flag-5'>内存</b>芯片<b class='flag-5'>技术</b>PIM

    下一代定位与导航系统

    下一代定位与导航系统
    发表于 08-18 10:37

    2016CES:Atmel下一代触摸传感技术亮相

     2016年1月7日——全球微控制器(MCU)及触控技术解决方案领域的领导者Atmel公司今日宣布,将把下一代压力传感技术应用于最新面向智能手机应用的maXTouchU系列。Atmel的压力传感
    发表于 01-13 15:39

    下一代SONET SDH设备

    下一代SONET/SDH设备
    发表于 09-05 07:05

    单片光学实现下一代设计

    单片光学 - 实现下一代设计
    发表于 09-20 10:40

    下一代测试系统:LXI拓展视野

    下一代测试系统:LXI拓展视野
    发表于 09-26 14:24

    下一代测试系统:LXI推进愿景

    下一代测试系统:LXI推进愿景(AN 1465-16)
    发表于 10-09 09:47

    请问Ultrascale FPGA中单片和下一代堆叠硅互连技术是什么意思?

    大家好, 在Ultrascale FPGA中,使用单片和下一代堆叠硅互连(SSI)技术编写。 “单片和下一代堆叠硅互连(SSI)技术”是什么意思?谢谢娜文G K.
    发表于 04-27 09:29

    如何利用人工智能实现更为高效的下一代数据存储

    充分利用人工智能,实现更为高效的下一代数据存储
    发表于 01-15 07:08

    下一代超快I-V测试系统关键的技术挑战有哪些?

    如何进行超快I-V测量?下一代超快I-V测试系统关键的技术挑战有哪些?
    发表于 04-15 06:33

    Java开发下一代嵌入式产品

    Java开发下一代嵌入式产品在我10年的Java布道师生涯里,没有哪次Java新版本发布能让我如此兴奋。Java 8的发布不仅在语言本身加入了些不错的新特性,还在嵌入式开发上加入了很棒的功能
    发表于 11-05 09:12

    威刚演示下一代DDR5内存渲染图

    CES 2021期间,存储大厂威刚“拿”出了他们的下一代DDR5内存,不过不是实物,只是渲染图。
    的头像 发表于 01-15 09:44 2622次阅读

    下一代内存技术

    的推进,它面临着些扩展问题,导致该行业在其他地方寻找内存解决方案。惠普(惠普)对“机器”架构的宣传使“忆阻器”词重新回到了记忆的聚光灯下。这项技术,也称为电阻式随机存取
    的头像 发表于 10-24 10:54 570次阅读

    下一代硅光子技术会是什么样子?

    下一代硅光子技术会是什么样子?
    的头像 发表于 07-05 14:48 688次阅读
    <b class='flag-5'>下一代</b>硅光子<b class='flag-5'>技术</b>会是什么样子?

    网络下一代企业存储:NVMe结构

    电子发烧友网站提供《网络下一代企业存储:NVMe结构.pdf》资料免费下载
    发表于 08-28 11:39 0次下载
    网络<b class='flag-5'>下一代</b>企业<b class='flag-5'>存储</b>:NVMe结构