NVMe Base 2.4 第 3 章:Controller、Queue、初始化與重設

7 minute read

English

00.01.控制器開始處理 I/O 之前,需要先建立可用的介面、佇列與狀態。本篇沿著控制器的運作生命週期,連起能力查詢、初始化、命令處理、記憶體資源,以及關機、重設與韌體啟用。

I/O
Input/Output,對 namespace 執行資料輸入與輸出的操作類別。

這篇的主軸

01

啟動與能力

01-01從識別控制器,到設定必要 properties 與確認可處理命令。

02

佇列與命令處理

02-01理解佇列位置、Doorbell 更新與仲裁分工。

03

資源與生命週期

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

Controller 類型、識別碼與能力
控制器類型或標示可以處理的工作支援能力如何確認
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

從設定到 CSTS.RDY:初始化流程
Property 或設定主機與控制器各自提供什麼初始化時的先後關係
CAP能力與界限在寫設定前讀
AQA/ASQ/ACQAdmin queue 大小與位址需符合 page/alignment 能力
CChost 選擇與 enable寫入值要與 CAP 相容
CSTScontroller 回報狀態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

Queue 位置與命令選取
佇列狀態或選取方式它決定什麼不能由此推論什麼
emptyhead == tail 且 phase/ownership 符合 empty 定義沒有可取走 entry
full下一個 tail 會追上尚未釋放 headhost 不得覆寫 entry
Round Robin候選 SQ 輪流取得服務不代表 command completion 依提交順序
Weighted RR + Urgentpriority 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

Namespace、CMB、PMR 與容量
記憶體或容量層級提供哪種資源使用或比較前的確認
CMBcontroller-provided working memory是否能放 SQ/CQ/list/data 由能力 bit 決定
PMR具有持久性語意的 regionenable、ready、error 與 address control 要一起看
capacity modelsubsystem/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

Shutdown、Reset 與狀態保留
停止或重設事件影響的對象與目的判斷完成或保留狀態的資訊
normal shutdown保護性停止與狀態回報看 SHN/SHST
controller resetcontroller 層級狀態queue 是否保留要依 reset 類型
NVM subsystem reset更大 subsystem scope可能影響多個 controllers
Keep Alive timeoutliveness 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

採用的規格版本

NVM Express Base Specification, Revision 2.4

Jia-Chang

Jia-Chang

Human

Comments

  Write a comment ...