NVME(学习笔记二)—CMB
什么是CMB
在NVMe Express 1.2 Spec中开始支持一个特性,那就是CMB(Controller Memory Buffer),是指SSD控制器内部的读写存储缓冲区,与HMB(Host Memory Buffer)的不同处在于所使用的内存地址位于控制器自己的内存中,而不是位于主机内存中,但它们使用队列的方式都是一样的。
如何获取CMB的配置信息
在NVMe SSD Controller 中有两个寄存器CMBLOC和CMBSZ是描述CMB的基本信息。在主机中可以使用NVMe-cli工具查看寄存器信息(nvme show-regs /dev/nvme0n1 -H)。


CMBLOC(Controller Memory Buffer Location),是指存储区的位置信息,其中OFST(Offset)表示存储区的偏移地址,单位是CMBSZ.SZ,注意要是4KB对齐。BIR(Base Indicator Register)则表示PCI BAR(基地址寄存器)的序号,。
CMBSZ(Controller Memory Buffer Size),是指存储区的大小信息。其中Size是指CMB中可用空间的长度,注意单位也是CMBSZ.SZ。Size Units(SZU)表示CMB的单位是多少,从下表中我们可以看到,只要device有足够的空间,CMB的大小可以配置得非常大的。

A -该设备的制造商已经在PCIe数据库中注册了其供应商ID和设备ID。这意味着你得到了一个人类可读的描述。
B—该设备有3个PCIe BAR: BAR0为16KB,是任何合法NVMe设备都必须具有的标准NVMe BAR。
第三个BAR是控制器内存缓冲区(CMB),它既可以用于NVMe队列,也可以用于NVMe数据。
F -由于这个设备是一个NVMe设备,它被绑定到标准的Linux内核NVMe驱动程序。
CMBs的一些应用
1. 将部分(或全部)NVMe队列放置在CMB而不是主机内存中,减少延迟。
2. 使用CMB作为DMA缓冲区允许卸载NVMe拷贝。可以提高主机性能,同时减轻主机CPU负担。
3.使用CMB作为DMA缓冲允许RDMA网卡直接将NVMe- of数据放入NVMe SSD中。减少延迟和CPU负载。

CMB的软件- SPDK
- 存储性能开发工具包(Storage Performance Development Kit, SPDK)是一个免费和开源(FOSS)的高性能存储用户空间框架。
- 关注NVMe和NVMe- of。
- 2018年2月新增代码,在CMBs允许的情况下启用P2P NVMe copies。
- 一个简单的应用程序使用这个新的API的例子也在SPDK的例子(cmb_copy)。

cmb_copy是一个示例应用程序,使用SPDK的api通过P2P dma在NVMe ssd之间复制数据。这绕过了CPU的内存和PCIe子系统。

A -从SSD A拷贝9MB到SSD B。
B—PCIe交换机上行端口的数据小于1MB。
C - SPDK命令行
CMB的软件 - The Linux Kernel
- 一个名为p2pdma的P2P框架被提议用于Linux内核。
- 比NVMe CMBs更通用。任何PCIe设备都可以使用它(网卡、gpgpu等)。
- PCIe驱动可以注册内存(例如cmb)或请求访问内存的DMA。
- 初始补丁使用p2pdma优化NVMe-oF目标代码。

p2pdma框架可以用来改进NVMe-of目标。这里我们展示了一个通用NVMe-oF系统的结果。
p2pdma可以减少CPU内存负载x50, CPU PCIe负载x25。NVMe offload还可以将CPU核心负载降低50倍。
- NVMe-oF p2pdma测试的硬件设置如下图所示。
- 软件安装由一个修改过的Linux内核和标准的NVMe-oF配置工具(主要是nvme-cli和nvmet)组成。
- Linux内核使用了额外的NVMe offload和Peer-2-Peer DMAs支持,使用由Eideticom NVMe设备提供的NVMe CMB。

CMB软件路标
NVMe cmb作为标准已经有一段时间了。然而,直到现在它们才开始变得可用,软件才开始使用它们。
- SPDK和Linux内核是CMB软件的两个主要位置今天启用。
- SPDK: NVMe P2P拷贝。NVMe-oF更新来了。SPDK Peer-2-Peer DMAs: https://spdk.io/doc/peer_2_peer.html
- Linux内核。P2pdma框架即将上游。将扩展到支持其他NVMe/PCIe资源(例如门铃) https://www.kernel.org/doc/html/latest/driver-api/pci/p2pdma.html
2. 持久化内存区域增加了非易失性CMBs,也将需要(大量)软件支持。它们将在PCIe总线上启用一条通往持久内存存储的路径。
参考资料:
1、Enabling the NVMe CMB and PMR Ecosystem:
Enabling the NVMe CMB and PMR Ecosystem (nvmexpress.org)
2、p2pdma Linux kernel patches
3、https://github.com/sbates130272/p2pmem-test
4、SPDK Peer-2-Peer DMAs:
5、kernel p2pdma:
PCI Peer-to-Peer DMA Support — The Linux Kernel documentation
6、支持NVME CMB设备:
Intel Optane SSD DC D4800X Product Brief
转载于:NVME CMB详解 - 知乎 (zhihu.com)
NVME(学习笔记二)—CMB的更多相关文章
- WPF的Binding学习笔记(二)
原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计
源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...
- JMX学习笔记(二)-Notification
Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...
- java之jvm学习笔记二(类装载器的体系结构)
java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...
- Java IO学习笔记二
Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...
- 《SQL必知必会》学习笔记二)
<SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...
- NumPy学习笔记 二
NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(二) indigo tools
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Redis学习笔记二 (BitMap算法分析与BitCount语法)
Redis学习笔记二 一.BitMap是什么 就是通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身.我们知道8个bit可以组成一个Byte,所以bitmap本身会极大的节省 ...
随机推荐
- 用C# WPF简单实现仪表控件
时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...
- Git-签名-user-email
- 神经网络优化篇:详解调试处理(Tuning process)
调试处理 关于训练深度最难的事情之一是要处理的参数的数量,从学习速率\(a\)到Momentum(动量梯度下降法)的参数\(\beta\).如果使用Momentum或Adam优化算法的参数,\(\be ...
- [转帖]TPC-C 、TPC-H和TPC-DS区别
https://zhuanlan.zhihu.com/p/339886289 针对数据库不同的使用场景TPC组织发布了多项测试标准. TPC-C: TPC Benchmark C于1992年7月获得批 ...
- [转帖]Oracle、SQL Server、MySQL数据类型对比
Oracle.SQL Server.MySQL数据类型对比 - 知乎 (zhihu.com) 1,标准SQL数据类型 BINARY 每个字符占一个字节 任何类型的数据都可存储在这种类型的字段中.不需数 ...
- [转帖]jmeter实现不写代码把测试结果存入execl
这里使用数据库作为中间件来实现不写代码就把测试结果存入execl,下面是步骤 1.新建一个setup线程组用来设置数据库连接信息和新建数据库,如下图所示,我们使用sqlite数据库来存储信息,因为不需 ...
- [转帖]设置LD_LIBRARY_PATH不起作用(失效)
部分Linux系统设置LD_LIBRARY_PATH变量,并不能生效,此时需要将变量值写入/etc/ld.so.conf文件中,如下所示: include ld.so.conf.d/*.conf in ...
- 【转帖】在ECS上配置skywalking-nginx-lua
https://help.aliyun.com/document_detail/197660.html 此处以在CentOS 7.0上的操作为例. 配置Lua运行环境. 安装工具库. yum in ...
- [转帖]exec系统调用
https://www.jianshu.com/p/3bf14f7d889c 进程的执行(exec) execve ececve系统调用可以将新程序加载到调用进程的内存空间,在这一过程中,将丢弃现有的 ...
- [转贴]win10临时修改、永久cmd 编码格式的方法
https://www.jianshu.com/p/40a9fbaf1cac cmd 前言 有时候,运行一些命令行程序某些字符无法正常显示,常见的就是方块,或者是火星文字都是由于 cmd 程序的默 ...