队列模型 - 📘 一、路径相关状态码(SCT = 3h) (第115页)
继续深入分析 NVM Express® Base Specification, revision 2.0b 第 104 页,本页主要介绍了 路径相关错误 状态码、队列大小、队列标识符、队列优先级和队列协调等方面的内容。
📘 一、路径相关状态码(SCT = 3h)
✅ 状态码清单(00h 到 7Fh)
| 代码 | 名称 | 描述 |
|---|---|---|
00h |
Internal Path Error | 内部路径错误:命令未能完成,原因是控制器内部错误。根据 DNR 位的设置,重试该请求。 |
01h |
Asymmetric Access Persistent Loss | 非对称访问持久丢失:由于控制器和命名空间、NVM 集或耐久性组之间的关系处于 ANA 持久丢失状态,导致无法执行请求的功能。 |
02h |
Asymmetric Access Inaccessible | 非对称访问不可访问:由于控制器和命名空间、NVM 集或耐久性组之间的关系处于 ANA 不可访问状态,导致无法执行请求的功能。 |
03h |
Asymmetric Access Transition | 非对称访问状态转换:由于控制器和命名空间、NVM 集或耐久性组之间的关系处于 ANA 状态转换,导致无法执行请求的功能。 |
60h |
Controller Pathing Error | 控制器路径错误:控制器检测到路径错误。 |
70h |
Host Pathing Error | 主机路径错误:主机检测到路径错误。 |
71h |
Command Aborted By Host | 命令被主机中止:由于主机操作(例如,主机断开了 Fabric 连接),命令被中止。 |
注释:这些路径相关状态码主要用于描述在 路径或连接 上发生的错误,例如控制器和主机之间的路径故障,或者由于特定 NVM 子系统 的 状态问题(如 ANA 状态)导致的命令失败。
🧩 二、路径相关状态码解析
1️⃣ 00h – Internal Path Error
- 原因:发生了控制器内部的路径错误。通常发生在控制器执行命令时,由于硬件或软件的故障导致路径无法正常工作。
场景:例如,控制器无法正确处理传入的命令请求,可能是由于固件错误或硬件故障。
2️⃣ 01h – Asymmetric Access Persistent Loss
- 原因:由于控制器和命名空间、NVM 集或耐久性组之间的关系处于 ANA 持久丢失状态,导致无法执行命令。此时,命令不应重新提交给相同的控制器。
场景:例如,控制器与命名空间之间的连接由于持久性丢失而不可用,不能进行任何操作。
3️⃣ 02h – Asymmetric Access Inaccessible
- 原因:控制器和命名空间、NVM 集或耐久性组之间的关系处于 ANA 不可访问状态,命令无法执行。此时也不应重新提交命令。
场景:例如,控制器无法访问命名空间,因为它被标记为不可访问,导致所有相关命令失败。
4️⃣ 60h – Controller Pathing Error
- 原因:控制器检测到路径错误。可能是由于网络中断、硬件故障或配置问题,导致数据无法通过预期的路径传输。
场景:例如,控制器尝试访问主机或存储设备,但由于路径故障,无法继续操作。
5️⃣ 70h – Host Pathing Error
- 原因:主机检测到路径错误。通常发生在主机与控制器之间的连接中出现问题时。
场景:例如,主机丢失与控制器之间的连接或连接质量不稳定,导致命令无法正常完成。
📘 三、队列大小(Queue Size)
✅ 队列大小
- 队列大小使用 16 位字段 来表示队列中的插槽数量。队列的最小大小为 2 个插槽,最大大小由控制器支持的最大队列大小决定:
- I/O 提交队列 或 I/O 完成队列 的最大大小为 64 Ki 插槽,受到控制器支持的最大队列大小(通过 CAP.MQES 字段)限制。
- 管理员提交队列 或 管理员完成队列 的最大大小为 4 Ki 插槽。
注释:每个队列的头尾指针会占用一个插槽,因此一个队列的最大实际可用插槽数量会少于其定义的大小。
📘 四、队列标识符(Queue Identifier)
每个队列通过一个 16 位的 ID 值 来标识。当队列被创建时,会分配一个唯一的 ID。对于 I/O 提交队列 和 I/O 完成队列,其 ID 值范围是 1 到 65,535。
📘 五、队列优先级(Queue Priority)
如果支持 加权轮询带有紧急优先级类的仲裁机制,那么主机软件可以为队列分配优先级服务类,包括: - 紧急(Urgent) - 高(High) - 中(Medium) - 低(Low)
如果控制器不支持这种加权轮询机制,则该优先级设置不会生效,控制器将忽略它。
📘 六、队列协调(Queue Coordination)
- 每个 管理队列(Admin Queue) 对应多个 I/O 队列。
- 管理提交队列 和 管理完成队列 用于执行影响整个控制器的功能。
- I/O 提交队列 和 I/O 完成队列 用于执行 I/O(读/写)操作,并可以跨多个 CPU 核心和线程分配。
🧠 总结与核心要点
| 要素 | 说明 |
|---|---|
| 路径相关状态码 | 处理主机和控制器之间的连接问题,例如 路径错误 和 非对称访问问题。 |
| 队列大小 | 定义了提交队列和完成队列的最大和最小大小,以及如何根据控制器限制调整队列大小。 |
| 队列标识符 | 每个队列都有唯一的 16 位 ID,用于标识和管理队列。 |
| 队列优先级 | 根据加权轮询机制,队列可以分配不同的优先级(如紧急、高、中、低)。 |
| 队列协调 | 管理队列和多个 I/O 队列之间的协调,以执行影响控制器和命名空间的命令。 |
这些内容帮助我们了解 队列的管理 和 路径错误的处理,并指导如何在系统设计和故障恢复过程中进行有效的资源调度和错误处理。
如果你对队列管理、路径错误处理或队列优先级分配的应用有任何问题,随时告诉我!