NVME(学习笔记三)—PMR
PMR(Persistent Memory Region)持久性内存区域
NVM Express在2019年完成了NVMe 1.4规范的制定,新的NVMe协议带来了大量的全新特性,尤其在纠错、强化性能以及针对特殊领域和企业级领域的优化等方面更是令人关注,其中就包含了NVMe 1.4为高端企业级固态硬盘提供的一种新能力PMR。

图1 NVMe Feature Roadmap
所谓的PMR即为一块存储区,使用此功能将创建并控制一个称为持久性内存区域(PMR)的存储区域,该存储区可以映射到PCI Express总线上的地址空间上面,并且可被主机和其他设备访问。
PMR的主要特点是,在电源断电(power cycle),控制器复位以及PMR启用/禁用切换之后,写入PMR的数据也会保留。换句话说,此功能使SSD除了提供通过逻辑块地址(LBA)访问的存储区域外,还提供了另一个非易失性存储区域,并且这块存储区域假定的访问方法是内存访问而不是块访问。PMR对性能的要求很高,例如,稳定状态下的写带宽要比PCIe的写带宽度大得多,如果无法做到,协议上记载会有弹性缓冲区等可选项来填补带宽的间隙。
总的来说,PMR空间可以提供一种内存级读写速度、断电后数据不会丢失的存储区域。PMR功能上与NVDIMM相似,虽然PMR的性能和容量远比不上NVDIMM,但PMR有着与NVDIMM一样的优势,比起通过NVMe IO命令去读写一笔数据,并等待命令完成,读写PMR的操作就简单快捷多了。PMR具有非易失性、较低延迟、可Bytes寻址等特性,使数据管理具有更大的灵活性。它非常适合需要频繁访问复杂数据集的环境,以及因电源故障或系统崩溃导致停机的敏感环境。
PMR主要的优点包括:
1.访问延迟小于NAND闪存的访问延迟,接近于DRAM。
2.与NAND闪存相比,吞吐量大大增加。
3.比DRAM便宜。
4.可Bytes寻址,实时访问数据,允许超快速访问大型数据集。
5.断电后数据仍保留在内存中(就像使用闪存一样)。
那么,究竟如何才能实现这一强大的功能呢?随着PCIe Gen4的问世,PCIe的带宽迅速增长,常见的非易失性存储器件NAND闪存很难满足PMR要求的高速性能,而且原本NAND闪存就更适合用来块访问,不适合用于PMR指向的内存,因此,SSD不会直接使用NAND闪存来作为实现PMR的存储器件。
实际上在NVMe协议中并没有记载PMR的具体实现方法,但是从已有信息来看,可以使用所谓的新型内存SCM(Storage Class Memory)来实现PMR,例如利用Intel的Optane存储器。还有一种比较主流的实现PMR的思路是,将SSD内DRAM(的一部分)分配给这个区域,一般企业级NVMe固态硬盘自带有大容量的DRAM缓存,并且整个固态硬盘处于断电保护设计的保护之下,结合这两个特点,外加一定数量的常规NAND闪存,PMR就可以实现。

图2 使用部分DRAM用作PMR
NVMe一直在积极探索固态硬盘内DRAM的其他用途,PMR就是一个潜在的应用。绝大多数企业级固态硬盘都带有一定数量的DRAM内存,用来当做存放FTL表项的cache buffer,固态硬盘可以通过这些FTL表项来映射逻辑地址和闪存物理地址。此外,NVMe 1.2协议就定义了控制器内缓存CMB(Controller Memory Buffer)这一特性,旨在使部分SSD内的DRAM空间可以直接通过PCI地址空间被访问,这一特性使得NVMe传输IO命令所需的SQ,CQ可以直接驻存在SSD的DRAM内存里,而不是放在host的内存里,可以减少命令交互的延迟,并可以消除NVMe over Fabrics情况下SSD端对端之间DMA传输中的不必要的复制操作,使得传输的数据完全绕过host的DRAM。

图3 NVMe Controller中的CMB与PMR
NVMe 1.4的特性PMR的运作方式与CMB类似,host系统可以使用基础的PCIe传输直接读写此内存区域,而无需任何命令队列的开销。在实践中,通常希望将CMB用于支持正常的NVMe操作(如放置SQ/CQ/PRP等),作为一块DRAM buffer使用,但是PMR则不同,虽然PMR也是SSD内部的一段DRAM区域,但它主要是作为一大块通用的非易失存储供主机使用,典型的企业级SSD具有专门的断电保护电容器,这些电容器可以使PMR中的数据在发生意外断电时得以安全刷新到闪存中。在SSD断电时,PMR的内容将自动写入闪存,当host系统恢复上电时,host可以要求SSD重新加载PMR的内容。
用这种方法实现的PMR功能的典型应用场景是,接收大量(覆盖性)写入的场景,这种场景下PMR不会消耗任何除PMR容量大小之外的闪存,因为只有在断电的情况下,SSD才会去下刷保存PMR的数据,因此这非常适合用于记录数据库或系统的日志,因为日志会不断大量写入,而且写日志的操作很容易成为系统内的性能瓶颈,造成堵塞,而PMR恰恰是可以提供DRAM级别的读写速度,以及DRAM可覆盖写的特性。还有一种潜在的应用场景是就地执行技术XIP(execute-in-place),这种被人们津津乐道的能够大幅提高应用程序性能的技术可能会因为PMR的出现变得流行起来。
目前PMR在协议方面则较为简单,NVME 1.4规范只定义了一些控制PMR的寄存器,包括稳定状态下的写入带宽、弹性缓冲区的大小、PMR的状态、主机应等待PMR ready的超时时间等详细的设定项目。因此,想要有效地使用PMR,设备(驱动器)侧和主机(OS和库)侧对应的驱动程序都是必不可少的,目前Linux的相关驱动还处于规划阶段,未来对PMR驱动软件上的支持还有很长一段路要走。
NVMe 1.4在去年才刚刚发布,业界内对于PMR的应用也主要集中在企业级存储领域,并且大多仍处于研究、探讨阶段,因此有关于PMR这一新特性的可操作空间其实还很大,其应用潜力、前景有望进一步被发掘。
参考资料
[1] NVM Express, "NVM ExpressTM Base Specification", Revision 1.4, June 10, 2019
[2] N. Adams, "NVMeTM Base Spec 1.4 Features Overview"[PPT], Flash Memory Summit 2019, August 6, 2019
[3] Ken-yossy,NVMe Revision 1.4: New commands and features (except for NVM Sets and its related features),https://qiita.com/ken-yossy/items/ae42c06d8c9face76934,,updated at 2019-09-12.
[4] Billy Tallis,NVMe 1.4 Specification Published: Further Optimizing Performance and Reliability, https://www.anandtech.com/show/14543/nvme-14-specification-published, June 14, 2019.
[5] NVM Express, NVMe Specification Readiness, https://nvmexpress.org/nvme-readiness-part-three/, June 10, 2019
[6] David Allen, "NVMe: What you need to know for next year"[PPT],2018.
转载于:PMR(Persistent Memory Region)持久性内存区域 - IC智库 (iczhiku.cn)
NVME(学习笔记三)—PMR的更多相关文章
- Oracle学习笔记三 SQL命令
		
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
 - [Firefly引擎][学习笔记三][已完结]所需模块封装
		
原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读: 笔记三主要就是各个模块的封装了,这里贴 ...
 - JSP学习笔记(三):简单的Tomcat Web服务器
		
注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...
 - java之jvm学习笔记三(Class文件检验器)
		
java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...
 - VSTO学习笔记(三) 开发Office 2010 64位COM加载项
		
原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...
 - Java IO学习笔记三
		
Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...
 - NumPy学习笔记 三 股票价格
		
NumPy学习笔记 三 股票价格 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.&l ...
 - Learning ROS for Robotics Programming Second Edition学习笔记(三) 补充 hector_slam
		
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
 - Learning ROS for Robotics Programming Second Edition学习笔记(三) indigo rplidar rviz slam
		
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
 - Typescript 学习笔记三:函数
		
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
 
随机推荐
- Laravel :  模糊查询 where   orWhere
			
Banner::where('title', 'like', "%{$keyword}%")->orWhere('introduce', 'like', "%{$k ...
 - Qt5.9 UI设计(四)——布局设计及自定义界面
			
前言 前面我们已经创建了mainwindow ControlTabWidget ControlTreeWidget maintitlebar 4个UI几面,我们需要将其他三个UI放置到mainwind ...
 - [转帖]Oracle23c On linux的简单安装
			
Oracle23c On linux的简单安装 背景 Oracle11.2.0.4 发布之后 下一个版本是 Oracle12c 因为西方人比较不喜欢13这个数字, 尤其是犹太人出生的 拉里埃里森. 所 ...
 - Numa以及其他内存参数等对Oracle的影响
			
Numa以及其他内存参数等对Oracle的影响 背景知识: Numa的理解 Numa 分一致性内存访问结构 主要是对应UMA 一致性内存访问而言的. 在最初一个服务器只有一个CPU的场景下, 都是UM ...
 - [转帖]harbor 更改网段(docker-compose)
			
https://blog.csdn.net/Darkernote/article/details/119390862 问题:harbor 安装后网段冲突 docker-compose 一般安装会创建一 ...
 - [转帖]VMWare ESXi中,不同的虚拟网卡性能竟然能相差三倍!
			
https://zhuanlan.zhihu.com/p/525656364 正文共:1024 字 11 图,预估阅读时间:1 分钟 在上个实验中(VPP使用DPDK纳管主机网卡),我们已经初步实现了 ...
 - [转帖]python中对配置文件的读写操作
			
https://juejin.cn/post/6844903586963390471 python内置的configparser模块能非常方便的对配置文件进行操作,常见的配置文件有*.ini和*.co ...
 - [转帖]一个故事看懂CPU的SIMD技术
			
https://www.cnblogs.com/xuanyuan/p/16048303.html 好久不见,我叫阿Q,是CPU一号车间的员工.我所在的CPU有8个车间,也就是8个核心,咱们每个核心都可 ...
 - Specjvm2008的简单学习
			
Specjvm2008的简单学习 摘要 前期整理过很多需要通过编译指定命令进行性能测试的工具 但是这种工具无法充分模式JAVA应用. 并且无法模拟不同jvm版本的性能情况. 早上去北京出差路上看到了 ...
 - vue中父传子props的使用
			
第一种 传递一个数组 props:["cont"] 第二种 传递一个对象 props:{ uploadOption:{ type:Object, 参数类型必须是一个对象 requi ...