NVMe · 規格與原理

NVM Command Set 1.3:邏輯區塊、I/O 命令與資料保護

00.01.NVM Command Set 說明主機如何以 logical block 為單位讀寫與管理儲存空間。理解它的關鍵,是把資料格式、命令行為、資料完整性與資源管理連起來:同一筆命令,會因 namespace 格式、支援能力與設定不同而有不同的適用條件。

logical block
邏輯區塊;namespace 可定址的基本單位,其資料大小由使用中的格式決定。
namespace
namespace,主機透過 controller 存取的一份已格式化非揮發性容量。
NVM
Non-Volatile Memory,斷電後仍能保存資料的記憶體。

這篇的主軸

01

儲存空間與格式

01-01先理解 namespace 的容量、LBA 格式,以及資料與 metadata 的關係。

metadata
隨 logical block 儲存的附加資料,可包含資料保護資訊,也可有其他用途。
LBA
Logical Block Address;以所選格式的 block 為單位。
02

命令做了什麼

02-01比較 Read、Write、Compare、Verify、Copy 與空間管理命令的作用及完成條件。

03

資料完整性與順序

03-01理解原子性、命令相依、Protection Information,以及資料檢查的範圍。

Protection Information
資料保護資訊,縮寫 PI;包含 Guard 與 tags,用來檢查資料及其關聯資訊。
04

能力與資源管理

04-01以 Identify、Features 和 log 理解格式選擇、效能限制及進階資源功能。

00.02.主機透過提交佇列送出命令,控制器透過完成佇列回報結果。Base 規格定義這套共同機制;本篇聚焦命令如何作用於 namespace 內的 logical blocks。

把主軸連起來

00.03.可以沿著一筆資料的生命週期讀這篇:先建立 namespace 並選格式,讓主機知道 LBA、資料及 metadata 如何對應;接著使用命令讀寫或搬移資料,再判斷順序、原子性及保護資訊能提供哪些保證。

00.04.後半部把單筆操作放回整個裝置:效能提示影響操作安排,Rate Limiting 管理共享資源,FDP/Streams 描述資料放置,追蹤與狀態結構記錄資源變化。這些功能都要回到前面的格式與能力資訊判斷能否使用。學完應能解釋一筆命令的範圍、資料長度、必要條件與完成結果。

FDP
Flexible Data Placement,把資料放置提示與媒體回收管理連結的能力。

01 Logical block、格式與單位

01.01.作業系統可以要求讀取檔案中的一段資料,但控制器收到的 NVM 命令是針對 namespace 裡的區塊。LBA 用來選區塊;區塊內有多少資料,則由目前採用的格式決定。因此,同樣是讀 8 個區塊,採用 512-byte 與 4096-byte 資料格式時,需要的主機緩衝區大小不同。先把「位置」與「每個位置容納多少資料」分清楚,後面才能看懂命令範圍。

01.02.LBADS 儲存的是以 2 為底的指數。例如 0Ch 是十六進位的 12,所以資料大小為 2^12 = 4096 bytes。MS 再告訴我們每個區塊附帶多少 metadata。Format Index 則只是格式清單中的選項編號;它既不是資料大小,也不是緩衝區中的位移。這三種數字可能都很小,計算方式卻完全不同。

Format Index
格式索引;用來選取一組 LBAF/ELBAF 格式資訊的編號。
LBADS
LBA Data Size 的 exponent;資料 bytes=2^LBADS,0表示目前不可用。
index
index;用來選取清單中的項目或格式。它回答「選哪一項」,不是「離起點多遠」。
MS
Metadata Size;每個 logical block 的 metadata bytes 數。
來源:NVM Command Set 1.3 §1.1-1.6; 4.1.3.9; 4.1.4.8; 4.1.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §1.1-1.6; 4.1.3.9; 4.1.4.8; 4.1.5, 文件頁 9-12,73-75,79-83, PDF 頁 9-12,73-75,79-83

把流程對回規格條件

01.03.NVM Command Set 補充 Base 的 logical-block 語意;logical block data size 不含 metadata,logical block size 則包含。NVM 的 CSI 是 00h,命令、Feature、log 與 Identify 的相同數字分屬不同識別空間。

CSI
I/O Command Set Identifier;選擇 I/O 命令集,NVM Command Set 使用 00h。
來源:NVM Command Set 1.3 §1.1-1.6; 4.1.3.9; 4.1.4.8; 4.1.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §1.1-1.6; 4.1.3.9; 4.1.4.8; 4.1.5, 文件頁 9-12,73-75,79-83, PDF 頁 9-12,73-75,79-83

Logical block、格式與單位
要讀的資訊如何解讀還需要哪一項資訊
LBADSdata bytes = 2^LBADS另加 MS 才是 logical block size
Format Index同時選 LBAF 與 ELBAF不能只看資料大小
Specification family通用機制由 Base 定義相依欄位另以 Base 來源標示
ELBAF
Extended LBA Format;與相同 index 的 LBAF 配對,補充 PI 格式與 Storage Tag 大小。
LBAF
LBA Format;描述一種 logical block 格式,包括資料及 metadata 大小。
閱讀相關規格圖表 → Logical block、格式與單位

02 Namespace 容量與配置狀態

02.01.Namespace 的可定址範圍、最多可配置的容量、目前已配置的容量,是三個不同問題。NSZE 決定主機可以使用哪些 LBA;NCAP 描述可配置給資料的區塊數;NUSE 描述已配置的區塊數。它們都以區塊計數,因此換算為 bytes 時還需要所用的區塊格式。

NCAP
Namespace Capacity;同時可配置 logical blocks 最大數量。
NSZE
Namespace Size;可定址 logical blocks 總數。
NUSE
Namespace Utilization;目前配置 logical blocks 數量。

02.02.以支援精簡配置的 namespace 為例,NSZE=1000、NCAP=800、NUSE=600。LBA 900 雖然落在 0 到 999 的有效位址範圍內,仍不能只憑位址有效就推論一定能再配置空間。反過來,NUSE=600 也不表示只有 LBA 0 到 599 有資料:已配置的區塊可以分散在整個位址範圍。

來源:NVM Command Set 1.3 §2.1.1; 4.1.5.1

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

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

把流程對回規格條件

02.03.NSZE ≥ NCAP ≥ NUSE;NSZE 定義可定址範圍,NCAP 限制同時配置的 blocks,NUSE 計算目前已配置 blocks。THINP=0 時 NCAP=NSZE;NVMCAP 以 bytes 計,不能直接當成 NSZE 乘資料大小。

NVMCAP
NVM Capacity;以 bytes 計,不能與 NSZE/NCAP 的 logical-block 數直接比較。
THINP
Thin Provisioning,NSFEAT 中決定 NCAP 是否可小於 NSZE,以及 controller 是否必須追蹤 NUSE 的 bit。
來源:NVM Command Set 1.3 §2.1.1; 4.1.5.1

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

Namespace 容量與配置狀態
容量或操作描述的範圍或變化判斷時須注意什麼
NSZE有效 LBA 為 0 到 NSZE−1LBA 越界與容量不足不同
THINP支援時須追蹤 NUSE不支援時可固定回 NCAP
AllocationWrite、Copy 寫入端及 WU 可配置Read/Verify 不改 deallocation 狀態
閱讀相關規格圖表 → Namespace 容量與配置狀態

03 Identify:同一 namespace 的多份資料結構

03.01.Identify 並不是一張包含所有答案的大表。主機要先說明想查控制器、某個 namespace,還是某個格式的能力;CNS 等選擇欄位決定回傳哪種結構。讀回來的資料即使都是 4096-byte 緩衝區,也不能互相套用欄位位置,因為每種查詢的結構定義不同。

CNS
Controller or Namespace Structure;Identify 命令用來選擇回傳資料結構的欄位。

03.02.查目前正在使用的格式,與查尚未選用格式的能力,是兩條不同的閱讀路徑。前者從 namespace 現況找到格式編號,再連到該編號的格式項目;後者直接指定想了解的格式,並結合共同能力。這可以解釋為什麼「控制器支援這個格式」不等於「namespace 現在就使用這個格式」。

來源:NVM Command Set 1.3 §4.1.5

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

把流程對回規格條件

03.03.NVM CSI=00h。完整 namespace 資訊需結合 CNS 08h 的 command-set-independent 結構、CNS 00h 的 NVM 結構與 CNS 05h/CSI 00h 的 NVM 延伸結構;CNS 01h 與 06h 則提供 controller 資訊。

controller
controller,實作 NVMe 介面、取走 command 並回報 completion 的控制實體。
來源:NVM Command Set 1.3 §4.1.5

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

Identify:同一 namespace 的多份資料結構
查詢選擇值可以取得的資訊如何連到其他查詢
CNS 00h / 05hnamespace 的 NVM 基本/延伸欄位FLBAS 決定目前 FIDX;MC/DPC 是能力
CNS 01h / 06hAWUN 等通用位置與 NVM 專屬限制06h 的 VSL/WZSL 等需結合 variant bits
CNS 11h / 1Bhallocated namespace 資訊不等同 active namespace 查詢
CNS 09h / 0Ah以 FIDX 查能力Common=No 欄位清零
CNS 16hnamespace granularity listGDM 決定 descriptor 如何對應 format
FLBAS
Formatted LBA Size,選擇 namespace 使用的 LBA format,並包含 metadata placement 相關控制。
AWUN
Atomic Write Unit Normal;controller 正常原子寫入大小的 0-based 欄位。
WZSL
Write Zeroes Size Limit;Write Zeroes 的大小限制,需結合 variant 能力判讀。
VSL
Verify Size Limit;Verify 的大小限制,需結合 variant 能力判讀。
閱讀相關規格圖表 → Identify:同一 namespace 的多份資料結構

04 LBAF、ELBAF 與唯一屬性格式

04.01.格式可以看成一組共同生效的屬性:資料大小、metadata 大小、資料保護格式及相關能力。兩個格式的資料部分即使同為 4096 bytes,其他屬性仍可能不同。比較格式時如果只看容量,就會漏掉主機緩衝區配置或保護資訊處理方式的差異。

04.02.LBAF 與 ELBAF 是相同格式編號的兩部分說明,應配對閱讀。格式的「數量」與「最後一個編號」也不同:NLBAF 採從 0 起算的數量編碼,必須先加 1 得到共同格式數,才能再接上唯一屬性格式。把編碼值直接當數量,會少算一個選項。

NLBAF
共同屬性 LBA formats 數的 0-based 欄位。
來源:NVM Command Set 1.3 §4.1.5.1; 4.1.5.3; 5.6

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.1; 4.1.5.3; 5.6, 文件頁 85-94,96-102,160-162, PDF 頁 85-94,96-102,160-162

把流程對回規格條件

04.03.LBAF 與 ELBAF 以同一 Format Index 配對;總 format 數為 raw NLBAF+1+NULBAF。NLBAF 是 0-based、NULBAF 是實際數量。有效 index 還要檢查 LBADS:值 0 表示該支援格式目前不可用。

NULBAF
Unique Attribute LBA Formats 的實際數量;可以為0。
來源:NVM Command Set 1.3 §4.1.5.1; 4.1.5.3; 5.6

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.1; 4.1.5.3; 5.6, 文件頁 85-94,96-102,160-162, PDF 頁 85-94,96-102,160-162

LBAF、ELBAF 與唯一屬性格式
格式資料記錄哪些屬性如何選取或解讀
LBAFLBADS、MS、RPRP 是指定 workload 的相對級別
ELBAFPIF、QPIF、STSQPIF 只在 qualified type 下適用
FLBASFIDXU 與 FIDXL 組成 indexMTELBA 是另一個 metadata bit
NULBAF追加在共同格式之後09h/0Ah 能讀各自能力
QPIF
Qualified Protection Information Format;指定 qualified PI 的格式。
PIF
Protection Information Format;選擇 PI 格式;qualified 格式再使用 QPIF。
STS
Storage Tag Size;固定 Storage/Reference Space 中的高位 bit 數。
閱讀相關規格圖表 → LBAF、ELBAF 與唯一屬性格式

05 Format、Host Behavior 與延伸 LBA

05.01.Format NVM 選擇的是 namespace 的資料格式與相關處理方式。主機不能任意拼出一組欄位,再假設控制器一定接受;選擇必須落在已回報的格式與能力之內。使用延伸格式時,還要確認主機已透過 Host Behavior Support 宣告可以理解對應格式。

Host
主機;執行作業系統並送出 NVMe 命令的一端。

05.02.資料保護類型、Guard 寬度與 metadata 傳輸方式,分別由不同欄位決定。PI=1 選的是保護類型,不會單獨把 Guard 改成 64 bits。MSET 則決定資料與 metadata 一起傳輸或分開傳輸。把每個選擇放回它所控制的問題,才知道最後需要什麼緩衝區與檢查方式。

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

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.2; 4.1.3.7, 文件頁 62-63,68-69, PDF 頁 62-63,68-69

把流程對回規格條件

05.03.Format NVM 選取已支援的 Format Index、PI type 與 metadata 傳輸方式。延伸 PI 及超過 legacy 16 個 entries 的 LBA formats 需檢查 controller ELBAS 與 host LBAFEE;沒有 host 啟用不可直接使用。

LBAFEE
Host 的 LBA Format Extension Enable 宣告。
來源:NVM Command Set 1.3 §4.1.2; 4.1.3.7

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.2; 4.1.3.7, 文件頁 62-63,68-69, PDF 頁 62-63,68-69

Format、Host Behavior 與延伸 LBA
設定欄位選擇哪種行為使用前須確認什麼
PI / PILPI=0 關閉,1/2/3 選 protection type本版 PIL 必須 0,PI 位於末端
MSET1:extended LBA;0:separate metadataMS=0 時忽略
LBAFEEFID 16h byte 2,合法值 0/1配合 ELBAS 決定延伸格式
STSFormat 不提供自由改成非零 STS 的方法新配置可由 namespace create 建立
FID
Feature Identifier;指定要讀取或設定哪一項 Feature 的編號。
PIL
Protection Information Location;用來判斷 PI 在 metadata 前端或後端,需遵守所選 Guard 格式限制。
閱讀相關規格圖表 → Format、Host Behavior 與延伸 LBA

06 建立 namespace:格式、mask 與 granularity

06.01.建立 namespace 時,主機同時描述需要多大的空間,以及這個空間採用什麼格式。NSZE、NCAP 是區塊數,配置粒度卻以 bytes 表示;兩者比較前,要先乘上所選格式的區塊大小。格式、保護資訊與遮罩也必須彼此相容,不能只檢查容量。

06.02.配置粒度是一項減少空間浪費的建議,與命令欄位是否合法是不同問題。若容量不是建議粒度的整數倍,控制器實際配置的空間可能包含主機無法定址的部分;只要其他要求都符合,就不能單憑這一點拒絕建立。建立成功後,仍需要 Attachment 才能讓指定控制器存取該 namespace。

來源:NVM Command Set 1.3 §4.1.6; 4.1.5.8; 5.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6; 4.1.5.8; 5.8, 文件頁 108,110-113,165, PDF 頁 108,110-113,165

把流程對回規格條件

06.03.Namespace create 的 NVM payload 指定 NSZE、NCAP、FLBAS、DPS、LBSTM 與 placement handles。Namespace Size/Capacity Granularity 以 bytes 回報且是 hints;不符合 granularity 但其他條件合法時,不得僅因此拒絕 create。

LBSTM
Tag comparison mask;bit=0 排除比較,Storage mask 額外受支援與對齊限制。
DPS
End-to-end Data Protection Type Settings,create 時選擇 Protection Information type 與位置的欄位。
來源:NVM Command Set 1.3 §4.1.6; 4.1.5.8; 5.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6; 4.1.5.8; 5.8, 文件頁 108,110-113,165, PDF 頁 108,110-113,165

建立 namespace:格式、mask 與 granularity
建立資料或結果數值描述什麼必須檢查的規則
NSZE / NCAP值以 logical blocks 指定與 bytes granularity 比較前先換算
LBSTM需符合 PIC/PIFA mask 約束不符回 Invalid Field in Command
GDM / NDGDM=0 使用 descriptor 0 對全部格式ND 是 0-based
Completion成功 create 後已按指定屬性 formatattachment 是另一個管理動作
閱讀相關規格圖表 → 建立 namespace:格式、mask 與 granularity

07 Metadata 傳輸與 PI 的位置

07.01.每個區塊的 metadata 必須與該區塊的資料對應。一起傳輸時,緩衝區按「資料 0、metadata 0、資料 1、metadata 1」排列;分開傳輸時,資料放在一個區域,metadata 放在另一個區域。分開只改變傳輸配置,不表示 metadata 可以與另一批區塊配對。

07.02.先用 PRACT=0 的例子理解長度:8 個區塊、每個區塊 4096 bytes 資料及 16 bytes metadata,資料合計 32768 bytes,metadata 合計 128 bytes。一起傳輸需要 32896 bytes;分開傳輸則分別準備這兩個長度。後續若要求控制器產生或移除保護資訊,才再依 PRACT 與格式調整傳輸量。

PRACT
Protection Information Action;依命令與 MS 選擇 PI 處理。
來源:NVM Command Set 1.3 §2.1.6; 5.2.3; 5.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.6; 5.2.3; 5.3, 文件頁 22,129-131, PDF 頁 22,129-131

資料與 Metadata 放在哪裡同一批 logical blocks 的資料與 metadata 必須對應;可以交錯傳輸,也可以分開傳輸。Data 0MD 0Data 1MD 1DPTR: Data 0, Data 1MPTR: MD 0, MD 1
同一批 logical blocks 的資料與 metadata 必須對應;可以交錯傳輸,也可以分開傳輸。
DPTR
命令 data pointer;Read 是目的、Write 是來源、Copy/DSM 指向 descriptors。
MPTR
Separate metadata 的指標;metadata placement 由 namespace format 與命令欄位決定。

把流程對回規格條件

07.03.每個 namespace 在 format 時選一種 metadata 傳輸機制:與 data 相連形成 extended LBA,或由 MPTR 指向 separate buffer。不能把 metadata 分拆到兩種機制;寫入時 metadata 必須與其 logical block 原子寫入。

來源:NVM Command Set 1.3 §2.1.6; 5.2.3; 5.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.6; 5.2.3; 5.3, 文件頁 22,129-131, PDF 頁 22,129-131

Metadata 傳輸與 PI 的位置
傳輸配置或位置主機如何準備緩衝區格式對它的限制
Extended LBADPTR 指向 data+metadata 交錯序列MSET/MTELBA 反映此選擇
Separate bufferDPTR 給 data,MPTR 給 metadataPRP metadata 需 實體位址連續;SGL 可分散
PI location本版有效格式的 PI 在 metadata 末端CRC 包含之前的非 PI metadata
CRC
Cyclic Redundancy Check,循環冗餘檢查;由資料位元計算檢查值,以偵測資料變化。
PRP
Physical Region Page,以 memory page 為單位描述 host-addressable data buffer 的 pointer 格式。
SGL
Scatter Gather List,以 descriptor 與 segment 描述一段或多段 data buffer 的格式。
閱讀相關規格圖表 → Metadata 傳輸與 PI 的位置

08 能力探索、Opcode 與狀態

08.01.主機要使用命令,先要確認控制器類型能處理它,以及相關選用能力是否存在。Opcode 說明要求執行什麼操作;NSID 指出操作對象;完成狀態則說明這次操作的結果。這些資訊相互關聯,卻不能用其中一個值推論另外兩個。

08.02.狀態碼也需要上下文。相同 SC 數值搭配不同 SCT,可能代表不同原因;因此讀完成項目時,要同時辨認狀態類別及狀態碼。Copy 的資料方向則是另一個例子:主機傳入的是來源描述子,不是把來源的所有資料讀回來再寫一次。

SCT
Status Code Type;指定完成狀態碼所屬類別,需與 SC 一起解讀。
SC
Status Code;指定所選 SCT 類別中的完成結果。
來源:NVM Command Set 1.3 §2.2; 3.1; 3.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.2; 3.1; 3.3, 文件頁 22-27, PDF 頁 22-27

把流程對回規格條件

08.03.NVM I/O controller 必須支援 Read 與 Write;其他列出的 NVM 命令依各能力條件判斷。Opcode 低兩 bits 表示資料傳輸方向,狀態值必須連同 SCT 解讀,不能只用 SC 數值查錯誤。

I/O controller
I/O controller,可執行使用者資料 I/O command 的 controller 類型。
I/O
Input/Output,對 namespace 執行資料輸入與輸出的操作類別。
來源:NVM Command Set 1.3 §2.2; 3.1; 3.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.2; 3.1; 3.3, 文件頁 22-27, PDF 頁 22-27

能力探索、Opcode 與狀態
命令或識別值用途或支援要求解讀時的上下文
Read 02h / Write 01h必要 I/O 命令Administrative controller 不處理 I/O
Get LBA Status 86h選用 Admin 命令I/O controller 適用能力
SC 80h依 SCT 區分 LBA Out of Range 等同時記錄 opcode、NSID、SCT、SC、DNR
FID / LID05h、0Ah 為必要 NVM Features功能支援不等於要求寫入 Persistent Event Log
Administrative controller
Administrative controller,以管理為目的且不執行使用者資料 I/O command 的 controller 類型。
Admin
Administrative,建立、設定、查詢或管理 controller 與 queue 的控制路徑。
DNR
Do Not Retry,CQE status 中提示以相同 command 重試預期不會成功的 bit。
LID
Log Page Identifier;指定要讀取哪一種 log page 的編號。
閱讀相關規格圖表 → 能力探索、Opcode 與狀態

09 Read/Write 的資料與完成條件

用一個四區塊要求連接格式、地址與資料量

先從格式得知每個 LBA 的資料量

09.01.假設 namespace 使用每 block 4096 bytes、沒有獨立 metadata 的格式。要讀 LBA 100 到 103,共 4 blocks,因此 SLBA=100,NLB=3。NLB 是數量減 1,SLBA 是起點,兩者不能套同一換算。

SLBA
Starting LBA;指定命令範圍的起點。
NLB
Number of Logical Blocks;本報告命令/status descriptors 的該欄為 0-based。DSM 的 LLB 另為1-based。

再準備與要求相符的 buffer

09.02.資料總量是 4×4096=16384 bytes。DPTR 應描述這份量所需的主機記憶體;若資料跨 memory pages,再用 PRP 或 SGL 的規則組合。LBA 大小與 memory page 大小即使這次恰好相同,仍是不同概念。

最後解讀成功的含義

09.03.Read 成功表示完成這次資料讀取。Write 還要配合 cache、FUA 與 Flush 等規則討論持久性;不能把任一成功 CQE 都直接翻成所有資料已永久保存。

CQE
Completion Queue Entry,CQ 中的一筆完成結果資料結構。
FUA
Force Unit Access;要求 nonvolatile-media 語意,不自動建立其他命令的順序。
來源:NVM Command Set 1.3 §3.3.4; 3.3.6

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4; 3.3.6, 文件頁 48-51,53-56, PDF 頁 48-51,53-56

把流程對回規格條件

09.05.Read/Write 以 SLBA 與 0-based NLB 指定連續範圍。Read 的 DPTR 是目的 buffer,Write 的 DPTR 是來源 buffer;FUA=1 要求使用 nonvolatile media,並沒有隱含其他命令的順序。

來源:NVM Command Set 1.3 §3.3.4; 3.3.6

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4; 3.3.6, 文件頁 48-51,53-56, PDF 頁 48-51,53-56

Read/Write 的資料與完成條件
命令欄位描述的資料或操作哪些選擇會改變解讀
CDW10 / CDW11SLBA 低/高 32 bitsNLB=0 仍有一個 block
CDW12LR、FUA、PRINFO、STC、CETYPE、NLBRead 的 DTYPE 區是 reserved
CDW13CETYPE 決定 DSM 或 CEV 解讀Write 另含 DTYPE/DSPEC
MPTR單獨傳 metadata 時使用不可把一部分 metadata 分到兩種機制
CETYPE
Command Extension Type;選擇命令延伸欄位 CEV 的用途。
PRINFO
Protection Information;命令內的 PRACT 與 PRCHK 組合欄位。
DSPEC
Directive Specific;內容由 Directive 類型決定。
DTYPE
Directive Type;指定命令使用哪一類 Directive。
CDW
CDW(Command Dword);命令中的 32-bit 欄位單位,例如 CDW10 的 10 是欄位 index,不是 byte offset。
CEV
Command Extension Value;內容依 CETYPE 的選擇解讀。
DSM
Dataset Management;由 host 提供資料範圍的使用與配置提示。
STC
Storage Tag Check;獨立於三位元 PRCHK,STS=0 時忽略。
LR
Limited Retry;指定受 Error Recovery policy 約束的重試行為。
閱讀相關規格圖表 → Read/Write 的資料與完成條件

10 命令順序與 Compare-and-Write

10.01.考慮「目前資料仍是 A,才更新成 B」的需求。若先送 Compare,收到成功後才送獨立的 Write,另一個寫入者可能在兩筆命令之間修改資料。Compare 的成功只描述當時的比較結果,不會替後面的獨立 Write 保留那個條件。

10.02.融合的 Compare-and-Write 把比較與更新連成有條件的原子操作。主機仍需遵守融合命令的提交方式、相同範圍,以及回報的大小和邊界限制。原子性在這裡描述這個操作的不可分割性,不等於任意長度的多筆命令都變成一個交易。

來源:NVM Command Set 1.3 §2.1.2-2.1.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.2-2.1.3, 文件頁 14-15, PDF 頁 14-15

把流程對回規格條件

10.03.一般命令不因同在一個 SQ 就取得 LBA 相依順序;host 必須建立必要順序。Fused Compare-and-Write 先比對,成功才寫入;Compare 失敗則 Write 以 Failed Fused Command 類別中止。

SQ
Submission Queue,主機放入命令的提交佇列。
來源:NVM Command Set 1.3 §2.1.2-2.1.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.2-2.1.3, 文件頁 14-15, PDF 頁 14-15

命令順序與 Compare-and-Write
操作方式或限制保證的內容成立所需的條件
Ordinary I/O同 LBA 的 Read/Write 完成先後無保證host 以完成相依控制
Fused pairCompare 與 Write 的 range 相同範圍不符 should 拒絕
ACWU / NACWU限制 fused atomic update 大小還要遵守 atomic boundaries
NACWU
Namespace Atomic Compare and Write Unit;namespace 的 fused compare-and-write 大小限制。
ACWU
Atomic Compare and Write Unit;controller 的 fused compare-and-write 大小限制。
閱讀相關規格圖表 → 命令順序與 Compare-and-Write

11 正常、斷電與多段原子性

11.01.原子性描述更新是否可能被觀察到只完成一部分。正常運作與突然斷電是不同情境,所以規格分別回報 normal 與 power-fail 的保證。這不是效能排名,也不是單一命令只要小於某個數量就一定符合;起始位置和是否跨過指定邊界同樣重要。

11.02.假設解碼後的邊界大小是 8 個區塊,從 LBA 4 寫 12 個區塊會跨越 LBA 8 的邊界。在允許多段原子性的模式下,可以分成 4–7 與 8–15 兩段理解;每段有保證,並不表示兩段必須同時成功或同時失敗。這個區分能避免把儲存裝置的保證誤當成資料庫交易。

來源:NVM Command Set 1.3 §2.1.4; 4.1.3.4; 5.9

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4; 4.1.3.4; 5.9, 文件頁 15-21,66-67,165, PDF 頁 15-21,66-67,165

把流程對回規格條件

11.03.AWUN/NAWUN 與 AWUPF/NAWUPF 分別描述正常及失敗條件原子性。Single Atomicity Mode 跨 boundary 不保證整筆原子;Multiple Atomicity Mode 在每個 boundary 切成各自原子的 subranges,並不承諾整筆一起成功。

NAWUPF
Namespace Atomic Write Unit Power Fail;namespace 失敗條件的原子寫入大小;依適用與零值規則判讀。
AWUPF
Atomic Write Unit Power Fail;失敗條件原子大小的0-based欄位。
NAWUN
Namespace Atomic Write Unit Normal;namespace 正常情況原子寫入大小;依適用與零值規則判讀。
來源:NVM Command Set 1.3 §2.1.4; 4.1.3.4; 5.9

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4; 4.1.3.4; 5.9, 文件頁 15-21,66-67,165, PDF 頁 15-21,66-67,165

正常、斷電與多段原子性
原子性欄位或模式規定什麼範圍不能由此推論什麼
AWUN / AWUPF大小採 0-based 編碼AWUPF 不大於 AWUN
NABO / NABSN / NABSPF邊界在 offset + k × size需依各欄位換算與未回報規則
MAM每個 atomic subrange 獨立保證fused 仍用 Single 模式
FID 0Ah.DNDN=1 可不遵守 normal atomicity仍須遵守 power-fail 保證
NABSPF
Namespace Atomic Boundary Size Power Fail;失敗條件的原子邊界大小。
offset
offset;從指定起點算出的位移。它回答「離起點多遠」,不等於 index。
NABSN
Namespace Atomic Boundary Size Normal;正常情況的原子邊界大小。
NABO
Namespace Atomic Boundary Offset;決定第一個 boundary 的位置。
MAM
Multiple Atomicity Mode;跨 boundary 的命令分成各自原子的 subranges。
DN
Write Atomicity Normal 的 Disable Normal;不免除 power-fail atomicity。
閱讀相關規格圖表 → 正常、斷電與多段原子性

12 Compare 與 Verify 解決不同問題

12.01.Compare 回答「儲存內容是否等於主機提供的預期內容」,因此主機需要提供比較資料。Verify 回答的是所指定資料的完整性檢查是否通過,不需要把預期資料交給控制器,也不把資料傳回主機。兩者的成功代表不同事情。

12.02.例如主機想知道一段空間是否全為 0,可以提供全零資料進行 Compare。單靠 Verify 成功無法得到相同結論,因為一段內容不是全零的資料,也可以通過完整性檢查。讀大小限制時還要注意 variant:同一欄位可能表示建議大小,也可能是不能超過的上限。

來源:NVM Command Set 1.3 §3.3.1; 3.3.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1; 3.3.5, 文件頁 27-30,51-53, PDF 頁 27-30,51-53

把流程對回規格條件

12.03.Compare 比較媒體資料與 host 提供的 buffer;Verify 檢查已儲存資料完整性而不把資料或 metadata 回傳 host。兩者要求 PRACT=0;Verify 與 Read 偵測到的失敗不必使用相同錯誤碼。

來源:NVM Command Set 1.3 §3.3.1; 3.3.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1; 3.3.5, 文件頁 27-30,51-53, PDF 頁 27-30,51-53

Compare 與 Verify 解決不同問題
命令或大小欄位實際檢查什麼結果的解釋範圍
Comparemiscompare 回 Compare Failurehost 與 media 兩側 PI 可分別檢查
Verify沒有資料 buffer 傳輸驗證量仍計入 Data Units Read
VSL / NVMVFYSvariant 決定建議大小或硬上限非零 VSL 以 2^n × minimum page size 表示
閱讀相關規格圖表 → Compare 與 Verify 解決不同問題

13 Copy:描述來源、連續目的與部分失敗

把多個來源範圍接到一個目的範圍

先描述資料排列

13.01.假設來源是同一 namespace 的 LBA 10–11 與 30–32,目的從 LBA 100 開始。目的接收到 5 個 blocks,依描述子順序對應到 100–104;來源之間不需要連續。

分別編碼來源與目的

13.02.每個來源 descriptor 有自己的起點及長度,命令的 destination 起點只有一個。NR 決定有效來源描述子數,不能把它當成總 blocks;總量要逐筆計算後加總。

NR
Range count 的 0-based 欄位;實際 descriptors 數為 NR+1。

把格式與保護要求套回每一段

13.03.描述子格式、控制器支援的數量和長度限制,以及來源與目的保護資訊的處理都要成立。命令縮短主機搬資料的流程,並沒有取消各範圍的格式與權限檢查。

來源:NVM Command Set 1.3 §3.3.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, 文件頁 30-44, PDF 頁 30-44

把流程對回規格條件

13.05.Copy 把一個或多個 source ranges 依 descriptor 順序接成單一連續目的範圍。Format 0h/1h 來源與目的在同一 namespace;2h/3h 帶 SNSID,需 controller 支援與 host 啟用。失敗 CQE DW0 是最低未成功 source index,後面的 ranges 仍可能已複製。

SNSID
Source Namespace Identifier;指定 Copy 的來源 namespace。
來源:NVM Command Set 1.3 §3.3.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, 文件頁 30-44, PDF 頁 30-44

Copy:描述來源、連續目的與部分失敗
描述子或行為資料如何安排限制及完成結果
NR / NLBsource count 與各範圍 block count 都是 0-based檢查 MSRC、MSSRL、MCL
FCO2h/3h 可要求 fast copy onlyFast Copy Not Possible 再看 DNR
Overlap2h/3h 禁止同 namespace source 與 destination 重疊0h/1h 重疊結果需依原子條件另讀
NVMCSA1.3 將目的寫入視為單一 write command仍受 MAM、大小及 boundary 限制
FCO
Fast Copy Only;要求適用來源以 fast copy 方法執行。
閱讀相關規格圖表 → Copy:描述來源、連續目的與部分失敗

14 Copy 的 PI 格式相容與轉換

14.01.複製資料時,來源與目的的保護資訊不一定能逐 byte 原樣搬移。兩端格式相同時,可以依命令選項保留或重新產生;一端有 PI、另一端沒有時,則需要規格允許的插入或移除方式。這些選擇還涉及讀取端與寫入端各自的 PRACT。

14.02.特別要分清楚 metadata 是否全部都是 PI。如果 16 bytes metadata 中只有 8 bytes 是 PI,其餘 8 bytes 還有其他用途;移除 PI 不代表可以連其他 metadata 一起丟棄。因此,兩端的資料大小相同,並不足以證明能使用有 PI 與無 PI 之間的轉換特例。

來源:NVM Command Set 1.3 §3.3.2.3-3.3.2.4; 5.3.2.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2.3-3.3.2.4; 5.3.2.5, 文件頁 40-43,146-150, PDF 頁 40-43,146-150

把流程對回規格條件

14.03.Copy 的 matching formats 要比對資料大小、metadata 大小、DPS、PIFA、有效 LBSTM、PIF/QPIF 與 STS。Corresponding PI formats 只容許有 PI 的一方 metadata 全為 PI,另一方完全沒有 metadata;不能拿 Copy 任意轉換資料格式。

來源:NVM Command Set 1.3 §3.3.2.3-3.3.2.4; 5.3.2.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2.3-3.3.2.4; 5.3.2.5, 文件頁 40-43,146-150, PDF 頁 40-43,146-150

Copy 的 PI 格式相容與轉換
來源與目的保護格式如何處理保護資訊允許這種處理的條件
PI → PI, 0/0matching formats:pass-through保護檢查仍由 checking bits 控制
PI → PI, 1/1matching formats:replace讀端檢查,寫端產生 PI
No PI → PIcorresponding formats 且 write PRACT=1:insert目的 metadata 不得包含其他用途
PI → No PIcorresponding formats 且 read PRACT=1:strip來源 metadata 只能是 PI
閱讀相關規格圖表 → Copy 的 PI 格式相容與轉換

15 Dataset Management 與三種 processing limits

15.01.Dataset Management 讓主機描述一組 LBA 範圍及其使用特性,例如資料不再需要。它與直接搬移資料的 Read、Write 不同,很多資訊具有提示性質。因此必須分開看主機傳入了什麼、控制器必須處理到什麼程度,以及配置狀態最後可能如何改變。

15.02.三個限制分別涉及範圍數量、單一範圍大小及總大小。variant 又決定超出限制時的處理方式:不能只讀其中一個上限,就推論整筆命令必須失敗或所有區塊都已被釋放。計算部分可處理的範圍時,也要把第二段只處理一部分的情況算進去。

來源:NVM Command Set 1.3 §3.3.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, 文件頁 44-48, PDF 頁 44-48

把流程對回規格條件

15.03.Dataset Management 是 advisory:處理 attributes 不等於一定執行 deallocate。NR 是 0-based,16-byte descriptor 的 LLB 是 1-based;DMRL、DMRSL、DMSL 分別約束 range 數、單一 range 長度與總長度。

DMRSL
Dataset Management Range Size Limit;單一 range 的 logical block 處理數量限制。
DMRL
Dataset Management Ranges Limit,實際 range 數上限。
DMSL
Dataset Management Size Limit;整筆命令的 logical block 處理數量限制。
LLB
DSM 的 Length in Logical Blocks;1-based,與 Read/Write 的 NLB 編碼不同。
來源:NVM Command Set 1.3 §3.3.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, 文件頁 44-48, PDF 頁 44-48

Dataset Management 與三種 processing limits
屬性或限制組合控制器需要如何處理可否由成功推論已釋放空間
AD / IDW / IDRdeallocate/整體寫入/整體讀取 hints可組合使用
Limits nonzero, variant=0超過任一 limit 回 Command Size Limit Exceeded全部符合則須處理 attributes
Limits nonzero, variant=1宜處理符合 limits 的部分不以此原因回 Size Limit Exceeded
All limits=0variant=1:不回報 limits;variant=0:不支援三欄需全零或全非零
閱讀相關規格圖表 → Dataset Management 與三種 processing limits

16 Deallocated/unwritten 讀取規則

16.01.區塊被解除配置,描述的是空間配置狀態;它並不直接回答下一次 Read 應回傳哪些 bytes。讀取行為還要看裝置回報的規則,以及主機是否啟用對 deallocated 或 unwritten 區塊的錯誤回報。能力存在與功能已啟用,也要分開確認。

16.02.因此,讀到全零可能來自未寫入或解除配置後的回傳規則,不能單憑這次結果推論資料曾被安全清除。若讀取回報錯誤,也可能是主機啟用 DULBE 後所要求的行為。理解錯誤時,要把命令、區塊狀態與設定放在一起。

DULBE
Deallocated or Unwritten Logical Block Error Enable,需 namespace DAE 支援。
來源:NVM Command Set 1.3 §3.3.3.2.1; 4.1.3.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3.2.1; 4.1.3.3, 文件頁 47-48,66, PDF 頁 47-48,66

把流程對回規格條件

16.03.支援且啟用 DULBE 時,Copy、Read、Verify、Compare 存取 deallocated/unwritten blocks 會失敗。未啟用時,DRB=001b 回零、010b 回 FFh、000b 可選其一;同 block 在下一次寫入前的回值須保持 deterministic。

DRB
Deallocated Read Behavior;指定 deallocated logical block 的資料回傳規則。
來源:NVM Command Set 1.3 §3.3.3.2.1; 4.1.3.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3.2.1; 4.1.3.3, 文件頁 47-48,66, PDF 頁 47-48,66

Deallocated/unwritten 讀取規則
能力或讀取設定如何影響讀取結果判斷時需同時讀什麼
DAE / DULBEDAE 是 capability,DULBE 是啟用DULBE 預設 0
DRB=000b不是任意舊資料依 §3.3.3.2.1 為零或 FFh
PI after deallocationtag bytes 回 FFh;Guard 為 FFh 或 CRC配合 DLFEAT.GDS

17 Write Uncorrectable、Write Zeroes 與整體清零

17.01.Write Uncorrectable 用來標記指定區塊,使後續讀取依規格回報無法修正的資料;Write Zeroes 則要求將指定範圍表現為零值。這兩個命令處理的結果不同,不能只因它們都沒有一般 Write 的資料 buffer,就視為同一種操作。

17.02.Write Zeroes 的命令成功,還需要結合命令模式及回傳欄位判斷影響範圍。當主機要求整個 namespace 清零時,LBACZ 是確認整體結果的重要資訊。若回報只代表指定 range,就不能把命令成功延伸成整個 namespace 都已清零。

LBACZ
LBAs Cleared to Zero;成功 NSZ 命令的範圍確認 bit。
來源:NVM Command Set 1.3 §3.3.7-3.3.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.7-3.3.8, 文件頁 56-61, PDF 頁 56-61

把流程對回規格條件

17.03.Write Uncorrectable 將範圍標為無法修復的讀取錯誤;Write Zeroes 使成功的後續讀取資料及非 PI metadata 回零。NSZ=1 的整個 namespace 清零需 NSZS、DEAC=1 與零值 deallocation read behavior,且 host 應檢查 CQE.LBACZ。

DEAC
Write Zeroes 的 deallocate 選擇;與 namespace 支援、NSZ、回讀規則一起判讀。
NSZ
Namespace Zeroes;要求全 namespace 清零,需額外 capability 與 DEAC 條件。
來源:NVM Command Set 1.3 §3.3.7-3.3.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.7-3.3.8, 文件頁 56-61, PDF 頁 56-61

Write Uncorrectable、Write Zeroes 與整體清零
命令或回傳欄位改變或回報什麼確認結果所需的條件
Write Uncorrectable標記 block 後,讀取可能報 Unrecovered Read ErrorWUSL 與 NVMWUSV 需成對看
Write Zeroes PIPRCHK=000b、STC=0PRACT=1 宜用於產生有效 PI
WZSL / WZDSL依 DEAC 選適用 limitNSZ=1 不受這兩欄限制
LBACZ成功 NSZ 命令回 1 才表示全 namespace回 0 是指定 range
PRCHK
Protection Information Check;Guard、Application、Reference 的檢查 bits。
WZDSL
Write Zeroes with Deallocate 的專用大小限制;不可直接沿用 WZSL。
WUSL
Write Uncorrectable Size Limit;Write Uncorrectable 的大小限制,需結合 variant 能力判讀。
閱讀相關規格圖表 → Write Uncorrectable、Write Zeroes 與整體清零

18 16/32/64b Guard 與 Qualified PI

18.01.PI 不只有 CRC。它包含 Guard、Application Tag,以及配置給 Storage Tag、Reference Tag 的空間。Guard 寬度選定後,PI 的整體格式也跟著確定;STS 再決定其中多少 bits 分給 Storage Tag,剩餘部分才交給 Reference Tag。

18.02.以 64-bit Guard 為例,扣除 Guard 與 Application Tag 後,有 48 bits 可分給兩種 tags。若 STS=18,Storage Tag 使用 18 bits,Reference Tag 使用 30 bits。增加 STS 是重新分配同一塊空間,不會把 PI 自動變大。Qualified PI 還會引入另外的格式及遮罩限制。

來源:NVM Command Set 1.3 §5.3.1; 4.1.5.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1; 4.1.5.3, 文件頁 97-102,130-138, PDF 頁 97-102,130-138

把流程對回規格條件

18.03.16b Guard PI 共 8 bytes;32b 與 64b Guard PI 各 16 bytes。Application Tag 固定 16 bits,Storage/Reference Space 分別為 32、80、48 bits。32b/64b 格式限 logical block data size 至少 4 KiB。

來源:NVM Command Set 1.3 §5.3.1; 4.1.5.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1; 4.1.5.3, 文件頁 97-102,130-138, PDF 頁 97-102,130-138

16/32/64b Guard 與 Qualified PI
Guard 格式PI 中的空間分配Storage Tag 大小或遮罩限制
16b Guard2-byte Guard + 2-byte App + 4-byte spaceSTS=0..32
32b Guard4-byte Guard + 2-byte App + 10-byte spaceSTS=16..64
64b Guard8-byte Guard + 2-byte App + 6-byte spaceSTS=0..48
STMLAbit mask/byte mask/no maskqualified type 與 QPIFS 共同決定適用
閱讀相關規格圖表 → 16/32/64b Guard 與 Qualified PI

19 CRC 參數、位元順序與已知向量

19.01.CRC 的結果由輸入資料與整套計算參數共同決定。除了多項式,還有初始值、位元反射方式與最後的 XOR。兩個程式即使都宣稱計算 CRC-64,如果採用不同參數,也不應期待得到相同結果。資料進入計算的順序和計算結果的儲存方式也要分開理解。

19.02.已知向量可以提供一個有明確輸入和輸出的對照。例如長度同為 4 KiB 的全零資料與全 FFh 資料,因為內容不同,Guard 也不同。比較向量時,必須同時保留輸入長度、輸入內容及輸出表示方式;只列一串十六進位數字,讀者無法知道它如何得到。

來源:NVM Command Set 1.3 §5.3.1.1-5.3.1.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.1-5.3.1.3, 文件頁 131-137, PDF 頁 131-137

把流程對回規格條件

19.03.32b Guard 使用 CRC-32C;64b Guard 使用 NVM Express 64b CRC,polynomial AD93D23594C93659h、全一 Init/XorOut、RefIn/RefOut=true。不能只用「CRC64」名稱選任意 polynomial。

來源:NVM Command Set 1.3 §5.3.1.1-5.3.1.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.1-5.3.1.3, 文件頁 131-137, PDF 頁 131-137

CRC 參數、位元順序與已知向量
CRC 或計算範圍定義或已知結果比對前須確認什麼
CRC-16SBC-4 定義的 Guard CRCNVM 不支援 DIX 的 optional IP checksum
CRC-32Cpolynomial 1EDC6F41h4 KiB zero vector → 98F94189h
CRC-64/NVME反射式 register 算例 123456789 → AE8B14860A799888h4 KiB zero vector → 6482D367EB22B64Eh
Coveragedata + PI 前的 metadata排除 PI 本身
閱讀相關規格圖表 → CRC 參數、位元順序與已知向量

20 Storage/Reference Tag 的 Dword 封裝

20.01.Tag 在概念上是一個數值,但命令格式可能把它分散在幾個 Dword。閱讀時先確定 Guard 格式與 STS,再決定每段 bits 屬於哪一種 tag。不能把 CDW14 永遠當成完整的 Reference Tag,因為某些格式會把它的高位分給 Storage Tag。

Dword
Dword(Double word);32 bits,也就是 4 bytes。對比 word=16 bits;例如 zero-based dword count=3 代表 4 個 Dwords,也就是 16 bytes。

20.02.64-bit Guard、STS=18 的例子中,Storage Tag 的高 16 bits 放進 CDW3 的低 16 bits,剩餘 2 bits 放在 CDW14 的高位;Reference Tag 使用 CDW14 其餘 30 bits。先拆分再組合,可以清楚看到哪些 bits 會改變,而不用把十六進位值當成必須記憶的常數。

來源:NVM Command Set 1.3 §5.3.1.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, 文件頁 137-141, PDF 頁 137-141

把流程對回規格條件

20.03.Storage Tag 使用 Storage/Reference Space 的高 STS bits,其餘低 bits 是 Reference Tag。命令以 CDW2、CDW3、CDW14 的最多 80 bits 傳入實際或 expected tags;不同 Guard 格式使用不同子集合。

來源:NVM Command Set 1.3 §5.3.1.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, 文件頁 137-141, PDF 頁 137-141

Storage/Reference Tag 的 Dword 封裝
保護格式與 STSStorage/Reference Tag 放在哪裡欄位寬度如何分配
16b Guard, STS=0CDW14 為 32-bit referenceCDW2/3 對此 tag 忽略
32b Guard, STS=32CDW2 low16 + CDW3 high16 是 StorageCDW3 low16 + CDW14 為 48-bit Reference
64b Guard, STS=18CDW3 low16 + CDW14 high2 是 StorageCDW14 low30 是 Reference
閱讀相關規格圖表 → Storage/Reference Tag 的 Dword 封裝

21 PRACT 與 PRCHK/STC 的組合

把保護資訊看成與資料一起核對的證據

先確定資料格式容納哪些欄位

21.01.PI 格式決定 Guard 與各 tag 的大小、位置及使用方式。Storage Tag 與 Reference Tag 的分界還可能由格式設定決定,不能以固定切半的方式解讀每種格式。

再選這次命令要檢查什麼

21.02.PRCHK 中的檢查選擇與 PRACT 的插入/移除行為影響此次操作。格式有某個 tag,與本次命令要求檢查它,是兩個層次;其他有效性與不檢查的特殊條件仍要一起看。

用預期值與實際值說明結果

21.03.Guard 檢查資料內容,tag 檢查相應識別或位置資訊。若 Guard 正確而 Reference Tag 不符合預期,不能說「資料 bytes 正確所以整筆必定成功」;選中的檢查仍可能指出錯置。

來源:NVM Command Set 1.3 §2.1.5; 5.3.2-5.3.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.5; 5.3.2-5.3.3, 文件頁 21-22,141-152, PDF 頁 21-22,141-152

把流程對回規格條件

21.05.PRACT 決定 PI 的傳遞、插入、移除或取代;PRCHK 的 Guard/Application/Reference bits 與獨立 STC 決定檢查要求。PRACT=1 且 MS>PI size 時,Read 仍傳回全部 metadata,不能一律解讀為刪除 PI。

來源:NVM Command Set 1.3 §2.1.5; 5.3.2-5.3.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.5; 5.3.2-5.3.3, 文件頁 21-22,141-152, PDF 頁 21-22,141-152

PRACT 與 PRCHK/STC 的組合
操作或保護條件控制器如何處理 PI對檢查或傳輸量的影響
Write, PRACT=1MS=PI 時插入;MS>PI 時取代 PI此生成分支忽略 PRCHK/STC
Read, PRACT=1先做要求的檢查;MS=PI 才移除MS>PI 仍回 metadata 與 PI
Type 1 / Type 2Reference 每個 block 遞增Type1 初值須等於對應 SLBA 低 bits
Type 3不宜比對 computed reference若因 RTCHK 拒絕,使用 Invalid Protection Information
Disable sentinelsType 1/2:Application Tag=FFFFh 時停用所有 PI checks;Type 3 另要求 Reference Tag(若有)也全一不受 PRCHK/STC 設定影響
Masksmask bit=0 不比較Storage mask 另受 STMLA 約束
RTCHK
Reference Tag Check;要求 Reference Tag 檢查。
閱讀相關規格圖表 → PRACT 與 PRCHK/STC 的組合

22 基本 Features 的作用域與例外

22.01.Feature 會改變控制器或 namespace 的某項行為,但每個 Feature 的資料格式、作用對象與保存方式都可能不同。設定前先確認是在改整個控制器還是某個 namespace,再看值放在命令欄位或另傳資料結構。相同 Get/Set Features 命令不表示資料結構可以共用。

22.02.TLER 是從錯誤復原開始計時的限制。TLER=5 對應 500 ms,並不是從主機提交命令那刻開始的整體期限。LBA Range Type 的用途提示也是類似的區分:告訴軟體一段空間的用途,不會因此提供權限隔離或保證資料不被覆寫。

來源:NVM Command Set 1.3 §4.1.3.1-4.1.3.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.1-4.1.3.4, 文件頁 64-67, PDF 頁 64-67

把流程對回規格條件

22.03.FID 03h 描述 namespace LBA ranges,05h 控制 namespace error recovery,0Ah 控制 controller normal atomicity。Power Management 的 NVM 補充以 NPWG 大小的 Read 作為 Idle I/O Exit Latency Limit 的參考命令。

來源:NVM Command Set 1.3 §4.1.3.1-4.1.3.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.1-4.1.3.4, 文件頁 64-67, PDF 頁 64-67

基本 Features 的作用域與例外
Feature 或欄位設定的行為與單位作用範圍或例外
FID 03h4096-byte contiguous buffer;最多 64 個 64-byte entriesNUM 是 0-based;新 Set 取代前一次
FID 05h.TLER100 ms 單位,從 error recovery 開始計時0 代表不設 timeout;適用 LR 命令
FID 03h attributesHide/Overwriteable 是 host 使用提示不是安全隔離或資料保護機制
FID 02h extensionidle exit 參考 NPWG-sized Read其他命令可超過該 latency limit
閱讀相關規格圖表 → 基本 Features 的作用域與例外

23 AER、SMART 與錯誤記錄的 NVM 補充

23.01.事件通知是提醒主機有事需要查看,log 則提供可以閱讀的內容。事件設定、事件回報與取得 log 是不同步驟,不能因讀到某種 log 就假設相關通知已啟用。NVM Command Set 另外補充某些計數應納入哪些命令,以及欄位如何解讀。

23.02.計數的名字相似,也可能採不同統計口徑。例如 Verify 沒有把資料傳回主機,仍可能納入指定的讀取資料量計數。錯誤位置同樣如此:Self-test 的 FLBA 可指出其中一個失敗區塊,不能套用另一個 log 對「最低失敗 LBA」的定義。

FLBA
Failing LBA,NVM Command Set 定義為造成 self-test failure 的其中一個 logical block address。
來源:NVM Command Set 1.3 §1.4.2; 4.1.1; 4.1.3.5; 4.1.4.1-4.1.4.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §1.4.2; 4.1.1; 4.1.3.5; 4.1.4.1-4.1.4.4, 文件頁 10-11,62,67,75-77, PDF 頁 10-11,62,67,75-77

把流程對回規格條件

23.03.NUSE 的頻繁改變及 ANA 造成的 capacity 回報變動不產生 Namespace Attribute Changed 事件。Error Information 的 LBA 指最低發生錯誤的 LBA;Self-test FLBA 只在 valid bit 設定時有效,且可只代表多個失敗 blocks 中的一個。

ANA
Asymmetric Namespace Access;描述同一 namespace 經不同 controllers 存取時的路徑狀態。
來源:NVM Command Set 1.3 §1.4.2; 4.1.1; 4.1.3.5; 4.1.4.1-4.1.4.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §1.4.2; 4.1.1; 4.1.3.5; 4.1.4.1-4.1.4.4, 文件頁 10-11,62,67,75-77, PDF 頁 10-11,62,67,75-77

AER、SMART 與錯誤記錄的 NVM 補充
事件或計數記錄及啟用方式哪些解讀容易混淆
LBASIN / RLCCNFID0Bh bits 13/22分別啟用 LBA Status/Rate Limiting notices
SMART units先換算 512-byte units,再套 Base counter 編碼不是每個 4 KiB block 加一個 Data Unit
Read categoriesData Units Read 含 Verify;Host Read 含 CopyCompare、Read 為兩類共同項
Persistent Event 06hcreate/single-delete 有 FLBAS、DPSdelete-all 時這兩欄 reserved
閱讀相關規格圖表 → AER、SMART 與錯誤記錄的 NVM 補充

24 LBA Status:通知、掃描與修復流程

24.01.LBA Status 讓主機了解特定範圍或已記錄的 LBA 狀況。主機要求的查詢範圍、控制器實際掃描到哪裡,以及這次 buffer 裡放得下多少描述子,是三個不同限制。因此,取得一批結果不一定代表整個查詢已完成。

24.02.可變長度的結果與分段讀取還需要版本一致性。如果讀到一半資料更新,前後兩段可能不再屬於同一份記錄。讀取流程因此需要結合 generation、保留事件的設定與最後的確認,而不是單純從 offset 0 一直增加到結尾。

來源:NVM Command Set 1.3 §4.1.3.6; 4.1.4.5; 4.2.1; 5.2.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.6; 4.1.4.5; 4.2.1; 5.2.1, 文件頁 67-68,77-79,114-122, PDF 頁 67-68,77-79,114-122

把流程對回規格條件

24.03.LID 0Eh 先指出值得調查的 namespace ranges;Get LBA Status 再回詳細 descriptors。ATYPE=02h 回 tracked allocated LBAs,10h 掃描並回 tracked/untracked 候選,11h 只回 tracked 候選且不做 foreground scan。

ATYPE
Get LBA Status Action Type;02h allocated,10h scan,11h tracked。
來源:NVM Command Set 1.3 §4.1.3.6; 4.1.4.5; 4.2.1; 5.2.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.6; 4.1.4.5; 4.2.1; 5.2.1, 文件頁 67-68,77-79,114-122, PDF 頁 67-68,77-79,114-122

LBA Status:通知、掃描與修復流程
查詢或回報欄位數值代表什麼讀取時的判斷
MNDW / RLMNDW 是 0-based dwords;RL=0 到 NSZE−1不是 RL=0 查一個 block
NLSD / CMPC實際 descriptor 數/完成原因CMPC=1 尚有資料或 scan 未完成;2 完成
LSIPI / LSIRI100 ms 單位;poll interval 不可由 host 改Set 回傳最接近支援值
RAE / LSGCRAE=1 分段讀,RAE=0 清事件並允許更新重讀 header 檢查 generation
TLBAAG02h 可用較大 allocation granularity混合 allocated/deallocated unit 會整段回 allocated
CMPC
Completion Condition;描述 Get LBA Status 是否已完成所要求的範圍。
MNDW
Maximum Number of Dwords;限制 Get LBA Status 回傳資料長度。
NLSD
Number of LBA Status Descriptors;實際 descriptor 數量。
RAE
Retain Asynchronous Event,Get Log Page 是否保留相關 asynchronous event 的 selector。
閱讀相關規格圖表 → LBA Status:通知、掃描與修復流程

25 Sanitize 與 Media Verification 的 NVM 規則

25.01.Sanitize 的啟動命令可以先完成,清除作業仍在背景執行。主機需要另外讀取狀態與進度,才能知道作業是否成功結束。一般 Read 的資料保護規則,也不能直接套用到清除後的 Media Verification 狀態。

25.02.Media Verification 的目的是讓主機觀察清除後的媒體資料,因此指定 Read 的允許檢查與回傳狀態有特別規定。理解這一段時,要先確定控制器所處狀態,再解讀命令結果。只看到「成功」或看到全零資料,都不能跳過狀態與操作範圍的判斷。

來源:NVM Command Set 1.3 §4.1.7; 5.12

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.7; 5.12, 文件頁 113,173-175, PDF 頁 113,173-175

把流程對回規格條件

25.03.NVM Sanitize 命令採 Base 定義,背景 operation 的資料語意由 §5.12 補充。成功後 Block Erase 回值由廠商定義、Crypto Erase 回值不確定、Overwrite 依 pattern 規則;若 block 已 deallocate,則改用 deallocated-read 規則。

來源:NVM Command Set 1.3 §4.1.7; 5.12

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.7; 5.12, 文件頁 113,173-175, PDF 頁 113,173-175

Sanitize 與 Media Verification 的 NVM 規則
清除狀態或讀取方式控制器回報什麼允許的檢查與結果
LID81h追蹤 operation status/progress啟動命令成功不是 operation 完成
Error Informationsanitize 期間 NVM LBA 欄位回 0僅此 NVM 補充,仍須遵守 Base command allowlist
Media Verification ReadPRCHK=000b、STC=0要求 checking 則 Invalid Field in Command
Allocated media可讀則回實際資料;不可讀則錯誤符合條件回 Successful Media Verification Read
閱讀相關規格圖表 → Sanitize 與 Media Verification 的 NVM 規則

26 對齊、granularity 與效能提示

26.01.對齊描述起點是否落在指定邊界上;粒度描述長度是否以指定單位成組。兩筆寫入可以同樣長,卻因起點不同而跨過不同數量的內部處理單位。所以只把 I/O 長度調成建議大小,未必同時符合起點對齊要求。

26.02.例如建議單位是 8 個區塊,LBA 8–15 正好涵蓋一個單位,LBA 9–16 則橫跨兩個單位。後者仍是 8 個區塊,但控制器可能需要處理兩端的其他資料。這些欄位提供效能建議;原子性與 Key Per I/O 的必要對齊要求,仍要各自判斷。

來源:NVM Command Set 1.3 §5.2.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, 文件頁 122-129, PDF 頁 122-129

把流程對回規格條件

26.03.NPWG/NPWA、NPRG/NPRA 分別描述寫入與讀取的建議大小及對齊,NOWS/NORS 描述最佳大小。這些 performance hints 不取代 atomic boundaries、命令硬限制或格式規則。

來源:NVM Command Set 1.3 §5.2.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, 文件頁 122-129, PDF 頁 122-129

對齊、granularity 與效能提示
效能提示欄位建議的長度或起點何時解讀這組欄位
NPWG / NPWA長度與起點同時符合先看 NSFEAT.OPTPERF
NPRG / NPRA / NORS適用讀取最佳化先看 OPTRPERF
NPDG / NPDGLdeallocate granularity 的不同欄位用 OPTPERF 決定;Large 不一律加一
NOIOB / NABO最佳 I/O boundary 與 atomic offset 不同可分割 I/O 以符合多種條件
閱讀相關規格圖表 → 對齊、granularity 與效能提示

27 Performance Characteristics 的屬性模型

27.01.Performance Characteristics 用來描述或選擇效能相關屬性。標準欄位可能用區間編碼表示效能,而不是直接填入時間。廠商屬性則需要識別碼決定資料如何解讀,不能因為它放在標準結構內,就假設每個 byte 都有標準定義。

27.02.例如 R4KARL=0Eh 不是 14 μs,而是代表指定測試條件下的一個平均延遲區間。比較兩個裝置前,要先確認採用相同屬性及測試條件。保存屬性的槽位數量與識別碼也不同;有剩餘空位不代表已用索引一定連續。

來源:NVM Command Set 1.3 §4.1.3.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.8, 文件頁 69-73, PDF 頁 69-73

把流程對回規格條件

27.03.FID 1Ch 用 ATTRI 選屬性:00h 為只讀標準效能,C0h 為只讀 identifier list,C1h..FFh 為 vendor attributes。Current、Default、Saved 是不同視圖,RVSPA 用來移除指定 vendor attribute 的 保存值。

來源:NVM Command Set 1.3 §4.1.3.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.8, 文件頁 69-73, PDF 頁 69-73

Performance Characteristics 的屬性模型
效能屬性欄位回報或設定的內容解讀所需的尺度或識別
R4KARL標準化 4 KiB random read 的平均 latency 區間00h 是未回報
MSVSPA / USVSPA可 save 總數/剩餘數index 可不連續
PAID / ATTRL128-bit identifier/有效 vendor bytesATTRL 最大 FE0h
RVSPA刪除 保存值 後取 default此操作不使用 data buffer 內容
閱讀相關規格圖表 → Performance Characteristics 的屬性模型

28 Rate Limiting 的設定欄位

28.01.Rate Limiting 先要選定限制誰,再設定限制多少。控制器識別值只有在相對應的目標種類下才具有該意義,因此 TGT 和 TID 必須一起讀。設定內容又分成總頻寬、寫入頻寬、總 IOPS 與寫入 IOPS,不能把四個值混成單一速度。

IOPS
Input/Output Operations Per Second;每秒 I/O 操作數,與每秒傳輸 bytes 的頻寬不同。
TGT
Target;選擇 Rate Limiting 設定的目標類型。
TID
Target Identifier;指定所選目標類型中的實體。

28.02.頻寬值需要乘上 BWSF 選定的尺度。例如尺度為每單位 10 MiB/s,數值 50 才代表 500 MiB/s。寫入對總額度的消耗還可能經過比例加權,所以「傳了 4 KiB」與「扣了 4 KiB 的總頻寬額度」不一定相同。

BWSF
Bandwidth Scale Factor;需乘 bandwidth value,單位為 MiB/s 或 GiB/s。
來源:NVM Command Set 1.3 §4.1.3.9; 4.1.5.4; 5.10

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.9; 4.1.5.4; 5.10, 文件頁 73-75,106,165-168, PDF 頁 73-75,106,165-168

把流程對回規格條件

28.03.FID 28h 以 TGT/TID 選 target,1024-byte buffer 指定 enable、mode、bandwidth、IOPS 與 write/read ratios。TGT=0 指 controller,不能指定 Admin controller 或保留 ID。此 Feature 必須可 save。

來源:NVM Command Set 1.3 §4.1.3.9; 4.1.5.4; 5.10

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.9; 4.1.5.4; 5.10, 文件頁 73-75,106,165-168, PDF 頁 73-75,106,165-168

Rate Limiting 的設定欄位
限制設定欄位指定的對象或數值如何換成實際限制
TGT / TIDCDW11[23:16]/[15:0]TGT=0 才是標準 controller target
RLCRLE bit15;RLM=0 Hard、1 Soft支援 Soft 必須也支援 Hard
BWSF0/1/2 = 1/10/100 MiB/s;3/4/5 = 1/10/100 GiB/s值乘 scale 才是 bandwidth
WRIOPSR / WRBWRwrite 分子除 read 分母兩者的各 ratio bytes 均需非零
WRIOPSR
Write-to-Read IOPS Ratio;寫入相對於讀取的操作數權重。
WRBWR
Write-to-Read Bandwidth Ratio;寫入相對於讀取的頻寬權重。
閱讀相關規格圖表 → Rate Limiting 的設定欄位

29 Hard/Soft 與 token-bucket 算例

用時間解釋速率限制,而非只看一個速率數字

先選受限制的對象

29.01.一個 namespace、一組資源或不同存取類型可能有不同設定。先由 Scope 與 Scope Identifier 找到對象,再理解對應速率及模式,不能拿一個 controller 級數值直接套到所有 I/O。

區分長期速率與短期累積

29.02.Token bucket 以隨時間補充的額度控制工作,bucket 大小決定可累積多少短期額度。相同補充速率而容量不同的 bucket,面對瞬間一批要求可能有不同等待時間。

token bucket
權杖桶;以累積的額度限制操作速率,執行操作時扣除所需額度。

按每段時間追蹤可用額度

29.03.以教學例說明:每秒補 100 單位、最多累積 200 單位,空閒後可有 200 單位供突發使用;持續工作仍受每秒補充量限制。實際命令使用的單位與扣除規則須再對照設定格式,不能直接把此例當成固定 IOPS 規則。

來源:NVM Command Set 1.3 §5.10.1-5.10.2; Appendix A

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.10.1-5.10.2; Appendix A, 文件頁 166-168,176-177, PDF 頁 166-168,176-177

把流程對回規格條件

29.05.Hard Limit 設 ceiling,Soft Limit 可利用未用 bandwidth/IOPS;資源不足時依設定比例分配。Appendix A 是多個 token buckets 的實作範例,不要求所有 controllers 採用相同內部實作。

來源:NVM Command Set 1.3 §5.10.1-5.10.2; Appendix A

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.10.1-5.10.2; Appendix A, 文件頁 166-168,176-177, PDF 頁 166-168,176-177

Hard/Soft 與 token-bucket 算例
模式或命令如何分享或消耗額度理解這個結果的限制
Hard有需求且資源不足時按比例分享設定上限不是最低效能保證
Soft可使用閒置額度多個 soft targets 依 limits 比例分享
Write tokenstotal bytes × WRBWR;write bytes;total IOPS × WRIOPSR;write IOPS 1四個 buckets 各自檢查
Read tokenstotal bytes 及 total IOPS 1不扣 write-only buckets
閱讀相關規格圖表 → Hard/Soft 與 token-bucket 算例

30 Rate Limiting log 是能力圖

30.01.Rate Limiting log 描述的不是一張把所有速度相加就能得到總量的表。多個控制器或連接埠可能共用同一組媒體資源;因此資料結構需要表示「誰連到哪個資源」,讓主機知道哪些能力其實來自同一個來源。

30.02.例如兩個控制器都能使用同一個 Endurance Group。若其中一個已占用該組媒體的頻寬,另一個不會因為走不同連接埠就憑空多出相同頻寬。閱讀描述子時,重複指向同一個資源的關係應保留,不能把每次引用都當成獨立資源。

Endurance Group
Endurance Group,用於隔離與回報耐久度相關狀態的 NVM 資源群組。
來源:NVM Command Set 1.3 §4.1.4.8; 5.10.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.8; 5.10.3, 文件頁 79-83,168-172, PDF 頁 79-83,168-172

把流程對回規格條件

30.03.LID 28h 以 log 起點為基準的 dword offsets 連接 port、controller 與 storage-medium access descriptors;descriptor 可共享,不能假設為固定順序陣列。分段讀取後應重讀 GC,改變時重收整份資料。

GC
Rate Limiting log 的 32-bit Generation Count,用於分段讀取一致性。
來源:NVM Command Set 1.3 §4.1.4.8; 5.10.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.8; 5.10.3, 文件頁 79-83,168-172, PDF 頁 79-83,168-172

Rate Limiting log 是能力圖
能力圖欄位描述哪種關係或尺度讀取時須避免的誤解
LPL / offsets長度與指標皆有 dword 單位byte offset = dword offset ×4
NP / NC / NST都是 0-based countsNNSMAD 是實際數量
SC / SIsubsystem/domain/EG/namespace 及其 ID依 scope 解讀,避免共享節點重算
RLMA最大 read/write bandwidth/IOPSworkload 需符合相關 size/queue-depth 條件
NNSMAD
Non-Volatile Storage Medium Access Descriptors 數;實際數量,零表示此節點沒有下游 descriptors。
RLMA
Rate Limiting Maximum Access;所述 port、controller 或 storage access 的最大能力,不是目前流量。
LPL
Rate Limiting Log Page Length;單位是 dwords,讀取 bytes 前乘 4 並檢查邊界。
NC
Number of Controllers;Rate Limiting log 的 controller 數,採 0-based 編碼。
NP
Number of Ports;Rate Limiting log 的 port 數,採 0-based 編碼。
SI
Scope Identifier;指定 SC 所選範圍中的實體。
閱讀相關規格圖表 → Rate Limiting log 是能力圖

31 FDP:placement、RUH 與可觀測數據

31.01.FDP 讓主機參與資料放置的選擇,目的是把不同使用特性的資料安排到適合的回收單位。主機使用 handle 表達選擇,並不是直接指定 NAND 的實體位址。理解 FDP 時,要把 namespace 使用的格式、handle 與底層回收資源的關係連起來。

31.02.回報的剩餘可寫量與估計時間,可以協助觀察資源狀況,但它們有各自的單位及未回報值。共享同一個 RUH 的 namespace 還必須符合格式條件;資料大小同為 4 KiB,不足以證明兩種 Format Index 可以互換。

來源:NVM Command Set 1.3 §3.2.1; 4.1.4.6-4.1.4.7; 4.1.6.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.2.1; 4.1.4.6-4.1.4.7; 4.1.6.3, 文件頁 26,79,110-113, PDF 頁 26,79,110-113

把流程對回規格條件

31.03.FDP namespace 的 placement handles 對應 Reclaim Unit Handles。共享 RUH 的 namespaces 必須使用相同 Format Index;host 指定的 handle list 不得重複 RUHID。RUH Status descriptors 先依 Placement Handle、再依 Reclaim Group Identifier 排序。

Reclaim Group
Reclaim Group,具有共同回收行為的一組非揮發性儲存資源。
Reclaim Unit
Reclaim Unit,controller 執行媒體回收時使用的較小管理粒度。
來源:NVM Command Set 1.3 §3.2.1; 4.1.4.6-4.1.4.7; 4.1.6.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.2.1; 4.1.4.6-4.1.4.7; 4.1.6.3, 文件頁 26,79,110-113, PDF 頁 26,79,110-113

FDP:placement、RUH 與可觀測數據
FDP 欄位或記錄描述的配置與活動數值的有效性或限制
NPHNDLS最多 128,且不超過 configuration 的 RUH 數0 有 controller 選擇與共享規則
EARUTR / RUAMW剩餘秒數估計/可寫 logical blocksEARUTR=0 未回報;不是保證壽命
LID 22hHBMW/MBMW 含 NVM 指定寫入類命令含 Copy 寫入端、Zeroes、Uncorrectable
LID 23h event 0hLBAV 控制 LBA 有效性NLBAM=FFFFh 表示至少 FFFFh
NPHNDLS
Number of Placement Handles,NVM create payload 中 Placement Handle List 的 entry count,最大 128。
LBAV
LBA Valid;指出回報的 LBA 是否有效。
閱讀相關規格圖表 → FDP:placement、RUH 與可觀測數據

32 Streams 的 NVM 單位與優先順序

32.01.Streams 讓主機以資料流的方式表達資料關係。規格回報的 SWS 與 SGS 幫助主機選擇寫入及解除配置的大小,但兩個數值描述的層次不同。SWS 先以區塊表示建議寫入單位,SGS 再表示一個 stream granularity 包含多少個這樣的單位。

SWS
Stream Write Size;NVM command-set 單位為 logical blocks。

32.02.若 SWS=8、SGS=4,寫入單位是 8 個區塊,較大的粒度單位則是 32 個區塊。一次 8-block Write 符合前者,不代表同長度的解除配置也涵蓋完整粒度。使用 Streams 時,相關提示與一般 namespace 提示的優先關係也要一起考慮。

來源:NVM Command Set 1.3 §5.2.2.3; 5.13

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2.3; 5.13, 文件頁 128-129,175, PDF 頁 128-129,175

把流程對回規格條件

32.03.NVM 的 Stream Write Size 以 logical blocks 表示;stream granularity length 是 SGS 乘依欄位換算後 SWS blocks。使用 Streams 時,host 宜依 SGS/SWS 的建議處理 write/deallocate,再協調 namespace hints。

來源:NVM Command Set 1.3 §5.2.2.3; 5.13

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2.3; 5.13, 文件頁 128-129,175, PDF 頁 128-129,175

Streams 的 NVM 單位與優先順序
Streams 提示換算出的操作單位與其他提示的關係
SWS建議寫入大小,以 blocks 計宜為 NPWG 的倍數
SGS × SWSstream granularity 的長度適用 stream deallocate 對齊/長度
Priority用 Streams 時優先 Streams attributes未使用則用 namespace hints
閱讀相關規格圖表 → Streams 的 NVM 單位與優先順序

33 ANA 與 Reservations 的 NVM 行為

33.01.可以透過某個控制器看到 namespace,不代表每一種命令都能使用。ANA 描述路徑與存取狀態,Reservations 則依保留類型及主機身分決定哪些存取會衝突。這是兩組不同條件,必須各自成立,不能用其中一組通過代替另一組。

33.02.例如路徑可用時,非保留持有者的 Write 仍可能衝突,而 Read 是否允許取決於保留類型。Copy 甚至同時涉及多個來源的讀取權限與目的的寫入權限。閱讀權限矩陣時,要先把命令分成讀取類或寫入類,再核對主機身分。

來源:NVM Command Set 1.3 §5.1; 5.11

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.1; 5.11, 文件頁 119,172-173, PDF 頁 119,172-173

把流程對回規格條件

33.03.ANA 狀態會限制指定 Features 並改變 capacity 回報;Reservations 則依 reservation type、holder 與 registration 狀態決定各命令是否允許。這些共用 namespace 能力可適用於 PCIe 多 controller 情境。

來源:NVM Command Set 1.3 §5.1; 5.11

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.1; 5.11, 文件頁 119,172-173, PDF 頁 119,172-173

ANA 與 Reservations 的 NVM 行為
路徑狀態或保留類型對讀寫或回報的影響還需確認的身分與對象
ANA IdentifyInaccessible/Persistent Loss 下 NUSE、NVMCAP 回零不是 media 被清空
ANA FID05hGet 的 Inaccessible/Persistent Loss/Change 受限使用對應 ANA status
Write Exclusive / Exclusive Access非 holder:前者允許 read-like;後者 read/write-like 都衝突兩者的非 holder write-like 都衝突
Registrants Only / All RegistrantsWrite Exclusive 類允許所有人 read、registrants write;Exclusive Access 類僅 registrants read/writeCopy 每個 source 用 read 權限,destination 用 write 權限
Reservations分 read-like、write-like 命令查矩陣holder、registrant 與 type 必須一起看
閱讀相關規格圖表 → ANA 與 Reservations 的 NVM 行為

34 Key Per I/O 的 NVM 對齊約束

34.01.Key Per I/O 的相關欄位同時涉及能力、啟用狀態與資料存取的對齊要求。支援某個功能只是第一步,使用時還要確認 namespace 的設定和這筆 I/O 的範圍都符合要求。這些必要條件與一般效能提示的強度不同。

34.02.KPIODAAG 採從 0 起算的粒度編碼,因此原始值 7 表示 8 個區塊。起點 16、長度 8 都落在這個單位上;起點改為 17 或長度改為 7,就不符合。檢查長度時應使用實際區塊數,而不是直接拿命令中尚未加 1 的 NLB 比較。

KPIODAAG
Key Per I/O Data Access Alignment and Granularity;0-based blocks。
來源:NVM Command Set 1.3 §5.5; 4.1.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.5; 4.1.5, 文件頁 91-92,105,160, PDF 頁 91-92,105,160

把流程對回規格條件

34.03.Key Per I/O 的 NVM 補充要求使用 key tag 的命令符合 KPIODAAG 的 LBA 起點對齊與長度 granularity;不符合時回 Invalid Field in Command。Capability、namespace enablement 與 key 管理是不同層次。

來源:NVM Command Set 1.3 §5.5; 4.1.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.5; 4.1.5, 文件頁 91-92,105,160, PDF 頁 91-92,105,160

Key Per I/O 的 NVM 對齊約束
能力或對齊欄位描述的支援與設定操作必須符合什麼
KPIOCAP支援與 subsystem/指定的 namespace 範圍不能只看單一 enable bit
KPIOSNS / KPIOENSnamespace 支援/啟用未支援時 enable 必須為 0
KPIODAAG0-based logical-block granularity起點及長度都必須符合

35 LBA Migration Queue 與變更追蹤

35.01.變更追蹤記錄的是哪些 LBA 範圍發生需要追蹤的變化,不是原始命令的逐筆副本。多個相鄰寫入可以合併成一段記錄,因此不能用 queue entry 數量反推寫入命令數。讀取一筆 entry 前,也必須先判斷它是否包含有效的 range。

35.02.佇列還會記錄開始、停止、暫停與已滿等狀態。佇列已滿時,後續變更不一定還能記錄;只看見先前完整的 entries,不能推論後面沒有變更。追蹤命令完成與記錄中的狀態標記,也需要依規格定義分開理解先後關係。

來源:NVM Command Set 1.3 §4.1.8; 5.7

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.8; 5.7, 文件頁 113-114,162-164, PDF 頁 113-114,162-164

把流程對回規格條件

35.03.Track Send 啟用 LBA Migration Queue 後,controller 可聚合邏輯 block 修改或 deallocation 記錄。Entry 只在所報命令效果生效後發布,可早於該命令 CQE;queue entry 與 I/O completion 是不同時間點。

來源:NVM Command Set 1.3 §4.1.8; 5.7

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.8; 5.7, 文件頁 113-114,162-164, PDF 頁 113-114,162-164

LBA Migration Queue 與變更追蹤
追蹤欄位或事件描述的範圍及狀態讀取記錄時的限制
LBACIR00:range;01:整個 namespace;10:無 range先判斷欄位是否有效
ESA001 start/resume;010 stop;011 suspend;111 fullfull 表示 logging 已停止
DLBA / CDQPdeallocated 標記/entry phaseDLBA=0 仍可能描述 deallocate 類修改
RALBAS開始命令處理期間的變更可由 ATYPE02h 補齊start/stop marker 不要求先於 Track Send CQE
LBACIR
LBA Change Indication Range;指定 range、整個 namespace 或無 range 的 entry 解讀。
CDQP
Controller Data Queue Phase;讓 host 判別 queue 位置的新 entry。
DLBA
Deallocated LBA;entry 中的 deallocation 標記。
ESA
Entry Sequence Attribute;LBA Migration Queue 的 start/stop/suspend/full 標記。
閱讀相關規格圖表 → LBA Migration Queue 與變更追蹤

36 Memory-based 資源匯出範本

36.01.資源匯出範本描述控制器應向外呈現哪些能力和資料,並限制這些值與底層資源的關係。對外回報可以受範本約束,不能任意超過實際可提供的資源。這裡討論的是已納入範圍的 memory-based 資料結構及規則。

36.02.範本中的版本欄位有自己的指定值,不會因閱讀的規格 PDF 版本較新就自動變更。佇列數也要依欄位編碼解碼後比較:原始 NCQS=7 代表 8 個,NCQS=3 代表 4 個。Namespace 的格式相容性則還要看資料、metadata 及相關設定,不能只比較名稱。

NCQS
Number of I/O Completion Queues Supported;支援的 I/O CQ 數,採 0-based 編碼。
來源:NVM Command Set 1.3 §5.4.1-5.4.1.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4.1-5.4.1.1, 文件頁 152-159, PDF 頁 152-159

把流程對回規格條件

36.03.Reference Exported NVM Subsystem Template 是選用的 memory-based 範本,限定一個 controller(ID 0h)及一個 namespace(ID 1h)。建立時必須設 TR=1;configuration state 只能以一筆命令設定一次,重複設定回 Command Sequence Error。

來源:NVM Command Set 1.3 §5.4.1-5.4.1.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4.1-5.4.1.1, 文件頁 152-159, PDF 頁 152-159

Memory-based 資源匯出範本
範本項目規定的對外值或相容條件與底層資源的關係
Identity and versionCAP.CSS=1、VS=020300h;NVM VER=010200h範本固定 Base 2.3/NVM 1.2,不隨本 PDF 版本自動升級
Controller limitsMDTS、RAB、NCQS、NSQS、MQES、AWUN/AWUPF 受 underlying 限制NCQS/NSQS 是 0-based
Namespace compatibilityLBAF0 的 LBADS/MS 必須相同,MS=0;DPS/KPIOENS/CWP 必須為零controller 負責 Format Index remapping
Observable defaultsError entries 與 SMART 為零;firmware active slot=1支援清單、Feature defaults 與 Identify exceptions 另有固定規則
MDTS
Maximum Data Transfer Size;以 minimum page size 為基準的 exponent;零有特定無限制語意。
MQES
Maximum Queue Entries Supported;queue entry 數上限,採 0-based 編碼。
NSQS
Number of I/O Submission Queues Supported;支援的 I/O SQ 數,採 0-based 編碼。
CAP
Controller Capabilities,offset 00h 的 controller property,回報 queue、page size、timeout 與其他能力。
閱讀相關規格圖表 → Memory-based 資源匯出範本

37 匯出狀態的長度與一致性

37.01.配置資料描述資源被安排成什麼樣子,執行中狀態則記錄當下使用哪些設定。兩者可能都有 Feature 名稱,但一個描述範本或配置,另一個描述目前值。恢復或解讀狀態時,如果把預設值當成目前值,就會失去原本的執行設定。

37.02.可變長度結構先有固定 64-byte header,再接 NVMECSS 指定的內容;NVMECSS 的單位是 Dword。因此值為 16 時,後段是 64 bytes,整體為 128 bytes。長度正確還不等於狀態一定一致,CSATTR.CP 另外回報處理期間的暫停條件。

CSATTR.CP
Controller Suspended;1 表示整段 Migration Receive 處理期間皆 suspended。
NVMECSS
NVMe Controller State Size;單位 dwords,0 時可變 state 欄位不存在。
來源:NVM Command Set 1.3 §5.4.1.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4.1.2, 文件頁 159-160, PDF 頁 159-160

把流程對回規格條件

37.03.Reference Exported NVM Subsystem State 保存目前 Feature values 與 controller state。CSATTR.CP=1 表示整段 Migration Receive 處理期間 controller 都處於 suspended;NVMECSS 以 dwords 指出可變 NVMECS 長度,內層 VER 固定為 1h。

來源:NVM Command Set 1.3 §5.4.1.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4.1.2, 文件頁 159-160, PDF 頁 159-160

匯出狀態的長度與一致性
狀態欄位保存或描述什麼長度及一致性如何判斷
Feature values保存 arbitration、power、temperature、error recovery、queues、interrupt、atomicity 與 AEC是 current values,不是 Figure 187 defaults
CSATTR.CP1 表示整段處理期間 suspended0 不保證完全沒有 suspension
NVMECSS總長度 = 64 + 4 × NVMECSS bytes0 時 NVMECS 欄位不存在
閱讀相關規格圖表 → 匯出狀態的長度與一致性

38 讀懂本篇的規格圖表

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

圖表組 01 · Logical block、格式與單位 · 2 張圖表

38.02.規格關係圖先回答由哪份規格定義行為,區塊圖再回答資料如何編址。讀格式表時先找到 Format Index 對應的項目,再分別解讀 LBADS 和 MS。不要把表格中的選項編號直接當作 byte 數。

回到本節的解釋與範例

先確定命令、格式與單位

38.03.NVM 命令以 logical blocks 描述資料;Base 定義共同命令格式,PCIe Transport 定義傳輸,NVM Command Set 決定資料操作與格式。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
LBA/logical block sizeLBA 選位置,格式決定每個位置包含多少資料。相同的 8 個 blocks,512-byte 與 4096-byte 格式分別需要 4096 與 32768 bytes 資料。
欄位名稱/縮寫先分辨它是識別碼、數量、位移或能力,才選擇解讀方式。Format Index 選一種格式;LBADS 是大小的指數,兩個值不能直接互換。
來源:NVM Command Set 1.3 §1.1 · NVM Command Set 1.3 §1.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §1.1, Figure 1, 文件頁 9, PDF 頁 9

來源:NVME-NVM-CS-1.3, Rev. 1.3, §1.5, Figure 2, 文件頁 11, PDF 頁 11

NVM Figure 1 · NVMe Family of Specifications

一句話重點

NVM1-1三份規格分別回答共通協定、傳輸方式與資料操作的問題。

來源:NVM Command Set 1.3 §1.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §1.1, Figure 1, 文件頁 9, PDF 頁 9

用例子讀懂

NVM1-2要解釋一次 Read,先在 NVM 規格看讀取語意,到 Base 看 SQE 與資料指標,再到 PCIe Transport 看佇列與 doorbell 如何存取。

SQE
Submission Queue Entry,SQ 中的一筆命令資料結構。

NVM Figure 2 · Acronym definitions

一句話重點

NVM2-1LBA 是資料區塊的編號,換成 byte 位置還需要區塊大小。

來源:NVM Command Set 1.3 §1.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §1.5, Figure 2, 文件頁 11, PDF 頁 11

用例子讀懂

NVM2-2每個 logical block 有 4096 bytes 時,LBA 3 的資料起點是 3×4096=12288 bytes;數字 3 本身不是 3 bytes。

圖表組 02 · Namespace 容量與配置狀態 · 1 張圖表

38.04.容量示意圖的長條比較的是數量,不表示資料一定集中在前端。先用 NSZE 判斷位址是否在範圍內,再以 NCAP、NUSE 理解配置量,最後確認 THINP 所描述的支援能力。

回到本節的解釋與範例

把目前格式、候選格式與能力連起來

38.05.先用 CNS 及對象識別選回覆結構,再由 Format Index 配對格式資料。基本 Identify、命令集專屬 Identify 與延伸格式共同決定合法設定。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
CNS/NSID/CSI/CNTID/FIDX分別選結構、namespace、命令集、控制器與候選格式;依 CNS 定義決定哪些有效。查目前格式與查尚未使用的候選格式,是不同查詢,不能把兩份資料當成同一現況。
FLBAS/NLBAF/NULBAF/LBAF/ELBAF先解出有效格式清單,再沿同一 Format Index 配對基本與延伸欄位。FLBAS 選中 index 2 時,應讀同一 index 的 LBAF 與 ELBAF,不把數值 2 當成每 block 2 bytes。
LBADS/MS/RP;PIF/QPIF/STS資料大小為 2^LBADS bytes;MS 給 metadata 大小;延伸欄位補上保護格式與 tag 寬度。LBADS=12、MS=16 表示 4096 bytes 資料及 16 bytes metadata,接著依 PI 格式計算 tag。
MC/DPC/DPS/PIC/PIFA/LBAFEE能力描述可選項,目前設定與主機宣告決定真正使用哪種配置。控制器支援延伸 PI,不代表主機在未宣告相應能力時就可直接建立該格式。
VSL/WZSL/WUSL/DMRL/DMRSL/DMSL/WZDSL各自限制不同命令的長度、描述子數或處理量,先辨認目標命令與單位。Copy 的來源範圍限制不能拿來當 Write Zeroes 的單筆長度限制。
NSZE/NCAP/NUSE;NSFEAT/DLFEAT容量量與能力、解除配置後讀取行為共同描述 namespace。NUSE=600 不代表只有 LBA 0–599 有資料;配置可以分散在整個有效範圍。
來源:NVM Command Set 1.3 §4.1.2 · NVM Command Set 1.3 §4.1.3.7 · NVM Command Set 1.3 §4.1.5 · NVM Command Set 1.3 §4.1.5.1 · NVM Command Set 1.3 §4.1.5.3 · NVM Command Set 1.3 §4.1.5.4 · NVM Command Set 1.3 §4.1.5.5 · NVM Command Set 1.3 §5.6

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.2, Figure 91, 文件頁 63, PDF 頁 63

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.7, Figure 101, 文件頁 68, PDF 頁 68

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5, Figure 122, 文件頁 83-84, PDF 頁 83-84

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

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.1, Figure 125, 文件頁 94, PDF 頁 94

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

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

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.4, Figure 129, 文件頁 103-106, PDF 頁 103-106

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.4, Figure 130, 文件頁 107, PDF 頁 107

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.5, Figure 131, 文件頁 107, PDF 頁 107

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.6, Figure 192, 文件頁 161, PDF 頁 161

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.6, Figure 193, 文件頁 162, PDF 頁 162

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-93, PDF 頁 85-93

用例子讀懂

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

圖表組 03 · Identify:同一 namespace 的多份資料結構 · 7 張圖表

38.06.先按查詢對象分組閱讀 CNS 表,再連接同一 namespace 的基本與延伸結構。FLBAS 是目前選擇,LBAF/ELBAF 是選項內容,能力位則說明允許哪些選擇;三者不能互相代替。

回到本節的解釋與範例

NVM Figure 122 · CNS Values

一句話重點

NVM122-1Identify 的 CNS 選擇器決定回傳哪種資料結構。

來源:NVM Command Set 1.3 §4.1.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5, Figure 122, 文件頁 83-84, PDF 頁 83-84

用例子讀懂

NVM122-2CNS 相同時,NSID、CSI 等相依欄位仍要正確;不能只憑回傳長度推斷這是控制器還是 namespace 資料。

把保證範圍、對齊邊界與失效情境分開

38.07.正常操作與斷電情境各有原子性參數。先確認採用控制器或 namespace 的參數,再把命令的整段範圍放到原子邊界上判斷。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
AWUN/NAWUN;AWUPF/NAWUPF;ACWU/NACWU分別對應正常寫入、斷電情境與融合 Compare/Write 的保證上限;有效選擇依 namespace 能力。支援 8-block 的正常原子寫入,不代表斷電時也保證相同的 8 blocks。
NABSN/NABSPF/NABO邊界大小與起點決定一段 I/O 是否跨界,與單筆長度上限一起檢查。長度雖未超過原子單位,起點若靠近邊界,結束位置仍可能落到下一段。
MAM/DN多重原子模式與正常原子性停用選擇有各自條件。多重模式下應畫出可獨立保證的子範圍,不能沿用整筆命令全有或全無的結論。
Compare/Write/FUSE融合操作需符合配對與範圍規則,Compare 的結果影響 Write 是否執行。先前內容不符預期時,不能把後面的 Write 當成獨立無條件寫入。
來源:NVM Command Set 1.3 §2.1.3 · NVM Command Set 1.3 §2.1.4 · NVM Command Set 1.3 §4.1.3.4 · NVM Command Set 1.3 §4.1.5.2 · NVM Command Set 1.3 §5.2.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.3, Figure 3, 文件頁 14, PDF 頁 14

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 4, 文件頁 15-16, PDF 頁 15-16

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 5, 文件頁 17, PDF 頁 17

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 6, 文件頁 18, PDF 頁 18

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 7, 文件頁 18, PDF 頁 18

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 8, 文件頁 19, PDF 頁 19

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 9, 文件頁 20, PDF 頁 20

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 10, 文件頁 21, PDF 頁 21

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.4, Figure 98, 文件頁 66-67, PDF 頁 66-67

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.2, Figure 126, 文件頁 94-96, PDF 頁 94-96

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 146, 文件頁 124, PDF 頁 124

NVM Figure 126 · Identify – Identify Controller data structure, NVM Command Set Specific Fields

一句話重點

NVM126-1控制器層的原子性欄位提供適用於相應 namespace 的基準。

來源:NVM Command Set 1.3 §4.1.5.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.2, Figure 126, 文件頁 94-96, PDF 頁 94-96

用例子讀懂

NVM126-2AWUN 原始值 3 對應 4 blocks,但是否使用此值還要看 namespace 是否提供覆寫參數。

NVM Figure 129 · I/O Command Set Specific Identify Controller Data Structure for the NVM Command Set

一句話重點

NVM129-1命令集專屬控制器資料列出各種命令的能力與大小限制。

來源:NVM Command Set 1.3 §4.1.5.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.4, Figure 129, 文件頁 103-106, PDF 頁 103-106

用例子讀懂

NVM129-2支援 Write Zeroes 不代表可以一次清零任意長度;仍須依 WZSL 等相應欄位計算上限。

NVM Figure 130 · NVM Command Set Specification Version Descriptor Field Values

一句話重點

NVM130-1版本描述子把主、次與修訂版本分開編碼。

來源:NVM Command Set 1.3 §4.1.5.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.4, Figure 130, 文件頁 107, PDF 頁 107

用例子讀懂

NVM130-2讀到 MJR=1、MNR=3、TER=0,應組成 1.3.0,而不是把三欄相加或當成容量值。

NVM Figure 131 · Command Dword 11 - CNS Specific Identifiers

一句話重點

NVM131-1FIDX 為需要格式索引的 Identify 查詢指定目標格式。

來源:NVM Command Set 1.3 §4.1.5.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.5, Figure 131, 文件頁 107, PDF 頁 107

用例子讀懂

NVM131-2要看索引 20 的格式,先使用支援該查詢的 CNS,再用 FIDX 指向 20;格式數量和格式索引不是同一欄。

由共同 Identify 結構查 NVM 操作的前提

38.08.Base Identify Controller 提供跨命令使用的能力與限制;NVM 命令集的 Identify 結構再補上格式與命令專屬能力。兩份資料需要按同一控制器配對。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
ONCS各位元回報特定選用 NVM 命令或功能的支援,應按所選操作檢查相應位元。Compare 支援不能替代 Copy 支援;不能只看 ONCS 非零就使用所有選用命令。
MDTS/CAP.MPSMIN非零 MDTS 以最小 memory page 大小為基礎計算最大傳輸量,與 namespace 的 LBA 大小不同。MDTS=5、最小 page=4096 bytes,最大傳輸量是 4096×2^5=128 KiB;再換成所選格式的 blocks。
CTRATT/SANICAP前者提供控制器屬性,後者提供清除方法及相關能力;命令專屬設定要沿對應位元分支確認。準備 Crypto Erase 時查 CES,再依目標與後續要求檢查其餘條件;不由支援 Block Erase 推論其他方法。
ONCS
Optional NVM Commands Supported;包含能力及 variant,需結合 NVM Identify 的 limits。
來源:Base 2.4 §5.2.14.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, Figure 338, 文件頁 340-382, PDF 頁 366-408

Base Figure 338 · Identify – Identify Controller Data Structure, I/O Command Set Independent

一句話重點

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-382, PDF 頁 366-408

用例子讀懂

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

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

38.09.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 分別指出空間與識別碼資源問題,不應合併成同一種失敗。
ANAGRPID
ANA Group Identifier,namespace 所屬 Asymmetric Namespace Access group 的 identifier;create 值 0 讓 controller 選擇。
NVMSETID
NVM Set Identifier,指定建立 namespace 時要從哪個 NVM Set 配置容量。
NUMCIDS
Number of Controller Identifiers;Controller List 中有效 controller IDs 的數量。
ENDGID
Endurance Group Identifier,指定建立 namespace 時所屬 Endurance Group。
DNCS
Default Namespace Configuration Status,表示目前 namespace configuration 是否等於 active firmware image defaults 的 status bit。
來源:Base 2.4 §5.2.14.2.8

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.8, 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.8

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

用例子讀懂

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

圖表組 04 · LBAF、ELBAF 與唯一屬性格式 · 6 張圖表

38.10.沿同一個 Format Index 配對 LBAF、ELBAF,再看 FLBAS 選中哪一項。讀數量圖時,把欄位原始值、解碼後數量及最後一個 index 分開列出;例如 6 個選項的 index 是 0 到 5。

回到本節的解釋與範例

起點對齊、長度粒度與邊界是三次判斷

38.11.先依對齊偏移找到合法或建議起點,再以粒度檢查長度,最後看是否跨越相關邊界。欄位若只是效能提示,不能提高成命令必須遵守的要求。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
NPWA/NPWG;NPRA/NPRG分別對應寫入與讀取的起點對齊及粒度,保留各欄位的數量編碼規則。長度是粒度整數倍,但起點偏移一個 block,仍可能未符合對齊提示。
NPDG/NPDGL/NPDAL/NOWS/NORS解除配置與最佳讀寫大小分別有自己的提示或限制,先辨認動作再使用。讀取的最佳大小不能直接當成解除配置描述子的最大範圍。
NOIOB/NABO/NABSN;SWS/SGSI/O 邊界、原子邊界與串流大小是不同維度。即使寫入符合 NPWG,仍需另查是否跨過要保證的原子邊界。
來源:NVM Command Set 1.3 §4.1.5.1 · NVM Command Set 1.3 §5.2.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.1, Figure 124, 文件頁 94, PDF 頁 94

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 145, 文件頁 124, PDF 頁 124

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 147, 文件頁 125, PDF 頁 125

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 148, 文件頁 126, PDF 頁 126

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 149, 文件頁 127, PDF 頁 127

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 150, 文件頁 127, PDF 頁 127

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 151, 文件頁 128, PDF 頁 128

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 152, 文件頁 128, PDF 頁 128

NVM Figure 124 · Namespace Alignment and Granularity Attributes

一句話重點

NVM124-1對齊與粒度屬性分別描述起點位置和操作長度。

來源:NVM Command Set 1.3 §4.1.5.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.1, Figure 124, 文件頁 94, PDF 頁 94

用例子讀懂

NVM124-2長度是粒度整數倍,但起點偏移 1 block 的寫入,仍可能不符合對齊建議;要分開比較兩個條件。

NVM Figure 125 · LBA Format Data Structure, NVM Command Set Specific

一句話重點

NVM125-1LBA Format 用 LBADS 與 MS 描述資料和 metadata 大小。

來源:NVM Command Set 1.3 §4.1.5.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.1, Figure 125, 文件頁 94, PDF 頁 94

用例子讀懂

NVM125-2LBADS=12 表示 2^12=4096 bytes 資料;MS=8 表示另有 8 bytes metadata,而不是資料大小變成 2^8。

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

一句話重點

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

來源: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 的配置。

NVM Figure 128 · Extended LBA Format Data Structure, NVM Command Set Specific

一句話重點

NVM128-1Extended LBA Format 描述保護格式及 Storage Tag 分配。

來源:NVM Command Set 1.3 §4.1.5.3

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

用例子讀懂

NVM128-2兩個格式即使 LBADS 相同,只要 PIF 或 STS 不同,就可能使用不同的 Guard 大小及 tag 位元配置。

NVM Figure 192 · LBA Format List Structure

一句話重點

NVM192-1LBA Format List 把格式數量與每筆格式索引分開表示。

來源:NVM Command Set 1.3 §5.6

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.6, Figure 192, 文件頁 161, PDF 頁 161

用例子讀懂

NVM192-2格式索引 20 不代表總共有 20 筆;先依 NLBAF/NULBAF 讀清單,再找到對應 Format Index。

NVM Figure 193 · LBA Format List Entries Applicability to Identify Command CNS Value

一句話重點

NVM193-1不同 CNS 查詢會呈現不同範圍的格式清單項目。

來源:NVM Command Set 1.3 §5.6

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.6, Figure 193, 文件頁 162, PDF 頁 162

用例子讀懂

NVM193-2使用 CNS 00h 與較新的格式查詢時,先查這張適用表,避免把第一種查詢的截取方式套給另一種。

圖表組 05 · Format、Host Behavior 與延伸 LBA · 2 張圖表

38.12.把 Format 的命令欄位與 Identify 的能力欄位成對閱讀:先找允許的格式,再看命令選擇。LBAFEE/ELBAS 處理延伸格式支援,PI 處理保護類型,MSET 處理傳輸配置。

回到本節的解釋與範例

NVM Figure 91 · Format NVM – Command Dword 10 – NVM Command Set Specific Fields

一句話重點

NVM91-1Format NVM 決定 PI 類型與 metadata 的傳輸安排。

來源:NVM Command Set 1.3 §4.1.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.2, Figure 91, 文件頁 63, PDF 頁 63

用例子讀懂

NVM91-2兩個格式都使用 4 KiB 資料,仍可能因 PI 與 MSET 不同而需要不同的 I/O buffer 排列。

NVM Figure 101 · Host Behavior Support – Data Structure

一句話重點

NVM101-1LBAFEE 告知主機使用擴充的 LBA Format 機制。

來源:NVM Command Set 1.3 §4.1.3.7

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.7, Figure 101, 文件頁 68, PDF 頁 68

用例子讀懂

NVM101-2要存取超出傳統格式索引表示範圍的格式前,先確認並設定主機行為,不能只把較大索引塞入舊欄位。

圖表組 06 · 建立 namespace:格式、mask 與 granularity · 3 張圖表

38.13.建立資料表先讀容量與格式,再讀保護欄位及遮罩;granularity 表另外用來計算配置是否有效率。先確認 GDM 如何把描述子對應到格式,再解讀 ND 的數量編碼。

回到本節的解釋與範例

建立設定需同時符合格式與容量規則

38.14.先選格式,再換算 NSZE、NCAP,配對粒度描述子,最後檢查資料保護及啟用中的 FDP 設定。粒度是配置效率提示,其他合法性要求仍需獨立滿足。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
NGA.GDM/ND/NGD → NSG/NCGGDM 決定格式到描述子的對應,ND 是描述子數減 1;NSG、NCG 以 bytes 給建議粒度。NSZE=250、每 block 4096 bytes 是 1000 KiB;與 1 MiB 粒度比較前,先統一單位。
NSZE/NCAP/FLBAS/DPS/NMIC容量、格式、保護與共享設定共同形成新 namespace。NCAP 的 byte 值依 FLBAS 選中的資料大小換算;不能另用另一個格式的 block size。
ANAGRPID/NVMSETID/ENDGID說明資源歸屬;零值及不支援時的處理需依各欄位規則。FDP 在指定 Endurance Group 啟用時,還須遵守其與 NVM Set 的限制。
LBSTM/LBAFEE/格式能力主機提供的 Storage Tag mask 與延伸格式設定需符合 Identify 及 Host Behavior Support。不能只因容量夠就忽略不相容的 PI 或遮罩設定。
NPHNDLS/Placement Handle List/RUH數量決定清單有效項目,清單把 Placement Handle 對應到 Reclaim Unit Handle。NPHNDLS=0 由控制器依規則選 handle;非零清單需檢查範圍、重複值與共享格式一致性。
NVM Set
NVM Set,把 namespace 與一組共同管理的 NVM 資源建立關聯的容量集合。
NMIC
Namespace Multi-path I/O and Namespace Sharing Capabilities,create 時宣告 namespace sharing/multipath 屬性的欄位。
來源:NVM Command Set 1.3 §4.1.5.8 · NVM Command Set 1.3 §4.1.6.4

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

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

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。

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。

圖表組 07 · Metadata 傳輸與 PI 的位置 · 2 張圖表

38.15.傳輸圖的上下兩種排列描述同一批區塊。逐一對照 Data 0 與 MD 0、Data 1 與 MD 1,再追蹤 DPTR、MPTR 指向哪個緩衝區。PI 位於 metadata 中的位置,與 metadata 是否分開傳輸是兩個不同維度。

回到本節的解釋與範例

資料與 metadata 用同一個區塊順序配對

38.16.先依格式選交錯或分開傳輸,再由區塊數計算各緩衝區大小。DPTR 與 MPTR 的角色由傳輸配置及命令方向決定。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
DPTR/MPTR/FLBAS資料指標與 metadata 指標的適用性由格式及傳輸方式決定。分開傳輸時,Data 0 必須對應 Metadata 0;分成兩個 buffer 不會改變配對順序。
區塊數×資料大小/區塊數×MS先計算兩部分,再依 PRACT 等處理調整實際傳輸量。PRACT=0、8 blocks、4096 bytes 資料與 16 bytes metadata,兩部分是 32768 與 128 bytes。
來源:NVM Command Set 1.3 §3.3.1 · NVM Command Set 1.3 §3.3.4 · NVM Command Set 1.3 §3.3.6 · NVM Command Set 1.3 §5.2.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 23, 文件頁 28, PDF 頁 28

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 24, 文件頁 28, PDF 頁 28

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 50, 文件頁 49, PDF 頁 49

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 51, 文件頁 49, PDF 頁 49

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 67, 文件頁 53, PDF 頁 53

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 68, 文件頁 54, PDF 頁 54

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.3, Figure 153, 文件頁 129, PDF 頁 129

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.3, Figure 154, 文件頁 130, PDF 頁 130

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

一句話重點

NVM153-1Extended LBA 把每個 block 的資料與 metadata 相鄰傳輸。

來源:NVM Command Set 1.3 §5.2.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.3, Figure 153, 文件頁 129, PDF 頁 129

用例子讀懂

NVM153-22 個 4096-byte 資料 blocks、各帶 8-byte metadata,排列是資料0、metadata0、資料1、metadata1,共 8208 bytes。

NVM Figure 154 · Metadata – Transferred as Separate Buffer

一句話重點

NVM154-1Separate metadata 使用資料與 metadata 兩個對應 buffer。

來源:NVM Command Set 1.3 §5.2.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.3, Figure 154, 文件頁 130, PDF 頁 130

用例子讀懂

NVM154-2相同的 2 blocks 改用分離方式後,資料 buffer 為 8192 bytes,metadata buffer 為 16 bytes;兩者的 block 順序必須一致。

圖表組 08 · 能力探索、Opcode 與狀態 · 13 張圖表

38.17.Opcode 表用來辨認操作及支援要求;狀態表要先選 SCT 再查 SC。FID、LID 與 opcode 屬於不同識別空間,即使數字相同,也不能拿其中一張表解釋另一種命令。

回到本節的解釋與範例

從操作與狀態選出正確的規則列

38.18.先辨認命令、控制器類型及目前狀態,再讀支援或限制。狀態碼還要配 SCT,不能只看 SC 的數字。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
Opcode/NSID/資料方向Opcode 選操作,NSID 選對象,方向決定主機提供或接收什麼。Copy 的主機傳入資料是描述子清單,並非整份來源資料。
SCT/SC狀態類別決定使用哪份狀態表;同一類別內再判斷原因。LBA Out of Range 針對位址範圍,Capacity Exceeded 針對配置容量,不應混為一談。
支援標記/適用註腳需要结合可選能力、控制器種類與目前操作的限制。控制器平常支援 Read,不代表清除的每一種受限狀態都允許同樣行為。
ANA/Reservation type/Holder/Registrant路徑狀態與主機的存取資格分別影響操作;逐項配合命令種類判斷。同一 namespace 對兩個主機可有不同存取資格,不能只用 NSID 相同推論结果相同。
來源:NVM Command Set 1.3 §2.2.1 · NVM Command Set 1.3 §2.2.2 · NVM Command Set 1.3 §2.2.3 · NVM Command Set 1.3 §3.1.2 · NVM Command Set 1.3 §3.3 · NVM Command Set 1.3 §3.3.1 · NVM Command Set 1.3 §3.3.4 · NVM Command Set 1.3 §3.3.5 · NVM Command Set 1.3 §3.3.6 · NVM Command Set 1.3 §3.3.7 · NVM Command Set 1.3 §3.3.8 · NVM Command Set 1.3 §4.1.3 · NVM Command Set 1.3 §4.1.4 · NVM Command Set 1.3 §5.1 · NVM Command Set 1.3 §5.11 · NVM Command Set 1.3 §5.12

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

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.2.1, Figure 14, 文件頁 23, PDF 頁 23

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.2.2, Figure 15, 文件頁 23, PDF 頁 23

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.2.3, Figure 16, 文件頁 23-24, PDF 頁 23-24

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.2.3, Figure 17, 文件頁 24, PDF 頁 24

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.1.2, Figure 18, 文件頁 25, PDF 頁 25

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.1.2, Figure 19, 文件頁 25, PDF 頁 25

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.1.2, Figure 20, 文件頁 26, PDF 頁 26

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3, Figure 22, 文件頁 27, PDF 頁 27

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 31, 文件頁 30, PDF 頁 30

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 59, 文件頁 51, PDF 頁 51

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 66, 文件頁 53, PDF 頁 53

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 76, 文件頁 56, PDF 頁 56

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.7, Figure 80, 文件頁 57, PDF 頁 57

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 89, 文件頁 61, PDF 頁 61

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3, Figure 92, 文件頁 64, PDF 頁 64

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3, Figure 93, 文件頁 64, PDF 頁 64

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4, Figure 109, 文件頁 75-76, PDF 頁 75-76

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.1, Figure 141, 文件頁 119, PDF 頁 119

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.11, Figure 199, 文件頁 173, PDF 頁 173

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.12, Figure 200, 文件頁 173, PDF 頁 173

NVM Figure 13 · NVM Command Set Admin Command Support

一句話重點

NVM13-1Admin 命令支援表要同時看命令列與控制器種類。

來源:NVM Command Set 1.3 §2.2.1

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

用例子讀懂

NVM13-2Get LBA Status 對 I/O controller 是選用功能,對 Administrative controller 則禁止;不能因為看到命令名稱就認為每種控制器都能執行。

NVM Figure 14 · I/O Controller – NVM Command Set I/O Command Support

一句話重點

NVM14-1I/O 命令清單區分必備操作與需要另查能力的操作。

來源:NVM Command Set 1.3 §2.2.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.2.1, Figure 14, 文件頁 23, PDF 頁 23

用例子讀懂

NVM14-2Read、Write 是基本命令;打算使用 Copy 前,仍要確認控制器支援 Copy 及需要的格式。

NVM Figure 15 · NVM Command Set Log Page Support

一句話重點

NVM15-1Log 清單說明不同控制器可支援哪些紀錄。

來源:NVM Command Set 1.3 §2.2.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.2.2, Figure 15, 文件頁 23, PDF 頁 23

用例子讀懂

NVM15-2要讀 LID 0Eh,先查這一列對目前控制器是否適用,再查裝置實際支援情況;LID 數字不是通用於所有情境的保證。

NVM Figure 16 · NVM Command Set Feature Support

一句話重點

NVM16-1Feature 支援程度與設定作用範圍是兩個不同資訊。

來源:NVM Command Set 1.3 §2.2.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.2.3, Figure 16, 文件頁 23-24, PDF 頁 23-24

用例子讀懂

NVM16-2即使 Performance Characteristics 對某類控制器可用,仍要確認是否允許以 namespace 作為設定對象。

NVM Figure 17 · NVM Command Set Feature Logged in Persistent Event Log Page Requirement

一句話重點

NVM17-1Feature 更新是否記入事件紀錄,不等於 Feature 能不能使用。

來源:NVM Command Set 1.3 §2.2.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.2.3, Figure 17, 文件頁 24, PDF 頁 24

用例子讀懂

NVM17-2LBA Range Type 的紀錄建議標成 NR,意思是此類更新不建議記入該紀錄,並非禁止使用這個 Feature。

NVM Figure 18 · Status Code – Generic Command Status Values

一句話重點

NVM18-1LBA 超出可定址範圍與容量不足有不同回覆。

來源:NVM Command Set 1.3 §3.1.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.1.2, Figure 18, 文件頁 25, PDF 頁 25

用例子讀懂

NVM18-2NSZE=1000 時,存取 LBA 1000 已越界;在合法 LBA 範圍內分配更多資料卻超過容量,則是另一種問題。

NVM Figure 19 · Status Code – Command Specific Status Values

一句話重點

NVM19-1命令專屬狀態要連同命令種類解釋。

來源:NVM Command Set 1.3 §3.1.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.1.2, Figure 19, 文件頁 25, PDF 頁 25

用例子讀懂

NVM19-2Copy 回覆範圍重疊時,應檢查來源及目的範圍;不能拿 Read 的狀態表替它解釋同一個數值。

NVM Figure 20 · Status Code – Media and Data Integrity Error Values

一句話重點

NVM20-1完整性錯誤可能是資料不符或區塊配置狀態,不一定是媒體損壞。

來源:NVM Command Set 1.3 §3.1.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.1.2, Figure 20, 文件頁 26, PDF 頁 26

用例子讀懂

NVM20-2Compare Failure 表示資料與主機提供的預期內容不同;Deallocated or Unwritten Logical Block 則要連回該區塊狀態與 DULBE 設定。

NVM Figure 22 · Opcodes for NVM Commands

一句話重點

NVM22-1操作碼中的傳輸方向描述主機與控制器之間交換的資料。

來源:NVM Command Set 1.3 §3.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3, Figure 22, 文件頁 27, PDF 頁 27

用例子讀懂

NVM22-2Copy 雖然在裝置內搬移使用者資料,主機仍要傳入來源描述子,所以命令的傳輸方向不能只從「複製」二字推測。

把完成結果對回命令,再解釋狀態

38.19.先以 Phase Tag 辨認新完成項目,再用 SQID 與 CID 對回要求。SCT 決定 SC 所屬表格,DNR 與 CRD 補充重試資訊;SQHD 表示提交佇列進度,不能當成這筆命令的資料長度。

SQID
Submission Queue Identifier,辨識 command 所屬 SQ 的數值。
CID
Command Identifier,與 SQ identifier 合用以辨識 outstanding command。
CRD
Command Retry Delay,status 中選擇 controller 建議重試延遲值的欄位。
一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
SQID/CID/SQHD前兩者辨認命令,SQHD 告知控制器的 SQ Head。一個 CQ 收到多個 SQ 的完成項目時,即使 CID 相同也可由 SQID 區分。
SCT → SC先選 Generic、Command Specific、Media 或 Path 等類別,再查具體碼值。SC=某個值不能單獨命名錯誤;必須保留它搭配的 SCT。
DNR/CRD/CRDTDNR 與重試延遲資訊影響如何理解重新提交;不能把它們當成原命令已成功。重試前仍要確認原操作的狀態與副作用,不能只看延遲已經過。
DW0/DW1/Phase Tag前兩個 Dwords 的內容依命令解釋;Phase Tag 隨 CQ 回繞而變化。Create 成功時 DW0 可回 NSID;同一位置在另一種命令不一定有這種意義。
CQ
Completion Queue,controller 放入完成結果的完成佇列。
來源:Base 2.4 §4.2.1 · Base 2.4 §4.2.3

來源:NVME-BASE-2.4, Rev. 2.4, §4.2.1, Figure 97, 文件頁 144, PDF 頁 170

來源:NVME-BASE-2.4, Rev. 2.4, §4.2.1, Figure 98, 文件頁 144, PDF 頁 170

來源:NVME-BASE-2.4, Rev. 2.4, §4.2.1, Figure 99, 文件頁 145, PDF 頁 171

來源:NVME-BASE-2.4, Rev. 2.4, §4.2.3, Figure 101, 文件頁 145-146, PDF 頁 171-172

Base Figure 97 · Common Completion Queue Entry Layout – Admin and All I/O Command Sets

一句話重點

Base97-1CQE 把命令結果、佇列資訊與識別碼組成完成紀錄。

來源:Base 2.4 §4.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §4.2.1, Figure 97, 文件頁 144, PDF 頁 170

用例子讀懂

Base97-2先用 SQID 與 CID 找回原命令,再解 status 與命令專屬結果;DW0 並非每種命令都代表相同東西。

Base Figure 98 · Completion Queue Entry: DW 2

一句話重點

Base98-1CQE DW2 回報來源 SQ 與該 SQ 的 head 資訊。

來源:Base 2.4 §4.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §4.2.1, Figure 98, 文件頁 144, PDF 頁 170

用例子讀懂

Base98-2SQID 指向 SQ2、SQHD 已前進時,主機可理解控制器消耗進度;它不表示其他所有命令都已完成。

Base Figure 99 · Completion Queue Entry: DW 3

一句話重點

Base99-1CQE DW3 同時帶有命令識別碼與完成狀態。

來源:Base 2.4 §4.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §4.2.1, Figure 99, 文件頁 145, PDF 頁 171

用例子讀懂

Base99-2找到 CID 7 的回覆後,仍要讀 STATUS;識別到這筆命令並不等於它成功執行。

Base Figure 101 · Completion Queue Entry: Status Field

一句話重點

Base101-1Status 欄位必須把類型、代碼與附加控制資訊一起解釋。

來源:Base 2.4 §4.2.3

來源:NVME-BASE-2.4, Rev. 2.4, §4.2.3, Figure 101, 文件頁 145-146, PDF 頁 171-172

用例子讀懂

Base101-2相同 SC 數值搭配不同 SCT 可以有不同意思;DNR 也不能從 SC 名稱猜出,必須看實際 bit。

圖表組 09 · Read/Write 的資料與完成條件 · 24 張圖表

38.20.先把 CDW10、CDW11 組成 SLBA,再把 NLB 換成實際區塊數,算出完整 LBA 範圍及 buffer 長度。最後依 CETYPE、PRACT 等選擇解讀其他欄位,避免把另一種格式的同一 bit 位置照搬過來。

回到本節的解釋與範例

NVM Figure 50 · Read – Metadata Pointer

一句話重點

NVM50-1Read 的 MPTR 是獨立 metadata 的接收位置。

來源:NVM Command Set 1.3 §3.3.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 50, 文件頁 49, PDF 頁 49

用例子讀懂

NVM50-2若讀回 2 blocks 且每個有 8 bytes metadata,metadata buffer 需要容納對應的 16 bytes;資料 buffer 另由 DPTR 指定。

NVM Figure 51 · Read – Data Pointer

一句話重點

NVM51-1Read 的 DPTR 指向主機接收使用者資料的空間。

來源:NVM Command Set 1.3 §3.3.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 51, 文件頁 49, PDF 頁 49

用例子讀懂

NVM51-2讀取 2 個 4 KiB blocks,需要能接收 8192 bytes 的資料區;命令欄位中的 LBA 不等於這個主機記憶體位址。

由 PI 格式決定 tag 的位數與命令位置

38.21.先確認 Guard 格式及 STS,再計算 Storage Tag 與 Reference Tag 的位數。命令中的高低欄位組合成 tag 空間,而不是各自獨立的位址。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
PIF/QPIF/STSGuard 格式決定可用 tag 空間,STS 分配其中的 Storage Tag 位數。64b Guard 的合併空間為 48 bits;STS=18 時 Reference Tag 使用其餘 30 bits。
LBST/ELBST/ILBRT/EILBRT寫入的 tag 與檢查時的 expected tag 有不同角色;起始 Reference Tag 依命令和類型推進。Read 的預期 tag 用來比對,不能把它當成控制器必定回傳的資料值。
CDW2/CDW3/CDW14;ELBTU/ELBTL按格式把高低部分放到指定位置,未使用或忽略的 bits 依圖中規則處理。STS=18 時先做 (StorageTag<<30)|ReferenceTag,再拆高低 Dwords;不能按十六進位字串任意切段。
LBAT/ELBAT/ELBATM/LBSTMApplication Tag、預期值與遮罩、Storage Tag 遮罩分別服務不同檢查。先選擇哪些 bits 參與比對,再解釋比較結果;遮罩不是要寫入媒體的另一份資料。
EILBRT / ILBRT
Initial Logical Block Reference Tag/expected 初值;Type 1/2 依 block 遞增並在欄位寬度處回捲。
ELBATM
Tag comparison mask;bit=0 排除比較,Storage mask 額外受支援與對齊限制。
ELBAT / LBAT
Logical Block Application Tag/expected tag;16-bit,checking 與 mask 及停用值規則共同決定。
ELBST / LBST
Logical Block Storage Tag/Expected Logical Block Storage Tag;寬度由 STS 決定。
ELBTL / ELBTU
Logical Block Tags/expected tags 的上/下部分;依 Guard 格式、STS 與 Dword 位置組合。
來源:NVM Command Set 1.3 §3.3.1 · NVM Command Set 1.3 §3.3.2 · NVM Command Set 1.3 §3.3.4 · NVM Command Set 1.3 §3.3.5 · NVM Command Set 1.3 §3.3.6 · NVM Command Set 1.3 §3.3.8 · NVM Command Set 1.3 §5.3.1.1 · NVM Command Set 1.3 §5.3.1.2 · NVM Command Set 1.3 §5.3.1.3 · NVM Command Set 1.3 §5.3.1.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 25, 文件頁 28, PDF 頁 28

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 29, 文件頁 29, PDF 頁 29

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 30, 文件頁 29, PDF 頁 29

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 33, 文件頁 30, PDF 頁 30

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 37, 文件頁 31, PDF 頁 31

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 38, 文件頁 32, PDF 頁 32

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 52, 文件頁 49, PDF 頁 49

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 57, 文件頁 50, PDF 頁 50

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 58, 文件頁 51, PDF 頁 51

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 60, 文件頁 52, PDF 頁 52

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 64, 文件頁 53, PDF 頁 53

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 65, 文件頁 53, PDF 頁 53

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 69, 文件頁 54, PDF 頁 54

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 74, 文件頁 55, PDF 頁 55

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 75, 文件頁 55, PDF 頁 55

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 81, 文件頁 59, PDF 頁 59

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 86, 文件頁 60, PDF 頁 60

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 87, 文件頁 60, PDF 頁 60

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.1, Figure 155, 文件頁 131, PDF 頁 131

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

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

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.3, Figure 159, 文件頁 134, PDF 頁 134

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 164, 文件頁 137, PDF 頁 137

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

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 166, 文件頁 138, PDF 頁 138

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 167, 文件頁 139, PDF 頁 139

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 168, 文件頁 139, PDF 頁 139

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 169, 文件頁 139-140, PDF 頁 139-140

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 170, 文件頁 140, PDF 頁 140

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 171, 文件頁 140, PDF 頁 140

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 172, 文件頁 141, PDF 頁 141

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 173, 文件頁 141, PDF 頁 141

NVM Figure 52 · Read – Command Dword 2 and Dword 3

一句話重點

NVM52-1Read 的高位預期 tag 要與低位欄位一起解釋。

來源:NVM Command Set 1.3 §3.3.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 52, 文件頁 49, PDF 頁 49

用例子讀懂

NVM52-2讀取使用 80-bit tag 空間的格式時,不能只檢查 CDW14;CDW2、CDW3 也參與表示預期內容。

從命令欄位還原一筆完整 I/O

38.22.先合成起始 LBA、解出實際區塊數,再檢查範圍、格式與處理選項。CDW13 的解讀方式會因 CETYPE 等選擇而改變。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
CDW10/CDW11 → SLBA;NLB兩個 Dwords 合成起點;NLB 是區塊數減 1,終點為 SLBA+NLB。SLBA=100、NLB=7 表示 LBA 100–107,共 8 blocks。
LR/FUA/PRINFO/STC分別影響錯誤恢復、持久化相關行為及 PI 檢查;保留各自適用條件。設定 FUA 不會自動排序另一個 queue 的命令;資料相依仍需主機安排。
CETYPE/CEV/DSM/DTYPE/DSPEC先由命令格式選擇欄位的含義,再讀提示或命令擴充內容。CETYPE 非零時,不能再把同一 CDW13 位置套成 CETYPE=0 的 DSM hints。
DEAC/NSZ/LBACZWrite Zeroes 的選項與回傳量需結合命令結果解讀。解除配置、回傳零值與指定範圍確實被處理是不同問題,不能只看 buffer 全零。
來源:NVM Command Set 1.3 §3.3.1 · NVM Command Set 1.3 §3.3.4 · NVM Command Set 1.3 §3.3.5 · NVM Command Set 1.3 §3.3.6 · NVM Command Set 1.3 §3.3.7 · NVM Command Set 1.3 §3.3.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 26, 文件頁 28, PDF 頁 28

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 27, 文件頁 28-29, PDF 頁 28-29

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 28, 文件頁 29, PDF 頁 29

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 53, 文件頁 49, PDF 頁 49

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 54, 文件頁 49, PDF 頁 49

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 55, 文件頁 50, PDF 頁 50

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 56, 文件頁 50, PDF 頁 50

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 61, 文件頁 52, PDF 頁 52

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 62, 文件頁 52, PDF 頁 52

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 63, 文件頁 52, PDF 頁 52

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 70, 文件頁 54, PDF 頁 54

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 71, 文件頁 54, PDF 頁 54

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 72, 文件頁 54-55, PDF 頁 54-55

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 73, 文件頁 55, PDF 頁 55

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.7, Figure 77, 文件頁 56, PDF 頁 56

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.7, Figure 78, 文件頁 56, PDF 頁 56

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.7, Figure 79, 文件頁 57, PDF 頁 57

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 82, 文件頁 59, PDF 頁 59

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 83, 文件頁 59-60, PDF 頁 59-60

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 84, 文件頁 60, PDF 頁 60

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 85, 文件頁 60, PDF 頁 60

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 88, 文件頁 61, PDF 頁 61

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

一句話重點

NVM53-1Read 的起始 LBA 跨越兩個 32-bit 命令字。

來源:NVM Command Set 1.3 §3.3.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 53, 文件頁 49, PDF 頁 49

用例子讀懂

NVM53-2SLBA=00000001_00000020h 時,CDW10=20h、CDW11=1h;把兩個字接反會讀到完全不同的位置。

NVM Figure 54 · Read – Command Dword 12

一句話重點

NVM54-1Read 的 NLB 決定長度,其餘 bits 決定這次讀取的行為。

來源:NVM Command Set 1.3 §3.3.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 54, 文件頁 49, PDF 頁 49

用例子讀懂

NVM54-2NLB=7 代表 8 blocks;若每個為 4096 bytes,使用者資料共 32768 bytes,metadata 大小另依格式計算。

NVM Figure 55 · Read – Command Dword 13 if CETYPE is cleared to 0h

一句話重點

NVM55-1未使用命令擴充時,Read 的 CDW13 可以描述存取提示。

來源:NVM Command Set 1.3 §3.3.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 55, 文件頁 50, PDF 頁 50

用例子讀懂

NVM55-2主機預期接著循序讀更多資料,可按支援規則提供提示;提示不是保證控制器一定預先讀取多少資料。

NVM Figure 56 · Read - Command Dword 13 if CETYPE is non-zero

一句話重點

NVM56-1使用命令擴充時,Read 的低 16 bits 依 CEV 解釋。

來源:NVM Command Set 1.3 §3.3.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 56, 文件頁 50, PDF 頁 50

用例子讀懂

NVM56-2從 CETYPE=0 改成非零值後,不能沿用上一張表的低位元含義,必須切換到擴充定義。

NVM Figure 57 · Read – Command Dword 14

一句話重點

NVM57-1Read 的 CDW14 提供低位預期 Storage/Reference Tag 空間。

來源:NVM Command Set 1.3 §3.3.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 57, 文件頁 50, PDF 頁 50

用例子讀懂

NVM57-2STS=0 的 16b Guard 格式下,這裡可對應完整 32-bit 預期 Reference Tag;STS 非零時須重新分隔。

NVM Figure 58 · Read – Command Dword 15

一句話重點

NVM58-1Read 可以只檢查 Application Tag 中 mask 指定的部分。

來源:NVM Command Set 1.3 §3.3.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 58, 文件頁 51, PDF 頁 51

用例子讀懂

NVM58-2mask=FFFFh 表示所有 16 bits 都參與相應比較;mask=0000h 則排除這些位元,不代表媒體 tag 必須全零。

NVM Figure 59 · Read – Command Specific Status Values

一句話重點

NVM59-1Read 的命令專屬錯誤指出請求是否符合該命令要求。

來源:NVM Command Set 1.3 §3.3.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 59, 文件頁 51, PDF 頁 51

用例子讀懂

NVM59-2讀取設定與 namespace 的 PI 格式不相容時,應先修正格式理解;不要把它與媒體上的 Guard Check Error 合成同一結果。

NVM Figure 67 · Write – Metadata Pointer

一句話重點

NVM67-1Write 的 MPTR 提供要寫入的獨立 metadata。

來源:NVM Command Set 1.3 §3.3.6

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 67, 文件頁 53, PDF 頁 53

用例子讀懂

NVM67-2主機的新使用者資料與對應 metadata 放在不同 buffer 時,要讓兩者指向相同順序的 logical blocks。

NVM Figure 68 · Write – Data Pointer

一句話重點

NVM68-1Write 的 DPTR 指向主機準備寫入的新資料。

來源:NVM Command Set 1.3 §3.3.6

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 68, 文件頁 54, PDF 頁 54

用例子讀懂

NVM68-2要把 LBA 8~9 改成 B,主機 buffer 放 B,SLBA 放 8;資料內容與媒體位置分別由不同欄位提供。

NVM Figure 69 · Write – Command Dword 2 and Dword 3

一句話重點

NVM69-1Write 的高位 tag 是要建立的目的端保護資訊的一部分。

來源:NVM Command Set 1.3 §3.3.6

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 69, 文件頁 54, PDF 頁 54

用例子讀懂

NVM69-2先依 PI 格式組出 Storage/Reference Tag,再拆到命令字;不能因為高位目前是零,就假設所有格式都不用這些欄位。

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

一句話重點

NVM70-1Write 的 SLBA 只表示媒體目的起點。

來源:NVM Command Set 1.3 §3.3.6

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 70, 文件頁 54, PDF 頁 54

用例子讀懂

NVM70-2SLBA=100、NLB=1 表示更新 LBA 100 和 101;DPTR 另外指出新資料在主機記憶體的哪裡。

NVM Figure 71 · Write – Command Dword 12

一句話重點

NVM71-1Write 的長度、FUA 與 PI 選項各自控制不同事項。

來源:NVM Command Set 1.3 §3.3.6

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 71, 文件頁 54, PDF 頁 54

用例子讀懂

NVM71-28-block Write 用 NLB=7;設定 FUA 影響持久化要求,並不自動保證其他佇列中的命令先完成。

NVM Figure 72 · Write – Command Dword 13 if CETYPE is cleared to 0h

一句話重點

NVM72-1一般 Write 的 CDW13 把 Directive 資訊與資料集提示分開。

來源:NVM Command Set 1.3 §3.3.6

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 72, 文件頁 54-55, PDF 頁 54-55

用例子讀懂

NVM72-2使用 Streams 等 Directive 時先辨識高位 DSPEC;低位 DSM 提示仍有自己的含義,不是同一個編號。

NVM Figure 73 · Write - Command Dword 13 if CETYPE is non-zero

一句話重點

NVM73-1擴充 Write 的 CDW13 以 CEV 取代相應的一般低位解釋。

來源:NVM Command Set 1.3 §3.3.6

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 73, 文件頁 55, PDF 頁 55

用例子讀懂

NVM73-2CETYPE 非零後,保留高位 Directive 資訊時仍須按擴充定義設定低位,不把 DSM 提示塞進 CEV。

NVM Figure 74 · Write – Command Dword 14

一句話重點

NVM74-1Write 的 CDW14 提供初始 tag 的低位部分。

來源:NVM Command Set 1.3 §3.3.6

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 74, 文件頁 55, PDF 頁 55

用例子讀懂

NVM74-2連續寫入多個 blocks 時,先確認第一個 block 的 tag 初值,再依所用保護類型理解後續值。

NVM Figure 75 · Write – Command Dword 15

一句話重點

NVM75-1Write 的 Application Tag 與 mask 是不同的欄位。

來源:NVM Command Set 1.3 §3.3.6

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 75, 文件頁 55, PDF 頁 55

用例子讀懂

NVM75-2LBAT 提供 tag 內容,LBATM 指定相應處理的位元範圍;不能把 FFFFh mask 當成要寫入 FFFFh tag。

LBATM
Tag comparison mask;bit=0 排除比較,Storage mask 額外受支援與對齊限制。

NVM Figure 76 · Write – Command Specific Status Values

一句話重點

NVM76-1Write 的命令專屬狀態協助區分配置不符與寫入目標限制。

來源:NVM Command Set 1.3 §3.3.6

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 76, 文件頁 56, PDF 頁 56

用例子讀懂

NVM76-2嘗試寫入唯讀範圍時,重點是存取規則;它與 tag 配置不合法屬於不同原因。

同一筆命令的身分、對象與資料方向

38.23.CDW0 先選操作與資料指標格式;NSID 選操作對象;DPTR/MPTR 再指向資料。命令專屬 Dwords 的含義由 OPC 與命令集決定。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
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 後存回同寬整數。
PSDT
PRP or SGL for Data Transfer,CDW0 中決定 DPTR 應按 PRP 或 SGL 解讀的欄位。
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 數。
來源: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 固定各命令共用欄位的位置。

來源: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 選命令,再查專屬欄位表。

從第一個 page 的剩餘空間開始計算

38.24.PRP1 的 page offset 決定第一頁還能容納多少資料,總長度再決定 PRP2 是下一頁位址還是 PRP List 位址。指標串接與資料是否實體連續是兩個問題。

page offset
page offset;資料在第一個記憶體 page 內的起始位移;跨過 page boundary 後,位置由下一個 page pointer 決定。
一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
Page Base Address/Offset將位址拆為 page 基底與頁內位移;page 大小以主機所選記憶體 page 設定解讀。page 為 4096 bytes、offset=3072,第一頁只剩 1024 bytes 可放資料。
PRP2/PRP List entries先扣掉第一頁已涵蓋的長度,再依剩餘量判斷直接指下一頁或使用清單。傳輸 8192 bytes 且第一頁只剩 1024 bytes 時,還需涵蓋後續 7168 bytes,不能只給一個下一頁。
清單串接與對齊清單中的頁位址及下一段清單各有對齊與最後項目的使用規則。不能把作為下一張清單指標的位置,又當成一頁實際資料。
來源:Base 2.4 §4.3.1

來源:NVME-BASE-2.4, Rev. 2.4, §4.3.1, Figure 110, 文件頁 158, PDF 頁 184

來源:NVME-BASE-2.4, Rev. 2.4, §4.3.1, Figure 111, 文件頁 158, PDF 頁 184

Base Figure 110 · PRP Entry Layout

一句話重點

Base110-1PRP entry 是有固定位元配置的記憶體指標。

來源:Base 2.4 §4.3.1

來源:NVME-BASE-2.4, Rev. 2.4, §4.3.1, Figure 110, 文件頁 158, PDF 頁 184

用例子讀懂

Base110-2先按圖取出位址相關位元,再配合頁大小判斷它指向哪一頁;不能把 64-bit entry 當成資料長度。

Base Figure 111 · PRP Entry – Page Base Address and Offset

一句話重點

Base111-1PRP 的頁基底與頁內 offset 共同形成第一段資料位置。

來源:Base 2.4 §4.3.1

來源:NVME-BASE-2.4, Rev. 2.4, §4.3.1, Figure 111, 文件頁 158, PDF 頁 184

用例子讀懂

Base111-24 KiB 頁、offset=128 時,第一頁剩餘 4096−128=3968 bytes;是否需要下一個 PRP 由總長度決定。

描述子先選類型,再解釋位址與長度

38.25.SGL 的型別與子型別決定描述子是在描述資料、下一段描述子,或其他受支援行為。LEN 的單位雖然是長度,所指的內容仍由型別決定。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
SGLID/SGLDT/SGLDST型別與子型別決定此描述子的結構及合法組合。Data Block 的 ADDR 指向資料;Segment 的 ADDR 指向更多描述子,兩者不能當成相同 buffer。
ADDR/LEN一起描述一段範圍;主機還需檢查總涵蓋長度與命令要求相符。前段 1024 bytes、後段 3072 bytes 可涵蓋 4096 bytes,但每個描述子仍需符合自身規則。
Segment/Last Segment/Bit BucketSegment 與 Last Segment 表達清單串接,Bit Bucket 表達特定資料處理方式。遇到 Last Segment 就按最後一段的規則處理,不再假定有下一段指標。
來源:Base 2.4 §4.3.2

來源:NVME-BASE-2.4, Rev. 2.4, §4.3.2, Figure 116, 文件頁 161, PDF 頁 187

Base Figure 116 · Generic SGL Descriptor Format

一句話重點

Base116-1Generic SGL Descriptor 固定型別欄位的位置。

來源:Base 2.4 §4.3.2

來源:NVME-BASE-2.4, Rev. 2.4, §4.3.2, Figure 116, 文件頁 161, PDF 頁 187

用例子讀懂

Base116-2先讀 SGLID 判斷 descriptor 類型,再解其餘 bytes;同一位置在資料描述子與 segment 描述子中指向不同對象。

圖表組 10 · 命令順序與 Compare-and-Write · 1 張圖表

38.26.命令順序圖要分開觀察提交、執行與完成。閱讀 fused pair 的格式時,把兩筆命令的範圍並列,再檢查 ACWU/NACWU 及邊界;不要只看到 FUSE 設定就推論大小一定符合。

回到本節的解釋與範例

NVM Figure 3 · Supported Fused Operations

一句話重點

NVM3-1融合的 Compare 與 Write 把比對結果當成是否更新的條件。

來源:NVM Command Set 1.3 §2.1.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.3, Figure 3, 文件頁 14, PDF 頁 14

用例子讀懂

NVM3-2媒體原本為 A,主機要求「若仍為 A 就改成 B」;比對失敗時不能繼續寫 B,否則會覆蓋別人的更新。

圖表組 11 · 正常、斷電與多段原子性 · 7 張圖表

38.27.大小表先解碼 AWUN/AWUPF,再依 namespace 欄位及模式選取適用值。邊界圖從 NABO 開始標出每個分界,將實際寫入範圍畫在同一條 LBA 軸上,才能看出是否跨界。

回到本節的解釋與範例

NVM Figure 4 · Atomicity Parameters for Single Atomicity Mode

一句話重點

NVM4-1原子性參數要先選控制器或 namespace 的值,再換算實際大小。

來源:NVM Command Set 1.3 §2.1.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 4, 文件頁 15-16, PDF 頁 15-16

用例子讀懂

NVM4-2若適用的 AWUN 原始值為 7,大小是 8 個 blocks;若 namespace 欄位使用零值繼承規則,不能把該零直接當成 1 block。

NVM Figure 5 · AWUN/NAWUN Example Results

一句話重點

NVM5-1正常運作下的重疊寫入結果取決於原子大小與讀寫範圍。

來源:NVM Command Set 1.3 §2.1.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 5, 文件頁 17, PDF 頁 17

用例子讀懂

NVM5-2把一次寫入分成「原子保證內」與「跨出保證」兩種長度,再沿表中的讀取範圍比較可能看到的舊、新資料組合。

NVM Figure 6 · AWUPF/NAWUPF Example Initial State of NVM

一句話重點

NVM6-1斷電結果表必須先有明確的寫入前資料與此次更新範圍。

來源:NVM Command Set 1.3 §2.1.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 6, 文件頁 18, PDF 頁 18

用例子讀懂

NVM6-2假設某段原本都是 A,這次打算改為 B;先在圖上標出哪些 blocks 本來就是 A,哪些是這次命令要改的,才能讀下一張表。

NVM Figure 7 · AWUPF/NAWUPF Example Final State of NVM

一句話重點

NVM7-1斷電時的資料保證依寫入是否符合 power-fail 原子範圍而變化。

來源:NVM Command Set 1.3 §2.1.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 7, 文件頁 18, PDF 頁 18

用例子讀懂

NVM7-2寫入中途斷電後,沿表中對應的寫入大小與完成情況讀結果;不能把「命令尚未完成」直接理解成全部更新都已保存。

NVM Figure 8 · Atomic Boundaries Example

一句話重點

NVM8-1寫入長度足夠小,仍可能因起點位置而跨越原子邊界。

來源:NVM Command Set 1.3 §2.1.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 8, 文件頁 19, PDF 頁 19

用例子讀懂

NVM8-2教學例:邊界每 8 blocks 一次,LBA 7 起寫 2 blocks 會跨界;LBA 4 起寫 2 blocks 則不會。兩筆長度相同,位置不同。

NVM Figure 9 · Atomicity Parameter Differences for Multiple Atomicity Mode

一句話重點

NVM9-1Multiple 模式把較大寫入分成符合參數的原子子範圍。

來源:NVM Command Set 1.3 §2.1.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 9, 文件頁 20, PDF 頁 20

用例子讀懂

NVM9-2一筆寫入跨越 3 個原子單位時,應逐個單位討論保證;不能把 3 個單位合稱為一次全有或全無的交易。

NVM Figure 10 · Multiple Atomicity Example

一句話重點

NVM10-1圖中的大命令 D 對應多個子範圍,方便比較兩種原子模式。

來源:NVM Command Set 1.3 §2.1.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 10, 文件頁 21, PDF 頁 21

用例子讀懂

NVM10-2先把 A、B、C 各覆蓋的範圍畫在同一條 LBA 軸上,再看 D 如何一次涵蓋它們;比較的是提交方式與各段保證,不是命令名稱。

圖表組 12 · Compare 與 Verify 解決不同問題 · 16 張圖表

38.28.比較命令圖時,先找有沒有主機資料 buffer,再找控制器使用什麼作為比較或檢查依據。大小表必須連同 VSL 與 NVMVFYS 閱讀,才知道數值是建議還是上限。

回到本節的解釋與範例

NVM Figure 23 · Compare – Metadata Pointer

一句話重點

NVM23-1Compare 的 MPTR 指向要一起比較的獨立 metadata。

來源:NVM Command Set 1.3 §3.3.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 23, 文件頁 28, PDF 頁 28

用例子讀懂

NVM23-2若資料與 metadata 分開傳輸,預期使用者資料放在 DPTR 所指區域,預期 metadata 則放在 MPTR 所指區域。

NVM Figure 24 · Compare – Data Pointer

一句話重點

NVM24-1Compare 的 DPTR 提供預期內容,供控制器與媒體資料比較。

來源:NVM Command Set 1.3 §3.3.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 24, 文件頁 28, PDF 頁 28

用例子讀懂

NVM24-2主機把預期值 A 放進輸入 buffer;命令比較媒體是否也為 A,不會把這個 buffer 當成一般 Read 的輸出目的地。

NVM Figure 25 · Compare – Command Dword 2 and Dword 3

一句話重點

NVM25-1Compare 的高位 tag 欄位要與 CDW14 合併才能形成完整預期值。

來源:NVM Command Set 1.3 §3.3.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 25, 文件頁 28, PDF 頁 28

用例子讀懂

NVM25-2某種 PI 格式使用超過 32 bits 的 tag 空間時,只填 CDW14 會缺少高位;應先組出完整 tag,再按圖拆入各欄位。

NVM Figure 26 · Compare – Command Dword 10 and Command Dword 11

一句話重點

NVM26-1Compare 的 SLBA 指定比較範圍起點。

來源:NVM Command Set 1.3 §3.3.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 26, 文件頁 28, PDF 頁 28

用例子讀懂

NVM26-2比較從 LBA 16 開始的資料時,CDW10 放 16、CDW11 放 0;要比較幾個 blocks 由另一個欄位決定。

NVM Figure 27 · Compare – Command Dword 12

一句話重點

NVM27-1Compare 的長度與保護檢查選項放在同一個命令字中。

來源:NVM Command Set 1.3 §3.3.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 27, 文件頁 28-29, PDF 頁 28-29

用例子讀懂

NVM27-2比較 4 blocks 時,NLB 填 3;同時核對 PRACT 必須為 0,不能以 Read 的 PI 傳輸設定直接照搬。

NVM Figure 28 · Compare - Command Dword 13 if CETYPE is non-zero

一句話重點

NVM28-1Compare 的 CDW13 在啟用命令擴充時承載擴充值。

來源:NVM Command Set 1.3 §3.3.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 28, 文件頁 29, PDF 頁 29

用例子讀懂

NVM28-2CETYPE 非零時依對應擴充解釋 CEV;若 CETYPE=0,不能把相同低位元當成有效擴充值。

NVM Figure 29 · Compare – Command Dword 14

一句話重點

NVM29-1Compare 的 CDW14 是預期 tag 空間的低 32 bits。

來源:NVM Command Set 1.3 §3.3.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 29, 文件頁 29, PDF 頁 29

用例子讀懂

NVM29-2若 STS 分走部分位元,這 32 bits 就不全是 Reference Tag;先依格式分隔,再比較對應的預期值。

NVM Figure 30 · Compare – Command Dword 15

一句話重點

NVM30-1Compare 的 Application Tag mask 決定哪些位元參與比對。

來源:NVM Command Set 1.3 §3.3.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 30, 文件頁 29, PDF 頁 29

用例子讀懂

NVM30-2預期 tag 為 12ABh、mask 為 FF00h 時,比對著重高 8 bits;低 8 bits 不會因 mask 為零而被要求等於零。

NVM Figure 31 · Compare – Command Specific Status Values

一句話重點

NVM31-1Compare 的設定錯誤與實際資料比對失敗需要分開理解。

來源:NVM Command Set 1.3 §3.3.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 31, 文件頁 30, PDF 頁 30

用例子讀懂

NVM31-2PI 格式設定不成立時,尚未進入有效的資料比較;Compare Failure 則表示比較已發現內容不相同。

NVM Figure 60 · Verify – Command Dword 2 and Dword 3

一句話重點

NVM60-1Verify 的高位 tag 提供媒體檢查的預期值。

來源:NVM Command Set 1.3 §3.3.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 60, 文件頁 52, PDF 頁 52

用例子讀懂

NVM60-2Verify 雖不把資料讀回主機,仍可需要預期 tag;沒有輸出資料 buffer 並不表示不檢查資料保護。

NVM Figure 61 · Verify – Command Dword 10 and Command Dword 11

一句話重點

NVM61-1Verify 用 SLBA 指定要檢查的起點。

來源:NVM Command Set 1.3 §3.3.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 61, 文件頁 52, PDF 頁 52

用例子讀懂

NVM61-2要檢查 LBA 200~203,起點填 200,長度由 NLB 表達;不需要提供一份預期使用者資料作逐 byte 比較。

NVM Figure 62 · Verify – Command Dword 12

一句話重點

NVM62-1Verify 的長度與檢查選項決定此次驗證範圍。

來源:NVM Command Set 1.3 §3.3.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 62, 文件頁 52, PDF 頁 52

用例子讀懂

NVM62-2NLB=3 表示檢查 4 blocks,並按 Verify 的要求使用 PRACT=0;不能把 Read 的 PI 處理方式原封不動搬過來。

NVM Figure 63 · Verify - Command Dword 13 if CETYPE is non-zero

一句話重點

NVM63-1Verify 的命令擴充欄位只在相應 CETYPE 下有意義。

來源:NVM Command Set 1.3 §3.3.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 63, 文件頁 52, PDF 頁 52

用例子讀懂

NVM63-2同一個低 16-bit 數值放在不同 CETYPE 中,可能表示不同內容;報告時須把選擇器和值一起說明。

NVM Figure 64 · Verify – Command Dword 14

一句話重點

NVM64-1Verify 的 CDW14 是預期 tag 的低位部分。

來源:NVM Command Set 1.3 §3.3.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 64, 文件頁 53, PDF 頁 53

用例子讀懂

NVM64-2若格式還用到 CDW2/3,讀者應先合併再拆分 Storage Tag 與 Reference Tag,避免只驗證了低位。

NVM Figure 65 · Verify – Command Dword 15

一句話重點

NVM65-1Verify 的 Application Tag mask 用來選擇檢查位元。

來源:NVM Command Set 1.3 §3.3.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 65, 文件頁 53, PDF 頁 53

用例子讀懂

NVM65-2只檢查高位的 mask 與檢查全部位元會得到不同的通過條件;mask 是比較範圍,不是另一份資料。

NVM Figure 66 · Verify – Command Specific Status Values

一句話重點

NVM66-1Verify 的回覆要依驗證命令的狀態集合閱讀。

來源:NVM Command Set 1.3 §3.3.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 66, 文件頁 53, PDF 頁 53

用例子讀懂

NVM66-2命令成功表示要求的驗證已完成,不能推論媒體內容與主機心中某份資料相同;若要比較已知內容,需使用 Compare。

圖表組 13 · Copy:描述來源、連續目的與部分失敗 · 13 張圖表

38.29.先解碼 NR 得到來源描述子數,再逐段解碼 NLB,把長度累加到 SDLBA。對照 MSRC、MSSRL、MCL 時,分清楚它們限制的是來源數、單段長度或總長度;完成 DW0 另讀其回報語意。

SDLBA
Starting Destination LBA;指定 Copy 連續目的範圍的起點。
回到本節的解釋與範例

把多個來源範圍依序接到目的地

38.30.Copy 的 DPTR 指向來源描述子;SDLBA 是目的起點。每個描述子先選來源 namespace 與範圍,再把各段長度依序累加到目的位置。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
DESFMT/NR/DPTRDESFMT 決定描述子版型,NR 是描述子數量減 1,DPTR 給清單位置。NR=1 代表兩個描述子;格式不同時,不能沿用同一個描述子長度解析清單。
SNSID/SLBA/NLB → SDLBA來源可由描述子選 namespace;各段實際長度決定下一段目的位置。第一段 3 blocks、第二段 2 blocks、SDLBA=100,目的依序是 100–102 與 103–104。
FCO/能力與命令專屬狀態快速複製要求需要支援與資源條件;相關錯誤指出哪個要求未成立。Fast Copy Not Possible 與來源範圍重疊是不同條件,不能只稱為「Copy 不支援」。
PRINFOR/PRINFOW/STCR/STCW兩端保護資訊處理分開選擇,再對照來源與目的格式。目的位置改變時,要重新檢查 Reference Tag 的生成與檢查方式。
PRINFOR
Protection Information Read;Copy 讀取端的 PI 處理與檢查欄位。
PRINFOW
Protection Information Write;Copy 寫入端的 PI 處理與檢查欄位。
DESFMT
Copy Source Range Entry 格式 selector;同時影響 descriptor 大小、來源 NSID 與 PI tag layout。
STCR
Storage Tag Check Read;要求 Copy 讀取端的 Storage Tag 檢查。
STCW
Storage Tag Check Write;要求 Copy 寫入端的 Storage Tag 檢查。
來源:NVM Command Set 1.3 §3.3.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 32, 文件頁 30, PDF 頁 30

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 34, 文件頁 30, PDF 頁 30

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 35, 文件頁 30-31, PDF 頁 30-31

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 36, 文件頁 31, PDF 頁 31

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 39, 文件頁 32, PDF 頁 32

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 40, 文件頁 33-34, PDF 頁 33-34

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 41, 文件頁 35-36, PDF 頁 35-36

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 42, 文件頁 38, PDF 頁 38

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 43, 文件頁 43-44, PDF 頁 43-44

NVM Figure 32 · Copy – Data Pointer

一句話重點

NVM32-1Copy 的 DPTR 指向來源範圍描述子。

來源:NVM Command Set 1.3 §3.3.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 32, 文件頁 30, PDF 頁 30

用例子讀懂

NVM32-2要複製來源 LBA 100~103,buffer 中放的是來源起點、長度等描述,不必把這 4 blocks 的使用者資料先讀回主機。

NVM Figure 33 · Copy – Command Dword 2 and Dword 3

一句話重點

NVM33-1Copy 命令本身的高位 tag 描述目的端資料保護。

來源:NVM Command Set 1.3 §3.3.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 33, 文件頁 30, PDF 頁 30

用例子讀懂

NVM33-2來源端的預期 tag 從來源描述子取得,目的端要寫入的 tag 則由命令欄位提供;兩者可能不同。

NVM Figure 34 · Copy – Command Dword 10 and Command Dword 11

一句話重點

NVM34-1Copy 的 SDLBA 是串接所有來源範圍後的目的起點。

來源:NVM Command Set 1.3 §3.3.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 34, 文件頁 30, PDF 頁 30

用例子讀懂

NVM34-2來源兩段各有 2 blocks,目的從 LBA 1000 開始,第二段接在 LBA 1002,不會再從 1000 寫一次。

NVM Figure 35 · Copy – Command Dword 12

一句話重點

NVM35-1Copy 分別指定讀端與寫端 PI 行為,並選擇描述子格式。

來源:NVM Command Set 1.3 §3.3.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 35, 文件頁 30-31, PDF 頁 30-31

用例子讀懂

NVM35-2來源需要檢查、目的需要重新產生 PI 時,分別看 PRINFOR 與 PRINFOW;NR=1 表示有 2 個來源範圍。

NVM Figure 36 · Copy – Command Dword 13

一句話重點

NVM36-1Copy 的 CDW13 分別容納 Directive 資訊與命令擴充資訊。

來源:NVM Command Set 1.3 §3.3.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 36, 文件頁 31, PDF 頁 31

用例子讀懂

NVM36-2使用 Directive 時讀高 16 bits 的 DSPEC;命令擴充是否使用低 16 bits 的 CEV,仍由 CETYPE 決定。

NVM Figure 37 · Copy – Command Dword 14

一句話重點

NVM37-1Copy 的 CDW14 補齊目的端 tag 的低位元。

來源:NVM Command Set 1.3 §3.3.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 37, 文件頁 31, PDF 頁 31

用例子讀懂

NVM37-2目的起點改變時,要重新核對初始 Reference Tag;不能直接把第一個來源描述子的 tag 當成目的 tag。

NVM Figure 38 · Copy – Command Dword 15

一句話重點

NVM38-1Copy 的 LBAT 和 LBATM 描述目的端 Application Tag。

來源:NVM Command Set 1.3 §3.3.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 38, 文件頁 32, PDF 頁 32

用例子讀懂

NVM38-2若只關心某些 tag 位元,先列出要保留或比對的位元,再依圖理解 mask;mask 與 tag 值不能互換。

NVM Figure 39 · Copy – Copy Descriptor Formats

一句話重點

NVM39-1Copy 描述子格式決定來源 namespace 與 PI 資訊如何表示。

來源:NVM Command Set 1.3 §3.3.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 39, 文件頁 32, PDF 頁 32

用例子讀懂

NVM39-2需要指定另一個來源 namespace 時,先選支援 SNSID 的格式;不能只在不含該欄位的格式後面自行加上 NSID。

NVM Figure 40 · Copy – Source Range Entries Copy Descriptor Format 0h and Format 2h

一句話重點

NVM40-1Format 0h 與 2h 的來源項目使用相應的較短 tag 表示。

來源:NVM Command Set 1.3 §3.3.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 40, 文件頁 33-34, PDF 頁 33-34

用例子讀懂

NVM40-2填入一段來源時,先確定格式是否包含 SNSID,再設定 SLBA 與 NLB;相同 byte 位置須依選定格式閱讀。

NVM Figure 41 · Copy – Source Range Entries Copy Descriptor Format 1h and Format 3h

一句話重點

NVM41-1Format 1h 與 3h 為較大的 tag 空間提供高、低欄位。

來源:NVM Command Set 1.3 §3.3.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 41, 文件頁 35-36, PDF 頁 35-36

用例子讀懂

NVM41-2預期 tag 超過低 32 bits 時,將完整值拆入 ELBTU、ELBTL;省略高位就不再是原本的預期值。

NVM Figure 42 · Source LBA and Destination LBA Relationship Example

一句話重點

NVM42-1多個來源範圍按描述子順序連續寫入目的範圍。

來源:NVM Command Set 1.3 §3.3.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 42, 文件頁 38, PDF 頁 38

用例子讀懂

NVM42-2第一段長 3 blocks、第二段長 2 blocks,SDLBA=20 時,兩段目的分別是 20~22 與 23~24。

NVM Figure 43 · Copy – Command Specific Status Values

一句話重點

NVM43-1Copy 失敗原因可以來自範圍、資源或快速複製條件。

來源:NVM Command Set 1.3 §3.3.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 43, 文件頁 43-44, PDF 頁 43-44

用例子讀懂

NVM43-2來源與目的發生不允許的重疊,和要求 Fast Copy 卻無法滿足,是不同條件;先依狀態找要重新檢查的部分。

控制器支援與主機能理解的格式需要配合

38.31.Host Behavior Support 是主機對可處理行為或格式的宣告。控制器本身支援某功能,不足以推論主機已能解釋該功能的進階資料結構。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
LBAFEE/ETDAS/CDF2E/CDF3E分別連到延伸 LBA 格式、Telemetry Area 4 及 Copy 描述子格式;每篇只使用所需分支。使用需要延伸格式的 namespace 建立設定前,先確認主機相應宣告已成立。
來源:Base 2.4 §5.2.30.1.15

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.15, Figure 491, 文件頁 476-477, PDF 頁 502-503

Base Figure 491 · Host Behavior Support – Data Structure

一句話重點

Base491-1Host Behavior Support 告知控制器主機能處理哪些延伸行為。

來源:Base 2.4 §5.2.30.1.15

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.15, Figure 491, 文件頁 476-477, PDF 頁 502-503

用例子讀懂

Base491-2裝置支援某功能與主機宣告已能使用它不同;先確認能力,再看主機是否按對應欄位啟用相容行為。

圖表組 14 · Copy 的 PI 格式相容與轉換 · 6 張圖表

38.32.把轉換表當成來源格式與目的格式的交叉比較:先確定兩端是否有 PI,再選讀端/寫端 PRACT 的組合,最後核對 metadata 是否只包含 PI。表中的 0/0、1/1 必須分別對應到兩端。

回到本節的解釋與範例

先決定傳輸哪些資料,再決定檢查與產生哪些 PI

38.33.PRACT 選資料保護處理方式,PRCHK 的各 bit 選檢查項目;格式、metadata 大小與命令方向共同決定實際傳輸量。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
PRACT/MS/PI size結合所選格式判斷 PI 是隨資料傳輸,還是由控制器插入或移除。MS 大於 PI 大小時,移除 PI 不代表整份 metadata 都消失。
GRDCHK/ATCHK/RTCHK/STCGuard、Application Tag、Reference Tag 及 Storage Tag 的檢查分別選擇。只選 Guard 檢查,不可宣稱同時驗證了所有 tag 的關聯。
PRINFOR/PRINFOW;STCR/STCWCopy 的來源讀取與目的寫入可有不同處理;兩端的選擇需要成對閱讀。來源有 PI、目的沒有 PI 的 Strip,與來源沒有 PI、目的需要 PI 的 Insert,資料流方向相反。
來源資料/主機資料/比較結果Compare 先依設定處理與檢查,再比較指定資料;錯誤可來自不同階段。PI 檢查失敗與資料比較不相等,不能合成同一種 Compare Failure。
GRDCHK
Guard Check;要求 Guard 檢查。
ATCHK
Application Tag Check;要求 Application Tag 檢查。
來源:NVM Command Set 1.3 §2.1.5 · NVM Command Set 1.3 §5.3.2.1 · NVM Command Set 1.3 §5.3.2.2 · NVM Command Set 1.3 §5.3.2.4 · NVM Command Set 1.3 §5.3.2.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.5, Figure 11, 文件頁 21-22, PDF 頁 21-22

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.5, Figure 12, 文件頁 22, PDF 頁 22

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.1, Figure 174, 文件頁 143, PDF 頁 143

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.2, Figure 175, 文件頁 145, PDF 頁 145

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.4, Figure 176, 文件頁 146, PDF 頁 146

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.5, Figure 177, 文件頁 147, PDF 頁 147

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.5, Figure 178, 文件頁 147, PDF 頁 147

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.5, Figure 179, 文件頁 148, PDF 頁 148

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.5, Figure 180, 文件頁 148, PDF 頁 148

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.5, Figure 181, 文件頁 149, PDF 頁 149

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.5, Figure 182, 文件頁 149, PDF 頁 149

NVM Figure 177 · PI Processing for Copy MD=8 Pass-through

一句話重點

NVM177-18-byte PI 的 Copy pass-through 讓保護資訊隨資料傳遞。

來源:NVM Command Set 1.3 §5.3.2.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.5, Figure 177, 文件頁 147, PDF 頁 147

用例子讀懂

NVM177-2PRINFOR.PRACT=0、PRINFOW.PRACT=0 時沿圖追來源 PI 到目的端,不在中間自行插入重新產生步驟。

NVM Figure 178 · PI Processing for Copy MD=16 Pass-through

一句話重點

NVM178-116-byte PI 的 Copy pass-through 保留較大的 PI 結構。

來源:NVM Command Set 1.3 §5.3.2.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.5, Figure 178, 文件頁 147, PDF 頁 147

用例子讀懂

NVM178-2與 Figure 177 比較時,先將每個 block 的 PI 從 8 bytes 換成 16 bytes,再看資料與 PI 的對應,不能沿用 8-byte 欄位切法。

NVM Figure 179 · PI Processing for Copy MD=8 Replace

一句話重點

NVM179-18-byte PI 的 Copy replace 分開處理來源檢查與目的 PI 產生。

來源:NVM Command Set 1.3 §5.3.2.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.5, Figure 179, 文件頁 148, PDF 頁 148

用例子讀懂

NVM179-2讀端和寫端 PRACT 都為 1 時,沿圖看舊 PI 在哪裡移除、新 PI 在哪裡產生,而非把原 PI 原封不動複製。

NVM Figure 180 · PI Processing for Copy MD=16 Replace

一句話重點

NVM180-116-byte PI 的 Copy replace 使用目的格式重新建立較大的 PI。

來源:NVM Command Set 1.3 §5.3.2.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.5, Figure 180, 文件頁 148, PDF 頁 148

用例子讀懂

NVM180-2來源、目的都帶 16-byte PI 時,仍須用目的端 tag 設定產生新保護資訊;大小相同不表示內容也相同。

NVM Figure 181 · PI Processing for Copy MD=8 Insert

一句話重點

NVM181-1Copy insert 用在來源無 PI、目的需要 PI 的資料轉換。

來源:NVM Command Set 1.3 §5.3.2.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.5, Figure 181, 文件頁 149, PDF 頁 149

用例子讀懂

NVM181-2來源只有使用者資料,目的每個 block 需要 8-byte PI;沿寫端流程看控制器如何補上目的保護資訊。

NVM Figure 182 · PI Processing for Copy MD=8 Strip

一句話重點

NVM182-1Copy strip 用在來源帶 PI、目的不保留 PI 的轉換。

來源:NVM Command Set 1.3 §5.3.2.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.5, Figure 182, 文件頁 149, PDF 頁 149

用例子讀懂

NVM182-2來源的 8-byte PI 仍按規則參與讀端處理,但不成為目的使用者資料的一部分;移除 PI 不是少複製使用者資料。

圖表組 15 · Dataset Management 與三種 processing limits · 6 張圖表

38.34.先讀屬性位,再把每個 range 的長度列出並累加。限制表必須同時看三個 limits 是否為零,以及 variant 的值;完成狀態不能取代對實際配置語意的解讀。

回到本節的解釋與範例

清單數量、範圍長度與使用提示各有單位

38.35.Dataset Management 傳入一份範圍清單。命令選共同動作,描述子給個別範圍及用途提示;不同欄位的數量編碼不能互相套用。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
DPTR/NR/AD/IDW/IDRDPTR 指清單,NR 是描述子數減 1;其他 bits 指解除配置或完整讀寫等屬性。NR=1 需要兩個範圍描述子,但每段涵蓋多少 blocks 要另讀描述子。
SLBA/LLB/CATTRSLBA 是起點,LLB 直接表示 logical blocks 數;CATTR 是該範圍的上下文屬性。LLB=8 表示 8 blocks,不能套用一般 Read 的 NLB+1 規則變成 9。
CASZE/WPREP/SWR/SRR/AL/AF是存取大小、讀寫方式與頻率等提示;不是實際讀寫完成結果。提示順序讀取,不會替主機執行 Read,也不能當成所有後續 I/O 的強制排序。
來源:NVM Command Set 1.3 §3.3.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 44, 文件頁 44, PDF 頁 44

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 45, 文件頁 44, PDF 頁 44

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 46, 文件頁 44-45, PDF 頁 44-45

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 47, 文件頁 45, PDF 頁 45

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 48, 文件頁 47, PDF 頁 47

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 49, 文件頁 48, PDF 頁 48

NVM Figure 44 · Dataset Management – Data Pointer

一句話重點

NVM44-1Dataset Management 傳入的是範圍清單,不是那些範圍內的資料。

來源:NVM Command Set 1.3 §3.3.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 44, 文件頁 44, PDF 頁 44

用例子讀懂

NVM44-2要提示兩段資料的使用方式,只需傳入兩個描述子,無須把兩段使用者資料放入 DPTR buffer。

NVM Figure 45 · Dataset Management – Command Dword 10

一句話重點

NVM45-1Dataset Management 的 NR 採從零起算的範圍數。

來源:NVM Command Set 1.3 §3.3.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 45, 文件頁 44, PDF 頁 44

用例子讀懂

NVM45-2NR=0 表示 1 個範圍,NR=2 表示 3 個範圍;配置清單大小時先加 1,再乘描述子大小。

NVM Figure 46 · Dataset Management – Command Dword 11

一句話重點

NVM46-1AD、IDW、IDR 表示主機對所列範圍提出的管理資訊。

來源:NVM Command Set 1.3 §3.3.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 46, 文件頁 44-45, PDF 頁 44-45

用例子讀懂

NVM46-2主機不再需要某段資料時可提出 deallocate;這與只告知讀寫特性不同,不能把所有 bits 都解釋成「刪除」。

NVM Figure 47 · Dataset Management – Range Definition

一句話重點

NVM47-1每個 Dataset Management 描述子都有自己的起點、長度與屬性。

來源:NVM Command Set 1.3 §3.3.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 47, 文件頁 45, PDF 頁 45

用例子讀懂

NVM47-2兩段不連續的 LBA 範圍要用兩個項目表示;不能只把總長度相加,否則中間未指定的區域也會被涵蓋。

NVM Figure 48 · Dataset Management – Context Attributes

一句話重點

NVM48-1Context Attributes 描述預期的存取方式,供控制器參考。

來源:NVM Command Set 1.3 §3.3.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 48, 文件頁 47, PDF 頁 47

用例子讀懂

NVM48-2循序讀取與隨機讀取可給不同提示;這些提示不會替主機建立命令完成順序。

NVM Figure 49 · Dataset Management – Command Specific Status Values

一句話重點

NVM49-1Dataset Management 的錯誤表區分屬性衝突與命令大小限制。

來源:NVM Command Set 1.3 §3.3.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 49, 文件頁 48, PDF 頁 48

用例子讀懂

NVM49-2一份清單可能每段都合法,卻因總數超過上限而不被接受;這與同一命令給出衝突屬性不同。

圖表組 17 · Write Uncorrectable、Write Zeroes 與整體清零 · 13 張圖表

38.36.先依 opcode 分開閱讀兩種命令,再看 Write Zeroes 的 NSZ、DEAC 與保護選項。最後對照 CQE 的 LBACZ;圖上的命令要求和完成回報分別描述「想做什麼」與「確認做到什麼」。

回到本節的解釋與範例

NVM Figure 77 · Write Uncorrectable – Command Dword 10 and Command Dword 11

一句話重點

NVM77-1Write Uncorrectable 指定之後應呈現不可修正狀態的 LBA 起點。

來源:NVM Command Set 1.3 §3.3.7

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.7, Figure 77, 文件頁 56, PDF 頁 56

用例子讀懂

NVM77-2指定 LBA 40 起的範圍時,命令沒有要求主機提供一份損壞資料內容;它設定的是媒體對外呈現的行為。

NVM Figure 78 · Write Uncorrectable – Command Dword 12

一句話重點

NVM78-1Write Uncorrectable 的 NLB 決定標記多少 blocks。

來源:NVM Command Set 1.3 §3.3.7

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.7, Figure 78, 文件頁 56, PDF 頁 56

用例子讀懂

NVM78-2NLB=0 表示 1 block;不能把它理解成空操作而忽略對該 LBA 後續讀取的影響。

NVM Figure 79 · Write Uncorrectable – Command Dword 13

一句話重點

NVM79-1Write Uncorrectable 的 Directive 資訊只在指定用途下解釋。

來源:NVM Command Set 1.3 §3.3.7

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.7, Figure 79, 文件頁 57, PDF 頁 57

用例子讀懂

NVM79-2若沒有啟用相應 Directive,就不能自行把 DSPEC 當成額外的 LBA 或長度;其適用性需回看 DTYPE。

NVM Figure 80 · Write Uncorrectable – Command Specific Status Values

一句話重點

NVM80-1唯讀範圍也限制 Write Uncorrectable。

來源:NVM Command Set 1.3 §3.3.7

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.7, Figure 80, 文件頁 57, PDF 頁 57

用例子讀懂

NVM80-2即使這個命令不傳入使用者資料,它仍改變目標區塊的可讀行為,因此不能因「沒有資料 buffer」就忽略唯讀限制。

NVM Figure 81 · Write Zeroes – Command Dword 2 and Dword 3

一句話重點

NVM81-1Write Zeroes 的高位 tag 仍需依目的格式設定。

來源:NVM Command Set 1.3 §3.3.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 81, 文件頁 59, PDF 頁 59

用例子讀懂

NVM81-2使用資料保護的 namespace 中,寫零資料也有相應 tag;使用者資料全零不代表所有保護欄位也都填零。

NVM Figure 82 · Write Zeroes – Command Dword 10 and Command Dword 11

一句話重點

NVM82-1Write Zeroes 的 SLBA 指定清零範圍起點。

來源:NVM Command Set 1.3 §3.3.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 82, 文件頁 59, PDF 頁 59

用例子讀懂

NVM82-2從 LBA 64 開始清零 8 blocks,起點和長度分別設定;命令不需要主機傳入 8 blocks 的零資料 buffer。

NVM Figure 83 · Write Zeroes – Command Dword 12

一句話重點

NVM83-1Write Zeroes 的清零範圍、deallocate 與保護選項要一起閱讀。

來源:NVM Command Set 1.3 §3.3.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 83, 文件頁 59-60, PDF 頁 59-60

用例子讀懂

NVM83-2要求讀回零,與要求繼續保留配置,是不同問題;要連同 DEAC 及相關支援條件判斷。

NVM Figure 84 · Write Zeroes – Command Dword 13 if CETYPE is cleared to 0h

一句話重點

NVM84-1未啟用命令擴充的 Write Zeroes 使用一般 Directive 欄位。

來源:NVM Command Set 1.3 §3.3.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 84, 文件頁 60, PDF 頁 60

用例子讀懂

NVM84-2設定 DSPEC 前先確認 DTYPE;不能把保留的低位元拿來表示額外清零長度。

NVM Figure 85 · Write Zeroes – Command Dword 13 if CETYPE is non-zero

一句話重點

NVM85-1啟用命令擴充後,Write Zeroes 的低位元改由 CEV 定義。

來源:NVM Command Set 1.3 §3.3.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 85, 文件頁 60, PDF 頁 60

用例子讀懂

NVM85-2同一筆命令從一般模式改用擴充模式時,先更換對 CDW13 的解釋,再填參數。

NVM Figure 86 · Write Zeroes – Command Dword 14

一句話重點

NVM86-1Write Zeroes 的低位 tag 初值與全零資料內容是兩件事。

來源:NVM Command Set 1.3 §3.3.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 86, 文件頁 60, PDF 頁 60

用例子讀懂

NVM86-2資料全部設為零時,Reference Tag 仍需符合目的位置與保護類型;不能以全零使用者資料推導 tag 必為零。

NVM Figure 87 · Write Zeroes – Command Dword 15

一句話重點

NVM87-1Write Zeroes 的 Application Tag 欄位描述保護資訊。

來源:NVM Command Set 1.3 §3.3.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 87, 文件頁 60, PDF 頁 60

用例子讀懂

NVM87-2若系統使用特定 Application Tag 識別資料類別,清零資料後仍須按命令及格式規則處理這個 tag。

NVM Figure 88 · Write Zeroes – Completion Queue Entry Dword 0

一句話重點

NVM88-1Write Zeroes 的完成資訊可回報實際清零的 LBA 數量。

來源:NVM Command Set 1.3 §3.3.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 88, 文件頁 61, PDF 頁 61

用例子讀懂

NVM88-2使用允許部分處理的情境時,將 LBACZ 與要求範圍對照,不能只看成功狀態就假設整段都已處理。

NVM Figure 89 · Write Zeroes – Command Specific Status Values

一句話重點

NVM89-1Write Zeroes 的錯誤要連回清零、配置與保護設定。

來源:NVM Command Set 1.3 §3.3.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 89, 文件頁 61, PDF 頁 61

用例子讀懂

NVM89-2相同 LBA 範圍可能因 PI 設定不同而不被接受;先依命令專屬狀態找條件,而非改成一般 Write 就認為語意等同。

圖表組 18 · 16/32/64b Guard 與 Qualified PI · 6 張圖表

38.37.格式圖先看 PI 總長度,再分辨固定欄位與由 STS 決定的分界。把 Storage Tag bits 與 Reference Tag bits 相加,應回到該格式的 tag 空間大小;遮罩表則另外說明哪些 bits 參與比較。

回到本節的解釋與範例

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

一句話重點

NVM155-1STS=0 的 16b Guard 格式保留完整 32-bit Reference Tag。

來源:NVM Command Set 1.3 §5.3.1.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.1, Figure 155, 文件頁 131, PDF 頁 131

用例子讀懂

NVM155-28-byte PI 分成 2-byte Guard、2-byte Application Tag、4-byte Reference Tag;此格式中沒有 Storage Tag 位元。

NVM Figure 156 · 16b Guard Protection Information Format with non-zero STS

一句話重點

NVM156-1非零 STS 從 32-bit tag 空間中分出 Storage Tag。

來源:NVM Command Set 1.3 §5.3.1.1

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

用例子讀懂

NVM156-2若 STS=8,Storage Tag 用 8 bits,剩餘 Reference Tag 為 24 bits;兩者總和仍是 32 bits。

NVM Figure 157 · 32b Guard Protection Information Format

一句話重點

NVM157-132b Guard 格式提供較大的 Storage/Reference Tag 空間。

來源:NVM Command Set 1.3 §5.3.1.2

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

用例子讀懂

NVM157-216-byte PI 中 Guard 4 bytes、Application Tag 2 bytes,餘下 10 bytes=80 bits 供兩種 tag 分配。

NVM Figure 159 · 64b Guard Protection Information Format

一句話重點

NVM159-164b Guard 格式的 tag 空間與 32b Guard 格式不同。

來源:NVM Command Set 1.3 §5.3.1.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.3, Figure 159, 文件頁 134, PDF 頁 134

用例子讀懂

NVM159-216-byte PI 中 Guard 佔 8 bytes、Application Tag 佔 2 bytes,剩下 6 bytes=48 bits 作為 Storage/Reference Tag 空間。

NVM Figure 164 · Storage and Reference Space Separation

一句話重點

NVM164-1STS 決定連續 tag 空間中哪部分屬於 Storage Tag。

來源:NVM Command Set 1.3 §5.3.1.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 164, 文件頁 137, PDF 頁 137

用例子讀懂

NVM164-248-bit tag 空間、STS=18 時,剩下 30 bits 是 Reference Tag;先做 48−18,再按圖找各部分。

NVM Figure 165 · LBST and LBRT Minimum and Maximum Sizes

一句話重點

NVM165-1不同 PI 格式允許的 tag 寬度有各自上、下限。

來源:NVM Command Set 1.3 §5.3.1.4

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

用例子讀懂

NVM165-2想配置 40-bit Reference Tag 時,先檢查所用 PI 格式是否提供足夠空間,不能僅因命令有多個字就認為一定放得下。

圖表組 19 · CRC 參數、位元順序與已知向量 · 5 張圖表

38.38.CRC 圖表分成計算參數、涵蓋資料及已知向量三部分閱讀。Guard 涵蓋資料及 PI 前的 metadata,不包含 PI 本身。位元圖用來確認輸出如何排列,不用圖上的左右位置猜測整數端序。

回到本節的解釋與範例

輸入 bytes、位元順序與 CRC 參數共同決定結果

38.39.先確定要計算哪些資料及 metadata,再套用指定多項式、初值、反射與最後 XOR;相同多項式不保證得到相同 CRC。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
Width/Poly/Init/RefIn/RefOut/XorOut完整參數組決定演算法;檢查時還需確認輸入與輸出表示方式。改變 RefIn 卻沿用原本測試值,結果不同不表示資料本身改變。
F(x)/G(x)/R(x)分別描述訊息、多項式及餘數等數學關係;與實際 byte 順序配合。先把輸入資料順序固定,再將數學表示對回執行步驟。
Zero/FF/遞增 bytes 測試向量每種向量固定資料長度與每個 byte 的內容,適合驗證完整參數組。4 KiB 的全零向量不等於空輸入;長度也會影響 CRC。
來源:NVM Command Set 1.3 §5.3.1.2 · NVM Command Set 1.3 §5.3.1.3

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

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.3, Figure 160, 文件頁 134-135, PDF 頁 134-135

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.3, Figure 161, 文件頁 136, PDF 頁 136

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.3, Figure 162, 文件頁 136, PDF 頁 136

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.3, Figure 163, 文件頁 137, PDF 頁 137

NVM Figure 158 · 32b CRC Test Cases for 4 KiB Logical Block with no Metadata

一句話重點

NVM158-1CRC32C 測試向量用已知資料對照預期 Guard 計算結果。

來源:NVM Command Set 1.3 §5.3.1.2

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

用例子讀懂

NVM158-24096 個零 bytes 的向量對應 98F94189h;這是固定輸入的核對值,不是任意 4 KiB 資料都應得到的結果。

NVM Figure 160 · 64b CRC Polynomials

一句話重點

NVM160-1CRC 多項式表定義計算所使用的數學規則。

來源:NVM Command Set 1.3 §5.3.1.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.3, Figure 160, 文件頁 134-135, PDF 頁 134-135

用例子讀懂

NVM160-2兩個演算法即使都輸出 64 bits,只要多項式不同,就不能用同一組預期值驗證;先確認使用哪一個定義。

NVM Figure 161 · 64-bit CRC Rocksoft Model Parameters

一句話重點

NVM161-1Rocksoft 參數完整指定 CRC64 的初始化、反射與最後處理。

來源:NVM Command Set 1.3 §5.3.1.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.3, Figure 161, 文件頁 136, PDF 頁 136

用例子讀懂

NVM161-2只知道 Poly 還不夠;Init、RefIn、RefOut、XorOut 任一不同,同一串 bytes 也可能得到不同結果。

NVM Figure 162 · Logical Block and Metadata Example

一句話重點

NVM162-1CRC 的輸入順序包含 byte 排列及每個 byte 的位元處理方向。

來源:NVM Command Set 1.3 §5.3.1.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.3, Figure 162, 文件頁 136, PDF 頁 136

用例子讀懂

NVM162-2先按圖排列 logical block 與 metadata,再按反射規則处理;不能先把整段資料反轉,再假設等同逐 byte 位元反射。

NVM Figure 163 · 64b CRC Test Cases for 4 KiB Logical Block with no Metadata

一句話重點

NVM163-1CRC64 測試向量讓資料排列與計算參數可被實際核對。

來源:NVM Command Set 1.3 §5.3.1.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.3, Figure 163, 文件頁 137, PDF 頁 137

用例子讀懂

NVM163-24096 個零 bytes 對應 6482D367EB22B64Eh;改成全部 FFh 後,預期結果也會改變。

圖表組 20 · Storage/Reference Tag 的 Dword 封裝 · 8 張圖表

38.40.以選定格式的圖為準,沿每個 tag 的高位到低位追蹤跨 Dword 的部分。用 Storage Tag=12345h 的低 2 bits 和高 16 bits 驗算配置,再把 Reference Tag 放入剩餘 30 bits。

回到本節的解釋與範例

NVM Figure 166 · LBST, ELBST, ILBRT, and EILBRT fields Format in Command Dwords

一句話重點

NVM166-1命令中的 tag 可能分散在 CDW2、CDW3 與 CDW14。

來源:NVM Command Set 1.3 §5.3.1.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 166, 文件頁 138, PDF 頁 138

用例子讀懂

NVM166-2將完整 tag 當成一個整數後,再依圖切出高、中、低部分,可避免把資料結構中的連續位元誤認為命令內也連續。

NVM Figure 167 · I/O Command LBST, ELBST, ILBRT, and EILBRT fields Format

一句話重點

NVM167-1同一套命令欄位在不同 PI 格式下有不同有效位元。

來源:NVM Command Set 1.3 §5.3.1.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 167, 文件頁 139, PDF 頁 139

用例子讀懂

NVM167-2從 16b Guard 切換成 64b Guard 後,重新核對哪些位元有效;上一種格式被忽略的高位,在新格式中可能已有用途。

NVM Figure 168 · 16b Guard Protection Information Write Command Example

一句話重點

NVM168-116b Guard Write 範例從初始 Reference Tag 建立寫入端保護。

來源:NVM Command Set 1.3 §5.3.1.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 168, 文件頁 139, PDF 頁 139

用例子讀懂

NVM168-2STS=0 時,先將初始 Reference Tag 放入 CDW14,再沿圖看第一個 block 的保護資訊如何產生。

NVM Figure 169 · 16b Guard Protection Information Read Command Example

一句話重點

NVM169-116b Guard Read 範例用預期 Reference Tag 檢查讀出的資料。

來源:NVM Command Set 1.3 §5.3.1.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 169, 文件頁 139-140, PDF 頁 139-140

用例子讀懂

NVM169-2把 Figure 168 寫入的同一範圍讀回時,主機提供對應預期值;這是檢查既有 PI,不是重新選一個寫入 tag。

NVM Figure 170 · 32b Guard Protection Information Write Command Example

一句話重點

NVM170-132b Guard Write 範例展示 80-bit tag 如何分散到命令字。

來源:NVM Command Set 1.3 §5.3.1.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 170, 文件頁 140, PDF 頁 140

用例子讀懂

NVM170-2Storage Tag 32 bits、Reference Tag 48 bits 加起來為 80 bits;逐段對照 CDW2、CDW3、CDW14,不能只保留低 32 bits。

NVM Figure 171 · 32b Guard Protection Information Read Command Example

一句話重點

NVM171-132b Guard Read 範例以相同格式拆分預期 tag。

來源:NVM Command Set 1.3 §5.3.1.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 171, 文件頁 140, PDF 頁 140

用例子讀懂

NVM171-2保持 Figure 170 的格式和 STS,再把讀取端預期 tag 放到相對應欄位,才能與媒體上的同一結構比較。

NVM Figure 172 · 64b Guard Protection Information Write Command Example

一句話重點

NVM172-164b Guard Write 範例把 18-bit Storage Tag 與 30-bit Reference Tag 合併。

來源:NVM Command Set 1.3 §5.3.1.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 172, 文件頁 141, PDF 頁 141

用例子讀懂

NVM172-2教學值 Storage=12345h、Reference=2Ah,合併為 12345h×2^30+2Ah;低 32 bits 為 4000002Ah,高部為 48D1h。

NVM Figure 173 · 64b Guard Protection Information Read Command Example

一句話重點

NVM173-164b Guard Read 範例需要保留跨命令字的預期 tag。

來源:NVM Command Set 1.3 §5.3.1.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 173, 文件頁 141, PDF 頁 141

用例子讀懂

NVM173-2沿用上一例時,若只填低部 4000002Ah 而漏掉高部 48D1h,就不再表示同一個預期 Storage Tag。

圖表組 21 · PRACT 與 PRCHK/STC 的組合 · 5 張圖表

38.41.處理流程先按 Read/Write 分支,再檢查 PRACT、MS 與 PI 大小,最後判斷要求的檢查及停用檢查的特殊值。Mask=0 的位不參與比較;不要把遮罩數值當作期待的 tag 值。

回到本節的解釋與範例

NVM Figure 11 · Protection Information Field Definition

一句話重點

NVM11-1PRACT 決定 PI 的處理方式,PRCHK 決定要進行哪些檢查。

來源:NVM Command Set 1.3 §2.1.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.5, Figure 11, 文件頁 21-22, PDF 頁 21-22

用例子讀懂

NVM11-2同樣 PRACT=1,metadata 大小等於 PI 大小或大於 PI 大小時,傳輸的內容可能不同;要沿表中相應列追資料,而非只看 PRACT。

NVM Figure 12 · Storage Tag Check Definition

一句話重點

NVM12-1Storage Tag 是否存在,決定 STC 檢查要求是否有對象。

來源:NVM Command Set 1.3 §2.1.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.5, Figure 12, 文件頁 22, PDF 頁 22

用例子讀懂

NVM12-2STS=0 表示沒有 Storage Tag,因此設定 STC 也不會憑空產生一個要比對的 tag;改成非零 STS 後才有對應位元。

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

一句話重點

NVM174-1Write 的 PI 流程依 PRACT 與 metadata 大小決定傳入或產生哪些資料。

來源:NVM Command Set 1.3 §5.3.2.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.1, Figure 174, 文件頁 143, PDF 頁 143

用例子讀懂

NVM174-2metadata 剛好只有 PI,與另含其他 metadata 的情況要走不同分支;先標明主機實際傳了什麼,再追控制器處理。

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

一句話重點

NVM175-1Read 的 PI 流程決定哪些保護資訊會回到主機。

來源:NVM Command Set 1.3 §5.3.2.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.2, Figure 175, 文件頁 145, PDF 頁 145

用例子讀懂

NVM175-2讀取前先比較 MS 與 PI 大小,再沿 PRACT 對應分支看 PI 是否移除;不能只從 Read 名稱推論回傳 buffer 排列。

NVM Figure 176 · Protection Information Processing for Compare

一句話重點

NVM176-1Compare 同時涉及主機預期內容與媒體讀出內容。

來源:NVM Command Set 1.3 §5.3.2.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.4, Figure 176, 文件頁 146, PDF 頁 146

用例子讀懂

NVM176-2主機提供 A、媒體為 B 時,即使兩邊各自 PI 都合法,資料比較仍可能失敗;完整性通過與內容相同是不同條件。

圖表組 22 · 基本 Features 的作用域與例外 · 7 張圖表

38.42.Feature 總表先看 FID、作用對象及是否需要 buffer,再閱讀各 FID 的欄位。時間欄位要連同單位和計時起點解讀;描述子數量則先確認是否採從 0 起算的編碼。

回到本節的解釋與範例

NVM Figure 92 · Feature Identifiers – NVM Command Set

一句話重點

NVM92-1Feature 表把設定識別碼、作用範圍及保存特性放在一起比較。

來源:NVM Command Set 1.3 §4.1.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3, Figure 92, 文件頁 64, PDF 頁 64

用例子讀懂

NVM92-2對 namespace 的設定不應直接當成整個控制器設定;報告某項 Feature 時要說出改變的是哪個物件。

NVM Figure 93 · Set Features – Command Specific Status Values

一句話重點

NVM93-1Set Features 的重疊範圍錯誤有其特定 Feature 上下文。

來源:NVM Command Set 1.3 §4.1.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3, Figure 93, 文件頁 64, PDF 頁 64

用例子讀懂

NVM93-2設定兩個不能互相重疊的 LBA ranges 時,即使各自起點和長度合法,合在一起仍可能衝突。

Feature 的選擇值與功能資料分開解讀

38.43.Get 或 Set Features 選定功能後,才依該功能的 buffer、命令 Dword 或 CQE 解釋回覆。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
NUM/Type/ATTRB/SLBA/NLB/GUIDLBA Range Type 的數量選擇與每個範圍的類型、範圍、識別分開。先解出有效項目數,再逐項檢查範圍,不能只讀第一個項目代表所有 LBAs。
DULBE/TLERError Recovery 的解除配置讀取錯誤選擇與恢復時間限制各自影響行為。開啟 DULBE 後,解除配置 LBA 的讀取結果要依相應規則判斷;TLER 不是 buffer 傳輸長度。
來源:NVM Command Set 1.3 §4.1.3.2 · NVM Command Set 1.3 §4.1.3.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.2, Figure 94, 文件頁 65, PDF 頁 65

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.2, Figure 95, 文件頁 65, PDF 頁 65

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.2, Figure 96, 文件頁 65-66, PDF 頁 65-66

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.3, Figure 97, 文件頁 66, PDF 頁 66

NVM Figure 94 · LBA Range Type – Command Dword 11

一句話重點

NVM94-1LBA Range Type 的 NUM 指示這次提供的項目數。

來源:NVM Command Set 1.3 §4.1.3.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.2, Figure 94, 文件頁 65, PDF 頁 65

用例子讀懂

NVM94-2NUM 原始值為 1 時要按該欄位的從零起算規則準備 2 個項目,不是只配置 1 個描述子。

NVM Figure 95 · LBA Range Type – Completion Queue Entry Dword 0

一句話重點

NVM95-1完成回覆中的 NUM 要在回覆語境中解釋。

來源:NVM Command Set 1.3 §4.1.3.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.2, Figure 95, 文件頁 65, PDF 頁 65

用例子讀懂

NVM95-2把要求的 range 數與回覆欄位分開記錄,才能知道控制器實際回報多少項;兩個欄位名稱相同不代表傳輸方向相同。

NVM Figure 96 · LBA Range Type – Data Structure Entry

一句話重點

NVM96-1LBA Range Type 項目把範圍與資料用途資訊放在一起。

來源:NVM Command Set 1.3 §4.1.3.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.2, Figure 96, 文件頁 65-66, PDF 頁 65-66

用例子讀懂

NVM96-2同一 namespace 可有不同用途的兩段範圍,每段分別記錄 SLBA、NLB、Type 與屬性,而非替整個 namespace 只填一個 Type。

NVM Figure 97 · Error Recovery – Command Dword 11

一句話重點

NVM97-1Error Recovery 把恢復時間限制與未配置區塊的讀取行為分開設定。

來源:NVM Command Set 1.3 §4.1.3.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.3, Figure 97, 文件頁 66, PDF 頁 66

用例子讀懂

NVM97-2DULBE 影響讀取 deallocated blocks 時是否回報錯誤;TLER 則處理恢復時間,兩者不會互相取代。

NVM Figure 98 · Write Atomicity Normal – Command Dword 11

一句話重點

NVM98-1Write Atomicity Normal 的 DN 會影響正常寫入原子性要求的使用。

來源:NVM Command Set 1.3 §4.1.3.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.4, Figure 98, 文件頁 66-67, PDF 頁 66-67

用例子讀懂

NVM98-2比較 DN 設定前後時,仍要保留 power-fail 參數;正常運作的設定不能當成斷電保證的總開關。

圖表組 23 · AER、SMART 與錯誤記錄的 NVM 補充 · 6 張圖表

38.44.通知表先對照事件種類與啟用位,再連到對應 log。讀計數表時分開列出納入的命令及單位換算;讀錯誤位置時先檢查有效旗標,並保留該 log 對位置的定義。

回到本節的解釋與範例

狀態紀錄中的範圍、有效性與後續查詢

38.45.先辨認紀錄種類與對象,再使用相應的有效性、數量及範圍欄位。通知資料可能只提供查詢起點,完整狀態需要後續命令取得。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
FLBA/FLBA Valid;LBA/LBAV/NLBAM不同紀錄對失敗位置或重配置範圍有各自有效性與數量規則。Self-test 的 FLBA Valid=0 時忽略 FLBA;有效時也只指出一個失敗 block,不是完整錯誤列表。
LSLPLEN/NLSLNE/NEID/NLRD/RATYPE外層給 log 長度與 namespace 元素數,內層再給對象及範圍描述子數。不能把 NLSLNE 當成 LBA 數;每個 namespace 元素仍需讀自己的範圍清單。
RSLBA/RNLB;SLBA/RL/ATYPE/MNDWlog 給建議查詢範圍,Get LBA Status 選行為與回傳空間限制。收到範圍後,依剩餘範圍與可接收長度安排查詢,不能假設一次回覆必定涵蓋全部。
NLSD/CMPC/DSLBA/NLB/LBARS數量決定有效描述子,完成條件決定是否還需查詢,描述子指出範圍狀態。先看 CMPC 再判斷查詢是否完整;有一筆描述子不代表其餘 LBA 都無問題。
LBASIN/RLCCN/LSIPI/LSIRI/LSGC事件設定、產生或回報間隔與 generation 各司其職。更新設定不代表立刻產生一份完整新 log;讀取時仍要辨認版本與有效範圍。
DSLBA
Descriptor Starting LBA;指定 LBA Status descriptor 的範圍起點。
LBARS
LBA Range Status;描述 LBA range 的狀態。
RNLB
LBA Status log 的 Range Number of Logical Blocks;0-based。
來源:NVM Command Set 1.3 §4.1.1 · NVM Command Set 1.3 §4.1.3.5 · NVM Command Set 1.3 §4.1.3.6 · NVM Command Set 1.3 §4.1.4.1 · NVM Command Set 1.3 §4.1.4.3 · NVM Command Set 1.3 §4.1.4.4 · NVM Command Set 1.3 §4.1.4.5 · NVM Command Set 1.3 §4.1.4.7 · NVM Command Set 1.3 §4.2.1 · NVM Command Set 1.3 §5.2.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.1, Figure 90, 文件頁 62, PDF 頁 62

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.5, Figure 99, 文件頁 67, PDF 頁 67

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.6, Figure 100, 文件頁 68, PDF 頁 68

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

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.3, Figure 111, 文件頁 76, PDF 頁 76

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.4, Figure 112, 文件頁 77, PDF 頁 77

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.5, Figure 113, 文件頁 77-78, PDF 頁 77-78

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.5, Figure 114, 文件頁 78, PDF 頁 78

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.5, Figure 115, 文件頁 78, PDF 頁 78

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.7, Figure 116, 文件頁 79, PDF 頁 79

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.2.1, Figure 135, 文件頁 114, PDF 頁 114

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.2.1, Figure 136, 文件頁 114, PDF 頁 114

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.2.1, Figure 137, 文件頁 114, PDF 頁 114

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.2.1, Figure 138, 文件頁 114-115, PDF 頁 114-115

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.2.1, Figure 139, 文件頁 116-117, PDF 頁 116-117

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.2.1, Figure 140, 文件頁 117-118, PDF 頁 117-118

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.1, Figure 142, 文件頁 121, PDF 頁 121

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.1, Figure 143, 文件頁 121, PDF 頁 121

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.1, Figure 144, 文件頁 121-122, PDF 頁 121-122

NVM Figure 90 · Asynchronous Event Information – Notice

一句話重點

NVM90-1非同步通知告知狀態已變,詳細內容還需讀對應資料。

來源:NVM Command Set 1.3 §4.1.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.1, Figure 90, 文件頁 62, PDF 頁 62

用例子讀懂

NVM90-2收到 LBA Status Information 相關通知後,再讀相應 log;通知本身不包含所有受影響的 LBA 清單。

NVM Figure 99 · Asynchronous Event Configuration – NVM Command Set specific Bit Definitions

一句話重點

NVM99-1事件設定 bits 決定主機希望收到哪些 NVM 通知。

來源:NVM Command Set 1.3 §4.1.3.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.5, Figure 99, 文件頁 67, PDF 頁 67

用例子讀懂

NVM99-2只啟用 LBA Status Information 通知,不表示 Rate Limiting 變更通知也自動啟用;每種通知各看自己的 bit。

NVM Figure 109 · Get Log Page – Log Page Identifiers

一句話重點

NVM109-1NVM Log 清單把 LID 與命令集及作用範圍連起來。

來源:NVM Command Set 1.3 §4.1.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4, Figure 109, 文件頁 75-76, PDF 頁 75-76

用例子讀懂

NVM109-2查某個 LID 時,同時確認 CSI 與目標 scope,避免把另一種命令集的同號紀錄當成這一份。

NVM Figure 110 · Error Information Log Entry Data Structure – User Data

一句話重點

NVM110-1Error Information 中的 LBA 是發生問題的資料位置。

來源:NVM Command Set 1.3 §4.1.4.1

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

用例子讀懂

NVM110-2若回覆指向 LBA 32,先依該 namespace 的 block 大小換算位置;不能把 32 當成主機 buffer 的 byte offset。

NVM Figure 111 · Self-test Results Data Structure

一句話重點

NVM111-1Self-test 的 FLBA 只有在有效性標記成立時才是有效故障位置。

來源:NVM Command Set 1.3 §4.1.4.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.3, Figure 111, 文件頁 76, PDF 頁 76

用例子讀懂

NVM111-2紀錄中即使保留一個非零 FLBA,若對應有效 bit 沒有設定,就不能據此指認那個 LBA 壞掉。

NVM Figure 112 · Change Namespace Event Data Format (Event Type 06h)

一句話重點

NVM112-1Namespace 變更事件可記錄格式與資料保護設定的變化。

來源:NVM Command Set 1.3 §4.1.4.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.4, Figure 112, 文件頁 77, PDF 頁 77

用例子讀懂

NVM112-2原本不帶 PI 的 namespace 改成帶 PI 時,閱讀 FLBAS 與 DPS 的新值才能重新準備正確 buffer。

圖表組 24 · LBA Status:通知、掃描與修復流程 · 13 張圖表

38.46.查詢圖先解讀 SLBA、RL 與 MNDW,再用 NLSD 決定有效描述子數,用 CMPC 判斷完成原因。讀 log 時沿 LSGC、RAE 的流程追蹤同一版本,避免把沒有完整掃描當成沒有需處理的 LBA。

回到本節的解釋與範例

NVM Figure 100 · LBA Status Information Attributes – Command Dword 11

一句話重點

NVM100-1LBA Status Information 的屬性設定控制相關回報行為。

來源:NVM Command Set 1.3 §4.1.3.6

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.6, Figure 100, 文件頁 68, PDF 頁 68

用例子讀懂

NVM100-2主機希望調整資訊產生或回報的節奏時,應分別理解 LSIPI 與 LSIRI,不把兩個 interval 當成同一計時器。

NVM Figure 113 · LBA Status Information Log Page

一句話重點

NVM113-1LBA Status Information 的 header 描述清單長度與 namespace 項目。

來源:NVM Command Set 1.3 §4.1.4.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.5, Figure 113, 文件頁 77-78, PDF 頁 77-78

用例子讀懂

NVM113-2一份 log 含多個 namespace 時,先讀 NLSLNE 與總長度,再逐個走訪,不能把整個 buffer 都當成同一個範圍清單。

NVM Figure 114 · LBA Status Log Namespace Element

一句話重點

NVM114-1每個 namespace element 指出後面有多少範圍描述子。

來源:NVM Command Set 1.3 §4.1.4.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.5, Figure 114, 文件頁 78, PDF 頁 78

用例子讀懂

NVM114-2NEID 指向某個 namespace、NLRD 指示後續項目數;換到下一個 namespace 前先消耗這一組的描述子。

NVM Figure 115 · LBA Range Descriptor

一句話重點

NVM115-1LBA Range Descriptor 用起點與數量表示一段範圍。

來源:NVM Command Set 1.3 §4.1.4.5

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.5, Figure 115, 文件頁 78, PDF 頁 78

用例子讀懂

NVM115-2把 RSLBA 與依定義解釋後的 RNLB 畫在 LBA 軸上,可以直接看出它與鄰近範圍是否相接。

NVM Figure 135 · Get LBA Status – Data Pointer

一句話重點

NVM135-1Get LBA Status 的 DPTR 是狀態描述子的接收 buffer。

來源:NVM Command Set 1.3 §4.2.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.2.1, Figure 135, 文件頁 114, PDF 頁 114

用例子讀懂

NVM135-2主機想知道一段 LBA 的狀態,回來的是描述清單,不是該段的使用者資料。

NVM Figure 136 · Get LBA Status – Command Dword 10 and Command Dword 11

一句話重點

NVM136-1Get LBA Status 的 SLBA 決定從哪裡開始查詢。

來源:NVM Command Set 1.3 §4.2.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.2.1, Figure 136, 文件頁 114, PDF 頁 114

用例子讀懂

NVM136-2從 LBA 500 開始查詢,不代表回覆一定涵蓋後面全部 namespace;實際返回範圍還取決於命令限制與完成資訊。

NVM Figure 137 · Get LBA Status – Command Dword 12

一句話重點

NVM137-1MNDW 限制這次 Get LBA Status 能回傳多少資料。

來源:NVM Command Set 1.3 §4.2.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.2.1, Figure 137, 文件頁 114, PDF 頁 114

用例子讀懂

NVM137-2接收 buffer 較小時,要把要求長度設在可容納範圍內,再依結果判斷是否需要繼續查詢。

NVM Figure 138 · Get LBA Status – Command Dword 13

一句話重點

NVM138-1ATYPE 與 RL 指定要執行的狀態查詢方式及範圍限制。

來源:NVM Command Set 1.3 §4.2.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.2.1, Figure 138, 文件頁 114-115, PDF 頁 114-115

用例子讀懂

NVM138-2查詢方式改變後,控制器需要檢查或回報的內容可能不同;先說明想解決的問題,再選 ATYPE。

NVM Figure 139 · LBA Status Descriptor List

一句話重點

NVM139-1狀態清單 header 說明項目數以及查詢是否完整。

來源:NVM Command Set 1.3 §4.2.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.2.1, Figure 139, 文件頁 116-117, PDF 頁 116-117

用例子讀懂

NVM139-2即使有成功回傳描述子,也應看 CMPC,確認是否已完成所需查詢,不能只以 buffer 非空判定完整。

NVM Figure 140 · LBA Status Descriptor Entry

一句話重點

NVM140-1每個狀態描述子將一段 LBA 範圍與其狀態連在一起。

來源:NVM Command Set 1.3 §4.2.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.2.1, Figure 140, 文件頁 117-118, PDF 頁 117-118

用例子讀懂

NVM140-2一段可讀、一段有不同狀態時,兩段可分成不同項目;不能只用第一個 LBARS 代表整份回覆。

NVM Figure 142 · Example LBA Status Log Namespace Element returned by LBA Status Information

一句話重點

NVM142-1Log 先告訴主機哪些 namespace 範圍值得進一步查詢。

來源:NVM Command Set 1.3 §5.2.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.1, Figure 142, 文件頁 121, PDF 頁 121

用例子讀懂

NVM142-2讀到一個 namespace 的兩段範圍後,把每段分別帶到 Get LBA Status;不要把 log 中的粗範圍當成最終逐段狀態。

NVM Figure 143 · Example Get LBA Status Descriptors for LBA Range Descriptor 0

一句話重點

NVM143-1第一個範圍的 Get LBA Status 回覆展示較細的狀態切分。

來源:NVM Command Set 1.3 §5.2.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.1, Figure 143, 文件頁 121, PDF 頁 121

用例子讀懂

NVM143-2沿 Figure 142 的第一段範圍,逐個對照這張圖的 DSLBA 與 NLB,看控制器如何把同一查詢範圍分成多個項目。

NVM Figure 144 · Example Get LBA Status Descriptors for LBA Range Descriptor 1

一句話重點

NVM144-1第二個範圍的回覆要獨立閱讀完成資訊與描述子。

來源:NVM Command Set 1.3 §5.2.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.1, Figure 144, 文件頁 121-122, PDF 頁 121-122

用例子讀懂

NVM144-2不能沿用前一次查詢的 NLSD 或 CMPC;每次回覆都有自己的項目數與完整性資訊。

圖表組 25 · Sanitize 與 Media Verification 的 NVM 規則 · 5 張圖表

38.47.把 Sanitize 命令、LID 81h 狀態,以及 Media Verification Read 的欄位分開閱讀。先確認作業階段,再套用該階段允許的命令與 PI 檢查規則;狀態圖中的轉移不是一般 Read 自動觸發的保證。

回到本節的解釋與範例

NVM Figure 200 · Sanitize Operations – Admin Commands Allowed

一句話重點

NVM200-1Sanitize 期間仍可執行哪些 Admin 命令,要按作業情境查表。

來源:NVM Command Set 1.3 §5.12

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.12, Figure 200, 文件頁 173, PDF 頁 173

用例子讀懂

NVM200-2清除進行中想讀 Get Log Page,需看這張表及該 log 的條件;不能以「正在清除」推論所有管理命令都停止。

清除後讀值要結合所用方法與配置狀態

38.48.先確認清除方法及操作完成,再依是否解除配置、資料格式與命令選项解釋後續讀取。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
Block Erase/Crypto Erase/Overwrite各方法對 user data 的處理不同,完成保證及後續讀值按相應列判斷。Overwrite 的樣式與 Block Erase 的讀值不可直接交換解釋。
Data/Metadata/PI/解除配置資料與保護資訊可能有不同處理條件;解除配置也會影響讀取行為。讀到零值只是一次讀取結果,還需要狀態紀錄證明清除作業已完成。
來源:NVM Command Set 1.3 §5.12

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.12, Figure 201, 文件頁 174, PDF 頁 174

NVM Figure 201 · Sanitize Operation Types – User Data Values

一句話重點

NVM201-1清除方法不同,清除後可觀察到的使用者資料值也不同。

來源:NVM Command Set 1.3 §5.12

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.12, Figure 201, 文件頁 174, PDF 頁 174

用例子讀懂

NVM201-2Overwrite 的內容與 pattern 及輪數有關;Crypto Erase 不應被口頭簡化成「全部 bytes 寫零」。

目標、方法、狀態與後續讀取的關係

38.49.先決定作用範圍,再選 SANACT 及適用參數;成功 CQE 之後,仍要沿 LID 81h 與狀態圖確認作業及後續處理。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
SANACT/NSID/作用範圍表整個 subsystem 與指定 namespace 的命令有不同目標;不同資料類別也需依範圍表判斷。不能把 Sanitize Namespace 的完成結果直接當成所有 Boot、CMB、PMR 資料均已清除的證明。
OVRPAT/OWPASS/OIPBP在 Overwrite 方法下配合決定樣式、pass 數及 pass 間反相;OWPASS=0 有特別定義。先列出每個 pass 的樣式,再解釋資料與 PI 的處理,不用泛用的數量加 1 規則。
AUSE/PREQ/NDAS/NODRM/EMVS分別影響失敗後限制、相關要求、解除配置及進入驗證等行為;需依動作與支援條件讀。EMVS 是要求後續驗證的選項,不是目前已在驗證的狀態旗標。
SSTAT/SPROG/SCDW10/估計時間先查結果狀態,再使用適用的進度及時間欄位;SCDW10 協助對回操作設定。進度值不能脫離狀態使用;命令被接受與清除已完成要分別確認。
SSI/MNSOIP/STNSIDSSI 補充狀態;MNSOIP 是允許同時執行的作業數上限;STNSID 確認查詢目標。MNSOIP=4 不表示目前有 4 個作業;STNSID=0 表示查詢 subsystem。
A1–I2/MVCNCLD/FAILS狀態表用箭頭代號連回起點、事件、條件及終點;驗證後是否解除配置也有條件。沿 Media Verification 離開時,先確認觸發事件及 MVCNCLD,再決定下一站,而非只看箭頭方向。
Reservation Notification/Log Page Count/Notification Type必要引用用來解釋相關操作造成的 reservation 變動通知;其 log 與 Sanitize Status 不同。應由通知類型判斷要更新的存取狀態,不把通知計數當成清除完成百分比。
CMB
Controller Memory Buffer,controller 提供、可放置部分 queue 或資料結構的記憶體區域。
PMR
Persistent Memory Region,由 controller 暴露、具有持久性語意的記憶體區域。
來源:Base 2.4 §5.2.13.1.38 · Base 2.4 §5.2.26

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.38, Figure 312, 文件頁 314-319, PDF 頁 340-345

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.26, Figure 451, 文件頁 450-451, PDF 頁 476-477

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.26, Figure 452, 文件頁 451, PDF 頁 477

Base Figure 312 · Sanitize Status Log Page

一句話重點

Base312-1Sanitize Status 將進度、狀態與啟動命令資訊放在同一份紀錄。

來源:Base 2.4 §5.2.13.1.38

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.38, Figure 312, 文件頁 314-319, PDF 頁 340-345

用例子讀懂

Base312-2SPROG 看起來很接近完成時,仍須讀 SSTAT 判斷成功、失敗或其他狀態;不能只以百分比作完成證明。

Base Figure 451 · Sanitize – Command Dword 10

一句話重點

Base451-1Sanitize 的 SANACT 決定方法,其他參數依方法才有意義。

來源:Base 2.4 §5.2.26

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.26, Figure 451, 文件頁 450-451, PDF 頁 476-477

用例子讀懂

Base451-2選 Overwrite 後才解 OWPASS、OIPBP;OWPASS=0 特別表示 16 輪,不是零輪。換成 Crypto Erase 時不能照搬 overwrite 參數。

Base Figure 452 · Sanitize – Command Dword 11

一句話重點

Base452-1OVRPAT 指定 Overwrite 使用的 32-bit pattern。

來源:Base 2.4 §5.2.26

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.26, Figure 452, 文件頁 451, PDF 頁 477

用例子讀懂

Base452-2OVRPAT=A5A5A5A5h 時,還要配合 OIPBP 與輪數判斷各輪是否反相;它不是進度或清除後資料量。

圖表組 26 · 對齊、granularity 與效能提示 · 7 張圖表

38.50.在同一條 LBA 軸上畫出建議邊界及操作範圍,分別檢查起點與長度。欄位表先讀 OPTPERF/OPTRPERF,確認哪組欄位有效,再依各欄位定義處理加 1 或直接值。

回到本節的解釋與範例

NVM Figure 145 · An example namespace with four NOIOBs

一句話重點

NVM145-1NOIOB 邊界用來比較操作是否跨越最佳化邊界。

來源:NVM Command Set 1.3 §5.2.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 145, 文件頁 124, PDF 頁 124

用例子讀懂

NVM145-2教學例:邊界每 8 blocks 一次,從 LBA 6 讀 4 blocks 會跨界,從 LBA 8 讀 4 blocks 則不跨界。

NVM Figure 146 · Example namespace illustrating a potential NABO and NABSN

一句話重點

NVM146-1NABO 與 NABSN 一起決定原子邊界的位置。

來源:NVM Command Set 1.3 §5.2.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 146, 文件頁 124, PDF 頁 124

用例子讀懂

NVM146-2若只知道邊界間距而忽略第一個偏移,畫出的所有邊界都可能錯位;先標起始偏移,再按間距往後標。

NVM Figure 147 · Example namespace broken down to illustrate potential NPWA and NPWG settings

一句話重點

NVM147-1NPWA 與 NPWG 分別描述寫入起點及長度的偏好。

來源:NVM Command Set 1.3 §5.2.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 147, 文件頁 125, PDF 頁 125

用例子讀懂

NVM147-2一筆長 8 blocks 的寫入可符合粒度,卻因從 LBA 1 開始而不符合對齊;兩個建議需要同時看。

NVM Figure 148 · Example namespace broken down to illustrate potential NPRA and NPRG settings

一句話重點

NVM148-1NPRA 與 NPRG 對讀取提供相應的對齊與粒度資訊。

來源:NVM Command Set 1.3 §5.2.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 148, 文件頁 126, PDF 頁 126

用例子讀懂

NVM148-2讀取長度從 4 blocks 增為 8 blocks,不一定解決起點未對齊的問題;要把兩個變因分開調整。

NVM Figure 149 · Non-conformant Write Impact

一句話重點

NVM149-1未符合建議的局部更新可能需要保留前後舊資料。

來源:NVM Command Set 1.3 §5.2.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 149, 文件頁 127, PDF 頁 127

用例子讀懂

NVM149-2只更新一個較大單位中間的部分時,前綴與後綴仍要保持原值;圖用這些額外處理說明可能的寫入成本。

NVM Figure 150 · Host write I/O command following NPWA and NPWG

一句話重點

NVM150-1符合起點對齊與完整粒度的寫入可減少局部更新情境。

來源:NVM Command Set 1.3 §5.2.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 150, 文件頁 127, PDF 頁 127

用例子讀懂

NVM150-2先對照寫入起點是否落在 NPWA 建議位置,再看長度是否涵蓋完整 NPWG 單位,兩者都成立才對應這張圖。

NVM Figure 151 · Host write I/O command following NPWG but not NPWA attributes

一句話重點

NVM151-1長度符合粒度,仍可能因起點偏移而影響多個單位。

來源:NVM Command Set 1.3 §5.2.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 151, 文件頁 128, PDF 頁 128

用例子讀懂

NVM151-2把 Figure 150 的寫入整體向右移 1 block,長度沒有變,但頭尾可能都需要處理未更新的舊資料。

圖表組 27 · Performance Characteristics 的屬性模型 · 4 張圖表

38.51.先用屬性種類選擇格式,再按 R4KARL 對照延遲區間表。廠商資料先讀 PAID,再以 ATTRL 限定有效長度;清單的總容量、剩餘容量與實際項目需要分開閱讀。

回到本節的解釋與範例

效能屬性先辨認種類與長度

38.52.先選 PAID 或屬性查詢,再依標準或廠商格式解釋資料。支援清單與實際效能值使用不同結構。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
ATTRI/RVSPA/PAID/ATTRTYP選想讀的屬性,並辨認它屬標準或廠商種類。PAID 是識別碼,不是延遲數值;先選中屬性才能知道回覆的單位。
MSVSPA/USVSPA/ATTRL/VS清單支援與資料長度決定可讀範圍;廠商 payload 需要相應格式。ATTRL 限定屬性資料大小,不代表其中每個 byte 都有標準定義。
R4KARL標準屬性以指定的存取條件描述延遲。比較兩個結果前先確認都是相同 4 KiB 隨機讀條件,不能直接套用到任意 workload。
來源:NVM Command Set 1.3 §4.1.3.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.8, Figure 102, 文件頁 69, PDF 頁 69

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.8, Figure 103, 文件頁 71, PDF 頁 71

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.8, Figure 104, 文件頁 72, PDF 頁 72

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.8, Figure 105, 文件頁 73, PDF 頁 73

NVM Figure 102 · Performance Characteristics – Command Dword 11

一句話重點

NVM102-1Performance Characteristics 先選屬性,再解釋其值。

來源:NVM Command Set 1.3 §4.1.3.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.8, Figure 102, 文件頁 69, PDF 頁 69

用例子讀懂

NVM102-2讀取標準延遲屬性與讀取廠商屬性時,ATTRI 指向的格式不同;不能拿同一個數字直接比較。

NVM Figure 103 · Performance Characteristics – Standard Performance Attribute

一句話重點

NVM103-1標準效能屬性提供規定情境下的特性值。

來源:NVM Command Set 1.3 §4.1.3.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.8, Figure 103, 文件頁 71, PDF 頁 71

用例子讀懂

NVM103-2看到 4 KiB 平均讀取延遲時,要連同其定義的工作負載理解;它不是任何佇列深度下每筆 Read 的固定耗時。

NVM Figure 104 · Performance Characteristics – Performance Attribute Identifier List

一句話重點

NVM104-1屬性識別碼清單用來尋找裝置支援哪些效能描述。

來源:NVM Command Set 1.3 §4.1.3.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.8, Figure 104, 文件頁 72, PDF 頁 72

用例子讀懂

NVM104-2先從清單找到可用 PAID,再讀該屬性的內容;不能因為支援查詢清單就推論每個廠商屬性都存在。

NVM Figure 105 · Performance Characteristics – Vendor Specific Performance Attribute

一句話重點

NVM105-1廠商效能屬性需要自己的識別碼及資料長度。

來源:NVM Command Set 1.3 §4.1.3.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.8, Figure 105, 文件頁 73, PDF 頁 73

用例子讀懂

NVM105-2兩個屬性可能回傳不同長度;先看 ATTRL 再理解 payload,不能把上一個屬性的排列套到下一個。

圖表組 28 · Rate Limiting 的設定欄位 · 3 張圖表

38.53.設定結構先讀 TGT/TID 與 RLE/RLM,再配對 BWSF 和各頻寬值。把寫入與總量分開列出,最後解讀 WRBWR、WRIOPSR 的分子與分母,避免只看一個 byte。

回到本節的解釋與範例

限制設定與共享資源圖一起判讀

38.54.先沿 port、controller、儲存媒體存取描述子的關係找到受限對象,再用模式與比例把欄位換成可比較的速率。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
TGT/TID/RLE/RLM前兩者選目標,後兩者選啟用與模式;不同模式下的數值可能表示限制或相對權重。權重 2 不等於 2 MiB/s;必須先確認 RLM 再做解釋。
BWSF/MBSF/ABWSF;TBWV/WBWV/TIOPS/WIOPS頻寬值先搭配比例,IOPS 則是操作數速率;總量與寫入量分別限制。4 KiB 的 1000 IOPS 對應 4,096,000 bytes/s;換成 128 KiB I/O 後,相同 IOPS 需要不同頻寬。
NP/NC/NNSMAD/LPL/offsets/GC數量、長度與位移描述變長資料結構,GC 協助辨認版本。offset 以 Dwords 表示時先乘 4,再與 LPL 換成相同單位做範圍檢查。
PORTID/CNTLID/SC/SI/RLMA識別 port、控制器及存取範圍,並連到最大可用量描述。兩個 port 指向同一 Endurance Group 時,不能將共享的最大容量或速率重複當成兩份獨立資源。
Token supply/消耗/等待權杖累積與每筆命令消耗決定何時可執行;內部資源仍可能造成額外等待。有足夠權杖表示通過速率限制,不代表其他資源也立即可用。
TIOPS
Total IOPS;總 I/O 操作速率設定值。
來源:NVM Command Set 1.3 §4.1.3.9 · NVM Command Set 1.3 §4.1.4.8 · NVM Command Set 1.3 §5.10.3 · NVM Command Set 1.3 §Appendix A

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.9, Figure 106, 文件頁 73, PDF 頁 73

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.9, Figure 107, 文件頁 74-75, PDF 頁 74-75

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

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.8, Figure 117, 文件頁 80, PDF 頁 80

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.8, Figure 118, 文件頁 80-81, PDF 頁 80-81

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.8, Figure 119, 文件頁 81, PDF 頁 81

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.8, Figure 120, 文件頁 81-82, PDF 頁 81-82

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.8, Figure 121, 文件頁 82-83, PDF 頁 82-83

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.10.3, Figure 195, 文件頁 169, PDF 頁 169

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.10.3, Figure 196, 文件頁 169-170, PDF 頁 169-170

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.10.3, Figure 197, 文件頁 171, PDF 頁 171

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.10.3, Figure 198, 文件頁 171-172, PDF 頁 171-172

來源:NVME-NVM-CS-1.3, Rev. 1.3, §Appendix A, Figure 202, 文件頁 176, PDF 頁 176

NVM Figure 106 · Rate Limits – Command Dword 11

一句話重點

NVM106-1Rate Limits 的 TGT 與 TID 共同指定限制施加在哪裡。

來源:NVM Command Set 1.3 §4.1.3.9

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.9, Figure 106, 文件頁 73, PDF 頁 73

用例子讀懂

NVM106-2同樣 TID=1,若 TGT 選的物件類型不同,就可能是完全不同的資源;必須成對記錄。

NVM Figure 107 · Rate Limiting – Data Buffer

一句話重點

NVM107-1Rate Limiting buffer 分別設定頻寬、IOPS 與模式。

來源:NVM Command Set 1.3 §4.1.3.9

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.9, Figure 107, 文件頁 74-75, PDF 頁 74-75

用例子讀懂

NVM107-2大量 4 KiB I/O 可能先碰到 IOPS 上限;大區塊 I/O 則可能先碰到頻寬上限,因此兩種限制都要看。

NVM Figure 108 · Bandwidth Scale Factors

一句話重點

NVM108-1頻寬欄位的數值必須乘上對應 scale factor 才有實際單位。

來源:NVM Command Set 1.3 §4.1.3.9

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

用例子讀懂

NVM108-2同樣 raw 值 100,在不同 BWSF 下代表不同頻寬;比較兩個設定前先換成相同單位。

圖表組 29 · Hard/Soft 與 token-bucket 算例 · 1 張圖表

38.55.算例按 total bandwidth、write bandwidth、total IOPS、write IOPS 四欄閱讀。4 KiB Write 搭配頻寬權重 2、IOPS 權重 3,消耗依序為 8 KiB、4 KiB、3、1;Read 不消耗寫入專用額度。

回到本節的解釋與範例

NVM Figure 202 · Example Token Bucket

一句話重點

NVM202-1Token Bucket 用代幣供給與消耗說明速率限制。

來源:NVM Command Set 1.3 §Appendix A

來源:NVME-NVM-CS-1.3, Rev. 1.3, §Appendix A, Figure 202, 文件頁 176, PDF 頁 176

用例子讀懂

NVM202-2教學例:每秒補充 100 個代幣、每筆操作消耗 1 個,平均供給限制長期速率;桶內累積的代幣仍可能容許短時間突發。這是說明性模型。

圖表組 30 · Rate Limiting log 是能力圖 · 9 張圖表

38.56.先以 LPL 確定長度,再把 Dword offsets 乘 4 找到描述子。依 SC 解讀 SI 所辨認的物件,沿父子引用建立資源關係;同一資源被多次引用時,不重複累加其能力。

回到本節的解釋與範例

NVM Figure 117 · Rate Limiting Log Page

一句話重點

NVM117-1Rate Limiting Log 是有長度和連結位置的多層資料。

來源:NVM Command Set 1.3 §4.1.4.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.8, Figure 117, 文件頁 80, PDF 頁 80

用例子讀懂

NVM117-2先讀 LPL 與 port 數,再沿 offset 找各層描述子;不要假設每種裝置都使用固定數量和固定順序。

NVM Figure 118 · Rate Limiting Port Descriptor

一句話重點

NVM118-1Port Descriptor 描述單一 port 的限制與控制器關係。

來源:NVM Command Set 1.3 §4.1.4.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.8, Figure 118, 文件頁 80-81, PDF 頁 80-81

用例子讀懂

NVM118-2雙 port 裝置中,Port 0 的可用頻寬不必等於 Port 1;先各自讀 PORTID 與限制,再追所連控制器。

NVM Figure 119 · Rate Limiting Controller Descriptor

一句話重點

NVM119-1Controller Descriptor 連到該控制器能使用的儲存媒體資源。

來源:NVM Command Set 1.3 §4.1.4.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.8, Figure 119, 文件頁 81, PDF 頁 81

用例子讀懂

NVM119-2同一 port 下有兩個控制器時,分別沿各自 offset 找存取描述子,不把 port 的上限當成每個控制器各有一份。

NVM Figure 120 · Non-Volatile Storage Medium Access Descriptor

一句話重點

NVM120-1媒體存取描述子用 SC 與 SI 指出限制所屬的物件。

來源:NVM Command Set 1.3 §4.1.4.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.8, Figure 120, 文件頁 81-82, PDF 頁 81-82

用例子讀懂

NVM120-2此處 SC 是 Scope,並非 CQE 的 Status Code;先選定範圍類型,才能知道 SI=1 指的是哪個實體。

NVM Figure 121 · Rate Limiting Maximum Access Descriptor

一句話重點

NVM121-1Maximum Access Descriptor 說明資源的最大存取能力。

來源:NVM Command Set 1.3 §4.1.4.8

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.8, Figure 121, 文件頁 82-83, PDF 頁 82-83

用例子讀懂

NVM121-2比較主機設定的限制值與資源最大值前,先把頻寬 scale 換成同一單位;設定值和硬體最大值來源不同。

NVM Figure 195 · Port Graph Example

一句話重點

NVM195-1Port Graph 用連線表達 port、controller 與共享儲存資源。

來源:NVM Command Set 1.3 §5.10.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.10.3, Figure 195, 文件頁 169, PDF 頁 169

用例子讀懂

NVM195-2兩個控制器連到同一 Endurance Group 時,圖中只有一份共享資源;不能把它的頻寬上限算成兩份相加。

NVM Figure 196 · Rate Limiting Log Page Example

一句話重點

NVM196-1Rate Limiting Log 範例把關係圖轉成帶 offset 的實際資料。

來源:NVM Command Set 1.3 §5.10.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.10.3, Figure 196, 文件頁 169-170, PDF 頁 169-170

用例子讀懂

NVM196-2若描述子 offset 以 Dword 為單位,數值 16 對應 64 bytes;先換算再定位,不能直接跳到第 16 byte。

NVM Figure 197 · Example Dual Port PCIe NVMe SSD

一句話重點

NVM197-1雙 port PCIe 裝置可以經不同入口共用同一儲存資源。

來源:NVM Command Set 1.3 §5.10.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.10.3, Figure 197, 文件頁 171, PDF 頁 171

用例子讀懂

NVM197-2Port 0 和 Port 1 都在傳輸時,總吞吐量可能受共同 Endurance Group 限制;入口數增加不代表媒體能力倍增。

NVM Figure 198 · Dual Port PCIe NVMe SSD Rate Limiting Log Page Example

一句話重點

NVM198-1雙 port 的 log 範例展示兩條路徑如何引用共同描述子。

來源:NVM Command Set 1.3 §5.10.3

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.10.3, Figure 198, 文件頁 171-172, PDF 頁 171-172

用例子讀懂

NVM198-2沿兩個 port 的 offset 走到底,若都指向同一存取描述子,就只計算一份共享限制,不複製成兩個獨立資源。

圖表組 31 · FDP:placement、RUH 與可觀測數據 · 2 張圖表

38.57.先辨認 namespace 的 handle 如何對應 RUH,再閱讀狀態與統計。EARUTR 是秒數估計,RUAMW 是區塊數;事件中的 LBA 只有在 LBAV 指示有效時才可使用。

回到本節的解釋與範例

Placement Handle 如何對應到回收資源

38.58.先由主機使用的 Placement Identifier 找到 Reclaim Unit Handle,再解釋該 handle 的狀態與可用資訊。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
PID/RUHID前者選資料放置,後者識別相應回收資源;需要查映射才能互相連接。PID 的數字不一定等於 RUHID,不能以相同數值直接配對。
EARUTR/RUAMW分別提供該 handle 的時間與可寫量資訊,按來源單位解讀。可寫量不能換成剩餘時間,除非另外有已知的寫入速率與適用假設。
來源:NVM Command Set 1.3 §3.2.1.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.2.1.1, Figure 21, 文件頁 26, PDF 頁 26

NVM Figure 21 · Reclaim Unit Handle Status Descriptor

一句話重點

NVM21-1FDP 回覆把放置識別碼連到可寫入資源及其剩餘量。

來源:NVM Command Set 1.3 §3.2.1.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.2.1.1, Figure 21, 文件頁 26, PDF 頁 26

用例子讀懂

NVM21-2比較兩個回覆項目時,先確認 PID 指向哪個放置位置,再比較 RUAMW;數值較小代表剩餘可寫 blocks 較少,不是固定 RU 容量較小。

NVM Figure 116 · Media Reallocated - Event Type Specific Data Structure

一句話重點

NVM116-1Media Reallocated 事件先用有效標記決定是否能解讀 LBA。

來源:NVM Command Set 1.3 §4.1.4.7

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.7, Figure 116, 文件頁 79, PDF 頁 79

用例子讀懂

NVM116-2事件回報重新配置數量,但 LBAV 未成立時,不能把後面的 LBA 欄位當成精確位置。

圖表組 32 · Streams 的 NVM 單位與優先順序 · 2 張圖表

38.59.先標示 SWS 的區塊單位,再計算 SGS×SWS。把寫入大小與解除配置範圍放到這兩個尺度下比較,不要把 SGS 直接當成區塊數。

回到本節的解釋與範例

NVM Figure 152 · Two streams composed of SGS and SWS

一句話重點

NVM152-1不同 Streams 可以由不同的寫入與配置粒度描述。

來源:NVM Command Set 1.3 §5.2.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 152, 文件頁 128, PDF 頁 128

用例子讀懂

NVM152-2比較兩個 stream 時,把各自 SWS 和 SGS 標在其資料排列上,不能把其中一個 stream 的建議套給另一個。

串流提示的寫入大小與群組大小

38.60.Streams 參數提供主機安排寫入的提示,需與 namespace 格式及串流的識別使用方式一起讀。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
SWS/SGS分別描述串流寫入大小與群組大小,按來源規定單位換算。先把提示換成 logical blocks 或 bytes,再比較一批實際寫入的範圍,不能把兩個數字當成串流數量。
來源:Base 2.4 §8.1.9.3.1.1

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.9.3.1.1, Figure 712, 文件頁 624-625, PDF 頁 650-651

Base Figure 712 · Streams Directive – Return Parameters Data Structure

一句話重點

Base712-1Streams 參數分別描述寫入大小與配置粒度。

來源:Base 2.4 §8.1.9.3.1.1

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.9.3.1.1, Figure 712, 文件頁 624-625, PDF 頁 650-651

用例子讀懂

Base712-2使用 SWS 規劃一次寫入長度後,仍要看 SGS 的配置關係;兩者不同單位或作用不能混成一個「建議大小」。

圖表組 33 · ANA 與 Reservations 的 NVM 行為 · 2 張圖表

38.61.ANA 表用來判斷路徑狀態及某些回報欄位的特殊值;Reservation 矩陣則以保留類型、holder/registrant 身分與命令類別交叉查讀。NUSE 回零的狀態例外,不代表媒體內容已清空。

回到本節的解釋與範例

NVM Figure 141 · ANA effects on NVM Command Set Command Processing

一句話重點

NVM141-1ANA 狀態對不同 NVM 命令有不同影響。

來源:NVM Command Set 1.3 §5.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.1, Figure 141, 文件頁 119, PDF 頁 119

用例子讀懂

NVM141-2同一 namespace 的資料 I/O 與管理資訊讀取不一定同受限制;依命令列和目前 ANA 狀態交叉查表。

NVM Figure 199 · Command Behavior in the Presence of a Reservation

一句話重點

NVM199-1Reservation 對命令的限制取決於保留類型及主機身分。

來源:NVM Command Set 1.3 §5.11

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.11, Figure 199, 文件頁 173, PDF 頁 173

用例子讀懂

NVM199-2同一 Read 或 Write,對 holder、已註冊但非 holder、未註冊主機可能有不同結果;先固定命令,再逐欄比較身分。

圖表組 35 · LBA Migration Queue 與變更追蹤 · 4 張圖表

38.62.先用 LBACIR 決定這筆記錄是範圍、整個 namespace 或沒有 range,再看 ESA 狀態。CDQP 用來識別新 entry,DLBA 描述解除配置相關資訊;不能只讀 LBA 欄位就忽略有效性與狀態。

回到本節的解釋與範例

一筆變更紀錄如何描述來源與目的範圍

38.63.先讀 entry 類型,再用 NSID、SLBA 與 NLB 找到受影響範圍;其他欄位依此類型指出資料或儲存位置關係。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
NSID/SLBA/NLB命名 namespace 與 logical block 範圍;數量依 entry 定義解讀。同一個 SLBA 放在不同 NSID 下,是不同資料範圍。
LBACIR/DLBA/ESA/CDQP提供內容或目的位置等資訊,哪些欄位有效由 entry 類型及旗標決定。沒有對應有效條件時,不能把殘留的 DLBA 直接當成這次資料的新位置。
來源:NVM Command Set 1.3 §5.7

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.7, Figure 194, 文件頁 163-164, PDF 頁 163-164

NVM Figure 194 · LBA Migration Queue Entry Type 0

一句話重點

NVM194-1LBA Migration Queue Entry 同時指出搬移來源、目的與完成相關資訊。

來源:NVM Command Set 1.3 §5.7

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.7, Figure 194, 文件頁 163-164, PDF 頁 163-164

用例子讀懂

NVM194-2同一筆項目中,SLBA 是來源位置、DLBA 是目的位置;兩者都是 LBA,卻不能因單位相同就互換。

把追蹤管理動作連到結果佇列

38.64.Track Send 的管理操作選擇、操作專屬參數與目標資料佇列共同決定追蹤如何啟動或停止。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
MO/MOS/LACT先由 MO 選管理操作,再解讀 MOS 及其中的啟停選擇。要求開始記錄與要求停止記錄是兩個事件,不能用同一個 LACT 值解釋。
CDQID選已建立的控制器資料佇列;追蹤結果會依該佇列格式回報。Track Send 的成功 CQE 與資料佇列中後續產生的紀錄分別觀察。
來源:Base 2.4 §5.2.32 · Base 2.4 §5.2.32.1.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.32, Figure 561, 文件頁 523, PDF 頁 549

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.32.1.1, Figure 562, 文件頁 523, PDF 頁 549

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.32.1.1, Figure 563, 文件頁 523, PDF 頁 549

Base Figure 561 · Track Send – Command Dword 10

一句話重點

Base561-1Track Send 的管理操作由 MO 與操作專屬參數一起決定。

來源:Base 2.4 §5.2.32

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.32, Figure 561, 文件頁 523, PDF 頁 549

用例子讀懂

Base561-2選擇 Log User Data Changes 操作後,MOS 才按其動作欄位解釋,不能將另一種管理操作的參數直接套用。

Base Figure 562 · Log User Data Changes – Management Operation Specific Field

一句話重點

Base562-1LACT 選擇使用者資料變更紀錄的動作。

來源:Base 2.4 §5.2.32.1.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.32.1.1, Figure 562, 文件頁 523, PDF 頁 549

用例子讀懂

Base562-2要開始或停止某種紀錄行為時,依 LACT 選項處理;它不是變更了多少個 LBA 的計數。

Base Figure 563 · Log User Data Changes – Command Dword 11

一句話重點

Base563-1CDQID 把變更追蹤操作連到指定的 Controller Data Queue。

來源:Base 2.4 §5.2.32.1.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.32.1.1, Figure 563, 文件頁 523, PDF 頁 549

用例子讀懂

Base563-2先建立並辨識目標 queue,再在命令指定其 ID;CDQID 不表示此次要搬移的 namespace。

圖表組 36 · Memory-based 資源匯出範本 · 8 張圖表

38.65.先區分範本固定值與受底層上限限制的值,再逐項比對版本、佇列數與 namespace 格式。對外 Format Index 可以重新對應,但對應後的格式仍須符合範本指定的相容條件。

回到本節的解釋與範例

用參考組態理解狀態如何被描述

38.66.這組圖是規格定義的參考組態及狀態資料。區分固定模型值、可配置值與目前狀態,才能知道哪些值應帶入後續命令解讀。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
CSS/TO/CQR/MQES;MJR/MNR/TER能力與版本值限定參考模型所描述的行為。MQES 的編碼需要按佇列大小規則解讀,不能當成實際已建立的 queue 數量。
NSZE/NCAP/LBAF/AWUN/NAWUN/NGUID/UUID分別描述容量、格式、原子性與物件識別,保留控制器與 namespace 層級差異。複製一個 namespace 的格式設定,不會讓新物件自動取得相同身分。
NCQS/NSQS/Feature values/CSATTR.CP佇列與 Feature 狀態描述目前或參考設定,需與支援能力分開。支援的 queue 上限與當前設定的 queue 數量不是同一個欄位。
TO
CAP Timeout;每單位 500 ms,FFh 為 127.5 秒。
來源:NVM Command Set 1.3 §5.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 183, 文件頁 153, PDF 頁 153

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 184, 文件頁 153, PDF 頁 153

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 185, 文件頁 153, PDF 頁 153

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 186, 文件頁 154, PDF 頁 154

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 187, 文件頁 155, PDF 頁 155

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 188, 文件頁 156, PDF 頁 156

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 189, 文件頁 157-158, PDF 頁 157-158

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 190, 文件頁 158-159, PDF 頁 158-159

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 191, 文件頁 159-160, PDF 頁 159-160

NVM Figure 183 · Reference Exported Configuration State

一句話重點

NVM183-1參考配置狀態把控制器與 namespace 的設定分成不同部分。

來源:NVM Command Set 1.3 §5.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 183, 文件頁 153, PDF 頁 153

用例子讀懂

NVM183-2閱讀本機記憶體介面範本時,先分開 RECCS 與 RENSCS,再看各自包含哪些設定;不要把整份範本當成單一 namespace 的資料。

RENSCS / RECCS
Reference Exported Controller/Namespace Configuration State;分別是 364/48 bytes。

NVM Figure 184 · Reference Controller Capabilities Register Values

一句話重點

NVM184-1範本中的 CAP 值是該參考配置的能力設定。

來源:NVM Command Set 1.3 §5.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 184, 文件頁 153, PDF 頁 153

用例子讀懂

NVM184-2範本列出特定 MQES 時,它描述這個範本的佇列能力,不能推論所有實體 NVMe 裝置都具有相同值。

NVMe
Non-Volatile Memory Express,主機與非揮發性記憶體子系統之間的介面規範家族。

NVM Figure 185 · Reference Version Register Values

一句話重點

NVM185-1範本版本值說明參考配置使用的版本編碼。

來源:NVM Command Set 1.3 §5.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 185, 文件頁 153, PDF 頁 153

用例子讀懂

NVM185-2先辨識 MJR、MNR、TER,再與實際裝置回報版本分開;範本中的版本不是裝置查詢結果。

NVM Figure 186 · Reference Firmware Slot Information Log Page

一句話重點

NVM186-1範本 Firmware Slot 紀錄展示固定參考配置的韌體資訊。

來源:NVM Command Set 1.3 §5.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 186, 文件頁 154, PDF 頁 154

用例子讀懂

NVM186-2用 AFI 找啟用 slot,再讀相應 FRS;這是示範欄位如何對應,不是建議把同一版本字串寫入所有裝置。

AFI
Active Firmware Info,LID 03h 中同時包含目前 active slot 與下一次 reset 後預定 active slot 的 byte。
FRS
Firmware Revision for Slot,LID 03h 中每個 slot 的八-byte revision 字串欄位。

NVM Figure 187 · Reference Feature Default Values

一句話重點

NVM187-1Feature 預設值屬於參考配置的初始狀態。

來源:NVM Command Set 1.3 §5.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 187, 文件頁 155, PDF 頁 155

用例子讀懂

NVM187-2若後續改變中斷或佇列設定,不能仍把表中的預設值當成目前值;先分清 default 與 current。

NVM Figure 188 · Reference Identify Controller or Namespace Data Structures

一句話重點

NVM188-1範本 Identify 結構把容量、格式與識別資訊放到相应欄位。

來源:NVM Command Set 1.3 §5.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 188, 文件頁 156, PDF 頁 156

用例子讀懂

NVM188-2建立一份參考 namespace 狀態時,同時核對 NSZE/NCAP、格式及識別碼,避免只改容量卻沿用不相符的其他欄位。

NVM Figure 189 · Reference Exported Controller Configuration State

一句話重點

NVM189-1控制器配置狀態記錄佇列與命令能力等控制器層資訊。

來源:NVM Command Set 1.3 §5.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 189, 文件頁 157-158, PDF 頁 157-158

用例子讀懂

NVM189-2NCQS、NSQS 與 MQES 分別涉及佇列數量及每個佇列的容量;三個數字不能互相代用。

NVM Figure 190 · Reference Exported Controller Configuration State

一句話重點

NVM190-1Namespace 配置狀態記錄格式、原子性與識別資訊。

來源:NVM Command Set 1.3 §5.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 190, 文件頁 158-159, PDF 頁 158-159

用例子讀懂

NVM190-2同一控制器下的兩個 namespace 可以有不同 LBA 格式或原子性參數,應分別保存各自的描述。

圖表組 37 · 匯出狀態的長度與一致性 · 1 張圖表

38.67.布局圖先把固定 header 與可變內容分開,使用 64+4×NVMECSS 計算總長度。內層版本決定內容格式,CSATTR.CP 決定可以推論的暫停條件;這三種資訊各回答不同問題。

回到本節的解釋與範例

NVM Figure 191 · Reference Exported NVM Subsystem State

一句話重點

NVM191-1整體參考狀態由設定值與狀態資料共同組成。

來源:NVM Command Set 1.3 §5.4

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 191, 文件頁 159-160, PDF 頁 159-160

用例子讀懂

NVM191-2只有一份 Identify 範本,仍不足以代表完整狀態;還要依圖中關係理解 Feature 值與各狀態結構的角色。

學完後想一想

1. NSZE=1000、NCAP=800、NUSE=600 時,3 個數值各回答什麼問題?

39.01.NSZE 描述可定址的範圍,LBA 從 0 到 999;NCAP 描述最多可配置 800 個 logical blocks;NUSE 描述目前已配置 600 個。這些都是 logical block 數,換成 bytes 還需要 data size。

來源

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

2. 把 Compare 和 Write 相鄰放入 SQ,就能保證兩者之間沒有其他修改嗎?

39.02.不能只靠相鄰位置。要使用支援的 fused operation,依規則設定第 1 與第 2 個命令,並滿足相同範圍等配對條件;一般命令的提交順序不提供這種保證。

來源

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.2-2.1.3, 文件頁 14-15, PDF 頁 14-15

3. 符合 atomic write 大小,是否就表示斷電後資料一定保存?

39.03.Atomicity 關注規定情境下是否可能讀到部分更新;persistence 關注資料是否已保存到非揮發性媒體。仍要分別考慮 normal/power-fail atomicity、對齊邊界、volatile write cache 與 FUA/Flush 規則。

來源

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4; 4.1.3.4; 5.9, 文件頁 15-21,66-67,165, PDF 頁 15-21,66-67,165

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4; 3.3.6, 文件頁 48-51,53-56, PDF 頁 48-51,53-56

4. 已知一段預期資料,想確認媒體內容與它相同,應使用 Compare 還是 Verify?

39.04.Compare 會使用 host 提供的比較資料。Verify 用來確認指定範圍的可讀性及適用的完整性檢查,不會把資料傳回 host,也不以一份 host 預期內容作逐項比較。

來源

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1; 3.3.5, 文件頁 27-30,51-53, PDF 頁 27-30,51-53

5. Read 得到全零,可以推論這些 LBAs 仍然已配置嗎?

39.05.不能。已寫入的零資料與 deallocated block 的零值讀取行為都可能產生相同結果。要結合配置狀態、DRB,以及 DULBE 是否支援且啟用,才能解釋這次讀取。

來源

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3.2.1; 4.1.3.3, 文件頁 47-48,66, PDF 頁 47-48,66

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.7-3.3.8, 文件頁 56-61, PDF 頁 56-61

6. 只知道 data size 是 4096 bytes,足以建立正確的 I/O buffer 嗎?

39.06.還不夠。需要確認使用中的 Format Index、metadata 大小、PI 格式與 metadata 傳輸方式;separate buffer 與 extended LBA 的記憶體排列不同。

來源

來源:NVME-NVM-CS-1.3, Rev. 1.3, §1.1-1.6; 4.1.3.9; 4.1.4.8; 4.1.5, 文件頁 9-12,73-75,79-83, PDF 頁 9-12,73-75,79-83

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.1; 4.1.5.3; 5.6, 文件頁 85-94,96-102,160-162, PDF 頁 85-94,96-102,160-162

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.6; 5.2.3; 5.3, 文件頁 22,129-131, PDF 頁 22,129-131

7. PRACT=1 是否代表關閉所有 PI 檢查?

39.07.PRACT 控制 PI 如何在傳輸中處理,並非總檢查開關。Guard、Application Tag、Reference Tag 的要求由 PRCHK 指定,Storage Tag 另由 STC 指定;實際傳輸內容還取決於 metadata 與 PI 大小。

來源

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.5; 5.3.2-5.3.3, 文件頁 21-22,141-152, PDF 頁 21-22,141-152

8. Soft Limit 為何可能觀察到高於設定值的 throughput?

39.08.Soft Limit 允許利用尚未被其他工作使用的頻寬或 IOPS;當資源不足時才依設定比例分配。Hard Limit 則提供上限。Appendix A 的 token buckets 是說明性實作,不能視為所有 controller 的內部結構。

來源

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.10.1-5.10.2; Appendix A, 文件頁 166-168,176-177, PDF 頁 166-168,176-177