1、什么是cmb
在nvme express 1.2 spec中开始支持一个特性,那就是cmb(controller memory buffer),是指ssd控制器内部的读写存储缓冲区,与hmb(host memory buffer)的不同处在于所使用的内存地址位于控制器自己的内存中,而不是位于主机内存中,但它们使用队列的方式都是一样的。
2、如何获取cmb的配置信息
在nvme ssd controller 中有两个寄存器cmbloc和cmbsz是描述cmb的基本信息。在主机中可以使用nvme-cli工具查看寄存器信息(nvme show-regs /dev/nvme0n1 -h)。
1)cmbloc(controller memory buffer location),是指存储区的位置信息,其中ofst(offset)表示存储区的偏移地址,单位是cmbsz.sz,注意要是4kb对齐。bir(base indicator register)则表示pci bar(基地址寄存器)的序号,上图中使用的是bar0空间。
2)cmbsz(controller memory buffer size),是指存储区的大小信息。其中size是指cmb中可用空间的长度,注意单位也是cmbsz.sz。size units(szu)表示cmb的单位是多少,从下表中我们可以看到,只要device有足够的空间,cmb的大小可以配置得非常大的。
例如size units是4kb,那么cmb大小是512x*4kb=2mb,偏移地址是0x100*4kb=1mb。
3)接下来的几个bit就表示该设备支持cmb的哪些用途
a、write data support(wds),表示是否支持主机直接将data和meta_data发送到设备的cmb。read data support(rds),表示是否支持主机从设备的cmb中读取data和meta_data。
b、prp sgl list support,表示是否支持主机将prp list或者sgl list写入到设备的cmb中。
c、completion queue support(cqs)和submission queue support(sqs)分别表示设备是否支持在cmb中实现admin和io的完成队列和发送队列。ssss
3、cmb在nvme pcie驱动中的应用
1)通常在主机内存中实现的发送队列会要求控制器到主机内存执行pcie的读取操作来获取队列内容。而基于cmb实现的发送队列,则是主机将发送队列中的命令直接写入控制器的内部存储空间中,这样减少了一个控制器从主机读取命令的动作,可以减少命令执行的延迟。目前,在linux kernel 4.15中,nvme驱动已经支持通过cmb发送sq。
2)同样,prp list或sgl list需要在pcie协议上需要进行单独的读取操作,这也可以通过将prp或sgl写入控制器内存缓冲区来减少控制器的读取动作。
3)在协议中有提到让主机将data或meta data写入控制器内存缓冲区,而不是让控制器从主机内存中获取数据或元数据。后面我们有实验可以看到cmb在少量数据的写入方面比较有利,所以cmb在meta data的写入上可能也会有一定的提升。
4、cmb在nvme over fabric/tcp中的应用
因为cmb在pcie上读操作比写操作慢很多,所以nvme pcie驱动中没有采用通过cmb读取cq的办法。不过在nvme的另外分支over fabric和over tcp上,cmb可以更好地发挥自身优势,减少网络传输的交互次数,提高包含多个交换机的pci express结构拓扑的效率。
5、cmb的性能测试
1)运行环境:ubuntu 18.04.1 lts
2)内核版本:4.15.0-45-generic
3)控制器芯片:starblaze star1000
4) 说明:以下测试进行nvme和cmb的小数据读写测试对比。因为基于star1000的oc方案是4kbytes的physical_block_size,所以nvme命令的最小数据长度是基于4k的,要实现小于4k的数据传输,则会损失一部分带宽。以下的对比测试都是qd1的读写。
• 测试写带宽
• 测试写iops
• 测试读带宽
• 测试读iops
• 测试4k数据的稳定性
从以上的测试可以看到:
在性能方面,cmb 64bytes的写带宽能达到1.063gib/s,对应的iops是16.6m,最高的iops(8bytes写)能到19.07m,是nvme命令实现的340倍;读的性能相比写要低一些,但是8bytes读的iops也能达到1.06m,是nvme命令实现的23倍。相比nvme命令的iops,cmb的读写延迟有明显的优势。
在稳定性方面,读写的抖动是很小的。
6
open channel ssd与cmb的结合
ss
目前忆芯科技的ocssd与cmb结合应用的一个场景就是持久性内存(persistent memory),它具有非易失性、较低延迟、可bytes寻址的特性,使数据管理具有更大的灵活性。它非常适合需要频繁访问复杂数据集的环境,以及因电源故障或系统崩溃导致停机的敏感环境。现有pm方案提供以下几个特性:
1)易用的api
▪ int nvm_pm_write(struct nvm_pm_dev* dev, void* buf,unsigned int length, unsigned int offset)
▪ int nvm_pm_read(struct nvm_pm_dev* dev, void* buf,unsigned int length, unsigned int offset)
2)异常掉电保护
目前star-ocssd为cmb提供的默认掉电保护空间是2mib(可以根据具体需求调整),固件会在掉电前保证将数据写入到nand flash中,并在下一次上电时加载到cmb区域。
3)byte访问
当前忆芯科技的star1000和star100p两款控制器的cmb支持pcie最大有效负载大小的burst传输,支持byte访问,也支持任意byte对齐访问。
6GHz频段正式获批,Wi-Fi 6E即将进行商用
电气电工常用控制电路分享
315无线模块总结与注意事项
电机解答:电机为什么会产生轴电流?
安全光栅控制器的作用是什么
CMB的深入了解与实际应用
PICKIT2烧写器使用说明书
地物光谱仪的维护和保养需要注意哪些问题?
Lightyear计划2019年推出商用太阳能电动车:最大续航里程800公里
一颗芯片的传奇,台积电称霸AI天下
口腔清洁小卫士,备受牙医专业推荐的XNUO心诺冲牙器X628了解下
比特币的诞生都产生了哪些影响
SKYLine多点网加速服务实现企业综合网络管理
中兴通讯实现700MHz+4.9GHz双载波聚合,助力700MHz频段5G商用建设
数据科学和机器学习所需要的基本数学技能
国芯思辰 | 开环式电流传感器模组AH950可替换ACS758LCB应用在变频器设备中
云游戏服务器一般需要多大的带宽
小米6配置价格曝光:与前代的小米5相比有什么不同?主要升级了哪些功能?
人工智能的特点有哪些
OPPOReno10倍变焦版和华为P30Pro哪个好