NVMe · 規格與原理

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

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.控制器類型先決定它負責哪些工作。I/O controller 能處理使用者資料 I/O;Administrative controller 負責管理用途。兩者都可能有 Admin Queue,所以不能因為找到管理佇列,就推論這個控制器也能接受資料讀寫。

Administrative controller
Administrative controller,以管理為目的且不執行使用者資料 I/O command 的 controller 類型。
I/O controller
I/O controller,可執行使用者資料 I/O command 的 controller 類型。
controller
controller,實作 NVMe 介面、取走 command 並回報 completion 的控制實體。
Admin
Administrative,建立、設定、查詢或管理 controller 與 queue 的控制路徑。

01.02.同一類型內,選用功能仍可能不同。規格表中的支援標示,必須連同它所在的列、欄與註腳閱讀,才能知道是一定要支援、可以選擇支援,或在某種條件下才適用。控制器識別碼用來辨認對象,也不會單獨證明它具有哪種能力。

來源:Base 2.4 §3.1.1 · Base 2.4 §3.1.3-3.1.3.2 · Base 2.4 §3.1.3

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.1, 文件頁 38, PDF 頁 64

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3-3.1.3.2, 文件頁 39-43, PDF 頁 65-69

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3, 文件頁 40, PDF 頁 66

把流程對回規格條件

01.03.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

01.04.本輪只使用 I/O controller 與 Administrative controller:前者可執行使用者資料的 I/O,後者以管理為目的且不支援資料 I/O command。兩者都具有一組 Admin Submission/Completion Queue。

來源:Base 2.4 §3.1.3-3.1.3.2

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3-3.1.3.2, 文件頁 39-43, PDF 頁 65-69

01.05.除 fused operation 外,controller 取走的命令與完成沒有一般性的先後保證;若有順序需求,強制該順序是 host 的責任。

Host
主機;執行作業系統並送出 NVMe 命令的一端。
來源:Base 2.4 §3.1.3

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3, 文件頁 40, PDF 頁 66

Controller 類型、識別碼與能力
控制器類型或標示可以處理的工作支援能力如何確認
I/O controller可執行使用者資料 I/O仍需逐項查 optional capability
Administrative controller管理用途、無資料 I/O command不能因有 Admin Queue 就當成 I/O controller
支援標示針對 row 與上下文描述強度不能脫離 column/footnote 解讀
閱讀相關規格圖表 → Controller 類型、識別碼與能力

02 從設定到 CSTS.RDY:初始化流程

主機與控制器交替完成初始化

先查限制,再配置記憶體

02.01.主機讀 CAP 的 page-size 範圍及佇列限制,選定符合要求的 CC.MPS,再準備 Admin SQ、CQ。ASQ、ACQ 是起點,AQA 是深度編碼;只有位址沒有足夠的記憶體範圍,仍不是完整配置。

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 與其他能力。
MPS
Memory Page Size,controller 使用的 memory page 大小設定;影響 queue address 與 PRP 對齊。
CC
Controller Configuration,host 用來選擇設定並啟用或停用 controller 的 property。

主機提出啟用,控制器回報就緒

02.02.主機設定必要欄位後寫 CC.EN=1,接著等待 CSTS.RDY=1。這兩個位元分屬要求與回覆,不能把寫入 EN 的瞬間當成控制器已可處理全部命令。

CSTS
Controller Status,controller 回報 ready、fatal status 與 shutdown 狀態的 property。
RDY
Ready,CSTS 中表示 controller 是否已準備正常處理 command 的 bit。
EN
Enable,CC 中控制 controller enable state 的 bit。

由 Admin 命令建立後續環境

02.03.Admin 路徑就緒後才能查詢 Identify、建立 I/O CQ 與 SQ。建立 SQ 時指定它使用的 CQ,所以要先讓被引用的 CQ 存在。初始化的順序來自資源依賴,不是單純按照暫存器 offset 遞增寫入。

offset
offset;從指定起點算出的位移。它回答「離起點多遠」,不等於 index。
來源:Base 2.4 §3.1.4 · Base 2.4 §3.5.1, 3.5.3-3.5.4

來源: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

把流程對回規格條件

02.05.host 必須(shall)以 property 指定的寬度,從 property 起始 offset 存取;memory-based controller 的實際存取規則由 PCIe Transport 補充。

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

02.06.PCIe 初始化以 CAP 判斷能力與 timeout,設定 AQA/ASQ/ACQ 與 CC,接著等待 CSTS.RDY。ready mode 與 CRTO 會影響 host 等待與錯誤處理。

CRTO
Controller Ready Timeouts,回報特定 ready mode 所需等待時間的 property。
來源:Base 2.4 §3.5.1, 3.5.3-3.5.4

來源:NVME-BASE-2.4, Rev. 2.4, §3.5.1, 3.5.3-3.5.4, 文件頁 105-113, PDF 頁 131-139

從設定到 CSTS.RDY:初始化流程
Property 或設定主機與控制器各自提供什麼初始化時的先後關係
CAP能力與界限在寫設定前讀
AQA/ASQ/ACQAdmin queue 大小與位址需符合 page/alignment 能力
CChost 選擇與 enable寫入值要與 CAP 相容
CSTScontroller 回報狀態RDY/CFS/SHST 不可互相替代
SHST
Shutdown Status,CSTS 中由 controller 回報 shutdown 進度的欄位。
閱讀相關規格圖表 → 從設定到 CSTS.RDY:初始化流程

03 Queue 位置與命令選取

兩個 SQ 共用一個 CQ 時如何追蹤命令

先畫佇列關係

03.01.假設 SQ1 與 SQ2 都指向 CQ1。SQ 決定命令從哪裡來,CQ 決定完成項目往哪裡放;這不代表兩個 SQ 的命令會合併成單一 FIFO 執行順序。

再看控制器如何選下一份工作

03.02.Arbitration 規則在有多個待處理 SQ 時選取工作,priority 或 weight 影響服務分配。它不會把任意兩筆命令建立成資料相依關係,也不保證完成順序與提交順序完全相同。

用識別資訊把完成對回來源

03.03.主機讀 CQE 的 SQID 與 CID,分別找到來源 SQ 與其中的命令。只保留 CID 而忽略 SQID,在不同 SQ 使用相同 CID 時就無法唯一辨認。

SQID
Submission Queue Identifier,辨識 command 所屬 SQ 的數值。
CID
Command Identifier,與 SQ identifier 合用以辨識 outstanding command。
CQE
Completion Queue Entry,CQ 中的一筆完成結果資料結構。
來源:Base 2.4 §3.3.1 · Base 2.4 §3.4.1-3.4.5 · Base 2.4 §3.1.3

來源: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

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3, 文件頁 40, PDF 頁 66

把流程對回規格條件

03.05.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

03.06.command processing 要分開看 ordering、fused/atomic semantics、arbitration 與 outstanding command 上限;priority 屬於 Submission Queue,不是每一筆 command 的獨立欄位。

來源:Base 2.4 §3.4.1-3.4.5

來源:NVME-BASE-2.4, Rev. 2.4, §3.4.1-3.4.5, 文件頁 101-105, PDF 頁 127-131

Queue 位置與命令選取
佇列狀態或選取方式它決定什麼不能由此推論什麼
emptyhead == tail 且 phase/ownership 符合 empty 定義沒有可取走 entry
full下一個 tail 會追上尚未釋放 headhost 不得覆寫 entry
Round Robin候選 SQ 輪流取得服務不代表 command completion 依提交順序
Weighted RR + Urgentpriority class 與 weight 影響選擇仍需依適用設定解讀
閱讀相關規格圖表 → Queue 位置與命令選取

04 Namespace、CMB、PMR 與容量

先分辨記憶體的位置,再比較它的用途

以一般 I/O buffer 作起點

04.01.主機配置接收 Read 資料的 buffer,透過 DPTR 告訴控制器可使用的地址。這份記憶體是本次資料傳輸的目的地,不是 namespace 容量。

DPTR
Data Pointer,SQE 中指出 command data buffer 的欄位。

換成控制器上的記憶體

04.02.CMB 位於控制器,支援哪些佇列或資料用途要讀各能力位元;PMR 另有持久性與啟用規則。它們能由主機定址,不代表任何資料放進去都自動具有相同保留保證。

CMB
Controller Memory Buffer,controller 提供、可放置部分 queue 或資料結構的記憶體區域。
PMR
Persistent Memory Region,由 controller 暴露、具有持久性語意的記憶體區域。

把範圍和啟用條件一起畫出來

04.03.對每個記憶體區域列出 base、size、enabled 與可用用途,再檢查地址範圍是否符合規則。地址落在某區間內,只有該映射有效時才能按那種記憶體解讀。

來源:Base 2.4 §3.1.4 · Base 2.4 §3.8 · Base 2.4 §3.2.2-3.2.4

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4, 文件頁 52-54, PDF 頁 78-80

來源:NVME-BASE-2.4, Rev. 2.4, §3.8, 文件頁 125-129, PDF 頁 151-155

來源:NVME-BASE-2.4, Rev. 2.4, §3.2.2-3.2.4, 文件頁 80-85, PDF 頁 106-111

把流程對回規格條件

04.05.capacity model 分開追蹤 NVM subsystem、Endurance Group、NVM Set 與 namespace 的可用或配置容量;同一數值不可跨層級直接比較。

Endurance Group
Endurance Group,用於隔離與回報耐久度相關狀態的 NVM 資源群組。
NVM subsystem
NVM subsystem,包含 controller、port、namespace 與非揮發性儲存資源的 NVMe 系統邊界。
NVM Set
NVM Set,把 namespace 與一組共同管理的 NVM 資源建立關聯的容量集合。
NVM
Non-Volatile Memory,斷電後仍能保存資料的記憶體。
來源:Base 2.4 §3.8

來源:NVME-BASE-2.4, Rev. 2.4, §3.8, 文件頁 125-129, PDF 頁 151-155

04.06.NVM Set、Endurance Group、Reclaim Group 與 Reclaim Unit 分別描述容量集合、耐久度管理與回收粒度。是否支援及其 identifier 由 Identify/log page 能力判定。

Reclaim Group
Reclaim Group,具有共同回收行為的一組非揮發性儲存資源。
Reclaim Unit
Reclaim Unit,controller 執行媒體回收時使用的較小管理粒度。
來源:Base 2.4 §3.2.2-3.2.4

來源:NVME-BASE-2.4, Rev. 2.4, §3.2.2-3.2.4, 文件頁 80-85, PDF 頁 106-111

Namespace、CMB、PMR 與容量
記憶體或容量層級提供哪種資源使用或比較前的確認
CMBcontroller-provided working memory是否能放 SQ/CQ/list/data 由能力 bit 決定
PMR具有持久性語意的 regionenable、ready、error 與 address control 要一起看
capacity modelsubsystem/group/set/namespace 的容量不同層級欄位不可直接相減
閱讀相關規格圖表 → Namespace、CMB、PMR 與容量

05 Shutdown、Reset 與狀態保留

05.01.正常關機、控制器重設與 subsystem 重設,影響範圍和目的不同。正常關機提供受控的停止流程;重設則改變指定範圍的狀態。當一個 subsystem 有多個控制器時,範圍的差別尤其重要,不能把只針對一個控制器的動作當成整體重設。

05.02.狀態保留也要逐項閱讀。某個設定跨 controller reset 保留,不代表它跨 power cycle 也保留;佇列能否繼續使用同樣要看事件定義。主機提出 shutdown 要求後,還需查看控制器回報的階段,才能確認停止流程走到哪裡。

來源: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

來源: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

來源:NVME-BASE-2.4, Rev. 2.4, §3.9, 文件頁 129-135, PDF 頁 155-161

來源:NVME-BASE-2.4, Rev. 2.4, §3.10-3.11, 文件頁 135-138, PDF 頁 161-164

把流程對回規格條件

05.03.正常 shutdown 由 host 設定 CC.SHN,controller 透過 CSTS.SHST 回報進度;NVM subsystem shutdown 是更大範圍的處理,不能與單一 controller shutdown 混為一談。

SHN
Shutdown Notification,CC 中由 host 宣告 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

05.04.NVM Subsystem Reset、Controller Level Reset 與 Queue Level Reset 的影響範圍不同;設計 recovery flow 前先確認哪一層狀態會被清除、queue 是否仍存在。

來源:Base 2.4 §3.7

來源:NVME-BASE-2.4, Rev. 2.4, §3.7, 文件頁 120-125, PDF 頁 146-151

05.05.Keep Alive 以 KATO/KATT 建立 host 與 controller 的存活監測;本報告只保留 controller 共通與 PCIe 可用的 timer、command 與 timeout 行為。

KATO
Keep Alive Timeout,host 與 controller 約定的存活逾時設定。
KATT
Keep Alive Timeout Total,controller 用於偵測逾時的總時間基準。
來源:Base 2.4 §3.9

來源:NVME-BASE-2.4, Rev. 2.4, §3.9, 文件頁 129-135, PDF 頁 155-161

05.06.privileged action 會影響其他 host 或 controller;firmware update 分成 image download、commit/activate 與可能的 reset,host 依回報的 activation action 安排流程。

來源:Base 2.4 §3.10-3.11

來源:NVME-BASE-2.4, Rev. 2.4, §3.10-3.11, 文件頁 135-138, PDF 頁 161-164

Shutdown、Reset 與狀態保留
停止或重設事件影響的對象與目的判斷完成或保留狀態的資訊
normal shutdown保護性停止與狀態回報看 SHN/SHST
controller resetcontroller 層級狀態queue 是否保留要依 reset 類型
NVM subsystem reset更大 subsystem scope可能影響多個 controllers
Keep Alive timeoutliveness failure不能直接等同 media failure
閱讀相關規格圖表 → Shutdown、Reset 與狀態保留

06 讀懂本篇的規格圖表

06.01.以下依概念整理規格中的圖表。每組先說明讀取順序與要判斷的問題,接著列出各圖的欄位或行為說明。可以由正文的連結跳到對應組別,也可以用這一節檢查自己能否把欄位連回完整操作。

圖表組 01 · Controller 類型、識別碼與能力 · 9 張圖表

06.02.先按 controller type 選表格欄,再看每項命令或功能的支援標示。識別碼表回答「是哪一個」,能力表回答「能做什麼」;兩者要在同一控制器的上下文中連接。

回到本節的解釋與範例

識別物件與識別存取路徑

06.03.同一個 namespace 可以經不同控制器存取。控制器識別碼、namespace 識別碼、PCIe Function 與 port 各指不同對象,應沿圖上的連接關係逐層追蹤。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
NSID/Controller IdentifierNSID 選資料物件,控制器識別碼選控制器;是否可存取還要看附加關係。A、B 都能看到 NSID=7 時,Detach A 只改變 A 的存取關係。
I/O/Administrative Controller控制器類型決定適用的命令與資源要求。先辨認类型,再查命令支援表;不能假定每種控制器都提供一般資料 I/O。
Domain/Port/PCIe Function分別描述資源域、連接位置與 PCIe 裝置功能;多控制器不等於多份 namespace 資料。兩個控制器共享一個 Boot Partition 時,保護狀態的影響會跨過單一控制器。
NSID
Namespace Identifier,controller 用來指向 namespace 的數值 handle;identifier 不等於 namespace 物件本身。
來源:Base 2.4 §3.1.3 · Base 2.4 §3.1.3.1 · Base 2.4 §3.1.3.2 · Base 2.4 §3.1.3.3 · Base 2.4 §3.2.1 · Base 2.4 §3.2.1.5 · Base 2.4 §3.2.5.1

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3, Figure 23, 文件頁 39, PDF 頁 65

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.1, Figure 24, 文件頁 41, PDF 頁 67

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.2, Figure 25, 文件頁 42, PDF 頁 68

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.2, Figure 26, 文件頁 42, PDF 頁 68

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.3, Figure 27, 文件頁 44, PDF 頁 70

來源:NVME-BASE-2.4, Rev. 2.4, §3.2.1, Figure 65, 文件頁 78-79, PDF 頁 104-105

來源:NVME-BASE-2.4, Rev. 2.4, §3.2.1.5, Figure 66, 文件頁 79, PDF 頁 105

來源:NVME-BASE-2.4, Rev. 2.4, §3.2.5.1, Figure 71, 文件頁 86, PDF 頁 112

Base Figure 23 · Controller Types

一句話重點

Base23-1控制器類型決定它以資料 I/O 或管理為主要角色。

來源:Base 2.4 §3.1.3

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3, Figure 23, 文件頁 39, PDF 頁 65

用例子讀懂

Base23-2I/O controller 可以處理 namespace 資料命令;Administrative controller 有管理用途,但不能因此推論也可執行一般 Read。

Base Figure 24 · NVM Subsystem with Three I/O Controllers

一句話重點

Base24-1多個 I/O controllers 讓同一 subsystem 提供多個資料介面。

來源:Base 2.4 §3.1.3.1

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.1, Figure 24, 文件頁 41, PDF 頁 67

用例子讀懂

Base24-2對圖中的某個 namespace,分別追查每個控制器是否附加它;控制器都屬於同一 subsystem,仍可能有不同可存取範圍。

Base Figure 25 · NVM Subsystem with One Administrative and Two I/O Controllers

一句話重點

Base25-1管理控制器與 I/O controllers 可以分工共存。

來源:Base 2.4 §3.1.3.2

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.2, Figure 25, 文件頁 42, PDF 頁 68

用例子讀懂

Base25-2管理程式使用 Administrative controller 取得管理資訊,資料路徑則使用 I/O controller;先說明角色,再介紹各自命令。

Base Figure 26 · NVM Subsystem with One Administrative Controller

一句話重點

Base26-1只有 Administrative controller 的配置仍是管理介面。

來源:Base 2.4 §3.1.3.2

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.2, Figure 26, 文件頁 42, PDF 頁 68

用例子讀懂

Base26-2即使主機能送出 Admin command,也不能推論這個介面已提供一般 namespace Read/Write 路徑。

Base Figure 27 · Controller IDs FFF0h to FFFFh

一句話重點

Base27-1部分 Controller ID 值有特殊用途,不能視為普通控制器編號。

來源:Base 2.4 §3.1.3.3

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.3, Figure 27, 文件頁 44, PDF 頁 70

用例子讀懂

Base27-2在控制器清單看到接近 FFFFh 的值時,先依這張表查用途;不要直接把它當成裝置上真的有第 65535 個控制器。

支援表的列、欄與註腳必須一起讀

06.04.表格先以命令、log 或 Feature 選一列,再以控制器類型或目前狀態選一欄。M/O 等標記及數字註腳說明支援要求與條件,不能將抽出的 O8、M3 當成另一個 NVMe 欄位。

NVMe
Non-Volatile Memory Express,主機與非揮發性記憶體子系統之間的介面規範家族。
一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
命令/LID/FID 的列三者是不同識別空間;選列前先確認目前使用哪一類操作。Get Log Page 的 LID 與 Set Features 的 FID 即使同為 0Bh,也要查各自的表。
控制器類型/處理狀態的欄控制器類型決定支援要求;清除期間的狀態欄則限制當時接受的操作。裝置平常支援某命令,並不表示 Restricted Processing 中仍允許執行。
條件註腳說明支援位元、所需能力或例外,需與對應儲存格合讀。一列標示 optional 時,先查控制器宣告的能力,再決定能否使用。
FID
Feature Identifier;指定要讀取或設定哪一項 Feature 的編號。
LID
Log Page Identifier;指定要讀取哪一種 log page 的編號。
來源:Base 2.4 §3.1.3.3.3 · Base 2.4 §3.1.3.4 · Base 2.4 §3.1.3.5 · Base 2.4 §3.5.3 · Base 2.4 §3.10

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.3.3, Figure 28, 文件頁 45-47, PDF 頁 71-73

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.4, Figure 30, 文件頁 47-48, PDF 頁 73-74

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.4, Figure 31, 文件頁 48-50, PDF 頁 74-76

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.5, Figure 32, 文件頁 50-52, PDF 頁 76-78

來源:NVME-BASE-2.4, Rev. 2.4, §3.5.3, Figure 84, 文件頁 110-111, PDF 頁 136-137

來源:NVME-BASE-2.4, Rev. 2.4, §3.10, Figure 91, 文件頁 135, PDF 頁 161

Base Figure 28 · Admin Command Support Requirements

一句話重點

Base28-1Admin 命令支援要求需要連同表格註腳閱讀。

來源:Base 2.4 §3.1.3.3.3

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.3.3, Figure 28, 文件頁 45-47, PDF 頁 71-73

用例子讀懂

Base28-2某列為 optional 且帶條件註記時,先確認條件是否成立,再查 Identify 能力;表內列出命令並不表示裝置已實作。

Base Figure 30 · Common I/O Command Support Requirements

一句話重點

Base30-1共通 I/O 命令的要求與個別命令集能力一起決定可用操作。

來源:Base 2.4 §3.1.3.4

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.4, Figure 30, 文件頁 47-48, PDF 頁 73-74

用例子讀懂

Base30-2使用與資料放置有關的操作前,先看支援要求,再查相應功能是否存在,不以操作碼表取代能力判斷。

Base Figure 31 · Log Page Support Requirements

一句話重點

Base31-1Log Page 支援表描述哪些紀錄在何種條件下需要提供。

來源:Base 2.4 §3.1.3.4

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.4, Figure 31, 文件頁 48-50, PDF 頁 74-76

用例子讀懂

Base31-2一個健康狀態 log 與一個選用功能 log,可能有不同支援要求;先看列與註腳,再選要讀的 LID。

Base Figure 32 · Feature Support Requirements

一句話重點

Base32-1Feature 支援表區分功能存在、控制器類型與附加條件。

來源:Base 2.4 §3.1.3.5

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.5, Figure 32, 文件頁 50-52, PDF 頁 76-78

用例子讀懂

Base32-2某 Feature 在 I/O controller 有條件支援,並不代表在管理控制器也有相同作用範圍。

圖表組 02 · 從設定到 CSTS.RDY:初始化流程 · 16 張圖表

06.05.沿能力→佇列配置→啟用→就緒的順序連接 CAP、AQA/ASQ/ACQ、CC、CSTS。寄存器布局圖中的 offset 是定位欄位,狀態圖中的箭頭才描述條件成立後的轉移。

回到本節的解釋與範例

能力、主機設定與控制器狀態的往返

06.06.主機先讀 CAP 選合法設定,建立 Admin 佇列,再寫 CC 啟用;控制器以 CSTS 回報結果。CAP 是可選範圍,CC 是要求值,CSTS 是實際狀態,三者不能互相代替。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
CAP.MPSMIN/MPSMAX → CC.MPS能力給可支援的記憶體 page 範圍,主機選其中一個 page 大小。後續 ASQ、ACQ 與資料指標的對齊都要使用選定的 page 大小。
AQA.ASQS/ACQS → ASQ.ASQB/ACQ.ACQBAQA 設定兩個 Admin 佇列的大小;ASQ、ACQ 給它們在主機記憶體的位置。大小編碼與基底位址分別設定,不能只配置 buffer 就認為控制器已知道位置。
CC.EN/CSS/AMS → CSTS.RDY/CFS主機選命令集、仲裁方式並要求啟用,控制器回報就緒或致命狀態。CC.EN=1 是要求,仍需等待符合規則的 RDY,才能進入下一階段。
CRMS/CRIME/CRTO;SHN/SHST前一組連接就緒模式與逾時;後一組連接關機要求與進度。寫入關機要求後依 SHST 確認處理,不能把要求值当作完成結果。
CAP.BPS/DSTRD/CMBS/PMRS;NSSR/NSSD分別用於 Boot 支援、doorbell 間距、記憶體能力與 subsystem 層級控制。Doorbell 間距由 DSTRD 推算;不使用 doorbell 的教學步驟無須把它當成前提。
DSTRD
Doorbell Stride,CAP 中決定相鄰 doorbell register 間距的欄位。
NSSD
NVM Subsystem Shutdown,控制較大範圍 subsystem shutdown 的 property。
NSSR
NVM Subsystem Reset,觸發 NVM subsystem reset 的 property。
來源:Base 2.4 §3.1.4 · Base 2.4 §3.1.4.1 · Base 2.4 §3.1.4.5 · Base 2.4 §3.1.4.6 · Base 2.4 §3.1.4.9 · Base 2.4 §3.1.4.19 · Base 2.4 §3.1.4.21

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4, Figure 33, 文件頁 52-53, PDF 頁 78-79

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4, Figure 34, 文件頁 54, PDF 頁 80

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.1, Figure 36, 文件頁 55-58, PDF 頁 81-84

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.5, Figure 41, 文件頁 60-63, PDF 頁 86-89

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.5, Figure 42, 文件頁 63-65, PDF 頁 89-91

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.6, Figure 43, 文件頁 66, PDF 頁 92

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.6, Figure 44, 文件頁 66, PDF 頁 92

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.6, Figure 45, 文件頁 66, PDF 頁 92

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.9, Figure 46, 文件頁 67, PDF 頁 93

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.19, Figure 56, 文件頁 72, PDF 頁 98

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.21, Figure 57, 文件頁 73, PDF 頁 99

Base Figure 33 · Property Definition

一句話重點

Base33-1Property 總表提供各暫存器的位置與存取概要。

來源:Base 2.4 §3.1.4

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4, Figure 33, 文件頁 52-53, PDF 頁 78-79

用例子讀懂

Base33-2要讀 CSTS,先在總表找到 offset,再到 CSTS 欄位表解釋 RDY;總表與欄位表回答不同層次的問題。

Base Figure 34 · Memory-Based Property Definition

一句話重點

Base34-1記憶體介面的 property 空間也包含依 stride 排列的 doorbells。

來源:Base 2.4 §3.1.4

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4, Figure 34, 文件頁 54, PDF 頁 80

用例子讀懂

Base34-2QID 改變時,doorbell offset 依 CAP.DSTRD 推進;不能把所有佇列都寫入同一個固定暫存器位置。

Base Figure 36 · Offset 0h: CAP - Controller Capabilities

一句話重點

Base36-1CAP 描述控制器能力,主機設定必須落在其支援範圍。

來源:Base 2.4 §3.1.4.1

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.1, Figure 36, 文件頁 55-58, PDF 頁 81-84

用例子讀懂

Base36-2設定記憶體頁大小前,先比對 MPSMIN 與 MPSMAX;主機偏好的頁大小不一定就是控制器接受的大小。

版本的三個部分是一個識別值

06.07.版本欄位由 MJR、MNR、TER 組成,分別表示主版本、次版本與修訂部分。查支援規則時應使用完整版本,不把其中一段當成十進位小數。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
MJR/MNR/TER每段是独立整數欄位;重設值表說明對應規格版本應回報的組合。2、4、0 表示版本 2.4.0,不能把三個欄位相加來比較。
來源:Base 2.4 §3.1.4.1

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.1, Figure 37, 文件頁 58, PDF 頁 84

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.1, Figure 38, 文件頁 58-59, PDF 頁 84-85

Base Figure 37 · Specification Version Descriptor

一句話重點

Base37-1版本描述子由主版、次版與修訂版組成。

來源:Base 2.4 §3.1.4.1

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.1, Figure 37, 文件頁 58, PDF 頁 84

用例子讀懂

Base37-2MJR=2、MNR=4、TER=0 組成版本 2.4.0;三個欄位不應當成單一十進位流水號。

Base Figure 38 · NVM Express Base Specification Version Property Reset Values

一句話重點

Base38-1版本 property 的 reset 值對應規格版本的編碼方式。

來源:Base 2.4 §3.1.4.1

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.1, Figure 38, 文件頁 58-59, PDF 頁 84-85

用例子讀懂

Base38-2對照 Version property 與版本描述表時,先拆開各欄位再比較,不能只比字串長度。

Base Figure 41 · Offset 14h: CC - Controller Configuration

一句話重點

Base41-1CC 是主機選擇控制器運作設定的地方。

來源:Base 2.4 §3.1.4.5

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.5, Figure 41, 文件頁 60-63, PDF 頁 86-89

用例子讀懂

Base41-2完成佇列與格式設定後設 EN=1;是否已能正常使用,還要到 CSTS 看 RDY,不能只讀回 EN。

Base Figure 42 · Offset 1Ch: CSTS - Controller Status

一句話重點

Base42-1CSTS 回報控制器目前狀態,不是主機的設定要求。

來源:Base 2.4 §3.1.4.5

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.5, Figure 42, 文件頁 63-65, PDF 頁 89-91

用例子讀懂

Base42-2CC.EN 已是 1、CSTS.RDY 仍是 0,表示主機已要求啟用但控制器尚未回報 ready;兩者並不矛盾。

Base Figure 44 · Offset 24h: AQA - Admin Queue Attributes

一句話重點

Base44-1AQA 分別設定 Admin SQ 與 CQ 的項目數。

來源:Base 2.4 §3.1.4.6

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.6, Figure 44, 文件頁 66, PDF 頁 92

用例子讀懂

Base44-2ASQS=63 表示 64 個 SQ entries;ACQS 有自己的欄位,不能直接以 SQ 長度取代 CQ 長度。

Base Figure 45 · Offset 28h: ASQ - Admin Submission Queue Base Address

一句話重點

Base45-1ASQ 保存 Admin Submission Queue 的主機記憶體基底位址。

來源:Base 2.4 §3.1.4.6

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.6, Figure 45, 文件頁 66, PDF 頁 92

用例子讀懂

Base45-2命令從這個位址開始按 entry 大小排列;ASQ 不是下一筆命令的 CID,也不會隨每次提交而改成 tail 值。

Base Figure 46 · Offset 30h: ACQ - Admin Completion Queue Base Address

一句話重點

Base46-1ACQ 保存 Admin Completion Queue 的主機記憶體基底位址。

來源:Base 2.4 §3.1.4.9

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.9, Figure 46, 文件頁 67, PDF 頁 93

用例子讀懂

Base46-2主機讀完成項目時,在 ACQ 所指環形空間依 head 前進;更新 head 不等於修改 ACQ 基底。

Base Figure 57 · Offset 68h: CRTO - Controller Ready Timeouts

一句話重點

Base57-1CRTO 為不同 ready 模式提供等待時間資訊。

來源:Base 2.4 §3.1.4.21

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.21, Figure 57, 文件頁 73, PDF 頁 99

用例子讀懂

Base57-2若選擇不同 CC.CRIME 模式,主機需配合對應 timeout;不能永遠只用一個固定等待時間。

設定與清除遮罩是對同一組位元操作

06.08.INTMS 與 INTMC 都對應中斷遮罩,但寫入 1 的效果相反;主機寫的是要修改哪些位元,不是完整的新遮罩值。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
IVMS/IVMCINTMS 寫 1 設定遮罩,INTMC 寫 1 清除遮罩;寫 0 保留相應位元。只想解除 vector 2 的遮罩時,向清除介面寫對應 bit,不必改掉其他 vectors。
中斷模式哪些遮罩機制適用需依目前使用的中斷模式判斷。先確認 MSI/MSI-X 等模式,再解讀相關遮罩來源。
MSI-X
MSI-X,提供較多 vectors、獨立遮罩與 table 的延伸 message-signaled interrupt 機制。
MSI
Message Signaled Interrupt,透過 memory write message 傳遞 interrupt 的 PCI 機制。
來源:Base 2.4 §3.1.4.2

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.2, Figure 39, 文件頁 59, PDF 頁 85

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.2, Figure 40, 文件頁 59, PDF 頁 85

Base Figure 39 · Offset Ch: INTMS - Interrupt Mask Set

一句話重點

Base39-1INTMS 以寫入位元來設定中斷遮罩。

來源:Base 2.4 §3.1.4.2

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.2, Figure 39, 文件頁 59, PDF 頁 85

用例子讀懂

Base39-2要遮罩某個向量,寫入它對應的 bit;讀寫這種 set 寄存器的語意,不等同把整個遮罩暫存器覆寫成相同數值。

Base Figure 40 · Offset 10h: INTMC - Interrupt Mask Clear

一句話重點

Base40-1INTMC 用來清除對應中斷遮罩位元。

來源:Base 2.4 §3.1.4.2

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.2, Figure 40, 文件頁 59, PDF 頁 85

用例子讀懂

Base40-2解除上一張圖所設定的遮罩時,使用 clear 語意的位元;不能因名稱相近就將 INTMS 的寫入當成解除操作。

同時標出映像座標與主機記憶體座標

06.09.Properties 路徑與 LID 15h 路徑都讀 Boot Partition,但要求與完成證據不同;兩條路徑的位移起點也應分別標示。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
ABPID/BPSZ/BRS分別給 active partition、以 128 KiB 為單位的分割區大小及 Properties 讀取狀態;ABPID 不等於本次目標 BPID。目前 active 是 BP0 時,主機仍可能指定讀取 BP1。
BPID/BPROF/BPRSZBPID 選目標分割區;BPROF 與 BPRSZ 分別以 4 KiB 為單位指定起點與讀取量。先用起點加長度檢查未超出 BPSZ,再提供主機接收位置。
BMBBA指向接收開機資料的主機記憶體;與 HMB Feature 借給控制器的記憶體用途不同。圖上標為 Host Memory Buffer 的接收區,不代表必須先啟用 Host Memory Buffer Feature。
LID 15h 的 BPID/BPINFO/BPDlog 先有表頭,再有 Boot Partition Data;Get Log Page 的 offset 從 log 起點計算。讀映像 offset 0 的資料時,需考慮它在 log 內位於表頭之後,不能直接把兩種 offset 畫在同一起點。
來源:Base 2.4 §3.1.4.12 · Base 2.4 §3.1.4.14

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.12, Figure 49, 文件頁 69, PDF 頁 95

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.12, Figure 50, 文件頁 69-70, PDF 頁 95-96

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.14, Figure 51, 文件頁 70, PDF 頁 96

Base Figure 49 · Offset 40h: BPINFO - Boot Partition Information

一句話重點

Base49-1BPINFO 把啟用分割區、讀取狀態與大小放在一起回報。

來源:Base 2.4 §3.1.4.12

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.12, Figure 49, 文件頁 69, PDF 頁 95

用例子讀懂

Base49-2主機要求讀 Partition 1 後,BRS 用來觀察讀取狀態;ABPID 仍是啟用分割區資訊,不能拿它替代此次讀取選擇。

Base Figure 50 · Offset 44h: BPRSEL - Boot Partition Read Select

一句話重點

Base50-1BPRSEL 指定 Boot Partition 讀取的目標、起点與長度。

來源:Base 2.4 §3.1.4.12

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.12, Figure 50, 文件頁 69-70, PDF 頁 95-96

用例子讀懂

Base50-2要讀 Partition 1 的一段資料,BPID 選 1,BPROF 與 BPRSZ 按欄位單位設定;三者合起來才是一個完整讀取範圍。

Base Figure 51 · Offset 48h: BPMBL - Boot Partition Memory Buffer Location

一句話重點

Base51-1BPMBL 提供接收 Boot Partition 資料的主機記憶體位置。

來源:Base 2.4 §3.1.4.14

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.14, Figure 51, 文件頁 70, PDF 頁 96

用例子讀懂

Base51-2BPRSEL 選的是裝置上的來源區段,BPMBL 選的是主機目的 buffer;相同的數字在兩處代表不同位址空間。

圖表組 03 · Queue 位置與命令選取 · 4 張圖表

06.10.先用環形圖追蹤 head/tail 移動及位置釋放,再閱讀 Round Robin 或權重選擇流程。佇列位置圖與仲裁圖回答不同問題,不用其中一張推論完成順序。

回到本節的解釋與範例

把佇列位置與命令身分分開

06.11.SQ 保存待處理命令,CQ 保存完成項目。Head 與 Tail 描述位置,CID 描述命令身分;多個 SQ 可以把完成結果送到同一 CQ,因此結果還需要 SQID。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
SQ Head/SQ Tail比較已取走與已提交的位置以辨認空、滿及可用空間;位置到達佇列末端會回繞。深度為 8 時,index 7 的下一個位置是 0;不能用普通整數大小判斷新舊。
CQ Head/Phase Tag/SQID+CID主機交回已讀取的 CQ 位置;Phase Tag 協助辨認新完成項目,SQID 與 CID 找回原要求。兩個 SQ 可以都使用 CID=3;回覆必須同時保留 SQID 才不會配錯。
index
index;用來選取清單中的項目或格式。它回答「選哪一項」,不是「離起點多遠」。
來源:Base 2.4 §3.3.1.4

來源:NVME-BASE-2.4, Rev. 2.4, §3.3.1.4, Figure 73, 文件頁 91, PDF 頁 117

來源:NVME-BASE-2.4, Rev. 2.4, §3.3.1.4, Figure 74, 文件頁 91, PDF 頁 117

Base Figure 73 · Empty Queue Definition

一句話重點

Base73-1環形佇列的空狀態由 head 與 tail 的關係判斷。

來源:Base 2.4 §3.3.1.4

來源:NVME-BASE-2.4, Rev. 2.4, §3.3.1.4, Figure 73, 文件頁 91, PDF 頁 117

用例子讀懂

Base73-2主機尚未提交新命令時 head 與 tail 相等;相等代表沒有待處理項目,不是表示 buffer 的所有 bytes 都是零。

Base Figure 74 · Full Queue Definition

一句話重點

Base74-1環形佇列的滿狀態需要保留可辨識空、滿的配置。

來源:Base 2.4 §3.3.1.4

來源:NVME-BASE-2.4, Rev. 2.4, §3.3.1.4, Figure 74, 文件頁 91, PDF 頁 117

用例子讀懂

Base74-2在只能容納下一筆之前檢查 tail 再前進是否追上 head;不能因實體 buffer 還有某些舊資料就認為仍有空位。

仲裁決定下一個取用機會

06.12.仲裁圖上的箭頭表示控制器選取 Submission Queue 的順序或資格,不表示每筆命令執行所需的時間,也不保證不同 queue 的完成順序。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
Round Robin/Priority Class先辨認 queue 所屬類別,再看同類 queue 如何輪流取用。高優先級的取用機會與單筆命令花費的 media 時間是不同量。
Arbitration Burst/權重Burst 限制一次取用量,權重影響各類別相對機會。權重比例不能直接當成固定的 IOPS 保證,還需考慮 queue 是否有待處理命令。
IOPS
Input/Output Operations Per Second;每秒 I/O 操作數,與每秒傳輸 bytes 的頻寬不同。
來源:Base 2.4 §3.4.4 · Base 2.4 §3.4.4.2

來源:NVME-BASE-2.4, Rev. 2.4, §3.4.4, Figure 80, 文件頁 103, PDF 頁 129

來源:NVME-BASE-2.4, Rev. 2.4, §3.4.4.2, Figure 81, 文件頁 104, PDF 頁 130

Base Figure 80 · Round Robin Arbitration

一句話重點

Base80-1Round Robin 仲裁輪流給各 SQ 取得服務的機會。

來源:Base 2.4 §3.4.4

來源:NVME-BASE-2.4, Rev. 2.4, §3.4.4, Figure 80, 文件頁 103, PDF 頁 129

用例子讀懂

Base80-2SQ1 持續有命令、SQ2 只有少量命令時,按圖追每次輪到哪個 queue;仲裁選擇與命令完成先後仍是不同事情。

Base Figure 81 · Weighted Round Robin with Urgent Priority Class Arbitration

一句話重點

Base81-1Weighted Round Robin 依優先類別與權重分配服務機會。

來源:Base 2.4 §3.4.4.2

來源:NVME-BASE-2.4, Rev. 2.4, §3.4.4.2, Figure 81, 文件頁 104, PDF 頁 130

用例子讀懂

Base81-2提高某類 queue 權重會影響仲裁分配,但不能把它解釋成每一筆命令都有獨立 priority 欄位。

圖表組 04 · Namespace、CMB、PMR 與容量 · 24 張圖表

06.13.資源關係圖先區分工作記憶體和區塊儲存容量,再沿 subsystem 到各群組及 namespace 的關係閱讀。CMB/PMR 欄位則配對位置、大小、允許用途、啟用及就緒狀態。

回到本節的解釋與範例

記憶體區域的位置、用途與可用狀態

06.14.CMB 與 PMR 的閱讀順序是支援能力、位址與大小、允許用途、啟用、就緒。主機能映射一段位址,不代表這段位址已能承載任何種類的佇列或資料。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
BIR/CBA/CMSE/CREBAR 選擇與基底位址決定映射位置,控制位元決定是否啟用對應功能。先拼好高低位址並檢查對齊,再依規則啟用,最後讀回狀態。
SZ/SZU;WDS/RDS/LISTS/CQS/SQS大小要搭配單位;用途位元分別描述資料、指標清單與佇列可否放在此區。支援放讀取資料不會自動表示也支援放 CQ。
CBAI/NRDY/ERR/HSTS狀態指出位址有效性、是否就緒及其他狀況;與控制位元不同。EN 已設為 1 時,仍需以 NRDY 等狀態確認可用。
EBS/SWTP 的數值與單位彈性緩衝容量及持續寫入吞吐量各有數值和縮放單位,不能混成一個速度。先換算 buffer bytes 與 bytes/s,再分別討論短暫突發與持續傳輸。
PMRWBM/PMRTO/PMRTU持久化寫入行為與就緒時間各由自己的能力欄位定義。寫入已送到映射區域後,還要依 PMR 的可見性與持久化規則判斷完成保證。
BAR
Base Address Register,PCI configuration space 中用來找出裝置 memory space 的 register。
BIR
BAR Indicator Register,指出某個記憶體結構位於哪一個 PCIe BAR。
來源:Base 2.4 §3.1.4.9 · Base 2.4 §3.1.4.11 · Base 2.4 §3.1.4.14 · Base 2.4 §3.1.4.16 · Base 2.4 §3.1.4.19 · Base 2.4 §3.1.4.21 · Base 2.4 §3.1.4.22 · Base 2.4 §3.1.4.23 · Base 2.4 §3.1.4.24 · Base 2.4 §3.1.4.26

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.9, Figure 47, 文件頁 67-68, PDF 頁 93-94

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.11, Figure 48, 文件頁 68-69, PDF 頁 94-95

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.14, Figure 52, 文件頁 70-71, PDF 頁 96-97

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.16, Figure 53, 文件頁 71, PDF 頁 97

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.16, Figure 54, 文件頁 71, PDF 頁 97

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.19, Figure 55, 文件頁 72, PDF 頁 98

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.21, Figure 58, 文件頁 73-74, PDF 頁 99-100

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.22, Figure 59, 文件頁 74, PDF 頁 100

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.23, Figure 60, 文件頁 75, PDF 頁 101

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.24, Figure 61, 文件頁 76, PDF 頁 102

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.24, Figure 62, 文件頁 76, PDF 頁 102

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.26, Figure 63, 文件頁 77, PDF 頁 103

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.26, Figure 64, 文件頁 77, PDF 頁 103

Base Figure 47 · Offset 38h: CMBLOC - Controller Memory Buffer Location

一句話重點

Base47-1CMBLOC 說明控制器記憶體 buffer 映射到哪個 BAR 及位置。

來源:Base 2.4 §3.1.4.9

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.9, Figure 47, 文件頁 67-68, PDF 頁 93-94

用例子讀懂

Base47-2主機必須先找到該 BAR 的實際位址,再按 CMBLOC 定位;欄位中的 BAR 編號不是主機可直接讀寫的實體位址。

Base Figure 48 · Offset 3Ch: CMBSZ - Controller Memory Buffer Size

一句話重點

Base48-1CMBSZ 同時描述 CMB 大小與允許用途。

來源:Base 2.4 §3.1.4.11

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.11, Figure 48, 文件頁 68-69, PDF 頁 94-95

用例子讀懂

Base48-2看到 CMB 有足夠容量,仍要查 SQS、CQS 等用途 bits;大小足夠不代表可以任意把 SQ、CQ 或資料都放進去。

Base Figure 52 · Offset 50h: CMBMSC - Controller Memory Buffer Memory Space Control

一句話重點

Base52-1CMBMSC 控制 CMB 記憶體空間的映射與啟用。

來源:Base 2.4 §3.1.4.14

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.14, Figure 52, 文件頁 70-71, PDF 頁 96-97

用例子讀懂

Base52-2選好 CBA 後,仍要依 CRE、CMSE 的規則啟用;提供一個非零位址不等於控制器已接受映射。

Base Figure 53 · Offset 58h: CMBSTS - Controller Memory Buffer Status

一句話重點

Base53-1CMBSTS 回報 CMB 位址設定是否被判為無效。

來源:Base 2.4 §3.1.4.16

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.16, Figure 53, 文件頁 71, PDF 頁 97

用例子讀懂

Base53-2設定 CMBMSC 後若 CBAI 表示位址不合法,就不能只因 CBA 已寫入而認定這塊記憶體可用。

Base Figure 54 · Offset 5Ch: CMBEBS - Controller Memory Buffer Elasticity Buffer Size

一句話重點

Base54-1CMBEBS 用大小與單位描述彈性緩衝能力。

來源:Base 2.4 §3.1.4.16

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.16, Figure 54, 文件頁 71, PDF 頁 97

用例子讀懂

Base54-2兩個裝置報同樣數值、卻使用不同 CMBSZU 時,實際 bytes 不同;先換算再比較可吸收的資料量。

Base Figure 55 · Offset 60h: CMBSWTP - Controller Memory Buffer Sustained Write Throughput

一句話重點

Base55-1CMBSWTP 描述 CMB 可持續接收寫入的能力。

來源:Base 2.4 §3.1.4.19

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.19, Figure 55, 文件頁 72, PDF 頁 98

用例子讀懂

Base55-2短時間寫入能被 buffer 吸收,不代表長時間速率也相同;將這張表的 sustained throughput 與前一張 buffer 大小分開理解。

Base Figure 58 · Offset E00h: PMRCAP - Persistent Memory Region Capabilities

一句話重點

Base58-1PMRCAP 描述 Persistent Memory Region 的支援、映射與時間參數。

來源:Base 2.4 §3.1.4.21

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.21, Figure 58, 文件頁 73-74, PDF 頁 99-100

用例子讀懂

Base58-2打算使用 PMR 前,先確認支援的讀寫與記憶體映射方式,再解 timeout 單位,不從暫存器存在推論所有能力皆可用。

Base Figure 59 · Offset E04h: PMRCTL - Persistent Memory Region Control

一句話重點

Base59-1PMRCTL 的 EN 是啟用 PMR 的要求。

來源:Base 2.4 §3.1.4.22

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.22, Figure 59, 文件頁 74, PDF 頁 100

用例子讀懂

Base59-2設 EN=1 後,仍需觀察 PMRSTS.NRDY;與控制器啟用相同,提出要求與可用狀態分別由不同欄位表達。

Base Figure 60 · Offset E08h: PMRSTS - Persistent Memory Region Status

一句話重點

Base60-1PMRSTS 回報 PMR 是否 ready 及是否有錯誤。

來源:Base 2.4 §3.1.4.23

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.23, Figure 60, 文件頁 75, PDF 頁 101

用例子讀懂

Base60-2NRDY 尚未清除時,主機不能把已設定 EN 當成可正常使用的唯一依據。

Base Figure 61 · Offset E0Ch: PMREBS - Persistent Memory Region Elasticity Buffer Size

一句話重點

Base61-1PMREBS 描述 PMR 彈性緩衝大小。

來源:Base 2.4 §3.1.4.24

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.24, Figure 61, 文件頁 76, PDF 頁 102

用例子讀懂

Base61-2換算 PMRSZU 與大小值後得到可緩衝 bytes,再與預計的突發資料量比較;它不是持續頻寬數值。

Base Figure 62 · Offset E10h: PMRSWTP - Persistent Memory Region Sustained Write Throughput

一句話重點

Base62-1PMRSWTP 描述 PMR 持續寫入吞吐量。

來源:Base 2.4 §3.1.4.24

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.24, Figure 62, 文件頁 76, PDF 頁 102

用例子讀懂

Base62-2相同 buffer 大小的兩個 PMR,若持續吞吐量不同,在長時間寫入下仍會有不同表現。

Base Figure 63 · Offset E14h: PMRMSCL - Persistent Memory Region Memory Space Control Lower

一句話重點

Base63-1PMRMSCL 保存 PMR 映射位址的低部與控制欄位。

來源:Base 2.4 §3.1.4.26

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.26, Figure 63, 文件頁 77, PDF 頁 103

用例子讀懂

Base63-2組合 CBA 時要把控制 bits 與位址 bits 分開;不能把整個暫存器原值直接當成完整實體位址。

Base Figure 64 · Offset E18h: PMRMSCU - Persistent Memory Region Memory Space Control Upper

一句話重點

Base64-1PMRMSCU 補齊 PMR 映射位址的高部。

來源:Base 2.4 §3.1.4.26

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.26, Figure 64, 文件頁 77, PDF 頁 103

用例子讀懂

Base64-2主機位址超過低 32-bit 可表示範圍時,必須連同高部合併;只讀低部會指向另一個位置。

從邏輯空間連到實際容量組織

06.15.Namespace 提供主機可定址的資料空間;NVM Set、Endurance Group 與 Reclaim Group 描述不同的儲存組織關係。圖上的包含關係需沿父子層次閱讀,不能由圖形大小推論容量。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
TNVMCAP/UNVMCAP分別描述 subsystem 的總容量與尚未配置容量;讀值時保留來源指定的容量單位。先由總量扣除已配置量理解可用空間,不能把 UNVMCAP 當成某個 namespace 的剩餘 LBA。
TEGCAP/UEGCAP/MEGCAP描述 Endurance Group 相關容量;需要知道欄位屬於哪個 group 才能比較。兩個 group 的未配置容量不能直接當成可任意互換的同一份空間。
NVM Set/Reclaim Group/NamespaceNVM Set 與回收組織是不同維度;namespace 的歸屬決定要查哪組能力與容量。沿圖找出 namespace 所屬的 Endurance Group,再解釋其配置限制。
來源:Base 2.4 §3.2.2 · Base 2.4 §3.2.3 · Base 2.4 §3.2.4 · Base 2.4 §3.8.2 · Base 2.4 §3.8.2.2 · Base 2.4 §3.8.2.3 · Base 2.4 §3.8.3

來源:NVME-BASE-2.4, Rev. 2.4, §3.2.2, Figure 67, 文件頁 81, PDF 頁 107

來源:NVME-BASE-2.4, Rev. 2.4, §3.2.2, Figure 68, 文件頁 81, PDF 頁 107

來源:NVME-BASE-2.4, Rev. 2.4, §3.2.3, Figure 69, 文件頁 83, PDF 頁 109

來源:NVME-BASE-2.4, Rev. 2.4, §3.2.4, Figure 70, 文件頁 85, PDF 頁 111

來源:NVME-BASE-2.4, Rev. 2.4, §3.8.2, Figure 86, 文件頁 126, PDF 頁 152

來源:NVME-BASE-2.4, Rev. 2.4, §3.8.2.2, Figure 87, 文件頁 127, PDF 頁 153

來源:NVME-BASE-2.4, Rev. 2.4, §3.8.2.3, Figure 88, 文件頁 128, PDF 頁 154

來源:NVME-BASE-2.4, Rev. 2.4, §3.8.3, Figure 89, 文件頁 129, PDF 頁 155

Base Figure 86 · Simple NVM Subsystem

一句話重點

Base86-1簡單 subsystem 範例提供容量模型的起始配置。

來源:Base 2.4 §3.8.2

來源:NVME-BASE-2.4, Rev. 2.4, §3.8.2, Figure 86, 文件頁 126, PDF 頁 152

用例子讀懂

Base86-2先固定只有圖中這些元件,再閱讀容量數字;後面更複雜的配置會增加層級,不能沿用一個總量代表每層。

Base Figure 87 · Vertically-Organized NVM Subsystem

一句話重點

Base87-1垂直組織的範例強調沿層級追蹤容量。

來源:Base 2.4 §3.8.2.2

來源:NVME-BASE-2.4, Rev. 2.4, §3.8.2.2, Figure 87, 文件頁 127, PDF 頁 153

用例子讀懂

Base87-2從 namespace 向上追到集合和 subsystem,逐層確認數值代表配置量還是可用量,不直接把不同層的欄位相減。

Base Figure 88 · Horizontally-Organized Dual NAND NVM Subsystem

一句話重點

Base88-1雙 NAND 配置展示不同儲存資源如何組成 subsystem。

來源:Base 2.4 §3.8.2.3

來源:NVME-BASE-2.4, Rev. 2.4, §3.8.2.3, Figure 88, 文件頁 128, PDF 頁 154

用例子讀懂

Base88-2圖中有兩組 NAND,不代表對主機一定呈現兩個相同大小的 namespace;先追實際對應關係。

Base Figure 89 · Capacity Information Field Usage

一句話重點

Base89-1容量欄位的意義取決於 subsystem 或 Endurance Group 層級。

來源:Base 2.4 §3.8.3

來源:NVME-BASE-2.4, Rev. 2.4, §3.8.3, Figure 89, 文件頁 129, PDF 頁 155

用例子讀懂

Base89-2TNVMCAP 與 UNVMCAP 描述整體容量及未配置量;要比較某個 Endurance Group,則使用相應群組欄位。

Base Figure 65 · NSID Types and Relationship to Namespace

一句話重點

Base65-1有效 NSID 還要區分是否已配置及是否附加到控制器。

來源:Base 2.4 §3.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §3.2.1, Figure 65, 文件頁 78-79, PDF 頁 104-105

用例子讀懂

Base65-2NSID 3 在有效範圍內卻尚未建立 namespace 時屬 unallocated;已建立但未附加到控制器 A 時,對 A 仍是 inactive。

Base Figure 66 · NSID Types

一句話重點

Base66-1NSID 分類圖把數值範圍、配置狀態與附加關係分成不同層。

來源:Base 2.4 §3.2.1.5

來源:NVME-BASE-2.4, Rev. 2.4, §3.2.1.5, Figure 66, 文件頁 79, PDF 頁 105

用例子讀懂

Base66-2若 NN=8,NSID 9 屬 invalid;NSID 3 可能 valid 但 inactive。兩者都不能直接作正常資料存取,原因卻不同。

Base Figure 67 · NVM Sets and Associated Namespaces

一句話重點

Base67-1namespace 與 NVM Set 的對應說明容量集合的歸屬。

來源:Base 2.4 §3.2.2

來源:NVME-BASE-2.4, Rev. 2.4, §3.2.2, Figure 67, 文件頁 81, PDF 頁 107

用例子讀懂

Base67-2選一個 namespace 沿圖找到 NVM Set,再看相鄰 namespace 是否同屬該集合,不能只用 NSID 相近推論關係。

Base Figure 68 · NVM Set Aware Admin Commands

一句話重點

Base68-1NVM Set aware 命令需要理解其集合層級作用範圍。

來源:Base 2.4 §3.2.2

來源:NVME-BASE-2.4, Rev. 2.4, §3.2.2, Figure 68, 文件頁 81, PDF 頁 107

用例子讀懂

Base68-2命令作用於某個 NVM Set 時,先辨識該集合包含的 namespace;不要以單一 NSID 的效果代表全部集合。

Base Figure 69 · NVM Sets and Associated Namespaces

一句話重點

Base69-1另一種 NVM Set 配置用來比較 namespace 如何分布。

來源:Base 2.4 §3.2.3

來源:NVME-BASE-2.4, Rev. 2.4, §3.2.3, Figure 69, 文件頁 83, PDF 頁 109

用例子讀懂

Base69-2把 Figure 67 與這張圖的 namespace 歸屬並排看,重點是關係改變,而不是方塊畫得比較大就有較多容量。

Base Figure 70 · Flexible Data Placement Logical View of Non-Volatile Storage

一句話重點

Base70-1FDP 邏輯視圖把資料放置與回收資源分開表達。

FDP
Flexible Data Placement,把資料放置提示與媒體回收管理連結的能力。
來源:Base 2.4 §3.2.4

來源:NVME-BASE-2.4, Rev. 2.4, §3.2.4, Figure 70, 文件頁 85, PDF 頁 111

用例子讀懂

Base70-2主機選擇放置識別碼後,沿圖追到對應回收群組和資源;namespace 的 LBA 不會因此直接變成 NAND 實體位址。

Base Figure 71 · Example 1 Domain Structure

一句話重點

Base71-1Domain 圖說明 subsystem 內可分開考慮的範圍。

來源:Base 2.4 §3.2.5.1

來源:NVME-BASE-2.4, Rev. 2.4, §3.2.5.1, Figure 71, 文件頁 86, PDF 頁 112

用例子讀懂

Base71-2某個 domain 的事件或資源資訊,不能直接當成其他 domain 同步發生;先沿圖確認物件所屬。

圖表組 05 · Shutdown、Reset 與狀態保留 · 6 張圖表

06.16.先選事件類型與範圍,再以保留表逐項看設定及資源的結果。關機狀態圖配對 SHN 的要求和 SHST 的回報;不要把重設後某個初始值當成上次關機成功的證明。

回到本節的解釋與範例

Base Figure 43 · Offset 20h: NSSR - NVM Subsystem Reset

一句話重點

Base43-1NSSR 觸發的是 subsystem 層級重設。

來源:Base 2.4 §3.1.4.6

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.6, Figure 43, 文件頁 66, PDF 頁 92

用例子讀懂

Base43-2若多個控制器屬於同一 subsystem,評估 NSSR 時要考慮整體影響,不能把它當成單一 I/O queue 的重設。

Base Figure 56 · Offset 64h: NSSD - NVM Subsystem Shutdown

一句話重點

Base56-1NSSD 用於要求 NVM subsystem shutdown。

來源:Base 2.4 §3.1.4.19

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.19, Figure 56, 文件頁 72, PDF 頁 98

用例子讀懂

Base56-2單一控制器的 CC.SHN 與 subsystem 的 NSSD 影響對象不同;先決定要關閉哪一層,再使用相應機制。

Base Figure 84 · Admin Commands Permitted to Return a Status Code of Admin Command Media Not

一句話重點

Base84-1部分 Admin 命令在媒體尚未 ready 時有特定回覆規則。

來源:Base 2.4 §3.5.3

來源:NVME-BASE-2.4, Rev. 2.4, §3.5.3, Figure 84, 文件頁 110-111, PDF 頁 136-137

用例子讀懂

Base84-2控制器介面 ready 與媒體能處理某種命令可能是不同階段;先看 ready 模式,再查這張表對該命令的規定。

先界定事件影響的範圍,再看狀態如何保留

06.17.Reset、shutdown、power cycle 與逾時偵測是不同事件。圖中的前後狀態要配合受影響的控制器或 subsystem 範圍閱讀。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
Current/Saved/Default目前生效值、保存值與預設值有不同用途;事件發生後以適用的恢復規則決定 current。保存過某個值,仍需確認此次 reset 的範圍及功能規則,才能知道它是否成為目前值。
KATT/偵測時間Keep Alive 的計時與檢查時點共同決定何時察覺逾時。在兩次檢查之間錯過一次更新,實際偵測時間可能超過單一 KATT。
來源:Base 2.4 §3.6 · Base 2.4 §3.9.4.1

來源:NVME-BASE-2.4, Rev. 2.4, §3.6, Figure 85, 文件頁 113, PDF 頁 139

來源:NVME-BASE-2.4, Rev. 2.4, §3.9.4.1, Figure 90, 文件頁 133, PDF 頁 159

Base Figure 85 · Shutdown Processing Interactions

一句話重點

Base85-1Shutdown 圖把主機要求與控制器處理的互動串起來。

來源:Base 2.4 §3.6

來源:NVME-BASE-2.4, Rev. 2.4, §3.6, Figure 85, 文件頁 113, PDF 頁 139

用例子讀懂

Base85-2主機提出 shutdown 後,沿狀態回報等待完成,不能把「已送出要求」當成「可以立刻切斷電源」。

Base Figure 90 · Detecting Timeout Takes up to 2 * KATT

一句話重點

Base90-1Keep Alive timeout 的偵測延遲受計時觀察時點影響。

來源:Base 2.4 §3.9.4.1

來源:NVME-BASE-2.4, Rev. 2.4, §3.9.4.1, Figure 90, 文件頁 133, PDF 頁 159

用例子讀懂

Base90-2一次更新剛好落在計時檢查前後,可能造成不同的偵測時刻;圖說明為何不能把 KATT 直接當成精確偵測時間。

Base Figure 91 · Example Privileged Action Admin Commands

一句話重點

Base91-1Privileged action 可能影響其他控制器或主機使用的狀態。

來源:Base 2.4 §3.10

來源:NVME-BASE-2.4, Rev. 2.4, §3.10, Figure 91, 文件頁 135, PDF 頁 161

用例子讀懂

Base91-2韌體切換或 namespace 配置變更不一定只影響送出命令的程序;先確認作用範圍,再談協調需求。

06.18.NSID 0h 無效,FFFFFFFFh 是 broadcast 值;其餘 NSID 還要區分 allocated/unallocated 與 active/inactive,不能只看數字是否落在範圍內。

來源:Base 2.4 §3.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §3.2.1, 文件頁 78-80, PDF 頁 104-106

06.19.domain 是 NVM subsystem 內的故障/通訊邊界。多 domain subsystem 的 identifier 必須(shall)在該 subsystem 內唯一。

來源:Base 2.4 §3.2.5

來源:NVME-BASE-2.4, Rev. 2.4, §3.2.5, 文件頁 85-88, PDF 頁 111-114

學完後想一想

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