关于SSD HMB与CMB

NVMe协议详解(一) 讲解NVMe协议部分内容~~~ 阅读详情

关于Controller Memory Buffer(CMB)

        每块SSD上,不管是SATA还是PCIE口的,都会有一定量的DRAM来做数据缓存。但是,这个数据缓存对Host端是不可见的,也就是说,Host端的代码是不可能直接使用访存指令访问到这块数据缓存的,这块内存空间并没有被映射到Host物理地址空间中。

        我们知道,Host端的程序只能通过访问某个或者某些物理地址从而与SSD控制器通信。通常,Host端的驱动程序会将由上层协议栈准备好的IO指令及数据在Host主存中的基地址(也就是指针)采用Stor指令写入到SSD控制器的前端PCIE控制器模块所暴露的寄存器中,SSD控制器接收到该指针,便可以从Host主存中取回对应的指令及数据从而执行。SSD控制器的这些寄存器会被映射到Host物理地址空间中的某处,该动作由host端PCIE bus driver在枚举PCIE设备之后即执行。底层细节和过程冬瓜哥就不过多描述了。

        可以看到,SSD控制器只向host端暴露了很少量的寄存器存储空间,并未将其内部的数百兆甚至上GB的DRAM空间映射到host物理地址空间。而且,驱动程序先把对应的指针通知给SSD控制器,然后SSD控制器需要主动从Host主存取指令和数据。有人可能会想,为何驱动程序不直接将指令及数据写入到SSD的DRAM中呢?原因是CPU如果把这事都自己干了,那就忙不过来了,会深陷到Load/Stor指令移动数据,其他活就没法干了。SSD控制器上有个DMA模块,在收到指针之后,DMA模块会主动读取host主存,此时host CPU可以做其他事情。

        但是如果CPU将整条指令而不是指针直接写到SSD端的DRAM的话,并不耗费太多资源,此时能够节省一次PCIE往返及一次SSD控制器内部的中断处理。于是,人们就想将SSD控制器上的一小段DRAM空间映射到host物理地址空间从而可以让驱动直接写指令进去,甚至写一些数据进去也是可以的。这块被映射到host物理地址空间的DRAM空间便被称为CMB了。

        CMB对NNMe Over Fabric场景下非常有用,因为节省了一趟往返,如果外部网络时延较大的话,每笔IO都节省了一次往返,每秒便能增加不少IOPS。

        CMB还有另外一种应用场景,在5月19日的中国云计算大会上冬瓜哥有个分享,会向大家介绍,这里就不多说了。

关于Host Memory Buffer(HMB)

        有些SSD产品为了节省成本,板载DRAM很小,或者根本没有。就像有些显卡没有板载显存一样。但是并不表示它们不需要DRAM。它们的DRAM可以与host端的主存共享,也就是分配一块主存用作其DRAM,这些外部设备控制器可以通过PCIE接口访问host端的DRAM。共享显存的模式下,系统bios会直接分割出一块连续的DRAM给显卡使用,此时,host端OS根本看不到这块空间,BIOS会配置系统IO桥上的地址路由表以及地址范围寄存器,从而实现不同访存请求的路由。

        NVMe协议中也定义了这种场景,只不过,并非像共享显存那样直接从bios层面分配连续的空间,而是由NVMe驱动在OS所管理的物理地址空间内分配对应容量的RAM给SSD控制器使用,这段空间物理上可以不连续,NVMe驱动将对应的基地址+长度的列表推送给SSD控制器,SSD控制器需要将对应的列表更新到内部的寄存器中用于访存查找。这样,SSD控制器就可以将比如FTL映射表存储到host端的这块RAM中,这也就意味着,每一笔IO请求发送到SSD之后,SSD控制器需要通过PCIE来访问host端的这块RAM从而提取出映射表中对应的条目来查找对应IO目标逻辑地址所被映射到的物理地址,也就意味着每一笔IO都需要产生更多的PCIE流量,时延就会大增。

        当主机突然掉电之后,host端的这块RAM中数据就会丢失。重启之后,SSD需要从Flash Page中保存的元数据重构出这张大表,再次写入host端的ram。只不过,这个动作只有OS启动之后,NVMe驱动加载之后,才能执行,因为每次启动NVMe分配的这块RAM对应物理地址可能都不同。这会产生一个问题,如果用该SSD当做启动盘的话,重启之后bios阶段是无法给SSD分配host内存的,即便分配了,OS也不会认,除非改OS的内存管理部分。此时,SSD必须先使用其板载的小容量SRAM/DRAM,性能会比较差。OS启动后再后台继续重构FTL表。

        HMB使用场景比较受限制,所以目前还没有出现使用HMB机制的SSD。

其他相关阅读(点击可直接进入):

《 【冬瓜哥画PPT】浅谈闪存控制器架构 》

《 【冬瓜哥论文】浅析固态介质在存储系统中的应用方式 》

《 你绝对想不到的两种高逼格存储器 》

《 【冬瓜哥手绘】大话众核心处理器体系结构 》

《关于SSD元数据及掉电保护的误解 》

《 关于闪存FTL的Host Base和Device Based的误解 》

《帮你梳理一下各种存储协议及接口》



消费级vs企业级NVMe硬盘拆解:除了耐久度指标,这些隐藏差异才是关键 本文深入剖析了消费级与企业级NVMe硬盘在性能、可靠性与设计上的核心差异。除了TBW耐久度指标,重点揭示了高队列深度下的性能一致性、端到端数据保护、控制器架构(如CMB)、固件策略及可维护性等关键隐藏差异,解释了巨大价差背后的技术本质与价值主张。 阅读详情

相关推荐

CXL 来了!重磅解读ASPLOS’23 杰出论文 Pond内存池系统

本期为大家带来Pond论文深度解读,它基于CXL技术构建了第一个兼具高性能和低成本的公有云内存池系统。该工作堪称学术界与工业界合作的典范,由弗吉尼亚理工大学Huaicheng Li(FEMU SSD模拟器的作者)和微软云Azure团队(包括Mark D. Hill)共同完成,获得了计算机体系结构顶级会议ASPLOS’23杰出论文奖。该论文在短短7个月内已获得超过70次引用。

pumawave的专栏 2518

CMB和HMB简介——《深入浅出SSD》

在NVMe协议中,允许SSD控制器将SSD内部的通用缓冲区映射到主机端,从而让主机端直接通过PCIe memory read/write的形式访问。这样做有如下好处:1)充分利用设备内部的RAM存储空间2)在某些场合下,节省了主机端进行PCIe DMA的次数,如将NVMe SQ建立在CMB上,主机端更i性能SQE(Submission Queue Entry)只需一次写入。设备取SQE时不再经过PCIe总线。

u013201718的博客 3667

[实践 4] 话说内存缓冲区

何为HMB?hello 大家好, 我是元存储. DIY电脑行业,有句由来已久的玩笑话:“三千预算进卡吧,加钱加到九万八!三千预算进图吧,学校对面开网吧!”虽然是一句调侃话,但也符合时下大众消费者的消费观念——追求性价比。HMB SSD就是DIY业内应性价比而生的产物,是一种针对入门级无DRAM方案的高效能技术。由于NVMe接口在主机和SSD主控之间提供了非常快的传输速度,因此SSD主控可以访问主机内存而不会造成性能损失。

串起点滴 3480

字节跳动ZNS SSD应用案例分析

性能方面,SSD的垃圾回收在传统SSD并不可控。写回(Write-back):如果主机发出一个写入请求,而目标地址已经存在于CMB中,那么控制器可以选择先更新CMB中的数据,稍后再将修改后的数据写入闪存。通过使用CMB,SSD可以预先将一部分数据缓存在高速的DRAM中,然后根据需要快速地从CMB中提供数据给主机系统,或者临时存储等待写入闪存的数据。此功能使SSD除了提供通过逻辑块地址(LBA)访问的存储区域外,还提供了另一个非易失性存储区域,并且这块存储区域假定的访问方法是内存访问而不是块访问。

存储随笔 2178

解锁Cherry Studio高阶玩法:用MCP实现自动化测试与数据爬取

本文深入探讨了如何利用MCP协议与Cherry Studio结合,实现自动化测试与数据爬取的高阶应用。通过Playwright等工具的MCP集成方案,详细解析了自动化测试流水线构建和智能爬虫系统开发的关键技术,显著提升工程效率和系统适应性。

defi6farmer的博客 274

Ubuntu新手必看:3种方法快速查看和编辑JSON文件(附jq安装指南)

本文为Ubuntu新手详细介绍了三种查看和编辑JSON文件的核心方法:命令行利器jq、灵活脚本Python以及直观的图形化编辑器(如VS Code)。文章重点解析了jq的安装与核心用法,并对比了各方案的优缺点,帮助用户根据快速查询、复杂处理或直观编辑等不同场景,选择最合适的工具,从而高效处理JSON数据。

weixin_29229989的博客 415

三星860EVO SSD评测

本文组织:ZOL对冬瓜哥的采访视频3D V-NAND及底层技术860 EVO照片与规格AS SSD Benchmark简要测试I/O Meter测试性能均匀性测试压缩解压体验1ZOL对冬瓜哥采访视频23D V-NAND及底层技术冬瓜哥使用的第一块固态硬盘就是三星的840 EVO,当时就在想,再也不会有使用机械硬盘的时候的那种让人想砸键盘的冲动了。但是好景不长,由于冬瓜哥的电脑从不关机,为啥?因为开

大话存储 4万+

打造你自己的小程序容器 —— 一套能装得下整个未来的跨端技术!

摘要: 本文介绍了一种基于Capacitor框架开发的轻量级“小程序容器”解决方案——LapDrop。通过模拟微信小程序的运行逻辑(动态加载、原生能力调用、沙盒环境),LapDrop允许开发者自主构建跨平台(iOS/Android/Web)的小程序生态。其核心利用Capacitor的插件桥接机制,实现JS与原生功能的无缝调用,并支持浏览器调试与原生环境一致化。优势包括插件化架构、状态隔离、热更新及开放权限控制,适用于企业级模块化应用或开发者工具。未来计划扩展生命周期管理、远程加载等功能,目标成为开源的小程序

CangYuChenAi的博客 974

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

在NVMe Express 1.2 Spec中开始支持一个特性,那就是CMB(Controller Memory Buffer),是指SSD控制器内部的读写存储缓冲区,与HMB(Host Memory Buffer)的不同处在于所使用的内存地址位于控制器自己的内存中,而不是位于主机内存中,但它们使用队列的方式都是一样的。

大隐隐于野 3192

实测OV5640 DVP/MIPI接口720p@60fps配置,为什么我的Zynq-7020开发板只有30帧?

本文深入解析了OV5640摄像头在Zynq-7020开发板上帧率减半的问题,从寄存器配置到硬件链路进行全面排查。重点分析了DVP/MIPI接口的720p@60fps配置,提供了关键寄存器设置、时序参数调整及硬件带宽验证方法,帮助开发者快速定位并解决帧率下降问题。

weixin_42634811的博客 344

Autosar MCAL-S32K324 Fee配置-基于EB

Autosar MCAL S32K324 Fee配置详解

赞的博客 1544

当HDD搭车NVMe,是垂死挣扎吗?

例如,由于主机CPU访问CMB的效率低于DDR内存,且CMB的大小有限,因此对于需要频繁、大量数据交换的应用场景,CMB可能无法提供最佳的性能。HDD在存储数据的同时,还需要管理大量的元数据(Metadata),这些元数据用于确保数据的正确读写和硬盘的正常运行。希捷公布的一个数据显示:SSD的制造能力,尤其是NAND闪存的产能,无法迅速扩展到足以完全取代HDD的水平。由于这些写操作速度较慢,所需的能量较多,而旋转盘片提供的能量有限,动能转换为电能的过程中,能量损失不可避免,进一步限制了可用能量。

存储随笔 2200

2017年全国大学生电子设计竞赛综合测评题目解析——Multisim仿真

1.题目 给定两个单电源的双运放芯片READ2302G芯片(当时记得增益带宽积好像是6M),一片HD74LS74数字芯片双D触发器,需要详细电路图、手写报告,5个波形输出,测频,测幅,8:00公布题目,15:00停止答题,中间可以吃饭(也可以不吃继续做),15:00清场,休息一段时间后开始进场测试,打分。 2.要求 (1)一片运放搭建方波振荡电路,频率 20 KHz,误差 0.1 KHz,幅度 3...

DengFengLai123的博客 2万+

深入浅出SSD 09:NVMe介绍

9.12 Key Value命令集简介。9.3 吉祥三宝:SQ、CQ、DB。9.4 寻址双雄:PRP和SGL。9.8 NVMe动态电源管理。9.11 CMB和HMB简介。9.5 Trace分析。9.6 端到端数据保护。9.2 NVMe综述。9.10 ZNS简介。

weixin_71243777的博客 213

YOLOv13改进策略【多YAML融合】| HWD + DSC3k2_PConv + Detect_MBConv

本文记录的是利用HWD + DSC3k2_PConv + Detect_MBConv改进YOLOv13,分别涉及骨干、颈部和检测头部分的改进。一方面按照此配置,其工作量及创新程度能够满足论文发表的需求,另一方面是一些难以融合多个YAML的举例,以帮助大家理解如何将多个YAML整合到一个YAML中。小波下采样:一个简单但有效的语义分割下采样模块。块由两个主要块组成:无损特征编码块和特征表示学习块。HWD模块与其他下采样模块对比:保留信息能力:传统的下采样方法(如最大池化、平均池化和步幅卷积等)会导致信息丢失,

Limiiiing的博客 495

anaconda navigator 卡在loading application界面一直没有反应解决办法

在打开anaconda navigator 程序的时候,遇到了2个问题。第一个问题:打开的时候弹出提示:There is an instance of Anaconda Navigator already running.第二个问题:程序一直卡在loading application界面一直没有反应。以下是我的解决办法,有效果。

猿小白的博客 4383

nvme命令中prp_NVMe又有新花样!CMB vs HMB

原标题:NVMe又有新花样!CMB vs HMB1什么是CMB在NVMe Express 1.2 Spec中开始支持一个特性,那就是CMB(Controller Memory Buffer),是指SSD控制器内部的读写存储缓冲区,与HMB(Host Memory Buffer)的不同处在于所使用的内存地址位于控制器自己的内存中,而不是位于主机内存中,但它们使用队列的方式都是一样的。2如何获取CMB...

weixin_28779183的博客 1450

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【技术前沿】Gen6 SSD怎么测?一文看懂 NVMe SSD 测试全景

本文深入探讨了企业级NVMe SSD测试的复杂性与SanBlaze测试平台的解决方案。文章指出,NVMe SSD测试远不止性能评估,需覆盖六层关键测试:基础枚举与链路训练、NVMe协议验证、数据一致性压力测试、企业级特性验证、电源/复位/热插拔测试及合规认证。SanBlaze通过RM系列测试系统、SBCert自动化测试套件和iRiser故障注入设备形成完整测试体系,特别针对PCIe 6.0 SSD研发推出RM6平台,支持多代协议兼容和OCP云规范测试。平台重点验证NVMe基础命令、ZNS、FDP、SR-IO

Saniffer的博客 508

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【高清视频】Linux下面的NVMe SSD专业商业测试软件演示

摘要:NVMe SSD研发阶段需进行全面测试以确保性能与功能达标。全球领先的SanBlaze提供硬件级解决方案,支持PCIe故障注入、热插拔等2000+测试用例,覆盖NVMe 1.0-2.3及企业级功能,被IBM、Dell等厂商广泛采用。此外,HPSI的软件测试方案可在Linux系统运行,配合Quarch硬件可实现热插拔等功能。其工具包括EDVT(规范验证脚本)、NVMETEST(协议测试平台)和NVMEQRWT(数据完整性压力测试),分别针对功能正确性、协议调试和读写可靠性验证。

Saniffer的博客 397

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

PyNVMe3 培训二:Buffer类、PCIe类、Controller类

本文介绍了PyNVMe3测试工具的核心组件及功能:1. Buffer类提供物理连续内存管理,支持数据交换、内存偏移和Hugepage配置,支持CMB空间分配;2. PCIe类实现配置空间访问、BAR空间操作及L1.2/ASPM/D3hot电源管理;3. Controller类封装了NVMe控制器的完整操作,包括Admin命令处理、超时设置、回调机制、Identify数据获取、LazyDoorbell优化和重置流程,支持命令日志记录。该工具为NVMe SSD测试提供了全面的解决方案。

2503_93312600的博客 1992

NVMe over CXL技术如何加速Host与SSD数据传输?

总的来说,以上各种方案都旨在通过不同的策略和技术来加速Host与device之间的数据传输,以满足日益增长的高性能计算、大数据分析和实时应用的需求。选择哪种方案取决于具体的应用场景、硬件配置和性能目标。本文针对这几种方案,进行了原理介绍、优劣势对比以及适用场景。在现代计算环境中,优化Host(主机)与device(设备)之间的数据传输速度对于提升系统整体性能和效率至关重要。如果您看完有所受益,欢迎点击文章底部左下角“

存储随笔 2876

NVMe驱动 请求路径学习记录

NVMe驱动 DMA学习记录 由深入浅出SSD 6.5节trace分析可知,主机读请求的执行流程如下: 主机准备好命令放在SQ 主机通过写SQ的Tail DB,通知SSD来取命令(Memory Write TLP) SSD收到通知,去主机端的SQ取指令(Memory Read TLP) SSD执行命令,把数据传给主机(Memory Write TLP) SSD往主机的CQ中返回状态 SSD采用中断的方式告诉主机去处理CQ 主机处理相应CQ,更新CQ Head DB(Memory Write TLP) 可

最佳损友1020的博客 2492

[存储]NVMe-4-数据结构

注意:本文翻译仅为学习交流用,版权归原文作者所有。 原文出处。 4 数据结构 这个这个章节讲NVM Express中的数据结构。 4.1 提交队列和完成队列定义 一个entry的提交者使用当前项的尾指针指向下一个空闲的队列槽位。在放置新entry后,提交者将尾指针向后移动,如果尾指针超过了队列大小,则将尾部entry滚动至0。提交者放置新entry直至队列满为止。 entry的消费者使用当前头entry指针表示下一个准备消耗的entry。在消耗一个entry后,头指针向下一个entry移动。同提交者… 提交

virgilshi的博客 2436

Host memory buffer HMB的大小

Windows下可以通过查找系统日志获得,Microsoft-Windows-Storage-Storport/Operational 日志来查看,可以看到Device支持的min和pre size,还有实际分配的大小,由于Microsoft的限制,目前最多分配64MB给device。 所以device支持的min和pre最好都配置成64M。万一power on后,host按照min来配置了,device的min又很小,甚至为0,那就只能哭死了。 ...

pythonwahaha的博客 2235
上一篇: 关于同步IO与阻塞IO的误解
下一篇: 软件定义存储是伪命题中的战斗机!
大话存储
博客等级 码龄9年 568粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值