NVME-SQ、CQ DoorBell
NVME-SQ、CQ & DoorBell
参考资料:《深入浅出SSD》 , NVME协议1.3
SQ和CQ
全称Submission/Completion Queue
1.主机往SQ中写入命令,SSD往CQ中写入命令执行的结果
2.SQ和CQ有两种,
一种是Admin,用来放Admin命令,用以主机管理控制SSD
一种是IO,用来放IO命令,用以主机与SSD之间传输数据
3.SQ和CQ可以是一对一的关系,也可以是多对一的关系,它们是成对的
4.系统中只有一对Admin SQ/CQ,它们是一 一对应关系,IO SQ/CQ却可以有很多(最多为65536,即64k-1)
5.IO SQ/CQ不是一生下来就有的,它们需要通过Admin命令创建
6.主机端每个CPU只有一个CQ(主机端只能有一对Admin SQ/CQ,为一 一对应关系;每个CPU最多可以有一个IO CQ,但是可以有多个SQ)
可以有一个或多个SQ(多个SQ可以用来赋予不同的优先级)
实际系统中需要多少SQ, 取决于系统配置和性能需求,可灵活设置IO SQ
7.SQ和CQ都有一定的深度,对Admin SQ/CQ来说,其深度可以是2 ~ 4096(4K)
对IO SQ/CQ来说,其深度可以是2 ~ 65536(64K),队列深度是可以配置的(SQ和CQ的个数也是可以配置的)
NVME的性能可以通过配置队列个数和队列深度来灵活调节的
8.每个SQ放入的是 命令条目,无论是Admin还是IO命令 ,每个命令条目大小都是64字节 ,
每个CQ放入的是命令完成信息的条目,每个条目大小是16字节
Queue
1. 队列要素
1)队列深度
2)队列内容
3)队列头部
队列头部的那个正在被服务或等待被服务,完成后将离开队伍
头部决定谁先被服务
4)队列尾部
尾部决定新来队列的站位
2.队列的生产者消费者模型
简述:如下图,生产者往队列的尾部写入东西,消费者从队列的头部取出东西
1)对SQ来说,主机是它的生产者(主机向SQ的尾部写入指令),SSD是它的消费者(SSD从SQ的头部取出指令执行)
2)对CQ来说,SSD是它的生产者(SSD向CQ的尾部写入命令的执行结果),主机是它的消费者(主机从CQ的头部读取命令的执行结果)
DoorBell
1.DoorBell是SSD控制器端的寄存器,记录SQ和CQ的头部和尾部
2.每个SQ或CQ都有两个对应的DoorBell,即Head DoorBell和Tail DoorBell
3.主机只能写DoorBell,不能读DoorBell
4.主机通过SSD往CQ中写入的命令完成状态获取其队列头部或者尾部
案例
下面我们以一个案例来说明SQ, CQ和DoorBell之间的联系
1.一开始,假设SQ1和CQ1都是空的,Head=Tail=0,如图
2.Host往SQ1写入三条指令,SQ的Tail变成3,Host写SQ1 Tail DoorBell(值为3),通知SSD控制器取指令,如图
3.SSD控制器收到通知,取回SQ1中的3条指令
4.SSD开始执行指令,SSD把SQ1中的3条指令都消费了,SQ1的Head变成3,Host写SQ1 Head DoorBell(为Head值3),如图
5.SSD执行完成两条指令,SSD往CQ1中写入两条指令完成的信息,SSD写CQ1 Tail DoorBell(值为2)
6.SSD生成中断,通知Host有命令完成,如图
7.Host收到通知,从CQ1中取出两条命令的完成信息,开始处理,CQ1中的两条命令完成信息都消费了,CQ1的Head变为2
8.处理完毕,Host写CQ1 Head DoorBell(为CQ1的Head值2),如图
NVME-SQ、CQ DoorBell相关推荐
- QQ机器人思路理解(C++、CQ)
近期看着教程写了一下基于C++.CQ下的qq机器人,就是在CQ的主框架上来实现qq的自动检索并回复的功能.就是这样已经把主框架都给出来的前提下,依然还是困难重重. 首先,qq机器人利用CQ框架下的内用 ...
- SATA、mSATA、M.2、M.2(NVMe)、PCIE固态硬盘接口详解
固态硬盘 概念 固态驱动器(Solid State Drive),俗称固态硬盘,固态硬盘是用固态电子存储芯片阵列而制成的硬盘,因为台湾英语里把固体电容称之为Solid而得名.SSD由控制单元和存储单元 ...
- AHCI协议、NVME协议、SATA总线、PCIe总线、SATA接口、PCIe接口、M.2接口
内容来自 硬件茶谈 硬盘的SATA M.2 NGFF NVME是什么意思,详解硬盘的总线协议与接口 侵删. 一.协议 AHCI和NVME协议民用很多,而SCSI协议大多用在服务器上. 二.总线 总 ...
- 2.3 黑群晖驱动:开启nvme缓存、将nvme缓存作为存储盘 教程
黑群晖驱动安装工具下载: 链接:https://pan.baidu.com/s/1CMLl6waOuW-Ys2gKZx7Jgg?pwd=chct 提取码:chct 一.开启NVME缓存 在群辉-> ...
- SSD硬盘的接口区别详解图解 SATA、mSATA、PCI-E、M.2(NVMe协议) 、U.2、Type-c、USB、Macbook接口
转 扫盲:SATA.mSATA .PCIe和M.2--SSD硬盘的接口 2019年03月02日 20:47:06 nedwons 阅读数 11035更多 个人分类: 非技术 SATAT通道:硬盘--内 ...
- [SSD科普之2] SATA、mSATA、M.2、M.2(NVMe)、PCIE固态硬盘接口详解
固态硬盘 概念 固态驱动器(Solid State Drive),俗称固态硬盘,固态硬盘是用固态电子存储芯片阵列而制成的硬盘,因为台湾英语里把固体电容称之为Solid而得名.SSD由控制单元和存储单元 ...
- SATA、mSATA、M.2、M.2(NVMe)、PCIE固态硬盘接口如何区分
概念 固态驱动器(Solid State Drive),俗称固态硬盘,固态硬盘是用固态电子存储芯片阵列而制成的硬盘,因为台湾英语里把固体电容称之为Solid而得名.SSD由控制单元和存储单元(FLAS ...
- 【读书笔记】深入浅出SSD
本篇文章大部分都是转载,少部分内容为个人补充,作为存储行业SSD部分入门很有帮助. 转载自 https://www.cnblogs.com/lmhyhblog/p/12508849.html ,辛苦作 ...
- 固态硬盘:NVME 命令队列 SQ/CQ 的奥秘
文章目录 前言 1. SQ 和 CQ 是什么? 2. SQ/CQ 有多少? 3. SQ/CQ 如何更新 4. SQ/CQ 执行流程 主机和SSD如何同步队列信息? 队列优先级 总结 前言 NVMe(o ...
最新文章
- 在Win10下如何实现VS下工程代码的开机自启功能
- 如何判断Android手机当前是否联网
- CentOS6.0搭建DNS
- cmd命令生成webservice_使用wsimport命令生成webService客户端代码实例
- 基于 OData 模型和 JSON 模型的 SAP UI5 表格控件行项目的添加和删除实现
- 计算机汉字的输入和编辑教案,计算机汉字录入教案
- UnityShader1:渲染流水线
- oracle 常用索引分析,使用原则和注意事项
- 用Node编写RESTful API接口
- 在UOS(deepin)系统下安装CPUS-PDF虚拟PDF打印机的方法
- 分节符、分页符及页眉设置方法
- Vue项目:style样式篇
- Elasticsearch:在华为大数据集群 从c80升级至651版本后,执行es命令修改配置失败
- Ubuntu 18.04 安装vsftpd
- python打印古诗_python教程:利用python基础知识取出对应诗句
- django-模板语言-verbatim标签-不使用DTL的解析
- Java程序在内存中运行详解
- 全志A40i移植 RTL8188FTV/RTL8188FU USB-WiFi
- nrf52832 学习笔记(三)蓝牙从机广播
- 北邮计院数电第五章——VHDL语言
热门文章
- 2016-12-26 菜鸟上路(4)——VS中关于MFC界面设计
- [C/C++/Qt] 网易云音乐缓存文件批量自动解析解码工具 - CloudMusicCache2Mp3(开源)(Version:1.0)
- 常用的四种sql增删改查
- 大新闻!微软正考虑添加 Python 为官方的 Excel 脚本语言
- CentOS7 安装 X Window System
- networkx计算边的重要性:边介数或者中介中心性edge_betweenness
- Eclipse中离线安装ADT插件详细教程及下载链接
- 炫技:拼接列表、破碎二维数组——Python sum()函数隐藏技能花式玩法
- FlexHex分析MP4格式的文件
- `英语` 2022/8/25