NVMe 圖表判讀與情境練習 04 · I/O 命令與資料完整性

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

反覆查詢 · 欄位判讀 · 原文定位

NVMe 圖表判讀與情境練習 04 · I/O 命令與資料完整性

由命令的位址與數量走到 metadata、保護資訊和原子性。相同欄位寬度不代表相同計數方式,命令成功也不等於所有持久性與原子性保證都成立。

先跟著一個情境讀規格

以下回傳資料均為教學假設。先看需求與已知條件,再沿閱讀路線找到相關欄位,接著一起判讀結果。完整解說直接顯示,來源細節可另外展開。

練習 018 個 blocks 的寫入,斷電也一定不會寫一半嗎?

同事看到 AWUN=7,便宣稱一次寫 8 個 blocks 能抵抗斷電造成的部分更新。這個結論缺了什麼?

模擬回傳與已知條件

  • AWUN=7、AWUPF=1;NSFEAT.NSABP=0、MAM=0;目前 Write Atomicity Normal 的 DN=0。
  • 目標 LBA 資料大小 4096 bytes;這是單筆一般 Write,NLB=7。

這個情境要連起哪些規格圖表?

下面是閱讀規格的順序;實際操作的先後與等待條件,會在情境解說中另外交代。

  1. 先找原子性參數的關係

    先由 Single Atomicity Mode 的參數表分清正常與斷電情況,再看本例採用 controller 還是 namespace 的值。

    NVM Command Set 1.3 · Figure 4 NVM Command Set 1.3 · Figure 123
  2. 確認本筆 Write 的區塊數

    讀取 Write 的 NLB;本例 NLB=7 表示 8 個區塊,再和已確認的原子單位比較。

    NVM Command Set 1.3 · Figure 71
  3. 保留不同事件的保證條件

    回到原子性參數表,分別解釋正常與斷電時整筆寫入的保證。成功完成、持久性與原子性各依相關規則判讀。

    NVM Command Set 1.3 · Figure 4
沿著欄位一步步理解

查詢次序:Identify CNS=01h 讀 NVM 定義的 AWUN/AWUPF;CNS=00h 讀目標 namespace 的 NSFEAT;Get Features FID=0Ah、SEL=0 確認正常原子性未被停用。

推導 1AWUN 與 AWUPF 都以 blocks 數減 1 編碼。7 表示正常情況下的 8 blocks 保證;1 表示斷電或錯誤情況下的 2 blocks 保證。命令 NLB=7 也是 8 blocks,即 32768 bytes。

推導 2這筆 Write 在所給條件下符合正常原子性的大小限制,卻超過斷電原子性的大小。超出保證不代表必定發生部分更新,而是不能用 AWUPF 保證整筆 8 blocks 不被撕裂。

推導 3如果應用要求整筆 32 KiB 在斷電下也不可分割,需要其他符合規格的配置或上層資料保護方法。改成 FUA=1 會增加完成前持久化要求,但不會把 AWUPF 的 2 blocks 改成 8 blocks。

完整原文定位
  • NVM Command Set 1.3 · §4.1.5.2 · 文件頁 94–96 · PDF 94–96
  • NVM Command Set 1.3 · §4.1.5.1 · Figure 123 · Identify – Identify Namespace Data Structure, NVM Command Set · 文件頁 85–86, 88 · PDF 85–86, 88
  • NVM Command Set 1.3 · §2.1.4 · 文件頁 15–18 · PDF 15–18
  • NVM Command Set 1.3 · §4.1.3.4 · 文件頁 67 · PDF 67
  • NVM Command Set 1.3 · §3.3.6 · Figure 71 · Write – Command Dword 12 · 文件頁 54 · PDF 54
回情境索引

接著看其他情境

練習 02namespace 的 NAWUPF=0,為什麼不是 1 block?

一個解碼器對所有 atomic unit 欄位直接加 1。請用此例找出它會算錯哪裡。

模擬回傳與已知條件

  • Controller:AWUN=7、AWUPF=3。Namespace:NSABP=1、NAWUN=15、NAWUPF=0、NABSN=0、NABSPF=0、MAM=0。
  • 正常原子性未停用;LBA data size=4096 bytes。
沿著欄位一步步理解

查詢次序:Identify CNS=01h 與 CNS=00h 配對取得 controller 基準及 namespace 覆寫值。

推導 1先看 NSABP,才知道 namespace atomic 欄位是否有效。本例 NAWUN=15 是非零,採用它後得到正常情況 16 blocks,也就是 64 KiB;不是只看 controller 的 8 blocks。

推導 2NAWUPF=0 在這裡有特別意思:沿用 controller 的 AWUPF,不是把 0 加 1。AWUPF=3 所以斷電保證為 4 blocks,即 16 KiB。

推導 3NABSN=NABSPF=0 表示未設此類 atomic boundary。這些 0、NAWUPF 的 0,以及 controller AWUPF=0 所表示的 1 block,語意各不同。解碼器必須按欄位定義分支,不能做全表統一加 1。

完整原文定位
  • NVM Command Set 1.3 · §4.1.5.2 · 文件頁 94–96 · PDF 94–96
  • NVM Command Set 1.3 · §4.1.5.1 · Figure 123 · Identify – Identify Namespace Data Structure, NVM Command Set · 文件頁 85–86, 88–89 · PDF 85–86, 88–89
  • NVM Command Set 1.3 · §2.1.4 · 文件頁 16–19 · PDF 16–19
回情境索引

練習 03大小符合,跨過 boundary 還算整筆 atomic 嗎?

兩筆 Write 都只有 4 blocks,為什麼起始 LBA 不同,namespace 的原子性保證也可能不同?

LBA
Logical Block Address,邏輯區塊位址

模擬回傳與已知條件

  • AWUN=0、AWUPF=0;NSABP=1、NAWUN=7、NAWUPF=7;NABSN=7、NABSPF=7、NABO=0;DN=0。
  • 先考慮 MAM=0。Write A:SLBA=8、NLB=3;Write B:SLBA=6、NLB=3。
沿著欄位一步步理解

查詢次序:Identify CNS=00h 讀 unit、boundary、offset 及 NSFEAT.MAM;把命令轉成實際 LBA 區間後比較。

LBA
Logical Block Address,邏輯區塊位址

推導 1非零 boundary size=7 代表 8 blocks,NABO=0,所以分界在 0、8、16……。A 觸及 LBA 8–11,全在同一區間;B 觸及 6–9,跨過 8。兩者雖然都少於 8 blocks,位置並不等價。

推導 2MAM=0 是 Single Atomicity Mode。A 符合本例 namespace 的整筆原子性條件;B 跨界,不能套用同一個整筆 4-block 保證。這個限制要與 unit 大小一起檢查。

推導 3若改成規格允許的 MAM=1 配置,B 可分為 6–7 與 8–9 兩個 atomic LBA subranges,保證分別適用於各段,仍不是兩段合起來的一個不可分割更新。

命令實際 LBA 範圍以 LBA 8 分界
A8–118 9 10 11:同一區間
B6–96 7 │ 8 9:跨界
完整原文定位
  • NVM Command Set 1.3 · §2.1.4.4 · 文件頁 19 · PDF 19
  • NVM Command Set 1.3 · §2.1.4.5 · 文件頁 19–20 · PDF 19–20
  • NVM Command Set 1.3 · §4.1.5.1 · Figure 123 · Identify – Identify Namespace Data Structure, NVM Command Set · 文件頁 85, 88–89 · PDF 85, 88–89
回情境索引

練習 04Write 已成功,資料現在一定不怕斷電嗎?

你只能看到能力資料、Feature 值與命令紀錄。如何判斷成功的 Write 是否已滿足持久化要求?

模擬回傳與已知條件

  • 已確認此 namespace 有啟用中的 volatile write cache;Get Features FID=06h 的 WCE=1。
  • A:一般 Write,FUA=0,成功,之後沒有 Flush。B:Write,FUA=1,成功。
沿著欄位一步步理解

查詢次序:Identify CNS=01h 的 VWC、CNS=08h 的 VWCNP 與適用的 FDP 配置 → Get Features FID=06h、SEL=0 → 命令 FUA 與後續 Flush 紀錄。

FDP
Flexible Data Placement,彈性資料放置

推導 1A 可能已經落到非揮發媒體,也可能仍依賴 volatile cache;從成功 CQE 無法區分這兩種情況。因此不能宣稱它一定已持久化,也不能反過來說它一定只在 cache。

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

推導 2B 的 FUA=1 要求這筆命令的資料與 metadata 在回報完成前寫入非揮發媒體。持久性關注完成後能否保留,原子性則關注更新會不會部分發生;這兩個問題要分開回答。

推導 3另一條路是先等 A 完成,再提交涵蓋它的 Flush,並確認 Flush 成功。Flush 保證涵蓋其提交前已完成的指定 namespace 寫入;若與 Write 同時送出,就少了這個先後條件。

完整原文定位
  • Base 2.4 · §5.2.14.2.1 · Figure 338 · Identify – Identify Controller Data Structure, I/O Command Set Independent · 文件頁 374 · PDF 400
  • Base 2.4 · §5.2.14.2.8 · Figure 346 · Identify – I/O Command Set Independent Identify Namespace Data Structure · 文件頁 391–394 · PDF 417–420
  • Base 2.4 · §5.2.30.1.4 · Figure 471 · Volatile Write Cache – Command Dword 11 · 文件頁 464–465 · PDF 490–491
  • Base 2.4 · §7.2 · 文件頁 567 · PDF 593
  • NVM Command Set 1.3 · §3.3.6 · Figure 71 · Write – Command Dword 12 · 文件頁 54 · PDF 54
回情境索引

練習 05資料與索引都用 FUA,為什麼還要排順序?

應用先把資料 Write 放進 SQ,再把指向該資料的索引 Write 放進同一 SQ。兩筆都 FUA=1,是否已保證索引不會先持久化?

SQ
Submission Queue,提交佇列

模擬回傳與已知條件

  • 資料與索引使用不同 LBA 範圍;不是 fused operation。
  • 兩筆命令一起提交,尚未等待第一筆完成;目標是斷電後不出現「新索引指向尚未保存的資料」。
沿著欄位一步步理解

查詢次序:檢查原始 SQE 的 FUA 與提交/完成時序;用 NVM 的 command ordering 與 Write FUA 規則判讀。

SQE
Submission Queue Entry,佇列中的命令項目

推導 1同一 SQ 的位置先後,不能替代這裡所需的資料依賴。FUA=1 對各筆命令提出完成前持久化要求,並沒有額外規定不同命令之間誰先完成。

推導 2符合目標的示範時序是:提交 data Write(FUA=1)→確認成功完成→才提交 index Write(FUA=1)→確認成功完成。第二步使資料的持久化先於索引寫入的提交。

推導 3這只解決題目中的依賴順序,並不把資料與索引兩筆寫入合成一筆跨範圍交易。若要求兩者一起回到舊值或一起變新值,還需要更完整的交易或復原設計。

順序主機觀察/動作
1提交 data Write,FUA=1
2等待並確認 data Write 成功
3才提交 index Write,FUA=1
4等待並確認 index Write 成功
完整原文定位
  • NVM Command Set 1.3 · §2.1.2 · 文件頁 14 · PDF 14
  • NVM Command Set 1.3 · §3.3.6 · Figure 71 · Write – Command Dword 12 · 文件頁 54 · PDF 54
回情境索引

練習 06Metadata 比 PI 大,PRACT=1 要扣掉多少 bytes?

PI
Protection Information,資料保護資訊

移植程式把 PRACT=1 的 metadata buffer 一律減掉 8 bytes/LBA。這在本例是否正確?

模擬回傳與已知條件

  • 16-bit Guard 格式,PI 已啟用;LBA data=4096 bytes、MS=16,metadata 使用 separate buffer。
  • Write 的 PRACT=1、NLB=3;其他保護設定均合法。
沿著欄位一步步理解

查詢次序:Identify CNS=00h 的 LBAF/DPS/metadata 設定,必要時 CNS=05h、CSI=00h 的 ELBAF → 對照 Write 的 16-bit Guard processing 規則。

CSI
Command Set Identifier,命令集識別碼

推導 1NLB=3 是 4 blocks。資料 buffer 為 4×4096=16384 bytes;在這個 metadata 大於 8 bytes 的分支,host 仍傳輸 4×16=64 metadata bytes,不能只配置 32 bytes。

推導 2PRACT 決定 PI 的產生與處理行為,不是通用的「buffer 長度減 8」開關。當 metadata 剛好只有 8 bytes 時,圖表中的另一個分支才有不同的傳輸規則,不能把它搬到 MS=16。

PI
Protection Information,資料保護資訊

推導 3除長度之外,還要對齊 separate/extended 的放置方式、PI 類型及 Guard 格式。只有這些條件都相同,才適合拿前後兩次傳輸的 bytes 作比較。

完整原文定位
  • NVM Command Set 1.3 · §4.1.5.1 · Figure 125 · LBA Format Data Structure, NVM Command Set Specific · 文件頁 94 · PDF 94
  • NVM Command Set 1.3 · §4.1.5.3 · Figure 128 · Extended LBA Format Data Structure, NVM Command Set Specific · 文件頁 101–102 · PDF 101–102
  • NVM Command Set 1.3 · §5.2.3 · Figure 154 · Metadata – Transferred as Separate Buffer · 文件頁 130 · PDF 130
  • NVM Command Set 1.3 · §5.3.2.1 · Figure 174 · Write Command 16b Guard Protection Information Processing · 文件頁 143 · PDF 143
回情境索引

練習 07Deallocate 後讀到 FFh,是不是失敗?

驗證程式要求所有 deallocated LBA 都回傳 0。請判斷它是否把允許的行為誤當成錯誤。

模擬回傳與已知條件

  • 該範圍已確認 deallocated;DLFEAT.DRB=010b;Get Features FID=05h 的 DULBE=0。
  • 本例不啟用 PI;Read 成功且全部 data bytes 為 FFh。
沿著欄位一步步理解

查詢次序:Identify CNS=00h 查 DLFEAT 與相關能力;Get Features FID=05h、SEL=0、目標 NSID 查 DULBE;再看 Read 結果。

NSID
Namespace Identifier,邏輯儲存空間識別碼

推導 1DRB=010b 所描述的 deallocated 讀取內容就是 FFh,所以此例與規格回報一致。Read 成功不要求一定回 0;驗證器應由 DRB 選擇預期內容。

推導 2若 namespace 支援 DULBE 且目前設為 1,對 deallocated/unwritten block 的讀取又可能走錯誤回覆的路徑。比較兩個裝置前,要把 Feature 狀態一起保存,不能只比較讀回 bytes。

推導 3這個讀取結果只驗證邏輯介面的 deallocation 行為,不能證明所有實體媒體副本已被安全清除。需要 Sanitize 保證時,應使用該操作的能力、目標及完成狀態證據。

完整原文定位
  • NVM Command Set 1.3 · §4.1.5.1 · Figure 123 · Identify – Identify Namespace Data Structure, NVM Command Set · 文件頁 88 · PDF 88
  • NVM Command Set 1.3 · §3.3.3.2.1 · 文件頁 48 · PDF 48
  • NVM Command Set 1.3 · §4.1.3.3 · 文件頁 66 · PDF 66
回情境索引

01Single Atomicity:單位、條件與邊界的關係

NVM Command Set 1.3 · Figure 4 · Atomicity Parameters for Single Atomicity Mode

§2.1.4 · 文件頁 15–16 · PDF 15–16

01.1 · 用途需要驗證某次寫入是否享有整筆原子性時,用這張表整理 controller 基準、namespace 專屬值與 boundary 條件。這張表明確針對 Single Atomicity Mode。

01.2 · 欄位與關係AWUN/AWUPF 分別對應正常操作與斷電情境,ACWU 用於融合 Compare and Write;NA 前綴是 namespace 值。NABSN/NABSPF 與 NABO 控制邊界。表中的不等式描述支援時必須成立的參數關係,實際值仍須按各欄編碼換算。

01.3 · 判讀與例子一筆寫入即使未超過 NAWUN,跨 namespace atomic boundary 時,Single Atomicity Mode 也不保證該整筆符合 namespace 原子性。先看模式、單位大小,再看起點與範圍,不能只比較 NLB。

搜尋詞:AWUN · AWUPF · NAWUN · NAWUPF · ACWU · NACWU · atomicity

回本冊圖表索引

02Atomic Boundary:同樣大小,不同起點會有不同結果

NVM Command Set 1.3 · Figure 8 · Atomic Boundaries Example

§2.1.4.4 · 文件頁 19 · PDF 19

02.1 · 用途這張圖把原子性邊界畫成相鄰區間,適合快速判斷一段 LBA 是否跨界。圖中顏色區分區間,不代表不同 namespace 或不同媒體。

02.2 · 欄位與關係第一個界線由 NABO 決定,後續界線依解碼後的 boundary size 等距排列。寫入範圍由 SLBA 與 blocks 數決定;NABSN 和 NABSPF 對應不同情境,原始欄位值還有 0 及減 1 編碼規則。

SLBA
Starting LBA,起始邏輯區塊位址

02.3 · 判讀與例子以已解碼的 boundary size=8 blocks、offset=0 為例,LBA4~7 留在一區,LBA6~9 跨越 8 的界線。兩者都是 4 blocks,但後者不能只憑大小就宣稱享有 Single Atomicity 整筆保證。

搜尋詞:NABO · NABSN · NABSPF · atomic boundary · alignment

回本冊圖表索引

03NVM opcode:先確認命令集再解碼

NVM Command Set 1.3 · Figure 22 · Opcodes for NVM Commands

§3.3 · 文件頁 27 · PDF 27

03.1 · 用途解析 I/O trace 時,用這張表把 opcode 對回 NVM 命令。相同 opcode 在 Admin 與 I/O queue 不一定代表相同操作。

03.2 · 欄位與關係表列出 opcode、命令名稱與定義位置,包括 Flush00h、Write01h、Read02h、Compare05h、Write Zeroes08h、Dataset Management09h、Verify0Ch、Copy19h。支援要求仍需搭配能力回報。

03.3 · 判讀與例子OPC=02h 出現在 NVM I/O SQ 是 Read;出現在 Admin SQ 則不能套用這張表。保留 queue 種類、CSI 與 opcode 一起查,才不會把 log 讀取誤當成媒體讀取。

CSI
Command Set Identifier,命令集識別碼

搜尋詞:opcode · Read 02h · Write 01h · Flush 00h · Compare 05h · Copy 19h

回本冊圖表索引

04Read 起點:64-bit SLBA

SLBA
Starting LBA,起始邏輯區塊位址

NVM Command Set 1.3 · Figure 53 · Read – Command Dword 10 and Command Dword 11

§3.3.4 · 文件頁 49 · PDF 49

04.1 · 用途核對 Read 是否讀錯位置時,先從 CDW10/11 合成完整 SLBA。這是 namespace 內的 logical block 地址,不是 host buffer 地址。

04.2 · 欄位與關係SLBA 佔 64bits,低 32bits 在 CDW10、高 32bits 在 CDW11。實際 bytes 位置取決於目前 LBA 大小;命令長度由 CDW12.NLB 另外提供。

04.3 · 判讀與例子CDW11=1、CDW10=0 表示 SLBA=4294967296,不能只看低位而當成 LBA0。範圍尾端是 SLBA+NLB,因為 NLB 原始值是 blocks 數減 1。

搜尋詞:Read · SLBA · CDW10 · CDW11

回本冊圖表索引

05Read CDW12:範圍、重試與保護要求

NVM Command Set 1.3 · Figure 54 · Read – Command Dword 12

§3.3.4 · 文件頁 49 · PDF 49

05.1 · 用途讀取的長度、重試方式或保護檢查與預期不同時,查 CDW12。這些控制位各自有目的,不是同一種「嚴格讀取」開關。

05.2 · 欄位與關係NLB bits15:0 為 blocks 數減 1;CETYPE bits19:16 選命令擴充;STC bit24 控制 Storage Tag 檢查;PRINFO bits29:26 含 PI 動作與檢查;FUA bit30 要求相關資料與 metadata 提交到非揮發媒體並由該媒體讀回,LR bit31 要求有限重試。

05.3 · 判讀與例子NLB=7、每 block4096bytes,資料量是 32768bytes。FUA 不隱含與其他命令的先後順序;LR 也不等於固定時間內必定完成。

搜尋詞:Read NLB · LR · FUA · PRINFO · STC · CETYPE

回本冊圖表索引

06Write 起點:把 LBA 與 DMA 地址分開

DMA
Direct Memory Access,裝置直接存取記憶體

NVM Command Set 1.3 · Figure 70 · Write – Command Dword 10 and Command Dword 11

§3.3.6 · 文件頁 54 · PDF 54

06.1 · 用途寫錯區域的問題要分別查 NVM 目的 LBA 與主機來源 buffer。這張表只定義 Write 的 SLBA,不描述 PRP 或 SGL 地址。

PRP
Physical Region Page,描述資料頁位置的指標
SGL
Scatter Gather List,描述分散資料區段的清單

06.2 · 欄位與關係CDW10/11 合成 64-bit SLBA,分別為低 32 與高 32bits。SLBA 以所選 namespace 格式的 blocks 為單位,不直接以 512-byte sectors 計。

06.3 · 判讀與例子同樣 SLBA=8,在 512-byte 格式的資料起點是 4096bytes,在 4 KiB 格式是 32768bytes。先確認格式,再與應用程式的 byte offset 換算結果比較。

搜尋詞:Write · SLBA · destination LBA

回本冊圖表索引

07Write CDW12:持久性、PI 與配置提示

NVM Command Set 1.3 · Figure 71 · Write – Command Dword 12

§3.3.6 · 文件頁 54 · PDF 54

07.1 · 用途驗證 Write completion 代表哪些保證時,查這張表的 FUA 與 PI 控制,也要保留 namespace 格式和 cache 情境。完成不等於所有其他寫入也一起持久化。

07.2 · 欄位與關係NLB bits15:0 是 blocks 數減 1,CETYPE19:16 與 DTYPE23:20 分別指定命令擴充和 Directive;STC24、PRINFO29:26 控制保護,FUA30 要求本命令資料與 metadata 在完成前寫入非揮發媒體,LR31 控制重試努力。

07.3 · 判讀與例子FUA=1 強化的是這筆 Write 的完成條件,不建立與另一筆 Write 的隱含順序。使用 FDP 或 Streams 時,也要依 DTYPE 與 CETYPE 解 CDW13,不能把相同 16bits 永遠當同一種 identifier。

FDP
Flexible Data Placement,彈性資料放置

搜尋詞:Write NLB · FUA · LR · PRINFO · DTYPE · CETYPE · STC

回本冊圖表索引

08Copy 描述子:格式決定 namespace 與 PI 配置

NVM Command Set 1.3 · Figure 39 · Copy – Copy Descriptor Formats

§3.3.2 · 文件頁 32 · PDF 32

08.1 · 用途解析 Copy 來源清單前,先查描述子格式。格式決定是否有來源 NSID,以及保護資訊屬於哪種配置;選錯格式會把後續 bytes 全部讀錯。

NSID
Namespace Identifier,邏輯儲存空間識別碼

08.2 · 欄位與關係格式 0/1 沒有 SNSID,來源與目的 namespace 相同;格式 2/3 包含 SNSID,可指定不同來源 namespace。0/2 對應 8-byte、16-bit Guard PI;1/3 對應 16-byte、32 或 64-bit Guard PI。格式 4 另涉及 SLM 來源,其完整定義不在這三份來源規格中。

08.3 · 判讀與例子若 DF=2,不能使用格式 0 的固定位置假設來源 NSID 不存在。是否允許跨 namespace、格式是否相容與範圍限制,仍需配合 Copy 能力及該命令條件。

搜尋詞:Copy · DF · SNSID · descriptor format

回本冊圖表索引

09Dataset Management:每段 LBA 範圍如何排列

NVM Command Set 1.3 · Figure 47 · Dataset Management – Range Definition

§3.3.3 · 文件頁 45 · PDF 45

09.1 · 用途解析 Dataset Management buffer 時,這張表把 range 編號和 byte offset 對在一起。range index 是第幾筆,offset 是距 buffer 起點多少 bytes。

09.2 · 欄位與關係每筆 16bytes:CATTR 在相對 bytes3:0,LLB 在 7:4,SLBA 在 15:8。第 i 筆起點為 16×i。LLB 直接表示 blocks 數,不用 Read/Write NLB 的加 1 規則;命令指定的 range 數另看 NR。

09.3 · 判讀與例子第 2 筆(index1)從 byte16 開始;SLBA=100、LLB=8 描述 LBA100~107。LLB=8 不表示 9blocks。是否所有範圍都會處理,還需核對 DMRL、DMRSL、DMSL 及 support-variant 能力。

搜尋詞:DSM · CATTR · LLB · SLBA · range index · offset

回本冊圖表索引

10Write Zeroes:清零範圍與 deallocate 要求

NVM Command Set 1.3 · Figure 83 · Write Zeroes – Command Dword 12

§3.3.8 · 文件頁 59–60 · PDF 59–60

10.1 · 用途這張表可區分一般範圍清零、要求 deallocate 與整個 namespace 清零。名字相近不代表具有 Sanitize 的安全清除保證。

10.2 · 欄位與關係NLB bits15:0 為 blocks 數減 1;NSZ bit23 要求整個 namespace 處理,需搭配 DEAC bit25 及支援能力。STC bit24 與 PRCHK 必須清 0;FUA bit30 描述完成前的非揮發要求。

10.3 · 判讀與例子NSZ=1 但 DEAC=0 會得到 Invalid Field in Command;NSZ=1 時 NLB 由 controller 忽略,不能再用 NLB=0 推論只處理 1block。操作範圍要先由 NSZ 及能力判斷。

搜尋詞:Write Zeroes · DEAC · NSZ · NLB · PRCHK · STC

回本冊圖表索引

11Extended LBA:資料與 metadata 交錯

NVM Command Set 1.3 · Figure 153 · Metadata – Contiguous with LBA Data, Forming Extended LBA

§5.2.3 · 文件頁 129 · PDF 129

11.1 · 用途計算傳輸長度或尋找第 2 個 block 起點時,用此圖確認 extended LBA 的排列。它不是整批資料後面再附一整批 metadata。

11.2 · 欄位與關係圖中每個 LBA 的資料後接該 LBA 的 metadata,再接下一個 LBA;兩者透過同一資料 buffer 傳輸。資料大小由 LBADS 決定,metadata bytes 由 MS 決定,格式選擇由 namespace 設定決定。

11.3 · 判讀與例子若每 block4096-byte 資料、8-byte metadata,第二個 block 從 4104 開始,第三個從 8208 開始。以 4096 固定跨距讀取會把 metadata 誤當下一個 block 開頭。

搜尋詞:extended LBA · metadata · MS · FLBAS

回本冊圖表索引

12Separate Metadata:兩個 buffer 依 LBA 配對

NVM Command Set 1.3 · Figure 154 · Metadata – Transferred as Separate Buffer

§5.2.3 · 文件頁 130 · PDF 130

12.1 · 用途資料與 metadata 分開傳輸時,這張圖說明兩份 buffer 如何對應。它們雖不相鄰,每個 LBA 仍要配到自己那一份 metadata。

12.2 · 欄位與關係DPTR 指向資料 buffer,MPTR 描述 metadata;資料與 metadata 分別依 LBA 順序排列。使用 PRP 形式的 metadata buffer 時要求實體連續;SGL 用法再依 PSDT 和支援條件解讀。

PRP
Physical Region Page,描述資料頁位置的指標
SGL
Scatter Gather List,描述分散資料區段的清單

12.3 · 判讀與例子2blocks、每 block4096+8bytes,資料 buffer 需 8192bytes,metadata 另需 16bytes;不是把 MPTR 指向資料 buffer 後第 8192byte 就能自動取得正確配置,必須是實際已準備好的 metadata 地址。

搜尋詞:MPTR · separate metadata · DPTR · metadata buffer

回本冊圖表索引

1316-bit Guard PI:8 bytes 的實際配置

NVM Command Set 1.3 · Figure 155 · 16b Guard Protection Information Format when STS field is cleared to 0h

§5.3.1.1 · 文件頁 131 · PDF 131

13.1 · 用途這張圖適用 16-bit Guard 且 STS=0 的 PI,常用來核對保護欄位位置和 byte order。不要把所有 PI 都當成這個 8-byte 格式。

13.2 · 欄位與關係Guard 佔 bytes0~1,Application Tag 佔 2~3,Reference Tag 佔 4~7。圖上 MSB 在較低 byte 位置,表示這些多 byte PI 欄位採高位 byte 在前的排列;與一般 NVMe little-endian 欄位不可混用。

13.3 · 判讀與例子Reference Tag 值 00000001h 在這個 PI 中排列為 00 00 00 01,不是 01 00 00 00。STS 非 0 時要改看 Storage/Reference 拆分,不能沿用本圖完整 32-bit Reference Tag 假設。

搜尋詞:16b Guard · Application Tag · Reference Tag · STS 0 · PI endian

回本冊圖表索引

1432-bit Guard PI:16-byte 格式

NVM Command Set 1.3 · Figure 157 · 32b Guard Protection Information Format

§5.3.1.2 · 文件頁 133 · PDF 133

14.1 · 用途metadata 同為 16bytes 時,這張圖幫你區分 32-bit 與 64-bit Guard 配置。Guard 寬度改變,後面的欄位位置也會移動。

14.2 · 欄位與關係Guard 在 bytes0~3,Application Tag 在 4~5,Storage and Reference Space 在 6~15,共 80bits。這 80bits 如何分成 Storage Tag 與 Reference Tag,另由 ELBAF.STS 決定。

14.3 · 判讀與例子STS=16 時,80-bit 區域高 16bits 為 Storage Tag,餘 64bits 為 Reference Tag。若誤套 64-bit Guard 格式,連 Application Tag 的位置都會讀錯。

搜尋詞:32b Guard · PI layout · Storage and Reference Space

回本冊圖表索引

1564-bit Guard PI:較大 Guard 與 48-bit 標籤空間

NVM Command Set 1.3 · Figure 159 · 64b Guard Protection Information Format

§5.3.1.3 · 文件頁 134 · PDF 134

15.1 · 用途此圖用來解析 64-bit Guard 格式,而不是假設所有欄位都變成 64bits。整份 PI 仍是 16bytes。

15.2 · 欄位與關係Guard 在 bytes0~7,Application Tag 在 8~9,Storage/Reference 區域在 10~15,共 48bits。各多 byte 欄位按圖中的 MSB/LSB 排列;tag 拆分由 STS 決定。

15.3 · 判讀與例子若 STS=0,48bits 全給 Reference Tag;STS=48 則全給 Storage Tag、沒有 Reference Tag。位寬和檢查規則要一起核對,不能把不存在的 Reference Tag 當作值 0。

搜尋詞:64b Guard · PI layout · Storage Tag · Reference Tag

回本冊圖表索引

16Write 的 PRACT:host 要提供多少 metadata

NVM Command Set 1.3 · Figure 174 · Write Command 16b Guard Protection Information Processing

§5.3.2.1 · 文件頁 143 · PDF 143

16.1 · 用途這張四情境圖用來核對 host buffer 與媒體格式的差異,尤其適合排查 PI 啟用後傳輸長度不符。圖的範圍是 16-bit Guard PI。

16.2 · 欄位與關係PRACT=0 時,host 傳輸包含 PI 的 metadata。PRACT=1 且 metadata 恰好 8bytes 時,host 不傳這 8bytes,由 controller 產生 PI;metadata 大於 8bytes 時,host 端 metadata 大小維持原值,不能一律減掉 8bytes。

16.3 · 判讀與例子4096-byte 資料、8-byte metadata、PRACT=1 時,host 只提供資料;改為 16-byte metadata 時則保留 16-byte metadata 傳輸配置。PRCHK 指定哪些檢查,不能由 PRACT 單獨推論所有檢查都關閉。

搜尋詞:PRACT · Write PI · MD 8 · MD 16 · 16b Guard

回本冊圖表索引

17Read 的 PRACT:回主機時保留或移除哪些資料

NVM Command Set 1.3 · Figure 175 · Read 16b Guard Command Protection Information Processing

§5.3.2.2 · 文件頁 145 · PDF 145

17.1 · 用途這張圖沿 NVM→controller→host 方向顯示 Read 的 PI 處理。它補足 Write 圖的反向資料流,適合確認讀回 buffer 是否少算或多算 metadata。

17.2 · 欄位與關係PRACT=0 時讀回完整 metadata;PRACT=1 且 metadata 恰好 8bytes 時,PI 不傳回 host。metadata 大於 8bytes 時仍維持原 metadata 大小;不能把「controller 處理 PI」直接等同「host 完全沒有 metadata」。

17.3 · 判讀與例子若 metadata=16bytes 而 buffer 只按資料大小配置,即使 PRACT=1 仍可能配置不足。先以本圖決定傳輸形態,再用 namespace 的 metadata 放置方式決定 DPTR 與 MPTR。

搜尋詞:PRACT · Read PI · metadata transfer · 16b Guard

回本冊圖表索引

原始文件

頁碼採本次提供的 ratified PDF;Base 的 PDF 頁=文件頁+26,另兩份相同。圖號與英文原名保留,可用 PDF 搜尋定位。公開網站不附原始 PDF。

  • 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
Jia-Chang

Jia-Chang

Human

Comments

  Write a comment ...