NVMe 基础

        NVMe(Non-Volatile Memory Express)是一种高速、低延迟的I/O接口协议,专为闪存存储设备设计,包括固态硬盘(SSD)和其他非易失性存储设备。NVMe协议是为取代早期的AHCI(Advanced Host Controller Interface)协议而开发的。AHCI协议在处理大量I/O时速度会变慢,NVMe采用了更高效的命令队列和并发操作,能够支持更高的I/O吞吐量和更低的延迟,从而大大提高了系统的性能。

       NVMe协议是基于设备逻辑接口的总线传输协议规范,用于访问通过PCI Express(PCIe)总线附加的非易失性存储器介质。尽管不一定必须和PCIe结合使用,但NVMe协议与PCIe的结合使用可以进一步提升存储performance。

NVME interrupt

        1.中断合并,为了减少controller向host发出中断请求的频率,从而减少host处理中断服务程序开销;

        2.中断合并两种方式:

                聚合阈值是指在每个中断向量上IO命令的completion entry的数量;

                聚合时间是指controller生成一个中断信号给host的最大延迟

        3.中断聚合依赖controller,有可能controller not support

        4.PCIE提供了三种中断方式:INTx,MSI,MSI-X

submission queue&completion queue

        1.SQ/CQ在Host 内存中;

        2.两种类型的SQ/CQ:Admin和I/O,

          一种是Admin,用来放Admin命令,用以主机管理控制SSD

          一种是IO,用来放IO命令,用以主机与SSD之间传输数据

        3.系统中只能有一对Admin SQ/CQ,但可以有很多对I/O SQ/CQ;

                IO SQ/CQ不是一生下来就有的,它们需要通过Admin命令创建

        4.I/O SQ与CQ可以是一对一的关系,也可以是一对多的关系;

        5.SQ和CQ都有一定的深度,对Admin SQ/CQ来说,其深度可以是2 ~ 4096(4K)

                 对IO SQ/CQ来说,其深度可以是2 ~ 65536(64K),队列深度是可以配置的(SQ和CQ的个数也是可以配置的)

                    NVME的性能可以通过配置队列个数和队列深度来灵活调节的

        6.每条命令大小是64字节,每条命令完成状态是16字节;

queue

        生产者往队列的尾部写入东西,消费者从队列的头部取出东西   

        1)对SQ来说,host是它的生产者(主机向SQ的尾部写入指令),SSD是它的消费者(SSD从SQ的头部取出指令执行)

        2)对CQ来说,SSD是它的生产者(SSD向CQ的尾部写入命令的执行结果),host是它的消费者(主机从CQ的头部读取命令的执行结果)

DoorBell

        1.DoorBell是SSD控制器端的寄存器,记录SQ和CQ的头部和尾部

        2.每个SQ或CQ都有两个对应的DoorBell,即Head DoorBell和Tail DoorBell

        3.DB有两个功能:

                a.记录SQ&CQ的head 、tail

        对SQ来说,SSD是消费者,它只和queue head打交道,清楚SQ head在哪里,所以SQ         head DB由SSD自己维护;但它不知道队伍有多长,后面还有多少命令等待执行,但是Host知道,所以SQ Tail DB由Host来更新。SSD结合SQ的头和尾,就知道还有多少命令在SQ中等待执行了。

        对CQ来说,SSD是生产者,它很清楚CQ tail在哪里,所以CQ Tail DB由自己更新,但是SSD不知道Host处理了多少条命令完成信息,需要Host告知,因此CQ Head DB由Host更新。SSD根据CQ的头和尾,就知道CQ能不能以及能接受多少命令完成信息。

                b.inform 的作用

        Host更新SQ Tail DB的同时,也是在告知SSD有新的命令需要处理;Host更新CQ Head DB的同时,也是在告知SSD,你返回的命令完成状态信息我已经处理

NVMe-MI

        在一个存储系统中,将设备管理与业务分离是一个良好的设计,比如在Nvme协议中就有一个Admin命令集,与IO命令分开。为了能够更规范合理得对NVMe SSD进行管理,NVMe-MI协议应运而生。

        Nvme-MI(Management Interface),定义了一套完整的NVMe SSD管理方式,独立于NVMe协议且为NVMe服务。NVMe-MI(NVMe Management Interface)Spec是NVMe Spec家族中的一员,它的诞生和发展是建立在带外管理和NVMe Base Spec基础上的

SSD controller 行为

       1. controller init flow:

                设置PCI和PCIe register
                等待CSTS.RDY变为0
                配置AQA、ASQ、ACQ register
                配置CC register
                将CC.EN 置1
                等待CSTS.RDY置1
                Host通过identity cmd,确定controller 的数据结构,确定NS的配置
                Host通过get feature cmd获取IO SQ/CQ info,然后配置中断机制
                Host分配适当的IO CQ/SQ队列
                如果Host希望获取controller的错误或者健康信息,可以添加异步事件请求命令

        2.controller shutdown&powerloss

                shutdown
                Host停止提交新的IO命令,但允许未完成的命令继续完成
                Host删除所有的IO SQ,删除所有的SQ队列后,所有未完成的命令将被撤销
                Host删除所有IO CQ
                Host将CC.SHN置为01b,表示正常关机;关机程序完成时,将CSTS.SHST置10b
                powerloss
                Host停止提交新的IO cmd
                Host将CC.SHN置10b,表示异常关机;关机程序完成时,将CSTS.SHST置10b

  • 29
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bigger_One

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值