nvme协议学习总结

一、nvme命令

1 nvme在pcie基础上的协议,与PCIE配合,实现高效传输。

 2 nvme命令主要分IO命令和admin命令。

3  一个NVME CMD执行流程:

step1:host把cmd写入SQ queue中;

step2:host远端更新Device(SSD)内部的doorbell,更新SQ tail;

step3:SSD检测到doorbell内部变化,去host SQ queue去cmd,取回后,更新SQ head指针;

step4:SSD执行取回的CMD;

step5:SSD把执行结果写入CQ;

step6:SSD使用MSI-X中断通知host;

step7:Host从CQ queue读取Cpl;

step8:Host更新远端的doorbell,即CQ head;

 Host怎么管理head和tail指针:

首先host可以往DB写:SQ tail和CQ head;但是SQ head 和 CQ tail怎么处理呢

首先是SQ head指针,SSD取指令对于host是不可见的,所以当SSD取完指令后,把head信息更新到了CQ head里面,host拿到CQ信息就知道了SQ的head;

至于CQ的tail指针怎么处理呢,CQ命令里面DW3有个P字符,初始化时候设置成0,当CQ填入时候,把该值设置成1,这样当SSD发送CQ到host时候,host可以读取CQ任何信息,保留了上次P状态位置,即旧的tail位置,依次往下检查,得到现在的新的tail位置。

4 PRP和SGL

4.1 理清楚作用,以及两者区别:PRP是描述物理页大小,SGL可以描述任意内存大小;(主机有无划分物理页)

PRP是地址,可以是物理内存地址,也可以是指向PRP的list,具体看PRP个数,因为CMD里面只有PRP0 PRP1两个

SGL注意类型,SGL描述符还是段描述符。

5 PCIE和NVME架构

NVME属于事务层之上的应用,无论什么cmd,都会被封装成TLP包到物理层,发送到对端。

可以参考《深入浅出SSD》,分析一个cmd命令在host到SSD之间的nvme cmd和TLP包的传输过程。

未完待续...(后序继续补充)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值