NVMe Base 2.4 第 3 章:Controller、Queue、初始化與重設
00.01.控制器開始處理 I/O 之前,需要先建立可用的介面、佇列與狀態。本篇沿著控制器的運作生命週期,連起能力查詢、初始化、命令處理、記憶體資源,以及關機、重設與韌體啟用。
- I/O
- Input/Output,對 namespace 執行資料輸入與輸出的操作類別。
這篇的主軸
啟動與能力
01-01從識別控制器,到設定必要 properties 與確認可處理命令。
佇列與命令處理
02-01理解佇列位置、Doorbell 更新與仲裁分工。
資源與生命週期
03-01區分容量、控制器記憶體與各種狀態改變的影響範圍。
00.02.提交佇列保存主機送出的命令,完成佇列保存控制器回報的結果。主機要先建立這些共同機制,再使用讀寫等命令;以下從這個先後關係展開。
把主軸連起來
00.03.控制器從被發現到可接受命令,會經過能力辨識、記憶體及佇列配置、啟用與就緒確認。開始運作後,還要安排不同佇列的工作,管理 namespace 與控制器記憶體,最後處理關機或重設。
- namespace
- namespace,主機透過 controller 存取的一份已格式化非揮發性容量。
00.04.這條生命週期把各組 properties 連在一起:有些回報能力,有些接受主機設定,有些回報當前狀態。學完應能說明每個階段由誰採取動作、依什麼資訊前進,以及停止或重設後哪些資源需要重新確認。
01 Controller 類型、識別碼與能力
01.01.Controller type 回答『能做哪類工作』,Controller ID 回答『這是哪一個 controller』,support-requirement Figure 回答『在這個上下文中 command/log/feature 的支援強度』。Figures 23-32 應連續閱讀,但三種問題不能合併成一個布林值。
- controller
- controller,實作 NVMe 介面、取走 command 並回報 completion 的控制實體。
01.02.memory-based controller 必須(shall)只支援 static controller model。
來源:Base 2.4 §3.1.1
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.1, 文件頁 38, PDF 頁 64
| 控制器類型或標示 | 可以處理的工作 | 支援能力如何確認 |
|---|---|---|
| I/O controller | 可執行使用者資料 I/O | 仍需逐項查 optional capability |
| Administrative controller | 管理用途、無資料 I/O command | 不能因有 Admin Queue 就當成 I/O controller |
| 支援標示 | 針對 row 與上下文描述強度 | 不能脫離 column/footnote 解讀 |
- Administrative controller
- Administrative controller,以管理為目的且不執行使用者資料 I/O command 的 controller 類型。
- I/O controller
- I/O controller,可執行使用者資料 I/O command 的 controller 類型。
- Admin
- Administrative,建立、設定、查詢或管理 controller 與 queue 的控制路徑。
02 從設定到 CSTS.RDY:初始化流程
02.01.Properties 不是彼此獨立的 register 清單。CAP 先限制 page size、queue 與 timeout 能力;AQA、ASQ、ACQ 建立 Admin queues;CC 選擇設定並以 EN 啟動;最後由 CSTS.RDY 宣告 controller 已能正常處理命令。Figures 33-46 與 Figure 57 應沿這條因果鏈閱讀。
- CSTS
- Controller Status,controller 回報 ready、fatal status 與 shutdown 狀態的 property。
- ACQ
- Admin Completion Queue Base Address,Admin CQ 在可定址記憶體中的基底位址。
- AQA
- Admin Queue Attributes,描述 Admin SQ 與 Admin CQ 大小的 property。
- ASQ
- Admin Submission Queue Base Address,Admin SQ 在可定址記憶體中的基底位址。
- CAP
- Controller Capabilities,offset 00h 的 controller property,回報 queue、page size、timeout 與其他能力。
- RDY
- Ready,CSTS 中表示 controller 是否已準備正常處理 command 的 bit。
- CC
- Controller Configuration,host 用來選擇設定並啟用或停用 controller 的 property。
- EN
- Enable,CC 中控制 controller enable state 的 bit。
02.02.host 必須(shall)以 property 指定的寬度,從 property 起始 offset 存取;memory-based controller 的實際存取規則由 PCIe Transport 補充。
- offset
- offset;從指定起點算出的位移。它回答「離起點多遠」,不等於 index。
- Host
- 主機;執行作業系統並送出 NVMe 命令的一端。
- PCIe
- PCI Express,NVMe memory-based controller 使用的 transport 與裝置互連。
來源:Base 2.4 §3.1.4
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4, 文件頁 52-54, PDF 頁 78-80
| Property 或設定 | 主機與控制器各自提供什麼 | 初始化時的先後關係 |
|---|---|---|
| CAP | 能力與界限 | 在寫設定前讀 |
| AQA/ASQ/ACQ | Admin queue 大小與位址 | 需符合 page/alignment 能力 |
| CC | host 選擇與 enable | 寫入值要與 CAP 相容 |
| CSTS | controller 回報狀態 | RDY/CFS/SHST 不可互相替代 |
- SHST
- Shutdown Status,CSTS 中由 controller 回報 shutdown 進度的欄位。
03 Queue 位置與命令選取
03.01.Figure 73/74 說明 queue 的 empty/full 判定,Figure 80/81 說明多個 SQ 競爭 controller 服務時的 arbitration。前者處理單一 ring 的 head/tail 狀態,後者處理多個 candidate SQ 的選擇;priority 屬於 SQ,不是每筆 command 自帶的獨立優先權。
03.02.PCIe queue 由 host-addressable memory 中的環形 buffer、head 與 tail pointer 構成。host 建立 I/O Completion Queue 後再建立對應 Submission Queue,並以 doorbell 推進 pointer。
來源:Base 2.4 §3.3.1
來源:NVME-BASE-2.4, Rev. 2.4, §3.3.1, 文件頁 88-91, PDF 頁 114-117
| 佇列狀態或選取方式 | 它決定什麼 | 不能由此推論什麼 |
|---|---|---|
| empty | head == tail 且 phase/ownership 符合 empty 定義 | 沒有可取走 entry |
| full | 下一個 tail 會追上尚未釋放 head | host 不得覆寫 entry |
| Round Robin | 候選 SQ 輪流取得服務 | 不代表 command completion 依提交順序 |
| Weighted RR + Urgent | priority class 與 weight 影響選擇 | 仍需依適用設定解讀 |
04 Namespace、CMB、PMR 與容量
04.01.CMB/PMR properties 描述 controller 暴露的 memory region 位置、能力與狀態;capacity Figures 86-89 描述 NVM subsystem 各層級可用或已配置容量。兩者都談 memory,卻不是同一種空間,也不能用同一個『剩餘容量』欄位合併。
- NVM subsystem
- NVM subsystem,包含 controller、port、namespace 與非揮發性儲存資源的 NVMe 系統邊界。
- CMB
- Controller Memory Buffer,controller 提供、可放置部分 queue 或資料結構的記憶體區域。
- NVM
- Non-Volatile Memory,斷電後仍能保存資料的記憶體。
- PMR
- Persistent Memory Region,由 controller 暴露、具有持久性語意的記憶體區域。
04.02.capacity model 分開追蹤 NVM subsystem、Endurance Group、NVM Set 與 namespace 的可用或配置容量;同一數值不可跨層級直接比較。
- Endurance Group
- Endurance Group,用於隔離與回報耐久度相關狀態的 NVM 資源群組。
- NVM Set
- NVM Set,把 namespace 與一組共同管理的 NVM 資源建立關聯的容量集合。
來源:Base 2.4 §3.8
來源:NVME-BASE-2.4, Rev. 2.4, §3.8, 文件頁 125-129, PDF 頁 151-155
| 記憶體或容量層級 | 提供哪種資源 | 使用或比較前的確認 |
|---|---|---|
| CMB | controller-provided working memory | 是否能放 SQ/CQ/list/data 由能力 bit 決定 |
| PMR | 具有持久性語意的 region | enable、ready、error 與 address control 要一起看 |
| capacity model | subsystem/group/set/namespace 的容量 | 不同層級欄位不可直接相減 |
05 Shutdown、Reset 與狀態保留
05.01.Lifecycle 事件的共同問題是『哪一層狀態仍有效』。Normal shutdown 由 CC.SHN/CSTS.SHST 協調,reset 分成 subsystem/controller/queue 層級,Keep Alive 監測 host-controller 存活,firmware activation 又可能要求特定 reset。相同的『暫時無法處理 command』症狀,不代表可以使用相同 recovery。
- SHN
- Shutdown Notification,CC 中由 host 宣告 shutdown 類型的欄位。
05.02.正常 shutdown 由 host 設定 CC.SHN,controller 透過 CSTS.SHST 回報進度;NVM subsystem shutdown 是更大範圍的處理,不能與單一 controller shutdown 混為一談。
來源:Base 2.4 §3.6.1, 3.6.3
來源:NVME-BASE-2.4, Rev. 2.4, §3.6.1, 3.6.3, 文件頁 113-120, PDF 頁 139-146
| 停止或重設事件 | 影響的對象與目的 | 判斷完成或保留狀態的資訊 |
|---|---|---|
| normal shutdown | 保護性停止與狀態回報 | 看 SHN/SHST |
| controller reset | controller 層級狀態 | queue 是否保留要依 reset 類型 |
| NVM subsystem reset | 更大 subsystem scope | 可能影響多個 controllers |
| Keep Alive timeout | liveness failure | 不能直接等同 media failure |
接著打開 Spec 看什麼
06.01.以下按概念列出閱讀位置。報告時先用上面的流程說明問題,再打開對應章節看欄位與完整條件。中文教學 HTML 另有本篇全部圖表的逐圖重點、案例與細節。
| 要說明的觀念 | Spec 閱讀位置 |
|---|---|
| Controller 類型、識別碼與能力 | Base 2.4 §3.1.1 · Base 2.4 §3.1.3-3.1.3.2 · Base 2.4 §3.1.3 |
| 從設定到 CSTS.RDY:初始化流程 | Base 2.4 §3.1.4 · Base 2.4 §3.5.1, 3.5.3-3.5.4 |
| Queue 位置與命令選取 | Base 2.4 §3.3.1 · Base 2.4 §3.4.1-3.4.5 · Base 2.4 §3.1.3 |
| Namespace、CMB、PMR 與容量 | Base 2.4 §3.1.4 · Base 2.4 §3.8 · Base 2.4 §3.2.2-3.2.4 |
| Shutdown、Reset 與狀態保留 | Base 2.4 §3.6.1, 3.6.3 · Base 2.4 §3.7 · Base 2.4 §3.9 · Base 2.4 §3.10-3.11 |
學完後想一想
1. 讀到 controller 支援某功能,是否表示它已準備接收 I/O?
07.01.Capability 描述能做什麼;初始化與 ready state 描述目前能否開始操作。仍須完成 queue 設定、啟用與 readiness 確認,再依適用條件使用該功能。
來源
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4, 文件頁 52-54, PDF 頁 78-80
來源:NVME-BASE-2.4, Rev. 2.4, §3.5.1, 3.5.3-3.5.4, 文件頁 105-113, PDF 頁 131-139
2. SQ 中先提交的命令,是否必定先完成?
07.02.Queue 提交順序、controller 選取工作及完成順序是不同概念。一般不能只靠 SQ 位置推論完成順序;有相依性時應使用規格定義的同步或命令機制。
來源
來源:NVME-BASE-2.4, Rev. 2.4, §3.3.1, 文件頁 88-91, PDF 頁 114-117
來源:NVME-BASE-2.4, Rev. 2.4, §3.4.1-3.4.5, 文件頁 101-105, PDF 頁 127-131
3. 為何正常關機流程不能直接等同 reset?
07.03.Shutdown 包含 host 的通知及 controller 的完成狀態,讓關機前的處理有明確交接;reset 依其層級改變 controller 或 subsystem 狀態。它們的觸發、範圍和保留狀態不同。
來源
來源:NVME-BASE-2.4, Rev. 2.4, §3.6.1, 3.6.3, 文件頁 113-120, PDF 頁 139-146
來源:NVME-BASE-2.4, Rev. 2.4, §3.7, 文件頁 120-125, PDF 頁 146-151
4. Controller 可見的記憶體區域,為何不能全都當成 namespace 容量?
07.04.Namespace 提供以 logical blocks 存取的儲存空間;CMB、PMR 等區域有各自用途、存取方式及持久性規則。位於同一裝置不代表它們使用相同的容量與資料模型。
來源
來源:NVME-BASE-2.4, Rev. 2.4, §3.2.2-3.2.4, 文件頁 80-85, PDF 頁 106-111
來源:NVME-BASE-2.4, Rev. 2.4, §3.8, 文件頁 125-129, PDF 頁 151-155


Comments