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 ...
随机推荐
- [转帖]SQLServer的UTF8支持
排序规则和 Unicode 支持 - SQL Server | Microsoft Learn UTF-8 支持 SQL Server 2019 (15.x) 完全支持广泛使用的 UTF-8 字符编码 ...
- [转帖]10.2 Data Collector与MDW
10.2 Data Collector与MDW Data Collection功能是SQL SERVER 2005版本提供的数据库监控报表的功能,通过定时地对数据库的语句运行情况,服务器各种资源的监控 ...
- [转帖]Linux fsync和fdatasync系统调用实现分析(Ext4文件系统)
转自:https://blog.csdn.net/luckyapple1028/article/details/61413724 在Linux系统中,对文件系统上文件的读写一般是通过页缓存(pag ...
- [转帖]ss 输出格式说明
ss 命令输出详解ss 全名socket statistics,是iproute2中的一员ss已经替代netstat,大热于江湖.但是关于ss命令输出的内容,是什么意思呢? [root@test]# ...
- overcommit_memory的简单学习
overcommit_memory的简单学习 背景 前几天一个测试环境启动失败. 总是有如下的提示: Native memory allocation (mmap) failed to map 122 ...
- Windows 远程时提示CredSSP 加密数据库修正 问题的简单处理.
最近在公司内部远程机器的时候更新了 windows上面远程部分服务器的时候出现异常如图示: 查了下 还是有比较简单的解决办法的 问题是需要在 自己的客户端机器上面进行设置 不需要修改服务器端的服务器. ...
- Seata分布式事务 (理论与部署相结合)
分布式事务--Seata 分布式事务 1. 本地事务与分布式事务 1.1 本地事务 本地事务,也就是传统的单机事务.在传统数据库事务中,必须要满足四个原则: 1.2 分布式事务问题 分布式事务,就是指 ...
- dump分析器winbdg
工具: winbdg WinDBG不是专门用于调试.Net程序的工具,它更偏向于底层,可用于内核和驱动调试.进行普通的.Net程序调试还是使用微软专为.Net开发的调试工具MDBG更方便一些.但是Wi ...
- windowsbat命令大全
Bat文件的创建及其命令大全 一.bat文件的创建 新建txt文本文件 向文本文件中输入命令 保存并修改文本文件后缀为.bat 双击保存后的bat文件,运行 二.bat命令大全 echo 和 @ @ ...
- [1] 以逆向的角度来看流程控制语句——if
[1] 以逆向的角度来看流程控制语句--if 1. if语句(单分支) if语句转换的条件跳转指令与if语句的判断结果是相反的, 因为C语言是根据代码行的位置决定编译后二进制代码地址高低的,即低行 ...