NVMe · 規格與原理

NVMe Base 2.4:Namespace Management:容量、建立與附加

00.01.Namespace Management 管理主機可使用的儲存空間。建立 namespace 決定容量與格式;附加 namespace 才把它連到指定控制器。因此,存在一份儲存空間,與主機能經由某個控制器使用它,是兩個不同狀態。

namespace
namespace,主機透過 controller 存取的一份已格式化非揮發性容量。

這篇的主軸

01

規劃要建立的儲存空間

01-01先分清容量、格式與配置粒度:需要多少可定址空間、每個區塊多大,以及控制器建議如何配置。

02

從建立走到可存取

02-01Create 建立 namespace 並回傳識別碼;Attach 讓指定控制器能存取它。用這個流程理解兩種命令各自完成什麼。

03

分清移除連接與刪除資料空間

03-01Detach 移除控制器的存取關係,Delete 刪除 namespace;還原預設配置又有不同的前提與結果。

04

讓主機得知配置變動

04-01建立、附加或刪除後,其他控制器與主機看到的資訊可能改變;透過通知及重新識別更新認識。

把主軸連起來

00.02.先理解容量與識別碼,再準備建立資料;Create 成功後取得 NSID,接著以 Attachment 建立存取關係。需要調整配置時,分別考慮 Detach、Delete 或還原預設配置,並處理受影響控制器收到的變更通知。

NSID
Namespace Identifier,controller 用來指向 namespace 的數值 handle;identifier 不等於 namespace 物件本身。

01 容量數值與配置粒度

先統一單位,再判斷容量配置

畫出主機能使用的位址範圍

01.01.假設建立時選用每個 logical block 有 4096 bytes 資料的格式,NSZE=250 表示 LBA 0 到 249。可定址資料量是 250×4096=1,024,000 bytes,也就是 1000 KiB;最後一個 LBA 是 249,與總數 250 要分開。

logical block
邏輯區塊;namespace 可定址的基本單位,其資料大小由使用中的格式決定。
NSZE
Namespace Size,namespace 的總 logical block 數,LBA 範圍為 0 到 NSZE−1。

把容量與使用量放回各自的位置

01.02.NCAP 表示可配置的 logical blocks 數;NUSE 是建立後查詢到的使用量。主機建立 namespace 時提出 NSZE 與 NCAP,不能把 NUSE 當成另一個要指定的容量要求。若使用精簡配置,再依相關能力理解 NCAP 可以如何小於 NSZE。

NCAP
Namespace Capacity,任一時點最多可配置給 namespace 的 logical blocks。
NUSE
Namespace Utilization,目前已配置給 namespace 的 logical blocks。

找到這個格式對應的粒度

01.03.讀 Namespace Granularity List 時,先以 NGA.GDM 決定描述子如何對應到格式,再用 ND 得到有效描述子的數量。選對描述子後,NSG 與 NCG 才是此次 size 與 capacity 要比較的建議粒度;它們的單位是 bytes。

NCG
Namespace Capacity Granularity,以 bytes 表示 controller 偏好的 NCAP allocation granularity。
NSG
Namespace Size Granularity,以 bytes 表示 controller 偏好的 NSZE allocation granularity。

把建議與合法性分開判斷

01.04.若本例的 NSG 是 1 MiB,1000 KiB 並不是 1 MiB 的整數倍,可能產生配置後無法由 LBA 定址的剩餘空間。這項比較用於估計配置效率;命令是否有效仍要檢查容量、格式及其他要求,不能只因未符合粒度建議而拒絕原本有效的建立要求。

來源:NVM Command Set 1.3 §2.1.1 · Base 2.4 §8.1.17 · NVM Command Set 1.3 §5.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.1, 文件頁 13-14, PDF 頁 13-14

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.1, 文件頁 13, PDF 頁 13

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17, 文件頁 661, PDF 頁 687

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.8, 文件頁 165, PDF 頁 165

可定址、可配置、已配置是 3 個不同的量教學例:NSZE=1000、NCAP=800、NUSE=600。LBA 編號的範圍與目前配置量要分開理解。NSZE = 1000LBA 0 … 999NCAP = 800NUSE = 600
教學例:NSZE=1000、NCAP=800、NUSE=600。LBA 編號的範圍與目前配置量要分開理解。

把流程對回規格條件

01.06.Namespace Size(NSZE)是 LBA 0 到 n−1 的總 logical blocks;Namespace Capacity(NCAP)是任一時點最多可配置的 blocks;Namespace Utilization(NUSE)是目前已配置 blocks。永遠遵守 NSZE ≥ NCAP ≥ NUSE。

來源:NVM Command Set 1.3 §2.1.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.1, 文件頁 13-14, PDF 頁 13-14

01.07.NSFEAT.THINP=1 時,controller 可(may)回報 NCAP<NSZE,並必須(shall)追蹤 NUSE。THINP=0 時,controller 必須回報 NCAP=NSZE,且可讓 NUSE 永遠等於 NCAP。

controller
controller,實作 NVMe 介面、取走 command 並回報 completion 的控制實體。
THINP
Thin Provisioning,NSFEAT 中決定 NCAP 是否可小於 NSZE,以及 controller 是否必須追蹤 NUSE 的 bit。
來源:NVM Command Set 1.3 §2.1.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.1, 文件頁 13, PDF 頁 13

01.08.controller 可(may)按內部 內部配置單位 把實際消耗容量向上取整。Spec 範例中,32 blocks×4 KiB=128 KiB 的 namespace,在 1 MiB 內部配置單位 下可消耗 1 MiB;因此 實際消耗容量 不一定等於 logical block size×block count。

來源:Base 2.4 §8.1.17

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17, 文件頁 661, PDF 頁 687

01.09.Namespace Granularity 的 NSG 與 NCG 都是 以 bytes 為單位的配置粒度建議。若 NSZE×LBA size 可整除 NSG、NCAP×LBA size 可整除 NCG 且 NSZE=NCAP,配置為 完整配置 且全部容量可由 LBA 定址;不符合 hint 可能浪費容量,但 符合其他所有要求的建立命令 不得只因違反 hint 被中止。

來源:NVM Command Set 1.3 §5.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.8, 文件頁 165, PDF 頁 165

01.10.說明性範例:LBA=4 KiB、NSG=1 MiB(256 LBAs)、NCG=2 MiB(512 LBAs)。NSZE=NCAP=1024 同時滿足兩種 granularity;NSZE=1000、NCAP=1000 不滿足 NSG/NCG 整除,但若其他欄位都合法,controller 不得只因這個 hint violation 中止 create。

來源:NVM Command Set 1.3 §5.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.8, 文件頁 165, PDF 頁 165

容量數值與配置粒度
容量欄位使用的單位這個數值描述什麼
NSZElogical blocksLBA 0..NSZE−1
NCAPlogical blocks最大可配置容量
NUSElogical blocksTHINP=1 時需追蹤
NSG/NCGbytes建議配置粒度;未符合這項建議,不能單獨成為拒絕命令的理由
閱讀相關規格圖表 → 容量數值與配置粒度

02 建立 Namespace 所需的資料

把一份建立資料串成相容的設定

先選命令集,再選資料結構

02.01.Namespace Management 的 SEL 選 Create,CSI 選 NVM Command Set,DPTR 提供建立資料的位置。Base 的命令與 NVM Command Set 的 Host Specified Fields 要配合閱讀:前者決定操作與資料解讀方式,後者決定新 namespace 的格式及容量。

DPTR
Data Pointer,SQE 中指出 command data buffer 的欄位。
Host
主機;執行作業系統並送出 NVMe 命令的一端。
CSI
I/O Command Set Identifier;選擇 I/O 命令集,NVM Command Set 使用 00h。
NVM
Non-Volatile Memory,斷電後仍能保存資料的記憶體。
SEL
Select;Namespace Management 的 create/delete/restore selector,與 Get Features 的 SEL 不同。

用同一個格式檢查相關欄位

02.02.NSZE、NCAP 的 byte 容量取決於 FLBAS 選中的格式。DPS 與 LBSTM 又必須符合該格式的保護資訊能力。不能先用一種格式計算容量,再把另一種格式的保護設定填進同一份資料。

FLBAS
Formatted LBA Size,選擇 namespace 使用的 LBA format,並包含 metadata placement 相關控制。
LBSTM
Logical Block Storage Tag Mask,create 時指定哪些 Storage Tag bits 被 mask 的 64-bit 欄位。
DPS
End-to-end Data Protection Type Settings,create 時選擇 Protection Information type 與位置的欄位。

沿著能力欄位確認設定是否成立

02.03.使用需要延伸格式支援的保護配置時,要查 Host Behavior Support 的 LBAFEE;Storage Tag 的遮罩則還要對照 Identify 的允許遮罩及遮罩層級。建立命令中的選擇值與 Identify 的支援值,是一組需要互相核對的資料。

FDP 有啟用時再解讀 handle 清單

02.04.先以 ENDGID 找到 Endurance Group 及其 FDP 狀態。NPHNDLS 決定主機提供的 Placement Handle List 有多少項,每項再對應一個 Reclaim Unit Handle。數量、識別碼範圍、重複項目及共享 handle 的格式一致性需要一起檢查;NPHNDLS=0 則依規格由控制器選擇,不能當成「沒有任何 handle」。

Endurance Group
Endurance Group,用於隔離與回報耐久度相關狀態的 NVM 資源群組。
Reclaim Unit
Reclaim Unit,controller 執行媒體回收時使用的較小管理粒度。
NPHNDLS
Number of Placement Handles,NVM create payload 中 Placement Handle List 的 entry count,最大 128。
ENDGID
Endurance Group Identifier,指定建立 namespace 時所屬 Endurance Group。
FDP
Flexible Data Placement,把資料放置提示與媒體回收管理連結的能力。
來源:Base 2.4 §5.2.25 · NVM Command Set 1.3 §4.1.6.4 · NVM Command Set 1.3 §4.1.6.2 · NVM Command Set 1.3 §4.1.6.3 · Base 2.4 §8.1.17

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, 文件頁 446-448, PDF 頁 472-474

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6.4, 文件頁 111-113, PDF 頁 111-113

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6.2, 文件頁 110, PDF 頁 110

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6.3, 文件頁 110-111, PDF 頁 110-111

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17, 文件頁 661, PDF 頁 687

把流程對回規格條件

02.06.Create 使用 NSID=0、SEL=0h 與 CSI=00h(NVM Command Set)。DPTR 指向 4096-byte data structure:bytes 0:511 是 I/O Command Set specific、512:1023 reserved、1024:4095 vendor specific。reserved bytes 由 host 清為 0。

I/O
Input/Output,對 namespace 執行資料輸入與輸出的操作類別。
來源:Base 2.4 §5.2.25

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, 文件頁 446-448, PDF 頁 472-474

02.07.NVM create payload 的主要 host-specified fields 是 NSZE、NCAP、FLBAS、DPS、NMIC、ANAGRPID、NVMSETID、ENDGID、LBSTM、NPHNDLS 與 Placement Handle List。成功 create 後,namespace 依這些屬性格式化;未使用的 reserved fields 應清為 0。

ANAGRPID
ANA Group Identifier,namespace 所屬 Asymmetric Namespace Access group 的 identifier;create 值 0 讓 controller 選擇。
NVMSETID
NVM Set Identifier,指定建立 namespace 時要從哪個 NVM Set 配置容量。
NMIC
Namespace Multi-path I/O and Namespace Sharing Capabilities,create 時宣告 namespace sharing/multipath 屬性的欄位。
來源:NVM Command Set 1.3 §4.1.6.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6.4, 文件頁 111-113, PDF 頁 111-113

02.08.End-to-end Data Protection 設定在 create 時套用。LBAFEE 未啟用時,特定 16-bit STS 非零、32-bit 或 64-bit Guard Protection Information 組合必須以 Invalid Namespace or Format 中止;LBSTM 不符合 Figure 127 capability 時則回 Invalid Field in Command。

Protection Information
資料保護資訊,縮寫 PI;包含 Guard 與 tags,用來檢查資料及其關聯資訊。
Guard
PI 的檢查值欄位;所選格式決定檢查值的寬度與計算方法。
來源:NVM Command Set 1.3 §4.1.6.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6.2, 文件頁 110, PDF 頁 110

02.09.只有指定 Endurance Group 已啟用 Flexible Data Placement(FDP)且 SEL=Create 時,NPHNDLS 與 Placement Handle List 才參與驗證。NPHNDLS 不得大於支援的 Reclaim Unit Handles 或 128;重複、越界、格式不相容或無可用 handle 會導向 Invalid Placement Handle List 或 Invalid Format。

來源:NVM Command Set 1.3 §4.1.6.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6.3, 文件頁 110-111, PDF 頁 110-111

02.10.NVMSETID/ENDGID 的決策矩陣為:兩者 0 由 controller 選兩者;NVMSETID=0、ENDGID≠0 時由指定 Endurance Group 內選 NVM Set;NVMSETID≠0、ENDGID=0 必須 Invalid Field;兩者非 0 時只有該 NVM Set 確實屬於指定 Endurance Group 才可配置。

NVM Set
NVM Set,把 namespace 與一組共同管理的 NVM 資源建立關聯的容量集合。
來源:Base 2.4 §8.1.17

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17, 文件頁 661, PDF 頁 687

建立 Namespace 所需的資料
資料區域與解讀格式該區域的用途欄位有效的條件
Base 0:511SIOCSNVM-specific create data
Base 512:1023Reservedhost 清 0
Base 1024:4095Vendor Specific沒有來源定義就不猜
NVM 512:767Placement Handle List只在 FDP enable 時驗證
SIOCS
Specified I/O Command Set,Base create buffer bytes 0:511 中放置所選 I/O Command Set specific fields 的區域。
閱讀相關規格圖表 → 建立 Namespace 所需的資料

03 建立、連接與使用 Namespace

用兩個控制器追蹤同一個 namespace

建立物件

03.01.主機要求建立 namespace,成功 CQE 的 DW0 回傳 NSID=7。此時記錄的是「儲存物件已存在」,還不能推論控制器 A、B 都能對它執行 I/O。

CQE
Completion Queue Entry,CQ 中的一筆完成結果資料結構。

建立存取關係

03.02.主機在 Controller List 中列出 A、B 的 Controller Identifier,NUMCIDS 記錄有效項目數,並以 Namespace Attachment 的 SEL 選 Attach。這份清單選控制器;命令的 NSID 選要附加的 namespace。

NUMCIDS
Number of Controller Identifiers;Controller List 中有效 controller IDs 的數量。

只移除其中一條關係

03.03.若對控制器 A 執行 Detach,NSID=7 在 A 上不再是可存取的 namespace;在 B 上的附加關係仍可保留。namespace 本身沒有因此被刪除,配置給它的容量也不是由這個 Detach 動作釋放。

刪除物件

03.04.Delete 改變的是 namespace 是否存在。主機應先妥善處理各控制器的存取關係與進行中的 I/O,再執行刪除;刪除後,先前取得的 NSID 不能繼續當成原物件的存取憑據。

來源:Base 2.4 §8.1.17 · Base 2.4 §5.2.24 · Base 2.4 §5.2.25, 8.1.17.1

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17, 文件頁 660, PDF 頁 686

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.24, 文件頁 444-445, PDF 頁 470-471

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, 8.1.17.1, 文件頁 446-448, 662, PDF 頁 472-474, 688

Create 管物件,Attach/Detach 管連線說明性例子:Create 成功得到 NSID=7,再分別附加到控制器 3、5。只對控制器 3 Detach,移除的是左側存取關係,namespace 及控制器 5 的存取關係仍存在。Delete 才改變物件是否存在。Controller 3Controller 5Namespace · NSID 7容量、格式與儲存內容Attach/DetachAttach/DetachCreate/Delete 改變底下的物件;Attach/Detach 改變連線
說明性例子:Create 成功得到 NSID=7,再分別附加到控制器 3、5。只對控制器 3 Detach,移除的是左側存取關係,namespace 及控制器 5 的存取關係仍存在。Delete 才改變物件是否存在。

把流程對回規格條件

03.06.完整 Namespace Management capability 由 Namespace Management command 與 Namespace Attachment command 組成。支援時 controller 必須支援兩者、設 OACS.NMS=1、支援 Attached Namespace Attribute Changed event;Allocated event 為 should,Namespace Granularity 與 Restore Default 為 may。

OACS.NMS
Optional Admin Command Support 的 Namespace Management Supported bit;設為 1 才宣告完整 Manage 加 Attach capability。
來源:Base 2.4 §8.1.17

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17, 文件頁 660, PDF 頁 686

03.07.create 成功後 namespace 已 allocated 但尚未 attached,因此對 controller 尚非 active。detach 使該 controller 上的 NSID 變 inactive;delete 使 subsystem 中的 NSID 變 unallocated。受影響的 outstanding 或後續 commands 依 inactive NSID 處理。

來源:Base 2.4 §8.1.17

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17, 文件頁 660, PDF 頁 686

03.08.Namespace Attachment 的 DPTR 指向 4096-byte Controller List;SEL=0h attach、SEL=1h detach。以 PRP 指向此 buffer 時不得使用 PRP List,因 buffer 不可跨越超過一個 memory-page boundary。attach/detach 狀態跨所有 reset events 保留。

PRP
Physical Region Page,以 memory page 為單位描述 host-addressable data buffer 的 pointer 格式。
來源:Base 2.4 §5.2.24

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.24, 文件頁 444-445, PDF 頁 470-471

03.09.attach 前分別核對 Domain aggregate MAXDNA 與每個 I/O controller 的 MAXCNA;非零 limit 被超過時回 Namespace Attachment Limit Exceeded。還要核對 I/O Command Set support/enable state,不能把所有 attach failure 都歸成同一種 status。

I/O controller
I/O controller,可執行使用者資料 I/O command 的 controller 類型。
MAXCNA
Maximum I/O Controller Namespace Attachments,單一 I/O controller 可附掛 namespaces 的上限。
MAXDNA
Maximum Domain Namespace Attachments,整個 Domain 內所有 I/O controller attachment 數量總和的上限。
來源:Base 2.4 §5.2.24

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.24, 文件頁 444-445, PDF 頁 470-471

03.10.Create 成功時 controller 選擇可用 NSID,CQE.DW0 回傳該 NSID;此刻 namespace 尚未 attached。software 必須先保存 returned NSID,再以 Namespace Attachment 建立 controller access,不能在 create CQE 後直接送 I/O。

來源:Base 2.4 §5.2.25, 8.1.17.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, 8.1.17.1, 文件頁 446-448, 662, PDF 頁 472-474, 688

建立、連接與使用 Namespace
管理動作改變哪個物件或關係操作後仍保留什麼
Createobject/capacity不自動 attach
Attachaccess relationshipController List 可含多個 CNTLID
Detach對指定控制器的可存取狀態namespace 仍 allocated
Deletesubsystem inventoryNSID 變 unallocated
閱讀相關規格圖表 → 建立、連接與使用 Namespace

04 刪除與恢復預設配置

刪除所有 namespace 與還原預設配置

先列出兩個動作的目的

04.01.Delete All 的結果是移除現有 namespace;Restore Default 的結果是套用目前啟用韌體所定義的預設 namespace 配置。兩者即使都在調整配置,完成後的 namespace 數量也不必相同。

檢查還原的前提

04.02.Restore Default 必須有對應支援能力,並符合尚無已配置 namespace 等要求。若仍有 namespace 存在,不能把 Restore 當成順便刪掉它們的捷徑。先處理現有配置,再提出還原要求。

用狀態與重新識別確認結果

04.03.還原成功後,DNCS 表示配置符合目前韌體的預設設定。實際建立了哪些 namespace、各自容量與格式為何,仍需重新 Identify;不要把先前韌體版本的預設值當成這次結果。

DNCS
Default Namespace Configuration Status,表示目前 namespace configuration 是否等於 active firmware image defaults 的 status bit。
來源:Base 2.4 §5.2.25, 8.1.17.1 · Base 2.4 §5.2.25.1 · Base 2.4 §8.1.17.1-8.1.17.2

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, 8.1.17.1, 文件頁 446, 448, 662, PDF 頁 472, 474, 688

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25.1, 文件頁 447-448, PDF 頁 473-474

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17.1-8.1.17.2, 文件頁 662-663, PDF 頁 688-689

把流程對回規格條件

04.05.Delete 的 NSID 指定已建立 namespace;FFFFFFFFh 表示 delete all,即使目前零個 namespaces 也成功。delete 會使 namespace 從 subsystem 消失並具有 detach side effect;host 應先 detach 所有 controllers,讓 event 與 outstanding-I/O 行為更可控。

來源:Base 2.4 §5.2.25, 8.1.17.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, 8.1.17.1, 文件頁 446, 448, 662, PDF 頁 472, 474, 688

04.06.Restore Default 使用 SEL=2h,NSID 應為 0 且 controller 會忽略它。先讀 RDNCS,刪除 subsystem 中所有 namespaces,再送 restore;若仍有 namespace,回 Command Sequence Error。成功前 controller 必須套用 current active firmware image 的 default configuration 並設 DNCS=1。

RDNCS
Restore Default Namespace Configuration Supported,宣告 Restore Default operation 是否支援的 capability bit。
來源:Base 2.4 §5.2.25.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25.1, 文件頁 447-448, PDF 頁 473-474

04.07.create 改變 Allocated Namespace ID list;attach/detach 改變 Active Namespace ID list;delete 可能同時改變兩者。啟用對應 notice 時,host 收到 asynchronous event 後應重新 Identify,而不是只用 event code 猜新 inventory。§8.1.17.2 對處理 delete 的 controller 與其他 controllers 規定不同 event reporting。

來源:Base 2.4 §8.1.17.1-8.1.17.2

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17.1-8.1.17.2, 文件頁 662-663, PDF 頁 688-689

刪除與恢復預設配置
刪除或恢復動作命令如何選對象完成後如何確認配置
Delete oneNSID=target成功後 object 消失
Delete allNSID=FFFFFFFFhzero namespace 仍成功
RestoreSEL=2h、NSID ignored剩餘 namespace→Sequence Error
Post-conditionDNCS=1仍要重新 Identify actual defaults
閱讀相關規格圖表 → 刪除與恢復預設配置

05 Namespace 變更通知與重新辨識

配置改了,哪些控制器需要更新認識

分清已配置與已附加兩種變動

05.01.新增或移除 namespace 會影響已配置清單;改變附加關係則影響特定控制器可存取的清單。Attached 與 Allocated 兩類通知對應不同觀察角度,不能只保留一個「namespace changed」旗標。

把事件設定、通知與查詢連起來

05.02.控制器是否發出相應通知,要結合事件啟用設定及操作來源。收到通知後,主機再讀相應的 Identify 清單與資料結構,重建目前狀態;通知本身不提供完整新配置。

追蹤刪除由誰發起

05.03.假設 A 收到 Admin 命令並處理刪除,B 也附加了該 namespace。對 B 的通知規則需檢查其啟用設定;處理命令的 A 已透過自己的命令流程知道變動。若變動由管理端點等其他途徑引起,適用的通知對象又要依該分支判斷。

Admin
Administrative,建立、設定、查詢或管理 controller 與 queue 的控制路徑。
來源:Base 2.4 §8.1.17 · Base 2.4 §8.1.17.1-8.1.17.2 · Base 2.4 §5.2.25, 8.1.17.1 · Base 2.4 §5.2.24-5.2.25

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17, 文件頁 660, PDF 頁 686

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17.1-8.1.17.2, 文件頁 662-663, PDF 頁 688-689

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, 8.1.17.1, 文件頁 446-448, 662, PDF 頁 472-474, 688

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.24-5.2.25, 文件頁 445, 448, PDF 頁 471, 474

把流程對回規格條件

05.05.Namespace Attachment 與 Management 有各自的 command-specific status。Attachment 包括 already attached 18h、private 19h、not attached 1Ah、Controller List invalid 1Ch、ANA attach failed 25h、limit 27h、I/O Command Set 29h/2Ah;Management 包括 Invalid Format 0Ah、insufficient capacity 15h、NSID unavailable 16h、thin provisioning unsupported 1Bh、ANA group invalid 24h。

ANA
Asymmetric Namespace Access;描述同一 namespace 經不同 controllers 存取時的路徑狀態。
來源:Base 2.4 §5.2.24-5.2.25

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.24-5.2.25, 文件頁 445, 448, PDF 頁 471, 474

Namespace 變更通知與重新辨識
通知或清單描述哪種配置變化應重新查詢什麼
CNS 02hActive Namespace ID listAttached notice
CNS 10hAllocated Namespace ID listAllocated notice
CreateAllocated change新 NSID 尚未 active
DeleteAllocated+可能 Activeprocessing controller 規則不同
CNS
Controller or Namespace Structure;Identify 命令用來選擇回傳資料結構的欄位。
閱讀相關規格圖表 → Namespace 變更通知與重新辨識

06 讀懂本篇的規格圖表

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

圖表組 01 · 容量數值與配置粒度 · 4 張圖表

06.02.容量圖比較 NSZE、NCAP、NUSE 的數量,粒度表則以 bytes 比較。先列出區塊數×區塊大小,再計算對 NSG、NCG 的餘數;不要直接拿區塊數除以 byte 粒度。

回到本節的解釋與範例

把建立資料、格式能力與資源配置逐項配對

06.03.NVM Figure 134 列出主機在 Create 時提出的設定;Figure 123 與 Figure 127 提供欄位語意及格式能力。這些結構需要對照閱讀,但不是三份可以相加的建立 buffer。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
NSZE/NCAP/FLBAS/NSFEAT.THINPFLBAS 選格式,所以容量值必須乘所選格式的資料 bytes;THINP 等能力影響容量要求。NUSE 是查詢到的使用量,不由此 Create payload 指定。NSZE=250、4 KiB/block 是 1000 KiB;換成 512-byte 格式後,不能繼續沿用同一 byte 容量結論。
DPS/LBAFEE/LBSTM/Storage Tag Masking LevelDPS 選保護配置,LBAFEE 決定進階格式是否可用;LBSTM 必須符合允許遮罩與層級限制。32b/64b Guard 或帶非零 STS 的 16b Guard 建立要求,若 LBAFEE 未設 1,回 Invalid Namespace or Format;遮罩要求不符則是 Invalid Field in Command。
NMIC/ANAGRPID/NVMSETID/ENDGID共享能力與資源歸屬要配合支援條件。後三者填 0 表示由控制器決定,未支援對應功能時忽略。ENDGID 還決定要檢查哪個 Endurance Group 的 FDP 狀態;FDP 啟用時不支援 NVM Sets。
NPHNDLS/Placement Handle ListFDP 啟用時,非零 NPHNDLS 不得超過支援 RUH 數或 128;清單值需在範圍內、不得重複。支援 4 個 RUH 時,2 筆清單 [1,3] 數量及範圍符合這兩項要求;[1,1] 重複、[1,4] 超出索引範圍,仍須另檢查資源占用與格式。
NPHNDLS=0/控制器選定的 RUH首次此類配置由控制器選未被非零清單 namespace 使用的 RUH;既有 NPHNDLS=0 namespaces 則依規則共享同一個 RUH。0 不是沒有 handle。主機後來提出非零清單時,也不能占用這個由控制器為零清單配置保留的 RUH。
共享 RUH/Format Index/Reserved共享 RUH 的 namespaces 必須使用相同 user-data Format Index;FDP 未啟用時依表註作保留欄位處理,不能把控制器忽略欄位理解成主機可以填任意值。RUH 已由 Format Index 2 的 namespace 使用,新 namespace 指定 Format Index 3 卻共用它,會是 Invalid Format。
Format Index
格式索引;用來選取一組 LBAF/ELBAF 格式資訊的編號。
index
index;用來選取清單中的項目或格式。它回答「選哪一項」,不是「離起點多遠」。
來源:NVM Command Set 1.3 §4.1.6.4 · NVM Command Set 1.3 §4.1.5.1 · NVM Command Set 1.3 §4.1.5.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6.4, Figure 134, 文件頁 112-113, PDF 頁 112-113

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.1, Figure 123, 文件頁 85-87, PDF 頁 85-87

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.3, Figure 127, 文件頁 97-101, PDF 頁 97-101

NVM Figure 123 · Identify - Identify Namespace Data Structure, NVM Command Set

一句話重點

NVM123-1Identify Namespace 同時描述容量、格式與資料操作能力。

來源:NVM Command Set 1.3 §4.1.5.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.1, Figure 123, 文件頁 85-87, PDF 頁 85-87

用例子讀懂

NVM123-2NSZE=1000、NCAP=800、NUSE=600 分別表示可定址、最多可配置與目前已配置;換算 bytes 還要讀使用中的 LBA 格式。

先選描述子,再用 bytes 比較粒度

06.04.粒度清單回答特定格式偏好的配置步幅。NGA.GDM 決定格式到描述子的對應,ND 決定有效數量,NSG 與 NCG 才提供 size、capacity 的 byte 粒度。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
NGA.GDM/ND/Format IndexGDM=0 時 descriptor 0 適用全部格式且 ND=0;GDM=1 時,描述子 index 對應同一 Format Index。ND 是數量減 1。GDM=1、ND=3 表示 4 個有效描述子;使用 Format Index 2 時讀 descriptor 2,而非挑最大的粒度。
LBAFEE/16 或 64 個描述子Host Behavior Support 的延伸格式宣告決定最多回報 16 或 64 個粒度描述子;清單後方未用項目不代表更多有效格式。即使傳輸 buffer 足夠長,也不能越過 ND 所界定的有效項目使用數值。
NSG/NCG/0hNSG 用於 size、NCG 用於 capacity,單位都是 bytes;0h 表示未回報粒度。NSZE=1000、4 KiB/block 得到 4000 KiB,不是 1 MiB 的整數倍;此差異是配置效率提示,不是單獨拒絕有效 Create 的理由。
來源:NVM Command Set 1.3 §4.1.5.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.8, Figure 132, 文件頁 108, PDF 頁 108

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.8, Figure 133, 文件頁 108, PDF 頁 108

NVM Figure 132 · Namespace Granularity List

一句話重點

NVM132-1Namespace Granularity List 說明有哪些配置粒度描述子。

來源:NVM Command Set 1.3 §4.1.5.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.8, Figure 132, 文件頁 108, PDF 頁 108

用例子讀懂

NVM132-2先看模式與描述子數,再選符合情境的描述子;不能永遠只讀第一個 NSG/NCG。

NVM Figure 133 · Namespace Granularity Descriptor

一句話重點

NVM133-1NSG 與 NCG 分別提供 namespace 大小及容量的粒度提示。

來源:NVM Command Set 1.3 §4.1.5.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.8, Figure 133, 文件頁 108, PDF 頁 108

用例子讀懂

NVM133-2若 NSG=1 MiB、每個 block=4 KiB,NSZE=250 對應 1000 KiB,不是 1 MiB 的整數倍;這可能影響配置效率,但不能單憑未遵循提示就否決其他方面合法的 Create。

建立資料物件與建立存取關係

06.05.Namespace Management 管理物件是否存在,Namespace Attachment 管理控制器能否存取。兩種命令各有 SEL,其編碼必須放在各自命令內解讀。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
Management SEL/CSI/DPTRSEL 選 Create、Delete 或 Restore;Create 的 CSI 決定建立資料格式,DPTR 給資料位置。Management SEL=0h 是 Create,Attachment SEL=0h 是 Attach;數值相同但動作不同。
Create payload → NSZE/NCAP/FLBAS 等欄位Base 定義共同傳輸結構,所選命令集補上主機設定;命令集延伸部分須以更具體的定義解讀。使用 NVM Command Set 時,需把 Base Figure 448 與 NVM Figure 134 合讀,包含 Placement Handle List。
CQE DW0/NSIDCreate 成功回傳已建立 namespace 的識別碼,後續管理與 I/O 以它選物件。回傳 NSID=7 不能單獨證明任何控制器已附加到它。
Attachment DPTR/Controller List/NUMCIDS清單選控制器,NSID 選 namespace;SEL 決定附加或分離。NUMCIDS=2、列 A 與 B,表示對兩個控制器建立或移除關係。
DNCS/ANAGRPID/NVMSETID/ENDGIDDNCS 回報預設配置狀態;另外三者說明 namespace 的資源歸屬。Restore Default 後仍需重新 Identify 實際配置,不能只拿 DNCS=1 推論 namespace 的容量。
命令專屬錯誤格式、容量、識別碼及附加限制是不同檢查條件。Insufficient Capacity 與 NSID Unavailable 分別指出空間與識別碼資源問題,不應合併成同一種失敗。
來源:Base 2.4 §5.2.24 · Base 2.4 §5.2.25 · Base 2.4 §5.2.13.1.31 · Base 2.4 §5.2.14.2.3

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.24, Figure 442, 文件頁 445, PDF 頁 471

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.24, Figure 443, 文件頁 445, PDF 頁 471

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.24, Figure 444, 文件頁 445, PDF 頁 471

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, Figure 445, 文件頁 446, PDF 頁 472

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, Figure 446, 文件頁 446-447, PDF 頁 472-473

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, Figure 447, 文件頁 447, PDF 頁 473

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, Figure 448, 文件頁 447, PDF 頁 473

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, Figure 449, 文件頁 448, PDF 頁 474

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, Figure 450, 文件頁 448, PDF 頁 474

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.31, Figure 304, 文件頁 301-302, PDF 頁 327-328

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.3, Figure 346, 文件頁 391-394, PDF 頁 417-420

Base Figure 346 · Identify - I/O Command Set Independent Identify Namespace Data Structure

一句話重點

Base346-1與命令集無關的 Identify Namespace 提供共享、屬性與路徑相關資訊。

來源:Base 2.4 §5.2.14.2.3

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.3, Figure 346, 文件頁 391-394, PDF 頁 417-420

用例子讀懂

Base346-2先知道某 NSID 對應的 namespace 是否共享,再解釋控制器間的存取關係;LBA 資料大小則仍需命令集專屬格式資訊。

圖表組 02 · 建立 Namespace 所需的資料 · 8 張圖表

06.06.先從 Base 的資料外框進入 NVM 專用解讀,再對照相同 offset 的欄位。容量值按所選格式換算,Placement Handle List 按 FDP 啟用條件讀取;表中的不同列不是互相獨立且可以相加的 buffer。

offset
offset;從指定起點算出的位移。它回答「離起點多遠」,不等於 index。
回到本節的解釋與範例

NVM Figure 134 · Namespace Management - Host Specified Fields

一句話重點

NVM134-1Create payload 把主機選擇的容量、格式與放置參數交給控制器。

來源:NVM Command Set 1.3 §4.1.6.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6.4, Figure 134, 文件頁 112-113, PDF 頁 112-113

用例子讀懂

NVM134-2建立 1000 個 4 KiB blocks 的 namespace,先選對格式,再填 NSZE/NCAP;1000 代表 blocks,不是 1000 bytes。

Base Figure 445 · Namespace Management - Data Pointer

一句話重點

Base445-1Namespace Create 的 DPTR 指向 4096-byte 建立資料。

來源:Base 2.4 §5.2.25

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, Figure 445, 文件頁 446, PDF 頁 472

用例子讀懂

Base445-2主機想建立新 namespace,將容量和格式放在 payload,DPTR 只提供 payload 的位置;不是提供未來 namespace 的資料位址。

Base Figure 446 · Namespace Management - Command Dword 10

一句話重點

Base446-1CDW10 的 SEL 選擇建立、刪除或還原預設 namespace 配置。

CDW
CDW(Command Dword);命令中的 32-bit 欄位單位,例如 CDW10 的 10 是欄位 index,不是 byte offset。
來源:Base 2.4 §5.2.25

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, Figure 446, 文件頁 446-447, PDF 頁 472-473

用例子讀懂

Base446-2Create 用 SEL=0h,Delete 用 1h,Restore Default 用 2h;bits 3:0 放選擇值,bits 31:4 保留。Delete 的目標另由 NSID 指定。

Base Figure 447 · Namespace Management - Command Dword 11

一句話重點

Base447-1CDW11 的 CSI 只在 Create 時指定新 namespace 的命令集。

來源:Base 2.4 §5.2.25

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, Figure 447, 文件頁 447, PDF 頁 473

用例子讀懂

Base447-2建立 NVM namespace 時,SEL=0h 且 CSI=00h;CSI 位於 bits 31:24。Delete 或 Restore 時此欄位保留,不能用來指定 namespace 編號。

Base Figure 448 · Namespace Management - Data Structure for Create

一句話重點

Base448-1Create buffer 把命令集專屬資料、保留區與廠商區分開。

來源:Base 2.4 §5.2.25

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, Figure 448, 文件頁 447, PDF 頁 473

用例子讀懂

Base448-2bytes 0~511 依所選命令集解釋,512~1023 保留,1024~4095 為廠商區;不能把整個 buffer 都當成連續 LBA 資料。

確認目前啟用的命令集組合

06.07.CAP.CSS 回報控制器支援的命令集選擇方式,CC.CSS 是初始化時的選擇;Namespace Create 的 CSI 則指定這個新 namespace 的命令集。

CAP
Controller Capabilities,offset 00h 的 controller property,回報 queue、page size、timeout 與其他能力。
CC
Controller Configuration,host 用來選擇設定並啟用或停用 controller 的 property。
一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
CAP.CSS/CC.CSS/Create CSI先確認控制器支援與目前選擇,再決定建立資料如何解讀。Create 的 CSI=00h 指 NVM Command Set;不能把 CSI 的 00h 當成 CC.CSS 的通用寫值。
來源: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

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.08.CDW0 先選操作與資料指標格式;NSID 選操作對象;DPTR/MPTR 再指向資料。命令專屬 Dwords 的含義由 OPC 與命令集決定。

MPTR
Metadata Pointer,SQE 中指出獨立 metadata buffer 的欄位。
一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
OPC/FUSE/CIDOPC 選操作,FUSE 說明融合操作角色,CID 讓完成項目找回原命令。相同的 CDW10 數值放在 Read 與 Set Features 中,可能完全不是同一種意思。
PSDT → DPTR/MPTRPSDT 決定指標依 PRP 或 SGL 等格式解讀;指標內的數值不可在未選格式時直接當成長度。主機先選指標格式,再按該格式準備 buffer 描述,最後由命令語意判斷資料方向。
NSID/CDW2–CDW15NSID 與命令專屬欄位共同決定對象、範圍及選項。Create 的 DPTR 指向建立參數;它不是新 namespace 的實體儲存位址。
NDT/NDM/MDPTR廠商命令使用共同格式時,資料與 metadata 長度各有自己的欄位及指標。先看廠商命令格式支援宣告,再依長度定義換算,不能把欄位上限直接加 1 後存回同寬整數。
metadata
隨 logical block 儲存的附加資料,可包含資料保護資訊,也可有其他用途。
PSDT
PRP or SGL for Data Transfer,CDW0 中決定 DPTR 應按 PRP 或 SGL 解讀的欄位。
CID
Command Identifier,與 SQ identifier 合用以辨識 outstanding command。
NDM
Number of Dwords in Metadata Transfer,standard vendor-specific format 中的實際 metadata dword 數。
NDT
Number of Dwords in Data Transfer,standard vendor-specific format 中的實際 data dword 數。
SGL
Scatter Gather List,以 descriptor 與 segment 描述一段或多段 data buffer 的格式。
來源:Base 2.4 §4.1.1

來源:NVME-BASE-2.4, Rev. 2.4, §4.1.1, Figure 93, 文件頁 140-142, PDF 頁 166-168

Base Figure 93 · Common Command Format

一句話重點

Base93-1共通 SQE 固定各命令共用欄位的位置。

SQE
Submission Queue Entry,SQ 中的一筆命令資料結構。
來源:Base 2.4 §4.1.1

來源:NVME-BASE-2.4, Rev. 2.4, §4.1.1, Figure 93, 文件頁 140-142, PDF 頁 166-168

用例子讀懂

Base93-2同樣在 CDW10,Read 與管理命令可以有完全不同含義;先依 OPC 選命令,再查專屬欄位表。

NVM Figure 127 · NVM Command Set I/O Command Set Specific Identify Namespace Data Structure

一句話重點

NVM127-1命令集專屬 Identify Namespace 補充 PI、格式與效能屬性。

PI
Protection Information;用 Guard 與 tags 檢查資料及其關聯資訊的保護欄位。
來源:NVM Command Set 1.3 §4.1.5.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.3, Figure 127, 文件頁 97-101, PDF 頁 97-101

用例子讀懂

NVM127-2基礎 Identify 已知每個 block 有 4 KiB,仍要到這裡看 ELBAF/PI 能力,才能完成 tag 的配置。

ELBAF
Extended LBA Format;與相同 index 的 LBAF 配對,補充 PI 格式與 Storage Tag 大小。
圖表組 03 · 建立、連接與使用 Namespace · 6 張圖表

06.09.生命週期圖用實線物件表示 namespace,用連線表示 attachment。Create/Delete 改變物件,Attach/Detach 改變連線;Controller List 指定要改哪些控制器的關係。

回到本節的解釋與範例

Base Figure 442 · Namespace Attachment - Data Pointer

一句話重點

Base442-1Attachment 的 DPTR 指向要附加或分離的控制器清單。

來源:Base 2.4 §5.2.24

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.24, Figure 442, 文件頁 445, PDF 頁 471

用例子讀懂

Base442-2NSID=3、清單只有控制器 A,表示改變 namespace 3 與 A 的關係,不是建立新的 namespace 3。

Base Figure 443 · Namespace Attachment - Command Dword 10

一句話重點

Base443-1Attachment 的 SEL 選擇 Attach 或 Detach。

來源:Base 2.4 §5.2.24

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.24, Figure 443, 文件頁 445, PDF 頁 471

用例子讀懂

Base443-2SEL=0h 建立附加關係,SEL=1h 移除關係;Detach 不會像 Delete 一樣刪除 namespace 物件。

Base Figure 444 · Namespace Attachment - Command Specific Status Values

一句話重點

Base444-1Attachment 狀態描述附加關係、控制器清單與限制是否成立。

來源:Base 2.4 §5.2.24

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.24, Figure 444, 文件頁 445, PDF 頁 471

用例子讀懂

Base444-2「已經附加」與「清單中的控制器不合法」是不同問題;先看是哪一個關係或輸入不符合要求。

Base Figure 450 · Namespace Management - Completion Queue Entry Dword 0

一句話重點

Base450-1Create 成功後 CQE DW0 回傳控制器分配的新 NSID。

來源:Base 2.4 §5.2.25

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, Figure 450, 文件頁 448, PDF 頁 474

用例子讀懂

Base450-2回傳 NSID=3 表示 namespace 3 已建立,主機還要透過 Attachment 附加到控制器,才能依該控制器的存取路徑使用它。

清單選控制器,NSID 選儲存物件

06.10.Namespace Attachment 的資料指標連到 Controller List。清單中的識別碼與命令 NSID 各選一種對象,不能互換。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
NUMCIDS/Controller Identifier entriesNUMCIDS 是有效控制器項目數;每個 entry 保存一個 Controller Identifier。NSID=7、NUMCIDS=2、清單為 3 和 5:對 namespace 7 改變它與控制器 3、5 的關係。
4096-byte 結構/DPTR/page boundary傳輸緩衝區要符合 Attachment 對單頁資料的要求;不能只配置有效識別碼佔用的幾個 bytes 就忽略外框。主機先準備完整清單及其對齊,再把 DPTR 指向它,而不是把第一個控制器編號填進 DPTR。
來源:Base 2.4 §4.6.1

來源:NVME-BASE-2.4, Rev. 2.4, §4.6.1, Figure 139, 文件頁 172, PDF 頁 198

Base Figure 139 · Controller List Format

一句話重點

Base139-1Controller List 先列數量,再列要操作的控制器識別碼。

來源:Base 2.4 §4.6.1

來源:NVME-BASE-2.4, Rev. 2.4, §4.6.1, Figure 139, 文件頁 172, PDF 頁 198

用例子讀懂

Base139-2Attach 到控制器 A 與 B 時,清單含 2 個 Controller IDs;命令 NSID 指 namespace,清單則指定哪些控制器。

建立與還原前要先查的能力

06.11.這裡從 Identify Controller 取出 namespace 管理、預設配置還原及配置上限所需欄位。它們限制不同資源,不能拿一個數值代替全部能力檢查。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
OACS.NMS/RDNCS前者回報 Namespace Management/Attachment 支援,後者回報還原預設 namespace 配置的能力。能 Create 不代表任何控制器都能 Restore;還原前要另外確認 RDNCS。
MAXDNA/MAXCNAMAXDNA 限制 domain 內合計的 namespace 附加數;MAXCNA 限制單一 I/O controller 的附加數。兩個非零上限分別檢查。容量仍有剩餘但已達可附加數量上限時,不能只用剩餘 bytes 推論 Attach 會成功。
來源:Base 2.4 §5.2.14.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, Figure 338, 文件頁 340, 353, 365, 378, PDF 頁 366, 379, 391, 404

Base Figure 338 · Identify Controller Data Structure

一句話重點

Base338-1Identify Controller 先告知能力與限制,主機再決定可使用的操作。

來源:Base 2.4 §5.2.14.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, Figure 338, 文件頁 340, 353, 365, 378, PDF 頁 366, 379, 391, 404

用例子讀懂

Base338-2規格列出某選用命令時,先查相應支援欄位再發出要求;「命令有定義」與「這台控制器支援」是不同證據。

圖表組 04 · 刪除與恢復預設配置 · 3 張圖表

06.12.先區分單一 Delete、Delete all 與 Restore 的 SEL/NSID 用法,再沿流程核對剩餘 namespace 及支援能力。結果圖把 DNCS 和重新取得的 namespace 清單並列閱讀。

回到本節的解釋與範例

Base Figure 449 · Namespace Management - Command Specific Status Values

一句話重點

Base449-1Create 失敗原因可能是格式、容量或識別碼資源,而非同一種空間不足。

來源:Base 2.4 §5.2.25

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, Figure 449, 文件頁 448, PDF 頁 474

用例子讀懂

Base449-2還有未配置 bytes,卻已用完允許的 namespace 數量時,仍可能無法建立;NSID Unavailable 與 Insufficient Capacity 要分開。

Base Figure 304 · Manufacturer Default Configuration Status Log Page

一句話重點

Base304-1DNCS 表示目前 namespace 配置是否仍符合韌體預設配置。

來源:Base 2.4 §5.2.13.1.31

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.31, Figure 304, 文件頁 301-302, PDF 頁 327-328

用例子讀懂

Base304-2還原預設配置成功後 DNCS 設定;後續又建立或刪除 namespace 改變配置時,就不能仍把先前的預設狀態當成現在狀態。

先啟用通知,再刷新正確的清單

06.13.通知指出哪一類資訊可能已改變;它不取代 Identify。Base Figure 474 選通知類別,Figure 155 說明事件所代表的變動。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
NAN bit 8/Attached Namespace Attribute Changed啟用目前控制器的已附加 namespace 屬性變動通知。收到事件後,依變動查 active namespace 清單或相關屬性;不能直接由事件數量推算新 NSID。
ANSAN bit 19/Allocated Namespace Attribute Changed啟用已配置 namespace 屬性變動通知,關心的是配置集合。Create 與 Attach 改變不同集合:CNS 10h 查 allocated,CNS 02h 查 active,查錯清單可能漏掉剛建立但尚未附加的物件。
來源:Base 2.4 §5.2.2.1 · Base 2.4 §5.2.30.1.6

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 155, 文件頁 186, PDF 頁 212

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.6, Figure 474, 文件頁 466-468, PDF 頁 492-494

Base Figure 474 · Asynchronous Event Configuration - Command Dword 11

一句話重點

Base474-1Asynchronous Event Configuration 各 bit 選擇對應的通知類別。

來源:Base 2.4 §5.2.30.1.6

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.6, Figure 474, 文件頁 466-468, PDF 頁 492-494

用例子讀懂

Base474-2主機啟用本篇需要的通知時,只設定對應的事件 bit;一種通知已啟用,不會自動啟用其他通知。

圖表組 05 · Namespace 變更通知與重新辨識 · 1 張圖表

06.14.事件圖從 Create/Attach/Detach/Delete 出發,分別連到 Allocated 和 Active 清單。CNS 02h 和 CNS 10h 查不同集合;namespace 的獨立屬性查詢則補足清單沒有提供的內容。

回到本節的解釋與範例

Base Figure 155 · Asynchronous Event Information - Notice

一句話重點

Base155-1Notice 類事件告知主機有狀態或配置變更。

來源:Base 2.4 §5.2.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 155, 文件頁 186, PDF 頁 212

用例子讀懂

Base155-2收到 Firmware Activation Starting 通知,表示切換流程開始;要確認目前韌體仍須讀對應狀態及 log,而非把通知當完成證明。

06.15.create 前先以 NSID=FFFFFFFFh、CNS=00h 讀 common namespace capabilities;若支援,再用 CNS=16h 讀 Namespace Granularity,並確認可用 capacity。這三步完成後才建立 4096-byte create buffer。

來源:Base 2.4 §8.1.17.1

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17.1, 文件頁 661-662, PDF 頁 687-688

學完後想一想

1. Namespace Create 成功並回傳 NSID,為何還不能直接假設某 controller 可以對它做 I/O?

07.01.Create 建立 namespace;Attachment 決定哪些 controllers 可以存取。還要確認 attachment 與 Identify 所回報的可見性、格式及可用狀態。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, 8.1.17.1, 文件頁 446-448, 662, PDF 頁 472-474, 688

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.24, 文件頁 444-445, PDF 頁 470-471

2. Namespace granularity hint 與實際媒體配置的 rounding,為何不能混為一談?

07.02.Hint 協助 host 選擇合適的 size 或 capacity;rounding 描述實際配置可能耗用的資源。Hint 不是任意加上的命令合法性限制,容量規劃也不能只看 host 要求的數值。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17, 文件頁 661, PDF 頁 687

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.8, 文件頁 165, PDF 頁 165

3. Restore Default Namespace 是否表示恢復已刪除 namespace 的原有資料?

07.03.它處理預設 namespace 配置,不是資料復原命令。Namespace 的建立、刪除與預設配置流程,不能被當成保留或找回舊資料的保證。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25.1, 文件頁 447-448, PDF 頁 473-474

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, 8.1.17.1, 文件頁 446, 448, 662, PDF 頁 472, 474, 688