CMB:Controller Memory Buffer,控制器存储器缓冲区;
HMB:Host Memory Buffer,主机内存缓冲区
1.CMB简介
在NVMe协议中,允许SSD控制器将SSD内部的通用缓冲区映射到主机端,从而让主机端直接通过PCIe memory read/write的形式访问。这样做有如下好处:
1)充分利用设备内部的RAM存储空间
2)在某些场合下,节省了主机端进行PCIe DMA的次数,如将NVMe SQ建立在CMB上,主机端更i性能SQE(Submission Queue Entry)只需一次写入。设备取SQE时不再经过PCIe总线。
3)SSD内部通用缓冲区可以作为网卡设备到NVMe存储设备的缓冲区(在NVM-oF场景中),通过PCIe点到点技术,减少CPU的开销和数据访问的延时。
具体来说:
SSD可以选择是否支持CMB,这体现在NVMe寄存器CAP.CMBS上;
主机端如果想要使用CMB,会设置CMDMSC.CRC位
主机端需要CMBSZ和CMBLOC寄存器的支持;
使能CMB之后,主机端发送的PCIe地址访问请求一旦命中CMB配置的PCIe地址范围,SSD将会把该PCIe地址的内存读写请求转换成相应的CMB的读写请求。
2.HMB简介
NVMe协议提供了一种机制让主机端分配一部分内存给SSD控制器使用。SSD控制器在识别控制器(identify controller)命令上表达自己对HMB的诉求。主机端可能没办法提供任何HMB或只能提供很小的HMB,SSD表示理解,并承诺就算没有HMB也能正常工作。
HMB的使用场景很多