• SSD主控


    《深入浅出SSD》学习中…



    一、SSD主控

    就是类似电脑CPU的东西,在SSD中收取处理Host端的命令,管理NAND闪存

    二、PCIe和NVMe控制器前端子系统

    主要用于处理来自host以及协议接口的命令,对应PCIe协议和NVMe协议(以下Host代表电脑或服务器等外接SSD的设备端)

    1.PCIe控制器

    决定控制器前端和host之间的带宽,由两种因素决定,一个是协议,一个是通道数
    所谓协议就是常听到的PCIe3.0/PCIe4.0 或是 GEN3/GEN4,每种协议对应的通道支持的速率是不一样的。 以PCIe 4.0x4 为例:
    理论单通道速率为: 16GT/s ,转换为带宽就是 1969MB/s
    x4 代表是4通道,所以速率x4 得到理论带宽为 7.88GB/s
    至于转换公式,不做赘述,放个wiki百科上的截图参考:
    在这里插入图片描述

    2.NVMe控制器

    利用PCIe接口实现NVMe相关协议,实现基本的读写等操作
    整个过程基于三个概念:
    Submission Queue(SQ) :Host把命令放在该队列,这个队列通常在Host内存里。
    Completion Queue(CQ):SSD从SQ中取出命令执行完成后,把消息写入该队列,指示命令完成状态,这个队列通常在Host内存里。
    Doorbell Register(DB):当主机写了SQ后,再写DB,通知SSD去SQ取命令执行。DB位于SSD控制器内部
    交互流程图如下:摘自NVMe over PCIe Transport Specification 1.0b
    1,首先Host往自己的SQ内提交命令,写了一个任务计划,准备安排SSD去执行了
    2,提交完命令了同时需要让SSD知道,所以又下了DB命令,可以理解为Host敲了SSD的门,告诉他,我来命令啦
    3,SSD的NVMe控制器在收到DB后,知道自己又有活干了,就去SQ内取命令。
    4,NVMe控制器在取到命令后,把命令给到SSD主控,主控进行相应的命令操作
    5,SSD执行完命令后,往主机另一个队列CQ中写入命令执行结果,更新任务进度,记录自己哪条SQ完成了
    6,SSD以中断的方式告诉Host,这个命令我完成了。
    7,Host响应中断并处理CQ里面完成的命令
    8,Host更新自己的记录,标记整个任务完成,画上句号,释放资源

    这里还能引入一个概念(待深入理解):

    队列大小有16bit,最小队列大小为2个元素(因为满队列的定义方式,所以最小为2个元素),对于I/O队列,最大队列大小为64k;对于Admin队列,最大队列为4
    Host利用 QID来标识唯一ID,16bit。host可以修改队列优先级(如果支持的话),共四级,U(Urgent)、H(High Priority)、M(Medium Priority)、L(Low Priority)

  • 相关阅读:
    现代数据架构-湖仓一体
    whip和whep
    ChatGPT 的 Text Completion
    图的一些表示方式、邻居和度的介绍
    什么是无损检测设备?
    std : : map
    文心一言 VS 讯飞星火 VS chatgpt (98)-- 算法导论9.3 4题
    【ArcGIS Pro微课1000例】0034:矢量数据几何校正案例(Spatial Adjustment)
    ChatGPT对软件测试的影响
    springboot:集成Kaptcha实现图片验证码
  • 原文地址:https://blog.csdn.net/weixin_44517278/article/details/134518075