NVMe协议解读

        说到NVMe协议解读,蛋蛋读NVMe系列绝对是经典中的经典,个人在学习NVMe过程中也看了好几遍,如果有想学习NVMe协议的同学强烈建议去看看。珠玉在前,自己写这篇文章的目的仅仅只是为自己记录而已。

1)什么是NVMe协议?

        首先看一下NVMe的定义,官方网站为 https://nvmexpress.org/ 官方对NVMe的解释是:NVM Express® (NVMe® is a specification defining how host software communicates with non-volatile memory across a PCI Express® (PCIe®) bus. It is the industry standard for PCIe solid state drives (SSDs) in all form factors (U.2, M.2, AIC, EDSFF).。意思简单明了,使用非易失性内存的固态硬盘通过PCIe总线与主机通信的标准,即专为NVMe SSD制定的通信标准。现在我们还经常能听到的一个词NOF(NVMe over fabrics),即NVMe协议运行于fabrics协议之上,这也是NVMe协议发展壮大的一个体现,从这也可以看出NVMe协议的定位,NVMe协议是一个上层协议,可以说是一个应用层协议,而最开始的协议制定依赖的底层是PCIe协议,因此本文讨论的NVMe协议范围只包括NVMe over PCIe。

 

2)为什么要有NVMe协议?

        随着计算机的发展,计算机系统中IO的性能瓶颈基本卡在传统的机械硬盘上,机械硬盘性能几乎已经达到天花板了,固态硬盘横空出世,为了更高性能的固态硬盘,因此诞生了NVMe协议。

 

3)谁用NVMe协议?

        NVMe协议是主机和NVMe SSD之间的通信协议,因此NVMe的实现需要主机和SSD共同实现。主机软件作为发起者,往SSD发送NVMe指令,NVMe控制器作为接收者,执行主机软件发送的指令。

 

4)NVMe协议内容

        首先来看一下NVMe协议是怎么让Host和SSD通信的,下面这张图是懂NVMe协议的根本,个人认为也是最基础最核心的。在Controller Architecture章节。

        这张图明确了Host与SSD之间的一个完整通信流程,如果图上面的文字描述不清楚,可翻到协议该图处,前面有这8步的完整文字描述。

        从这张图里面可以看到几个关键的东西,SQ,CQ,DOORBELL。这也是NVMe协议里面的核心。

1)什么是SQ?

submission queue:提交队列,主机顺序往里面填IO命令,盘顺序从里面取IO命令并执行。

2)什么是CQ?

completion queue:完成队列,盘执行完IO命令后往里面填IO完成消息,主机从里面取消息确认IO已经完成。

3)什么是DOORBELL?

门铃:起一个通知作用,用于主机通知盘,盘通知主机一般是用中断(图里面的MSI-X),SPDK使用轮询。两种场景需要使用doorbell:1、主机往SQ填命令后,通知盘去取命令;2、主机取完CQ后,通知盘命令已经完成了。

        以上就是一条NVMe命令的完整执行流程,在NVMe里面,管理和业务是分离的,分别对应有Admin命令和IO命令,该流程适用于Admin命令与IO命令。

1.IO命令

除了Read/Write命令外,还有一些其他的命令,但所有命令的本质都是读和写,只是一些变形而已。

还有一个点要注意,不管是读还是写,都是盘这边的DMA主动去搬数据的,主机发号施令,盘去干苦力。也就是说,主机发读IO是盘把数据从盘里面搬到主机内存,而写IO是盘这边把数据从主机内存搬到盘内。

2.Admin命令

这个就比较多了,每个命令的具体功能可参考协议。

 

        以上基本能了解NVMe协议的工作原理了,最最核心的也就是那张Command Processing那张图。

        NVMe协议还有很多特性,包括E2E数据保护,固件升级,NameSpace,NVMe配置这些,每个特性都能在协议里面找到对应的描述。整体来说,NVMe协议还是比较简单的。

 

 

  • 7
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值