NVME CMB原理和常规使用方案详解

news2025/7/27 14:02:49

什么是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作为标准已经有一段时间了。然而,直到现在它们才开始变得可用,软件才开始使用它们。

  1. 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总线上启用一条通往持久内存存储的路径。

参考资料

Enabling the NVMe™ CMB and PMR Ecosystem:

https://nvmexpress.org/wp-content/uploads/Session-2-Enabling-the-NVMe-CMB-and-PMR-Ecosystem-Eideticom-and-Mell....pdf​nvmexpress.org/wp-content/uploads/Session-2-Enabling-the-NVMe-CMB-and-PMR-Ecosystem-Eideticom-and-Mell....pdf

p2pdma Linux kernel patches

https://github.com/sbates130272/linux-p2pmem​github.com/sbates130272/linux-p2pmem

https://github.com/sbates130272/p2pmem-test

SPDK Peer-2-Peer DMAs:

https://spdk.io/doc/peer_2_peer.html

kernel p2pdma: https://www.kernel.org/doc/html/latest/driver-api/pci/p2pdma.html

支持NVME CMB设备

https://www.intel.com/content/www/u

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1156773.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ffplay是做什么的

目录 ffplay是什么 一、ffplay的基本使用 二、ffplay播放控制 三、常用参数 ffplay是什么 ffplay 是FFmpeg提供的一个极为简单的音视频媒体播放器(由ffmpeg库和SDL库开发),可以用于音视频播放、可视化分析 ,提供音视频显示和播…

微信小程序面试题之理论篇

本文内容,来源于极客学院的分享,这里只做引用。 说说你对微信小程序的理解?优缺点? 背景 小程序与H5 优缺点 优点:缺点: 说说微信小程序的生命周期函数有哪些? 应用的生命周期页面的生命期组件的生命周期执行过程 应…

从零开始的目标检测和关键点检测(二):训练一个Glue的RTMDet模型

从零开始的目标检测和关键点检测(二):训练一个Glue的RTMDet模型 一、config文件解读二、开始训练三、数据集分析四、ncnn部署 从零开始的目标检测和关键点检测(一):用labelme标注数据集 从零开始的目标检测…

Jmeter 汉化中文语言

找到 bin -> jmeter.propertise 修改参数:languageen --> languagazh_CN OK!

上位机底部栏 UI如何设置

上位机如果像设置个多页面切换: 位置: 代码如下: "tabBar": {"color": "black","selectedColor": "#d43c33","borderStyle":"black","backgroundColor": …

EVM6678L 开发教程: IBL-TFTP 引导 elf 文件

目录 EVM6678L 开发教程: IBL-TFTP 引导 elf 文件安装 Tftpd64测试工程测试说明 EVM6678L 开发教程: IBL-TFTP 引导 elf 文件 参考: "C:\ti\mcsdk_2_01_02_06\tools\boot_loader\examples\i2c\tftp\docs\README.txt" 此教程介绍如何在 EVM6678L 开发板上实现 IBL-…

【面试经典150 | 链表】旋转链表

文章目录 Tag题目来源题目解读解题思路方法一:遍历 其他语言python3 写在最后 Tag 【单向链表】 题目来源 61. 旋转链表 题目解读 旋转链表,将链表的每个节点向右移动 k 个位置。 解题思路 方法一:遍历 本题题目意思清晰,实现…

【Linux】jdk Tomcat MySql的安装及Linux后端接口部署

一,jdk安装 1.1 上传安装包到服务器 打开MobaXterm通过Linux地址连接到Linux并登入Linux,再将主机中的配置文件复制到MobaXterm 使用命令查看:ll 1.2 解压对应的安装包 解压jdk 解压命令:tar -xvf jdk 加键盘中Tab键即可…

企业级JAVA、数据库等编程规范之命名风格 —— 超详细准确无误

🧸欢迎来到dream_ready的博客,📜相信你对这两篇博客也感兴趣o (ˉ▽ˉ;) 📜 表白墙/留言墙 —— 初级SpringBoot项目,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学 📜 用户登录前后端…

作为网工有必要了解一下什么是SRv6?

什么是SRv6? 【微|信|公|众|号:厦门微思网络】 【微思网络http://www.xmws.cn,成立于2002年,专业培训21年,思科、华为、红帽、ORACLE、VMware等厂商认证及考试,以及其他认证PMP、CISP、ITIL等】 SRv6&…

MFC简单字符串压缩程序

一个mfc简单字符串压缩程序;按以下情况进行压缩; 1 仅压缩连续重复出现的字符。比如”abcbc”无连续重复字符,压缩后还是”abcbc”。 2 压缩的格式为”字符重复的次数字符”。例如,”xxxyyyyyyz”压缩后就成为”3x6yz”。 void …

Centos7环境下cmake3.25的编译与安装

文章目录 0 视频传送门1 卸载当前版本2 下载cmake3.25.0并且解压缩3 使用root用户进入解压缩的目录4 开始执行命令5 创建软连接6 检查版本 0 视频传送门 https://www.bilibili.com/video/BV1Gu4y1J7Ev/?vd_source3353f83539e46042d8cf76efb177a8e4 07-Centos7编译安装cmake3.…

接口请求的六种常见方式详解(get、post、head等)

一.接口请求的六种常见方式: 1、Get 向特定资源发出请求(请求指定页面信息,并返回实体主体) 2、Post 向指定资源提交数据进行处理请求(提交表单、上传文件),又可能导致新的资源的建…

Leetcode—485.最大连续1的个数【中等】明天修改

2023每日刷题(十五) Leetcode—2.两数相加 迭代法实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l…

再现“换桥奇迹”|人大金仓助力中国移动完成营销系统国产化升级

堪称传统基建奇迹的“三元桥43小时换新桥”工程的相关报道还历历在目,而中国移动也经历着类似的考验,需要在2天内完成某在线营销系统整体升级。 作为中国移动的重要数据库产品与服务提供商,留给人大金仓的时间只有每天夜间的4小时&#xff0…

要在VMware(虚拟机)上获取相机连接状态并显示在主界面上,您可以使用以下步骤:

在VM上安装相机驱动程序:确保VM中已安装对应的相机驱动程序,以便能够连接和使用相机。 检查相机连接状态:在VM中,打开设备管理器(Device Manager)并检查相机是否显示为已连接状态。如果显示为已连接&#…

什么是 DevOps

DevOps是一套融合软件开发(Dev)和 IT 运营(Ops)的实践,旨在缩短应用程序开发周期并确保以高软件质量持续交付,通过采用 DevOps 实践,您可以帮助组织更可靠、更快速、更高效地交付软件。 什么是…

python 之正则表达式详解

文章目录 r与R原始字符串的特点:示例:正则表达式示例:文件路径示例: 有没有r 带来的影响使用 r 前缀的示例:不使用 r 前缀的示例: \b 作为单词的界限匹配以 "cat" 开头的单词:匹配以 …

从零开始的目标检测和关键点检测(三):训练一个Glue的RTMPose模型

从零开始的目标检测和关键点检测(三):训练一个Glue的RTMPose模型 一、重写config文件二、开始训练三、ncnn部署 从零开始的目标检测和关键点检测(一):用labelme标注数据集 从零开始的目标检测和关键点检测…

第06章 索引的数据结构

第06章 索引的数据结构 1. 索引及其优缺点 1.1 索引概述 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。 **索引的本质:**索引是数据结构。你可以简单理解为“排好序的快速查找数据结构”&#xff…