专栏首页LINUX阅码场蛋蛋读NVMe之一:为什么刘备需要NVMe

蛋蛋读NVMe之一:为什么刘备需要NVMe

没有前戏,直接进入。蛋蛋就是这么个人。

NVMe是一种Host与SSD之间通讯的协议,它在协议栈中隶属高层。

NVMe在协议栈中处于应用层或者命令层,它是指挥官,军师,在三国的话,就是诸葛亮的角色。”运筹帷幄之中,决胜千里之外”。军师设计好计谋,就交由手下五虎大将去执行。NVMe的手下大将就是PCIe,它所制定的任何命令,都交由虎将PCIe去完成。虽然NVMe的命令可能可以由别的接口协议完成,但NVMe与PCIe合作形成的战斗力无疑是最强的。

NVMe是为SSD所生的。NVMe出现之前,SSD绝大多数走的是AHCI和SATA的协议,后者其实是为传统HDD服务的。与HDD相比,SSD具有更低的延时和更高的性能,AHCI已经不能跟上SSD性能发展的步伐了,已经成为制约SSD性能的瓶颈。所有SATA接口的SSD,你去看性能参数,会发现都不会超过600MB/s。如果碰到有人跟你说它的SATA SSD读取性能可以超过600MB/s,直接拨打110报警。不是底层Flash带宽不够,是SATA接口速度限制了,因为SATA现在最高带宽就是600MB/s。OK,既然SATA接口速度太慢,我用PCIe好了,不过上层协议还是AHCI。五虎上将有了,由刘备指挥,让人不禁感叹暴殄天物呀。刘备什么水平,诸葛亮出现之前,居无定所,一会跟着曹操混,一会又跟着吕布混,谁肯收留就跟谁混。惨呀!AHCI和刘备一个德行,只有一个命令队列,最多同时只能发32条命令,HDD时代(群雄逐鹿)还能混混,SSD时代(三足鼎立)就只有被灭的份。刘备需要三顾茅庐,需要诸葛亮的辅佐。同样,SSD需要PCIe,更需要NVMe。

在这样的背景下,Intel等巨头携天子以令诸侯,集大家智慧,制定出了NVMe规范,目的就是释放SSD性能潜力,解SSD倒悬之苦。

上面只列了几个巨头,参与的公司远不止这些。没有上榜的公司不要见怪。

NVMe制定了Host与SSD之间通讯的命令,以及命令如何执行的。

NVMe有两种命令,一种叫Admin Command,用以Host管理和控制SSD;另外一种就是I/O Command,用以Host和SSD之间数据的传输。下面是NVMe1.2支持的命令列表:

NVMe支持的Admin Command:

NVMe支持的I/O Command:

跟ATA spec中定义的命令相比,NVMe的命令个数少了很多,完全是为SSD量身定制的。大家现在别纠结于具体的命令,了解一下就好。老板交代干活的时候,再找spec一个一个看吧。

命令有了,那么,Host又是怎么把这些命令发送给SSD执行呢?

NVMe有三宝:Submission Queue (SQ),Completion Queue(CQ)和Doorbell Register (DB)。SQ和CQ位于Host的内存中,DB则位于SSD的控制器内部。上图:

这张图信息量比较大,除了让我们知道SQ和CQ在Host的memory中以及DB在SSD端外,而且让我们对一个PCIe系统有一个具体的认识。上图中的NVMe Subsystem一般就是SSD。请看这张图几秒钟,然后闭上眼,脑补SSD所处的位置:SSD作为一个PCIe Endpoint通过PCIe连着Root Complex (RC), 然后RC连接着CPU和内存。RC是什么?我们可以认为RC就是CPU的代言人,助理,或者小蜜。作为系统中最高层,CPU说:我很忙的,你SSD有什么事情先跟我小蜜说!尽管如此,SSD的地位还是较过去提升了一级,过去SSD别说直接接触霸道总裁,就是连小蜜的面都见不到,SSD和小蜜之间还隔着一座南桥呢。滚蛋吧,南桥君!

扯远了,刚才要说什么来着。对了,是三宝。SQ位于Host内存中,Host要发送命令时,先把准备好的命令放在SQ中,然后通知SSD来取;CQ也是位于Host内存中,一个命令执行完成,成功或失败,SSD总会往CQ中写入命令完成状态。DB(大宝?)又是干什么用的呢?Host发送命令时,不是直接往SSD中发送命令的,而是把命令准备好放在自己的内存中,那怎么通知SSD来获取命令执行呢?Host就是通过写SSD端的大宝寄存器来告知SSD的:饭已OK了,下来密西吧!

OK,具体的我们来看看NVMe是如何处理命令的,看图说话:

这是NVMe1.2规范中的第207张图。不知道是人家图画得好呢,还是NVMe就是这么简单,抑或是我比较聪明,反正上面的命令处理流程我一看就明白了。好吧,给没我聪明的人再解释一下。

说,把大象放冰箱一共要几步?答:三步。

第一步,打开冰箱门;

第二步,放进大象;

第三步,关上冰箱门。

说,NVMe处理命令需要几步?答:八步:

第一步:Host写命令到SQ;

第二步:Host写DB,通知SSD取指;

第三步:SSD收到通知,于是从SQ中取指;

第四步:SSD执行指令;

第五步:指令执行完成,SSD往CQ中写指令执行结果;

第六步:然后SSD发短信通知Host指令完成;

第七步:收到短信,Host处理CQ,查看指令完成状态;

第八步:Host处理完CQ中的指令执行结果,通过DB回复SSD:指令执行结果已处理,辛苦您了!

曹植七步作诗,NVMe就比曹植差一点,需要八步。

关于NVMe,到现在相信大家有了一些基本认识。关于更多技术细节,今天我不打算讲了。我要吸取之前的教训,比如在一篇文章里就把SSD基本原理介绍了,而不是分别介绍。这样很不讨巧,一口气写完,对自己写文章是压力,对读者读文章也是压力,对网站的浏览量也不好。阿呆的做法值得学习,一个话题,采用连载的方式推出,有朋友也这么向我建议,于是我决定采取类似方式来谈NVMe,毕竟NVMe是个大话题。于是,我把标题从”蛋蛋读NVMe”改成”蛋蛋读NVMe之一”,后面还有之二,之三。。。

本文分享自微信公众号 - Linux阅码场(LinuxDev)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 房市静心贴:蛋蛋读NVMe之三

    Host如果想往SSD上写入用户数据,需要告诉SSD写入什么数据,写入多少数据,以及数据源在内存中的什么位置,这些信息包含在Host向SSD发送的Write命令...

    Linux阅码场
  • 广成子:值得收藏-史上最全Linux ps命令详解

      大概在十多年前,我当时还是一个产品经理。由于一些工作的原因,需要向运维工程师学习一些linux常用命令。当使用linux ps这个十分常用的命令时,遇到了一...

    Linux阅码场
  • 一起来做题:你真地懂符号链接和硬链接吗?

    Linux阅码场
  • 未来五年SSD市场趋势看这篇就够了

    近日,知名市场情报公司TrendFocus 分析师在Memblaze发布会上分享对未来五年数据中心SSD市场趋势的预测。TrendFocus表示,虽然未来很长时...

    大数据在线
  • 服务器02-硬盘篇(SSD)

    OP=(SSD裸容量 - 用户容量)/用户容量

    大话IT架构
  • 深度学习Pytorch检测实战 - Notes - 第5章 单阶多层检测器:SSD

    SSD(Single Shot Multibox Detecor)算法借鉴了Faster RCNN与YOLO的思想,在一阶网络的基础上使用了固定框进行

    肉松
  • 拐点来临:SSD年内出货量有望首超HDD!

    2018年存储市场有望发生标志性事件:SSD出货量首次超过HDD,迎来市场真正的拐点!

    大数据在线
  • 目标检测:速度和准确性比较(Fater R-CNN,R-FCN,SSD,FPN,RetinaNet和YOLOv3)

    文章来源:https://zhuanlan.zhihu.com/p/91719437

    AI算法与图像处理
  • 重磅!美国公布长达35页的《2016-2045年新兴科技趋势报告》

    前段时间美国公布的一份长达35页的《2016-2045年新兴科技趋势报告》。该报告是在美国过去五年内由政府机构、咨询机构、智囊团、科研机构等发表的32份科技趋势...

    钱塘数据
  • 信息量巨大!美国终于公开了《2016-2045年新兴科技趋势报告》

    美国公开了一份长达35页的《2016-2045年新兴科技趋势报告》。该报告是在美国过去五年内由政府机构、咨询机构、智囊团、科研机构等发表的32份科技趋势相关研究...

    小白学视觉

扫码关注云+社区

领取腾讯云代金券