NVMe 队列数据结构与命令仲裁机制

  • 3.3.3Queueing Data Structures
    • 3.3.3.1Submission Queue Entry
    • 3.3.3.2Common Completion Queue Entry
      • 3.3.3.2.1Status Field 定义
        • 3.3.3.2.1.1Generic Command Status Definition
        • 3.3.3.2.1.2Command Specific Status 定义
        • 3.3.3.2.1.3Media and Data Integrity Errors定义
        • 3.3.3.2.1.4Path Related Status定义
    • 3.3.3.3Queue Size
    • 3.3.3.4Queue Identifier
    • 3.3.3.5队列优先级
    • 3.3.3.6队列协调

3.3.3Queueing Data Structures

3.3.3.1Submission Queue Entry

每个通用命令格式命令的大小为 64 字节。

Command Dword 0、Namespace Identifier、Metadata Pointer、PRP Entry 1、PRP Entry 2、SGL Entry 1 和 Metadata SGL Segment Pointer 对所有 Admin 命令和所有 I/O Command Sets 的 I/O 命令具有通用定义。并非所有命令都使用 Metadata Pointer、PRP Entry 1、PRP Entry 2 和 Metadata SGL Segment Pointer。Command Dword 0 在 Figure 86 中定义。

Figure 86: Command Dword 0

Common Command Forma 在Figure 87中定义。将来定义的任何额外的 I/O Command Set都可以使用替代命令大小或格式。

SGL 不得用于 NVMe over PCIe 中的Admin命令。

Figure 87: Common Command Format

除了为 Common Command Format 通常定义的字段外,Admin 和 NVM Vendor Specific命令可能支持Data Transfer中的Number of Dwords和Metadata Transfer中的Number of Dwords字段。如果支持,Admin Vendor Specific Command 和 NVM Vendor Specific Commands 的命令格式在Figure 88 中定义。有关更多详细信息,请参阅第 8.23 节。

Figure 88: Common Command Format – Admin and NVM Vendor Specific Commands (Optional)

3.3.3.2Common Completion Queue Entry

Common Completion Queue Entry Layout 的大小至少为 16 个字节。Figure 89 描述了遵循 Common Completion Queue Entry Layout 的完成队列条目数据结构的前 16 个字节的布局。Dword 0 和 Dword 1 的内容是特定于命令的。如果命令使用 Dword 0 或 Dword 1,则这些 dword 的定义包含在相关的命令定义中。如果命令不使用 Dword 0 或 Dword 1,则保留未使用的字段。Dword 2 在 Figure 90 中定义,Dword 3 在Figure 91 中定义。

如果完成队列条目是通过多次写入来构建的,则Phase Tag位应在该完成队列条目的最后一次写入中更新。

Figure 89: Common Completion Queue Entry Layout – Admin and All I/O Command Sets

Figure 90: Completion Queue Entry: DW 2

Figure 91: Completion Queue Entry: DW 3

3.3.3.2.1Status Field 定义

Status Field 定义完成队列条目中指示的命令的状态,在Figure 92 中定义。

Status Field 的值 0h 表示命令成功完成,没有致命或非致命错误条件。除非另有说明,如果命令由于多种原因未能成功完成,则返回的特定状态代码,由供应商选择。

Figure 92: Completion Queue Entry: Status Field

完成队列条目指示正在报告的完成响应的 Status Code Type(SCT)。Figure 93 指定了状态码类型值和描述。

Figure 93: Status Code – Status Code Type Values

完成队列条目中的Status Code(SC) 字段指示有关正在报告的完成的更详细的状态信息。

每个 Status Code 值集分为三个范围:

  • 00h 到 7Fh:适用于Admin Command Set,或跨多个Command Set;
  • 80h到 BFh:I/O Command Set具体状态码;
  • C0h 到 FFh:供应商特定状态代码。

除非另有说明,否则如果应用多个状态代码,则由控制器选择返回的 Status Code。

3.3.3.2.1.1Generic Command Status Definition

具有 Generic Command Status 的 Status Code Type(SCT) 的完成队列条目指示与该命令关联的状态值,该状态值在许多不同类型的命令中是通用的。

Figure 94: Status Code – Generic Command Status Values

3.3.3.2.1.2Command Specific Status 定义

具有命令特定错误Status Code Type (SCT) 的完成队列条目表示特定命令opcode的错误。00h 到 7Fh 的状态代码用于 Admin 命令错误。80h 到 BFh 的状态码特定的 I/O command sets。

Figure 95: Status Code – Command Specific Status Values


Figure 96: Status Code – Command Specific Status Values, I/O Commands

Figure 97: Status Code – Command Specific Status Values, Fabrics Commands

3.3.3.2.1.3Media and Data Integrity Errors定义

具有Media and Data Integrity Errors的 Status Code Type(SCT) 的完成队列条目指示与命令关联的错误,该错误是由于与 NVM 介质关联的错误或数据完整性类型错误造成的。

Figure 98: Status Code – Media and Data Integrity Error Values

3.3.3.2.1.4Path Related Status定义

具有Path Related Status的 Status Code Type(SCT)(参见Figure 99)的完成队列条目指示与命令关联的状态值,该状态值在许多不同类型的命令中是通用的,并适用于主机和控制器处理之间的特定连接命令或控制器和命名空间之间。如果主机可以使用多个控制器,则可以在同一 NVM 子系统中的不同控制器上重试返回此状态的命令。

在多路径环境中,除非另有说明,否则应使用不同的路径(如果可用)重试此类错误。

Figure 99: Status Code – Path Related Status Values

3.3.3.3Queue Size

队列大小在一个基于 0 的 16 位字段中表示,该字段表示队列中的槽数。队列的最小大小是两个槽。I/O Submission Queue 或 I/O Completion Queue 的最大大小定义为 64 Ki 个槽,受 CAP.MQES 字段中报告的控制器支持的最大队列大小限制。Admin Submission 和 Admin Completion Queue 的最大大小定义为 4 Ki 个槽。由于Head和Tail条目指针的定义,每个队列中有一个槽不可用。

3.3.3.4Queue Identifier

每个队列都通过一个 16 位 ID 值标识,该 ID 值在创建队列时分配给该队列。I/O Submission Queue标识符和 I/O Completion Queue 标识符都是从 1 到 65,535 的值。

3.3.3.5队列优先级

如果支持具有紧急优先级等级仲裁机制的加权轮询,则主机软件可以分配Urgent、High、Medium或Low的队列优先级服务等级。如果不支持具有紧急优先级等级仲裁机制的加权轮询,则不使用优先级设置并且被控制器忽略。

3.3.3.6队列协调

有一个Admin Queue对与多个 I/O Queue 对关联。Admin Submission Queue 和 Completion Queue 用于执行影响整个控制器的功能。I/O Submission Queue 和 Completion Queue 可用于执行 I/O(读/写)操作,并可分布在 CPU 内核和线程之间。

一个Admin命令可能会影响一个或多个 I/O queue 对。主机应确保Admin操作与负责 I/O queue 对的线程协调,以避免不必要的错误情况。协调细节超出了本规范的范围。

【NVMe2.0b 7】NVMe 基本队列数据结构相关推荐

  1. Java LinkedList特有方法程序小解 使用LinkedList 模拟一个堆栈或者队列数据结构。...

    package Collection;import java.util.LinkedList;/* LinkedList:特有的方法 addFirst()/addLast(); getFirst()/ ...

  2. 数据结构栈和队列_使您的列表更上一层楼:链接列表和队列数据结构

    数据结构栈和队列 When you want to store several elements somewhere in a program, the go-to data type is an a ...

  3. 使用LinkedList模拟一个堆栈或者队列数据结构

    使用LinkedList模拟一个堆栈或者队列数据结构. 堆栈:先进后出  如同一个杯子. 队列:先进先出  如同一个水管. import java.util.LinkedList;public cla ...

  4. 队列的链式存储结构及其实现_了解队列数据结构及其实现

    队列的链式存储结构及其实现 A queue is a collection of items whereby its operations work in a FIFO - First In Firs ...

  5. 寻找第k大的元素Java,java – 支持快速第k个最大元素查找的队列数据结构

    我遇到一个需要支持快速第k个最大元素查找的队列数据结构的问题. 此数据结构的要求如下: >队列中的元素不一定是整数,但它们必须彼此可比较,即当我们比较两个元素(它们也可以相等时),我们可以知道哪 ...

  6. swift实现队列_Swift队列数据结构实现

    swift实现队列 In this tutorial, we'll be discussing and implementing the Data structure Queues using Swi ...

  7. 固态硬盘:NVME 命令队列 SQ/CQ 的奥秘

    文章目录 前言 1. SQ 和 CQ 是什么? 2. SQ/CQ 有多少? 3. SQ/CQ 如何更新 4. SQ/CQ 执行流程 主机和SSD如何同步队列信息? 队列优先级 总结 前言 NVMe(o ...

  8. apriori算法c++实现_经典数据结构与算法(四):Python/C/C ++实现队列类型双端队列数据结构...

    前期文章点击这里: 经典数据结构与算法(一):Python/C/C ++实现堆栈和队列 双端队列或双端队列是一种队列,其中可以从前面或后面执行元素的插入和删除.因此,它不遵循FIFO规则(先进先出). ...

  9. 【NVMe2.0b 6】NVMe 队列模型

    NVMe 队列模型 3.3NVM Queue Models 3.3.1基于内存的传输队列模型 3.3.1.1队列设置与初始化 3.3.1.2Queue的使用 3.3.1.2.1Completion Q ...

最新文章

  1. Python3中的内置函数总结
  2. R语言中如何计算C-Statistics?几种计算方法详解
  3. Nginx源码分析-内存池
  4. cxgrid 行合并单元格_合并单元格求和、计数、加序号
  5. javaBean和jsp应用
  6. 以Python为例对变量类型及运算符进行举例
  7. 大数据面试-02-大数据工程师面试题
  8. select 实现类似多线程_redis中的网络IO有了解过吗,它是单线程的还是多线程的,为什么要用单线程?...
  9. 阶段面试题_关于文案、交易系统、付费渗透率、阶段性目标的面试题解答
  10. Java代码实现“年-月-日 上午/下午时:分:秒”
  11. 基于tuns的DNS隧道研究
  12. 如何从表象深入IPFS本质?Filenet诠释公链底层难题
  13. Prometheus+Grafana监控安装及使用
  14. 湘江智能携手中联重科,工程机械产业智能化开启“星城速度”
  15. 图片怎么压缩小一点?简单的图片压缩教给你
  16. 数据结构:八大常见数据结构
  17. Java WORD转换PDF 并添加水印 (附赠jar提取链接)
  18. 视频网站服务器该怎么选择呢
  19. 【QString 函数学习篇】
  20. 发现几个有趣的公众号!

热门文章

  1. 超细节的对比学习和SimCSE知识点
  2. 课程设计——模仿网易云UI设计基础(超简单版)
  3. qq邮箱smtp服务器imap,如何配置电子邮件客户端使用IMAP(QQ邮箱账户) 你需要学习了...
  4. java斗地主代码花色,集合经典案例:斗地主发牌功能实现
  5. 王道数据结构线性表:有读者认为直接去掉p结点会造成断链?
  6. 怎样利用腾讯云或者腾讯云主机搭建自己的网站
  7. Java 操作 word 文档 (二)初识 WordprocessingML 标签
  8. 苹果无线笔记本怎么连不上win服务器,苹果笔记本电脑连接不上wifi该怎么处理...
  9. Wildcard Matching 1
  10. java Web api接入讯飞aiui(1)