原标题:NVMe又有新花样!CMB vs HMB

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对齐访问。

责任编辑:

nvme命令中prp_NVMe又有新花样!CMB vs HMB相关推荐

  1. 平面设计中的字体设计新花样

    创意字体排版既是 2020 年的主要平面设计的趋势,也是一直以来一直在趋势前沿的一个设计门类.对于设计师而言,优秀的创意字体排版一直是热门的设计灵感来源.今天我就分门别类地搜集了一堆具有启发性和创新性 ...

  2. nvme命令中prp_蛋蛋读NVMe之三

    有个人一直在思考三个问题:我是谁?我从哪里来?我要去哪里? 你猜这个人最后怎么着? 成了哲学家? 疯了? 疯了的哲学家? 我觉得无外乎这三种结果了. 相比人的世界,这三个问题在NVMe的世界就很容易得 ...

  3. nvme命令中prp_Linux nvme驱动分析之块设备层

    参考 Product Documentation Red Hat Enterprise Linux7 7.2 发行注记 第 14 章 存储 blk_mq 数据缓冲区转换成prp或者sg列表 用户态分配 ...

  4. diskgenius 数据迁移_如何无损将UEFI格式的系统从SATA盘迁移到NVME SSD中

    一.前言 近期各种免费游戏大作换着花样送,这导致本人之前的一块960G SATA盘很快被填满.看到这里想必会有小伙伴说,存游戏为啥不用HDD呢? 呃,貌似现在都2020年了,再用HDD打游戏,那速度谁 ...

  5. 固态硬盘:NVME 命令队列 SQ/CQ 的奥秘

    文章目录 前言 1. SQ 和 CQ 是什么? 2. SQ/CQ 有多少? 3. SQ/CQ 如何更新 4. SQ/CQ 执行流程 主机和SSD如何同步队列信息? 队列优先级 总结 前言 NVMe(o ...

  6. SQL Server 2008中Analysis Services的新特性——深入SQL Server 2008

    SQL Server 2008中Analysis Services的新特性 --深入SQL Server 2008 内容简介: 本书涵盖了SQL Server 2008引入的新功能.作者之一Rober ...

  7. linux 下orapwd 未找到命令,orapwd命令中entries参数的作用

    orapwd命令中entries参数的作用 作者 blue_stone E-mail: blue_stone@xinhuanet.com Blog: http://bluestone.cublog.c ...

  8. shell变量加单引号sql_关于shell:在Bash中的命令中扩展变量的单引号

    我想从bash shell脚本中运行一个命令,该脚本在单引号和变量中包含单引号和一些其他命令. 如repo forall -c '....$variable'. 在这种格式中,对$进行转义,不展开变量 ...

  9. VC6中工具条的新特色

      加入时间:01-1-8 下午 09:10:32 在Visual C++ 版本6中工具条的新特色 作者: Dave Schmitt 微软在www.microsoft.com/visualc已经推出V ...

最新文章

  1. leetCode题解之Jewels and Stones
  2. C++中 引用与取地址的区别
  3. Special Permutation CodeForces - 1352G(构造)
  4. python3环境搭建odoo_【环境配置】ubuntu16.04配置odoo13环境
  5. unittest单元测试笔记
  6. 利用tushare进行对兴业银行股价的爬取,并使用numpy进行分析
  7. 跑步与读书都废掉了...工作目前也在换新的.
  8. MSN Messenger去广告和其他修改方法
  9. 各种坐标系下的散度、梯度、旋度公式
  10. Excel常用电子表格公式大全【汇总篇】
  11. 〖Python接口自动化测试实战篇⑦〗- 接口抓包工具 Fiddler 的使用
  12. 【博客438】Kubernetes IPAM分配IP原理
  13. 也来谈谈人工智能的罪与罚
  14. excel两个指标相关性分析_用Excel做相关性分析方法
  15. 高等数学拾遗 矢量分析
  16. 凉开水泡绿茶有利降血糖
  17. 消费信贷评分建模与应用笔记-2
  18. 国密算法SM3与SM4简介与应用
  19. 屯特大学计算机排名,荷兰院校介绍篇——屯特大学(特文特大学)
  20. python3--最新google_trans_new超时报错JSONDecodeError解决

热门文章

  1. android手机如何获取手机号
  2. 太赞了!华为工程师总结了400道前端面试题
  3. 自学Python问题记录2:解决画风玫瑰图出现报错No artists with labels found to put in legend.
  4. javascript 在页面显示xxxx年xx月xx日
  5. 为了防止别人非法使用计算机可以通过,[单选] 为了防止别人非法使用计算机,可以通过为计算机设置口令()。...
  6. 一台液晶显示屏的台式计算机,台式电脑液晶显示器怎么购买?
  7. 计算机突然需要管理者密码,为什么windows7旗舰版开启管理员帐号登录需要密码...
  8. nginx启动报 server name * has suspicious symbols
  9. 游戏行业:什么样的架构才可以对DDoS免疫?
  10. 香港消防处去年接3.3万宗火警召唤 第四代调派系统料2033年启用