NVMe · Q1–328

NVM Express Base 2.4NVM Command Set 1.3NVMe over PCIe Transport 1.4

Q157–Q173

Namespace Management、Attachment 與保護

建立 namespace、讓 controller 能存取它,以及限制寫入,是三組獨立狀態。本冊用同一物件從建立到刪除的流程,把三者接起來。

每個問題都接著完整解說,依內容帶讀欄位、比較機制或追蹤流程。先看本冊總覽,再沿問題閱讀;必要條件與正常路徑直接顯示。所有數字案例均為教學假設;Status 以 SCT/SC 表示,代碼後的 h 代表十六進位。

SCT
Status Code Type,完成狀態代碼類型

存在、可見、可寫分別確認

Create 成功不會自動完成 Attachment。

問題主要證據下一步
是否存在Allocated List、Create CQE.NSID確認格式與容量
此路徑能否存取Active List、Controller List確認 Ready 與路徑狀態
是否能改資料NWPC、WPC、FID84h.WPS依狀態檢查命令限制
CQE
Completion Queue Entry,佇列中的完成項目
NSID
Namespace Identifier,邏輯儲存空間識別碼

舉例看懂:Allocated={1,2}、ControllerA.Active={1} 只表示 2 尚未在 A 的 active 清單。它可能仍存在,甚至已附加 B;不能直接判定 namespace2 被刪除。

來源:Base 2.4 §5.2.24–5.2.25, 8.1.17–8.1.17.2 · NVM Command Set 1.3 §4.1.5.8, 4.1.6, 5.8 · Base 2.4 §5.2.14.2.2–5.2.14.2.19, 5.2.14.3.1–5.2.14.3.2 · Base 2.4 §5.2.30.1.38, 8.1.18

先把觀念接起來

教學 1 · 容量要先換成所選格式的 blocks

NSZE 與 NCAP 不是 bytes。若每個 logical block 有 4096 bytes,NSZE=1000 對應 4000KiB 的邏輯位址空間。NCAP 描述可配置容量,而且不得大於 NSZE。先選 LBA Format,再計算欄位,不能把 4KiB 格式的數字原封套到 512-byte 格式。

LBA
Logical Block Address,邏輯區塊位址

教學 2 · Attach 改路徑,不複製資料

Shared namespace 經兩台 controller 存取時,兩條路徑通往同一份資料。Detach 其中一台,只移除那台的附加關係;另一台仍附加就可能繼續使用。驗證時要記下命令從哪台送入,再比較該台 Active List,不能只看 subsystem 中任一份清單。

教學 3 · 保護能力、進入許可、目前狀態要分開

NWPC 回答支援哪些保護,WPC 控制是否允許進入特定狀態,WPS 才是目前保護。清除控制位不等於解除已進入的保護。永久保護與直到 Power Cycle 的保護又有不同退出條件,所以不能只看到不可保存就要求 reset 後回到無保護。

需要時回顧本篇名詞
Controller / namespace
controller 接收命令並管理存取;namespace 是命令可指定的一份邏輯儲存空間。NVM subsystem 則包含 controller 與非揮發儲存資源,同一 subsystem 可以有多個 controller。
SQ / CQ / SQE / CQE
Submission Queue(SQ)是提交佇列,Completion Queue(CQ)是完成佇列;SQE 與 CQE 分別是其中的一筆命令及完成項目。QID 識別 queue,CID 區分同一 SQ 中尚未完成的命令,NSID 則識別 namespace。
Register / Identify / Feature / Log
Register 提供可存取的控制或狀態資訊;Identify 查詢物件的能力與屬性;Feature 用來讀取或變更工作設定;Log Page 回報特定種類的狀態或紀錄。FID、LID、CNS、CSI 則分別用來選擇 Feature、Log Page、Identify 資料結構及命令集。
index / offset / zero-based
index 指出清單中的第幾筆,通常從 0 起算;offset 表示與起點相隔多遠,解讀時必須確認單位。若數量欄位採 zero-based 編碼,實際數量等於欄位值加 1;但不是所有欄位看到 0 都要加 1。Dword 是 4 bytes,1 byte 是 8 bits。
Scope / reset / retention
scope 表示操作影響哪些物件;retention 表示狀態是否保留。清除 CC.EN 所觸發的 Controller Reset,是 Controller Level Reset(CLR)的一種。同屬 CLR 的不同觸發方式,仍可能採用不同的 Register 保留規則。

本冊題目

  1. Q157 · 如何確認 Namespace Management 與 Attachment 支援?
  2. Q158 · 建立 Namespace 時 NSZE、NCAP、Format 與 Thin Provisioning 如何設定?
  3. Q159 · Create Namespace 容量不足或參數不合法如何回應?
  4. Q160 · Create 後 Allocated Namespace List 如何更新?
  5. Q161 · Attach/Detach 如何指定 Controller?
  6. Q162 · Attach/Detach 後 Active List 與 Controller List 如何互相驗證?
  7. Q163 · 重複 Attach、非法 Controller 或未 Attach 就 Detach 如何回應?
  8. Q164 · Detach 時還有 Outstanding Command,應如何處理?
  9. Q165 · Detach 後再送 Namespace Command 應得到什麼?
  10. Q166 · 刪除不存在或仍 Attached 的 Namespace 如何處理?
  11. Q167 · Namespace 變更後哪些事件與 Log 應更新?
  12. Q168 · Changed Namespace List 超過容量如何表示?
  13. Q169 · Reset 或 Power Cycle 後 Namespace 配置與 Attachment 是否保留?
  14. Q170 · Private 與 Shared Namespace 有何差別?
  15. Q171 · 三種 Write Protection 模式與進入條件有何不同?
  16. Q172 · Write Protection 在 Reset 與 Power Cycle 後如何保留?
  17. Q173 · Write Protection 如何影響 Format、Sanitize 與 Namespace Management?

Q157 如何確認 Namespace Management 與 Attachment 支援?

跟著解說理解

Management 建立/刪除 namespace,Attachment 決定哪些 controller 能使用它。這兩項能力相關,但不完全等價。

1. 要查哪個對象、哪份資料

配置存在於 subsystem;active 存取則以各 controller 為準。

Identify.OACS.NMS=1 表示支援 Management,也必須支援 Attachment;NMS=0 的 controller 仍可能單獨支援 Attachment,應查 Command Effects。

Namespace Management Opcode0Dh,Attachment15h;前者 SEL 選建立/刪除/恢復,後者選 Attach/Detach。

2. 查詢順序與回覆判讀

先確認命令支援,再探索 namespace 與 controller 清單,最後建立需要的管理操作。

宣告 NMS 後,兩種命令及相關變更通知能力應符合要求;單獨 Attachment 支援不代表可建立新 namespace。

3. 證據不足或不一致時怎麼判斷

不支援命令用相應 Opcode 錯誤;支援命令但不支援 Restore Default 操作用 Invalid Field,不能把整個 Management 判成不支援。

交叉比對 OACS、Effects.CSUPP 及合法操作,不只看一個位元。

先確認是否誤把 NMS=0 解成 Attachment 一定不支援。

來源:Base 2.4 §5.2.13.1.6 · Base 2.4 §5.2.24–5.2.25, 8.1.17–8.1.17.2 · Base 2.4 §5.2.14.2.1 · Base 2.4 §5.2.14.2.2–5.2.14.2.19, 5.2.14.3.1–5.2.14.3.2 · Base 2.4 §5.2.13.1.14.2.6 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q158 建立 Namespace 時 NSZE、NCAP、Format 與 Thin Provisioning 如何設定?

跟著解說理解

NSZE 決定可定址範圍,NCAP 決定可配置的 logical blocks;兩者都使用選定格式的 block 單位,不是 bytes。

1. 先確認資料的來源與範圍

建立新 namespace 會消耗其 NVM Set/Endurance Group 的容量,但尚未附加任何 controller。

查共同 namespace 能力、格式清單、thin provisioning 支援與未配置容量;有 granularity 資訊時一併使用。

2. 欄位、單位與判讀例子

填 NSZE、NCAP、FLBAS、DPS、NMIC 及需要的資源 IDs。NCAP 不得大於 NSZE;使用小於 NSZE 的 NCAP 需要相應 thin provisioning 支援。

先選格式再換算 blocks。假設 1000 個 4KiB blocks,就是 4000KiB 使用者容量;實際 NVM allocation 可能因配置單位而更大。

Create 成功 CQE.DW0 回 NSID,並以指定屬性格式化;再查 Identify 確認,之後才 Attach。

CQE
Completion Queue Entry,佇列中的完成項目

3. 判讀時要保留的條件

非法格式回 Invalid Format;不支援 thin provisioning 有專屬狀態;資源不足另分容量與 NSID 上限。

比較要求的 blocks/格式與回報的 NSZE/NCAP/NVMCAP,不要求它們有相同單位或數值。

來源:NVM Command Set 1.3 §4.1.5.8, 4.1.6, 5.8 · NVM Command Set 1.3 §4.1.5.1–4.1.5.4 · Base 2.4 §5.2.24–5.2.25, 8.1.17–8.1.17.2 · Base 2.4 §5.2.14.2.1 · Base 2.4 §5.2.14.2.2–5.2.14.2.19, 5.2.14.3.1–5.2.14.3.2 · Base 2.4 §5.2.13.1.14.2.6 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q159 Create Namespace 容量不足或參數不合法如何回應?

跟著解說理解

失敗原因可以是容量、識別碼數量、格式或資源歸屬。分清它們才知道縮小容量、刪除其他 namespace 或改格式是否有用。

1. 先區分是哪一種失敗

容量依所選資源池判斷,不能把其他 Endurance Group 的剩餘空間直接當成可用。

1/15h 是 Namespace Insufficient Capacity,1/16h 是 Namespace Identifier Unavailable,1/0Ah 是 Invalid Format,1/1Bh 是 Thin Provisioning Not Supported。

沒有遵循 granularity 的偏好倍數可能浪費 allocation capacity,但不應只因未符合偏好就拒絕原本合法的 Create。

2. 用哪些資料確認原因

讀未配置容量、NN/MNAN 的適用定義、格式與 granularity,以及 NVM Set/EG 清單。

以合法基準逐項改參數;容量不足時讀 Error Information.CSINFO 的所需未配置容量 bytes,再決定修正。

3. 結果與後續驗證

拒絕後不能把任意 DW0 當成新 NSID,只有成功 Create 的 DW0 才具有該意義。

比對要求量與真正配置量,區分「格式不允許」與「可用容量不足」。

先查失敗 Status 的完整 SCT/SC,再決定是哪個資源不足。

SCT
Status Code Type,完成狀態代碼類型

來源:NVM Command Set 1.3 §4.1.5.8, 4.1.6, 5.8 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.24–5.2.25, 8.1.17–8.1.17.2 · Base 2.4 §5.2.14.2.1 · Base 2.4 §5.2.14.2.2–5.2.14.2.19, 5.2.14.3.1–5.2.14.3.2 · Base 2.4 §5.2.13.1.14.2.6 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q160 Create 後 Allocated Namespace List 如何更新?

跟著解說理解

Allocated 表示 namespace 已存在;Active 表示可經某 controller 存取。Create 只先建立前者。

1. 操作前先準備什麼

Allocated List 描述適用 inventory;各 controller 的 Active List 可不同。

使用 Identify CNS10h 與新 NSID 的 Identify;Active List CNS02h 用於後續 Attach 驗證。

Create CQE.DW0 回傳 controller 選出的 NSID,不是 Host 預先保證的連號。

2. 先後順序與完成條件

保存建立前清單,等待成功後重新列舉,確認新 ID 出現並可讀其已配置屬性。

新 ID 應在 Allocated List,但不應因 Create 自動出現在任何 controller 的 Active List。

3. 未符合條件時如何處理

清單太長時依 NSID 起點繼續讀;只讀第一頁就說新 ID 不存在可能是 Host 錯誤。

對回 DW0、Allocated List 與 namespace 屬性,避免只用數量增加判斷是哪個物件。

來源:Base 2.4 §3.2.1 · Base 2.4 §5.2.24–5.2.25, 8.1.17–8.1.17.2 · Base 2.4 §5.2.14.2.1 · Base 2.4 §5.2.14.2.2–5.2.14.2.19, 5.2.14.3.1–5.2.14.3.2 · Base 2.4 §5.2.13.1.14.2.6 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q161 Attach/Detach 如何指定 Controller?

跟著解說理解

Attachment 改變存取關係,不建立或刪除 namespace,也不改它的使用者資料格式。

1. 操作前先準備什麼

命令 NSID 指目標 namespace,資料中的 Controller List 指要變更的 controllers。

確認目標已配置、共享能力、controller IDs、Command Set 支援與 MAXCNA/MAXDNA 限制。

SEL0=Attach,1=Detach;傳輸 4096-byte Controller List。List 的 entries 是 CNTLID,不是 NSID。

2. 先後順序與完成條件

建立合法清單,提交並等待完成,再到每個目標 controller 查 Active List 與 namespace 的 Controller List。

成功後只有所列關係變更,namespace 仍在 Allocated inventory 中。

3. 未符合條件時如何處理

Controller List 有非法或 Administrative controller 時回 Controller List Invalid;命令集不支援與未啟用各有不同狀態。

失敗時 Error Information.CSINFO 指第一個失敗 entry 的 byte offset;遇錯後不再處理後續 entries,不能假設整個清單全部回復。

來源:Base 2.4 §5.2.24–5.2.25, 8.1.17–8.1.17.2 · Base 2.4 §5.2.14.2.1 · Base 2.4 §5.2.14.2.2–5.2.14.2.19, 5.2.14.3.1–5.2.14.3.2 · Base 2.4 §5.2.13.1.14.2.6 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q162 Attach/Detach 後 Active List 與 Controller List 如何互相驗證?

跟著解說理解

同一關係可以從 controller 看可用 namespaces,也可以從 namespace 看附加 controllers;雙向核對能找出只更新一邊的錯誤。

1. 操作前先準備什麼

每個 controller 的 Active List 只代表自己,不能當成 subsystem 全部 namespace。

用 CNS02h 與 CNS12h 等適用 Identify 清單,並核對 controller 身分。

保存 NSID、CNTLID、查詢起點與回傳 entries,避免分頁時漏掉目標。

2. 先後順序與完成條件

Attach 成功後兩個方向都應呈現關係;Detach 成功後兩個方向都不再呈現該附加關係。

例如 namespace7 只附加 A,Attach 到 B 後,B 的 Active 含 7,namespace7 的 Controller List 含 A、B。

3. 未符合條件時如何處理

查詢期間若另有管理操作,清單可能代表不同時間;先停止變更或建立穩定快照,再判矛盾。

Allocated List 在單純 Attach/Detach 前後仍應保留該 namespace,與 active 關係分開比較。

來源:Base 2.4 §5.2.14.2.2–5.2.14.2.19, 5.2.14.3.1–5.2.14.3.2 · Base 2.4 §5.2.24–5.2.25, 8.1.17–8.1.17.2 · Base 2.4 §5.2.14.2.1 · Base 2.4 §5.2.13.1.14.2.6 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q163 重複 Attach、非法 Controller 或未 Attach 就 Detach 如何回應?

跟著解說理解

這些錯誤描述關係與清單,不代表 namespace 資料必定損壞。

1. 先區分是哪一種失敗

以每個 Controller List entry 當時的附加狀態判斷,可能在前幾項成功後才遇到錯誤。

Already Attached=1/18h,Private=1/19h,Not Attached=1/1Ah,Controller List Invalid=1/1Ch。

Private namespace 已附加一個 controller,附加第二個會因 Private 限制被拒絕;不是因容量不足。

2. 用哪些資料確認原因

讀目前 Controller List、NMIC 共享設定及目標 controller 能力。

一次測一種關係錯誤,收到完成後讀回全部受測 entries,確認第一個錯誤位置與停止處理行為。

3. 結果與後續驗證

合法操作改變指定關係;負向操作回相應狀態,且不處理第一個失敗 entry 之後的 entries。

把 Status、CSINFO offset 與前後清單一起驗證,避免只看整筆命令失敗就認定無任何變更。

先查 namespace 是否為 private,以及是否早已附加。

來源:Base 2.4 §4.2.3 · Base 2.4 §5.2.24–5.2.25, 8.1.17–8.1.17.2 · Base 2.4 §5.2.14.2.1 · Base 2.4 §5.2.14.2.2–5.2.14.2.19, 5.2.14.3.1–5.2.14.3.2 · Base 2.4 §5.2.13.1.14.2.6 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q164 Detach 時還有 Outstanding Command,應如何處理?

跟著解說理解

Detach 會讓該 controller 對目標 NSID 的存取關係失效。Host 先停止新 I/O 並排空較容易管理,但韌體仍須正確處理未完成命令。

1. 機制與適用範圍

只改變指定 controller 與 namespace 的關係;其他仍附加的 controller 不因此自動 Detach。

Base8.1.17 將已提交但未完成及後續提交的目標命令,按 inactive NSID 規則處理;再套用各命令明文例外。

2. 用操作與結果理解

保存 outstanding SQID/CID、目標 NSID 與 Attachment 完成時間。

SQID
Submission Queue Identifier,提交佇列識別碼
CID
Command Identifier,同一提交佇列內的命令識別碼

停止新提交,完成需要的資料同步,等待可排空的工作,再 Detach;若刻意測競爭,完整保存命令與狀態轉移順序。

Detach 成功後關係消失;先前已完成的命令不重複完成,未完成者按 inactive 規則處理。

3. 容易誤判的地方

通用 inactive 規則是 Invalid Field,但命令可另有明確例外;不能把所有命令強制寫成同一碼。

確認沒有把已完成的 I/O 誤歸到 Detach 後,也沒有在完成前回收仍可能使用的 buffer。

來源:Base 2.4 §4.1.1 · Base 2.4 §3.2.1 · Base 2.4 §5.2.24–5.2.25, 8.1.17–8.1.17.2 · Base 2.4 §5.2.14.2.1 · Base 2.4 §5.2.14.2.2–5.2.14.2.19, 5.2.14.3.1–5.2.14.3.2 · Base 2.4 §5.2.13.1.14.2.6 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q165 Detach 後再送 Namespace Command 應得到什麼?

跟著解說理解

Detach 使 NSID 在該 controller 成為 inactive,不是從 subsystem 刪除。這個區別決定後續命令與查詢怎麼處理。

1. 先區分是哪一種失敗

同一 NSID 仍可在另一個已附加 controller 上 active,因此路徑是判斷的一部分。

對使用 NSID 的命令,Figure93 指定 inactive 預設 Invalid Field;Identify 管理查詢等有自身 selector 規則。

不能把所有成功的 Identify 都當成「Detach 沒生效」,也不能把 inactive 與非法 NSID 的 Status 混用。

2. 用哪些資料確認原因

查該 controller Active List、Allocated List 與 namespace Controller List。

等 Detach 完成,再從已 Detach 的 controller 提交目標命令;對比仍 attached 的 controller,保持其他條件相同。

3. 結果與後續驗證

正常資料存取不能因 namespace 仍存在就繼續視為 active;允許查已配置物件的管理命令則仍可合法工作。

用具體 Opcode/CNS 的規則比對,而不是只看 NSID 相同。

CNS
Controller or Namespace Structure,選擇Identify回傳結構

先確認測試送的是 I/O,還是允許查詢 inactive 物件的 Admin 命令。

來源:Base 2.4 §4.1.1 · Base 2.4 §3.2.1 · Base 2.4 §5.2.24–5.2.25, 8.1.17–8.1.17.2 · Base 2.4 §5.2.14.2.1 · Base 2.4 §5.2.14.2.2–5.2.14.2.19, 5.2.14.3.1–5.2.14.3.2 · Base 2.4 §5.2.13.1.14.2.6 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q166 刪除不存在或仍 Attached 的 Namespace 如何處理?

跟著解說理解

需要修正「Attached 就一定禁止刪除」的前提:規範建議先 Detach,但 Delete 也會將 namespace 從所有 controllers 移除。

1. 先區分是哪一種失敗

Delete 移除 subsystem 中的物件,不只是某個 controller 的存取關係。

Management SEL=1 為 Delete,NSID 選既有物件;FFFFFFFFh 表示刪除全部,沒有任何 valid namespace 時此全刪操作仍成功。

特定不存在 ID 依 NSID 類型與命令規則拒絕;不能套用全刪空集合成功的例外。保護或正在清除另有相應拒絕條件。

2. 用哪些資料確認原因

確認 Allocated List、保護狀態、背景操作與影響範圍,再選單一或全部刪除。

停止相關 I/O,建議先從所有 controllers Detach,再 Delete,最後讀回 Allocated/Active lists。

3. 結果與後續驗證

成功後 namespace 不再存在,原附加關係也消失;原 NSID 可能以後重用,不能只用數字當永久身分。

對比刪除前後完整 inventory 與識別資訊,確認沒有僅 Detach 而未 Delete。

先查是否用了 FFFFFFFFh,這會改變空集合的完成語意。

來源:Base 2.4 §4.1.1 · Base 2.4 §3.2.1 · Base 2.4 §5.2.30.1.38, 8.1.18 · Base 2.4 §5.2.24–5.2.25, 8.1.17–8.1.17.2 · Base 2.4 §5.2.14.2.1 · Base 2.4 §5.2.14.2.2–5.2.14.2.19, 5.2.14.3.1–5.2.14.3.2 · Base 2.4 §5.2.13.1.14.2.6 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q167 Namespace 變更後哪些事件與 Log 應更新?

跟著解說理解

Host 收到變更通知後,先用變更清單找到需要更新的 namespace,再以 Identify 讀回目前配置,更新快取。

1. 事件何時成立、由誰觀察

Create/Delete 改 inventory;Attach/Detach 改特定 controller 的 Active List。

確認 Attached/Allocated notices 的支援與 AEC,以及 AER 是否可用。

LID04h 列 attached namespace 變更,1Ch 列 allocated 變更;Identify 再查目前狀態,PEL Change Namespace 記錄其定義的管理事件。

2. 通知、讀取與確認的關係

管理命令完成後處理各受影響 controller 的通知,保存變更清單,再重新 Identify。

Admin Delete 的提交端不回報該次刪除通知;其他符合條件的 controller 仍回報。不能要求每端通知數必須一樣。

3. 沒有通知或紀錄時怎麼判斷

未啟用通知、事件已遮蔽或已被讀取確認,都會影響可見 AER;不是只用「命令成功卻沒 AER」判錯。

將命令來源、受影響清單與各 controller AEC 放在同一張時間表,避免混淆觀察端。

先查自己是不是處理 Admin Delete 的那個 controller。

4. 分開核對事件通知與 Log 紀錄

Create/Delete 影響 Allocated List,Attach/Detach 影響指定 controller 的 Active List。 完整條件見本冊說明

使用 Identify 的 Allocated、Active 與 Controller List 確認目前配置;Changed Attached Namespace List04h 與 Changed Allocated Namespace List1Ch 指出曾變更的 NSID,不能代替完整現況。 完整條件見本冊說明

支援 PEL 時,Namespace Management 對應的 Change Namespace Event06h 記錄建立/刪除等規定事件。 完整條件見本冊說明

來源:Base 2.4 §5.2.2 (PCIe-applicable events) · Base 2.4 §5.2.30.1.6 · Base 2.4 §5.2.13.1.5 · Base 2.4 §5.2.13.1.14.2.6 · Base 2.4 §5.2.24–5.2.25, 8.1.17–8.1.17.2 · Base 2.4 §5.2.14.2.1 · Base 2.4 §5.2.14.2.2–5.2.14.2.19, 5.2.14.3.1–5.2.14.3.2 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q168 Changed Namespace List 超過容量如何表示?

跟著解說理解

變更清單容量有限,溢位標記要求 Host 重新探索全部相關 namespace,而不是只相信不完整清單。

1. 先確認資料的來源與範圍

LID04h 針對該 controller 的 attached namespace 變更,不是整個 subsystem 的通用變更歷史。

查看 LID04h 的固定 1024 個 NSID entry 與讀取/清除規則。

2. 欄位、單位與判讀例子

超過 1024 個變更 namespace 時,第一筆 FFFFFFFFh,其餘清零,表示不能逐筆列全。

先判斷第一筆是否為溢位標記;若是,重新列舉並讀取需要的 namespace 屬性,不把 FFFFFFFFh 當實際 namespace。

完整重掃能恢復現況;不要求 controller 透過多讀幾次 04h 分頁吐出被省略的全部歷史。

3. 判讀時要保留的條件

Get Log 傳輸截短與清單自身溢位不同;短 buffer 不應被誤判成沒有其他變更。

比較最終 Identify 現況與重掃後 Host 快取,確認溢位後仍能正確同步。

來源:Base 2.4 §5.2.13.1.5 · Base 2.4 §5.2.13–5.2.13.1.1 · Base 2.4 §5.2.24–5.2.25, 8.1.17–8.1.17.2 · Base 2.4 §5.2.14.2.1 · Base 2.4 §5.2.14.2.2–5.2.14.2.19, 5.2.14.3.1–5.2.14.3.2 · Base 2.4 §5.2.13.1.14.2.6 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q169 Reset 或 Power Cycle 後 Namespace 配置與 Attachment 是否保留?

跟著解說理解

namespace 是持久配置,不隨 queue 重建而重新建立。將這兩層分開,才能避免恢復時誤刪或重複建立物件。

1. 先界定觸發方式與影響對象

已完成的配置與 attachment 保留;未完成命令則需恢復後查實際狀態。

保存 namespace 全球識別、NSID、格式與附加清單,恢復後重新 Identify。

2. 哪些狀態改變,恢復後怎麼處理

Controller Reset、Subsystem Reset 與 Power Cycle 不等於 Restore Default Namespace Configuration;後者是明確管理操作。

恢復 Admin Queue 後列舉既有 namespace,確認附加關係,再建 I/O queues,而不是無條件重新 Create。

原合法配置可恢復存取;Secondary Controller Offline 操作也不應清除 attachment。

3. 重設或斷電時,要確認什麼

觸發方式這項操作或狀態會如何變化
Controller Reset 後是否保留或繼續?已完成的 namespace 配置與 Attach/Detach 跨 Reset 保留;重設的是命令通道,不是自動刪除 namespace。若 Reset 前未收到完成,恢復後須查清單確認結果,不能假設整筆操作必定回復。
NVM Subsystem Reset 後是否保留或繼續?Subsystem Reset 不等於 Restore Default Namespace Configuration。恢復後重新探索原 namespace 與附加關係,再建立 I/O queues;多 domain 的實際 Reset 範圍另行確認。
Power Cycle 後是否保留或繼續?Power Cycle 後,已完成的 namespace 配置與附加關係仍需保留。Write Protect 與 Permanent Write Protect 保留;Write Protect Until Power Cycle 則在實際 power cycle 轉回未保護,不能把這個例外套到全部配置。

4. 如何驗證保留或恢復結果

若 Reset 前命令結果未知,清單可顯示已成功的變更;不能只因未收到 CQE 就假設沒有執行。

用持久身分與屬性比對,避免 NSID 重用造成誤配。

先確認 Host 恢復程序有沒有自己做 Restore 或 Delete。

來源:Base 2.4 §3.7.1–3.7.4 · Base 2.4 §3.2.1 · Base 2.4 §5.2.24–5.2.25, 8.1.17–8.1.17.2 · Base 2.4 §5.2.14.2.1 · Base 2.4 §5.2.14.2.2–5.2.14.2.19, 5.2.14.3.1–5.2.14.3.2 · Base 2.4 §5.2.13.1.14.2.6 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q170 Private 與 Shared Namespace 有何差別?

跟著解說理解

Private 限制同時附加一個 controller;Shared 可允許多 controller 附加。這是存取拓樸,不是資料加密或讀寫權限名稱。

1. 差別在哪裡

多條路徑可指向同一份 namespace 資料,不能把每條路徑當成獨立副本。

Create 時指定 NMIC,Attachment 用 Controller List 操作關係;Shared 仍受 MAXCNA/MAXDNA 等限制。

2. 如何選擇與確認

看 Identify Namespace.NMIC 共享能力與實際 Controller List。

先配置共享屬性,再附加需要的 controllers,逐端查 Active List。

Shared 可由多端存取;Private 從 A Detach 後可再 Attach 到 B,但不能同時保有兩端關係。

3. 比較時要保留的條件

Private 已附加另一 controller 時,新增附加回 Namespace Is Private。

檢查身分、資料與附加關係,避免把多路徑誤算成多份容量。

來源:NVM Command Set 1.3 §4.1.5.1–4.1.5.4 · Base 2.4 §5.2.24–5.2.25, 8.1.17–8.1.17.2 · Base 2.4 §5.2.14.2.1 · Base 2.4 §5.2.14.2.2–5.2.14.2.19, 5.2.14.3.1–5.2.14.3.2 · Base 2.4 §5.2.13.1.14.2.6 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q171 三種 Write Protection 模式與進入條件有何不同?

跟著解說理解

保護模式決定能否解除以及何時解除;選 Permanent 前必須理解它不是可隨時切回的普通開關。

1. 差別在哪裡

WPS 屬於 namespace,所有附加 controllers 共同執行。

WPS0=未保護,1=Write Protect,2=Until Power Cycle,3=Permanent。一般 Write Protect 可用合法 Set 解除,後兩者不能靠 Set 任意改變。

2. 如何選擇與確認

NWPC 宣告支援模式;RPMB 的 WPC 控制進入 Until Power Cycle 或 Permanent 是否被允許;FID84h 回報實際 WPS。

查能力與進入許可,設定 WPS,等待完成,再 Get 確認。轉入受保護狀態前,controller 須提交該 namespace 的 volatile cache data/metadata 到非揮發媒體。

WPS 與實際禁止改寫的行為一致;Read 仍可依正常條件處理。

3. 比較時要保留的條件

進入未允許狀態或改變 Until Power Cycle/Permanent 回 Feature Not Changeable;multi-domain 不得使用 Until Power Cycle。

WPC 只是進入許可,不是 WPS;把控制位清零不會自動解除既有保護。

來源:Base 2.4 §5.2.30.1.38, 8.1.18 · Base 2.4 §5.2.24–5.2.25, 8.1.17–8.1.17.2 · Base 2.4 §5.2.14.2.1 · Base 2.4 §5.2.14.2.2–5.2.14.2.19, 5.2.14.3.1–5.2.14.3.2 · Base 2.4 §5.2.13.1.14.2.6 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q172 Write Protection 在 Reset 與 Power Cycle 後如何保留?

跟著解說理解

FID84h 不可保存,不代表保護不持續。其狀態有明確持久性,不能套用一般 Saved Feature 的直覺。

1. 先界定觸發方式與影響對象

保留規則跟隨 namespace,不因 controller 更換而解除。

Get FID84h 讀 Current WPS,並記錄實際 Reset 來源及是否有 power cycle。

2. 哪些狀態改變,恢復後怎麼處理

WPS1/3 跨 Reset 與 power cycle 保留;WPS2 跨非 power-cycle 的 CLR 保留,但 power cycle 回 WPS0。

建立基準狀態,執行指定事件,恢復後 Get 並驗證寫入限制;不要把 CC.EN 清零當成拔電。

普通 Controller Reset 後 WPS2 仍受保護,是正確結果;真正 power cycle 後則解除。

3. 如何驗證保留或恢復結果

本 Feature 沒有 Default 值,Get SEL=Default 回 Invalid Field;不能要求一個虛構 Default 來解釋恢復。

同時比對讀回 WPS 與 Write/Format 限制,不只確認 Set 曾成功。

先查測試使用的 Reset 是否真的包含電源循環。

來源:Base 2.4 §5.2.30.1.38, 8.1.18 · Base 2.4 §4.4 · Base 2.4 §5.2.24–5.2.25, 8.1.17–8.1.17.2 · Base 2.4 §5.2.14.2.1 · Base 2.4 §5.2.14.2.2–5.2.14.2.19, 5.2.14.3.1–5.2.14.3.2 · Base 2.4 §5.2.13.1.14.2.6 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q173 Write Protection 如何影響 Format、Sanitize 與 Namespace Management?

跟著解說理解

保護不只阻止 Write;任何會修改受保護 namespace 的操作,都要依命令互動規則檢查,包含未直接指定它的廣範圍操作。

1. 機制與適用範圍

共享 namespace 在所有附加 controller 受保護;Format 或 Subsystem Sanitize 的 scope 若涵蓋它,也不能繞過。

Read/Compare/Verify 等通常允許;Flush 成功且無效果,因進入保護時已提交 cache。Namespace Attachment 允許,但 Delete、Format 或 Sanitize 修改受保護物件會被限制。

2. 用操作與結果理解

查 WPS、命令 scope 與 Figure737 允許清單;不能只檢查 Opcode 名稱。

先算完整影響範圍,再檢查所有受影響 namespace 的 WPS,最後套用命令的附加條件。

允許查詢可正常完成;禁止修改應被拒絕且資料維持受保護,不因換 controller 就成功。

3. 容易誤判的地方

符合禁止修改條件時回 Namespace is Write Protected;不能因 Sanitize 通常忽略 SMART 唯讀警告,就忽略 Host 設定的 namespace 保護。

以同一受保護資料測直接 Write 與跨 namespace 範圍操作,確認 scope 判斷一致。

來源:Base 2.4 §5.2.30.1.38, 8.1.18 · Base 2.4 §5.1.1, 5.2.11 · Base 2.4 §5.2.26–5.2.27 · Base 2.4 §5.2.24–5.2.25, 8.1.17–8.1.17.2 · Base 2.4 §5.2.14.2.1 · Base 2.4 §5.2.14.2.2–5.2.14.2.19, 5.2.14.3.1–5.2.14.3.2 · Base 2.4 §5.2.13.1.14.2.6 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

共用規則:各題連到的完整解釋

這些規則在本冊只完整說明一次。返回剛才的題目可用瀏覽器「上一頁」;特定命令或 Feature 的明文例外優先。

本主題的共用條件 · 是否產生 Asynchronous Event?

Create/Delete 影響 Allocated List,Attach/Detach 影響指定 controller 的 Active List。依各 controller 的事件支援與 AEC 回報變更;Admin SQ 收到 Delete 的 controller 不回報該次刪除通知,其他受影響且啟用通知的 controller 仍須依規則回報。

SQ
Submission Queue,提交佇列

本主題的共用條件 · 是否更新 Error Information Log 或其他 Log?

使用 Identify 的 Allocated、Active 與 Controller List 確認目前配置;Changed Attached Namespace List04h 與 Changed Allocated Namespace List1Ch 指出曾變更的 NSID,不能代替完整現況。失敗則依 More 與 Error Information 補充欄位處理。

本主題的共用條件 · 是否記錄於 Persistent Event Log?

支援 PEL 時,Namespace Management 對應的 Change Namespace Event06h 記錄建立/刪除等規定事件。Attach/Detach 不應直接當成 Create/Delete;Write Protection 則依該 Feature 是否支援 Set Feature Event 記錄。

原文定位與既有圖表判讀

Base 的文件頁碼等於 PDF 頁碼減 26;NVM 與 PCIe 兩份規格的文件頁碼則與 PDF 頁碼相同。以下依提供的 PDF 本文列出章節、頁碼及 Figure 編號。若同一頁包含其他主題,只引用本題需要的定義,不納入 Fabrics 或 PCIe Link、封包內容。

  • Base 2.4 · §3.2.1
    文件頁 78–81 · PDF 104–107
  • Base 2.4 · §3.7.1–3.7.4
    文件頁 120–124 · PDF 146–150
  • Base 2.4 · §4.1.1
    文件頁 139–142 · PDF 165–168 · Figure 92–93
  • Base 2.4 · §4.2.3
    文件頁 145–155 · PDF 171–181 · Figure 101–105
  • Base 2.4 · §4.4
    文件頁 166–169 · PDF 192–195 · Figure 126–127
  • Base 2.4 · §5.1.1, 5.2.11
    文件頁 178–179, 206–209 · PDF 204–205, 232–235 · Figure 144, 194–196
  • Base 2.4 · §5.2.2
    文件頁 183–190 · PDF 209–216 · Figure 150–156
  • Base 2.4 · §5.2.2 (PCIe-applicable events)
    文件頁 183–191 · PDF 209–217 · Figure 150–160
  • Base 2.4 · §5.2.13–5.2.13.1.1
    文件頁 212–218 · PDF 238–244 · Figure 203–211
  • Base 2.4 · §5.2.13.1.2
    文件頁 218–220 · PDF 244–246 · Figure 212
  • Base 2.4 · §5.2.13.1.5
    文件頁 226 · PDF 252
  • Base 2.4 · §5.2.13.1.6
    文件頁 226–229 · PDF 252–255 · Figure 216–217
  • Base 2.4 · §5.2.13.1.14 (header, reset, hardware, Set Feature events)
    文件頁 244–256, 258, 262–264 · PDF 270–282, 284, 288–290 · Figure 232–244, 246, 252–253
  • Base 2.4 · §5.2.13.1.14.2.6
    文件頁 258–259 · PDF 284–285 · Figure 247
  • Base 2.4 · §5.2.14.2.1
    文件頁 340–387 · PDF 366–413 · Figure 338–341
  • Base 2.4 · §5.2.14.2.2–5.2.14.2.19, 5.2.14.3.1–5.2.14.3.2
    文件頁 387–399, 402–404 · PDF 413–425, 428–430 · Figure 342–355, 360–362
  • Base 2.4 · §5.2.24–5.2.25, 8.1.17–8.1.17.2
    文件頁 444–448, 660–663 · PDF 470–474, 686–689 · Figure 442–450
  • Base 2.4 · §5.2.26–5.2.27
    文件頁 448–454 · PDF 474–480 · Figure 451–455
  • Base 2.4 · §5.2.30.1.6
    文件頁 466–468 · PDF 492–494 · Figure 474
  • Base 2.4 · §5.2.30.1.38, 8.1.18
    文件頁 512, 664–666 · PDF 538, 690–692 · Figure 541, 735–737
  • NVM Command Set 1.3 · §4.1.5.1–4.1.5.4
    文件頁 84–107 · PDF 84–107 · Figure 123–130
  • NVM Command Set 1.3 · §4.1.5.8, 4.1.6, 5.8
    文件頁 108, 110–113, 162–163 · PDF 108, 110–113, 162–163 · Figure 132–134

需要看欄位圖時

以下連結可開啟對應的圖表教學,查閱欄位及判讀方式。每張圖保留固定的教學位置,方便之後反覆查詢。

使用的原始文件
  • NVM Express Base Specification · Revision 2.4 · 2026-07-31
    NVM-Express-Base-Specification-Revision-2.4-Ratified-2026.07.31.pdf
  • NVM Express NVM Command Set Specification · Revision 1.3 · 2026-07-31
    NVM-Express-NVM-Command-Set-Specification-Revision-1.3-Ratified-2026.07.31.pdf
  • NVM Express NVMe over PCIe Transport Specification · Revision 1.4 · 2026-07-31
    NVM-Express-NVMe-over-PCIe-Transport-Specification-Revision-1.4-Ratified-2026.07.31.pdf