NVMe · 規格與原理

NVMe 管理與資料命令:從一筆 I/O 學會裝置運作

00.01.作業系統要使用一顆 NVMe SSD,得先知道它有哪些儲存空間、每個區塊的格式、可以接受哪些命令,以及命令完成後究竟保證了什麼。這篇從一筆讀寫的需要開始,把查詢能力、準備佇列、傳輸資料和裝置維護接起來。先用具體情境建立全貌,再拆開欄位、時間順序與例外條件。

NVMe
Non-Volatile Memory Express,主機與非揮發性記憶體子系統之間的介面規範家族。

這篇的主軸

01

認識裝置與可用能力

01-01Identify 是裝置及 namespace 的能力地圖;Log 補充狀態與變動。先知道查詢在問誰,才知道如何使用回覆。

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

安排命令與設定行為

02-01Features 設定行為,SQ/CQ 承接命令。維護時再依目的選動作:Create 與 Attach 分別建立空間及存取關係;Self-test、Telemetry、Sanitize 則各有作業狀態與結果。

CQ
Completion Queue,controller 放入完成結果的完成佇列。
SQ
Submission Queue,主機放入命令的提交佇列。
03

用資料流比較 I/O

03-01Read 取回資料,Write 送入資料,Compare 接收預期資料,Verify 不傳回一般資料,Copy 只傳來源描述子。用資料方向和結果比較八種命令。

04

判斷結果能保證什麼

04-01命令完成、立即中止、內容相同、持久保存與原子性是不同證據;用範圍、時間順序和格式條件界定每一種保證。

00.02.以下的主機是發命令及提供記憶體的一方;controller 接收命令並管理裝置,namespace 是主機可定址的一份儲存空間。LBA 指出空間內的位置;一個 LBA 有多少 bytes,要由該 namespace 目前的格式決定。例子若使用 4096-byte LBA,會明確標示,不能把它當成所有 SSD 的固定值。

controller
controller,實作 NVMe 介面、取走 command 並回報 completion 的控制實體。
LBA
Logical Block Address;以 logical block 為單位的地址。例如每 block 為 4096 bytes 時,LBA 2 的資料起點對應第 8192 byte。

00.03.閱讀時先看每節情境和算例,再用圖中的箭頭確認誰提供資料、誰改變狀態。要查精確欄位時,可以沿每節末尾的連結前往本文的圖表教學;相關欄位集中解釋,後面的圖只補自己的重點和案例。基本機制與必要條件都在本文說明,來源標示供核對使用。

把主軸連起來

00.04.用一筆「將 32 KiB 寫到指定位置」串起主軸:Identify 確認 4096-byte LBA 與長度上限;佇列承接 Write;SLBA 選位置,NLB=7 表示 8 blocks;DPTR 指向 32768 bytes。命令完成後,是否已能承受掉電,還要看 cache、FUA 與 Flush 的條件。這些欄位是同一件工作的不同部分。

DPTR
Data Pointer,SQE 中指出 command data buffer 的欄位。
SLBA
Starting LBA;指定命令範圍的起點。
FUA
Force Unit Access;其效果由命令定義。對 Write 而言,要求資料與 metadata 提交至非揮發性媒體後才完成。
NLB
Number of Logical Blocks;本篇讀寫、Copy 及 LBA Range Type 的此欄位採零起算,實際 block 數為 NLB+1。

00.05.維護功能有自己的時間尺度。Create 產生 namespace,Attach 開通存取關係;Self-test、Telemetry 與 Sanitize 可能在命令回覆之後繼續工作。先分清「要求已處理」「背景作業進行中」「最終結果已產生」,才不會把所有成功 CQE 都解成工作已全部完成。

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

01 先分清管理命令與資料命令

01.01.Admin 命令建立及調整控制器的工作環境;I/O 命令處理 namespace 的資料。Opcode 要連同命令集解讀,命令支援與目前是否允許執行也要分開確認。

Admin
Administrative,建立、設定、查詢或管理 controller 與 queue 的控制路徑。
I/O
Input/Output,對 namespace 執行資料輸入與輸出的操作類別。
來源:Base 2.4 §5, 5.1.1

來源:NVME-BASE-2.4, Rev. 2.4, §5, 5.1.1, 文件頁 176-178, PDF 頁 202-204

用一台剛開始工作的 SSD 想像全貌

01.02.作業系統需要知道 SSD 能做什麼、有哪些可存取的 namespace,以及如何建立資料傳輸的佇列。這些是管理面的問題。等環境準備好,讀取某一段 LBA、寫入資料或要求持久保存,才是資料面的工作。兩種命令最後都有完成回覆,但回覆能證明什麼,要看那一種命令的定義。

讀 Opcode 表時,把三欄一起看

01.03.Figure 143 把功能、資料傳輸方向、NSID 使用方式放在同一列。傳輸方向是相對主機而言;它不是「這個命令有沒有改動 SSD」的判斷。例如 Firmware Image Download 把映像送入控制器;Firmware Commit 則用少數參數要求保存或啟用映像,兩者的資料傳輸型態不同。

NSID
Namespace Identifier;識別命令作用的 namespace。

能力與當前狀態是兩次判斷

01.04.Identify 回報支援某命令,只回答裝置有沒有實作它。Format 或 Sanitize 進行中,部分命令會受限制。Figure 144 的讀法是先選目前的作業狀態,再找要發出的命令列,最後讀該交叉位置的規則及註記。例如同樣要讀狀態,Get Log Page 與開始另一個媒體修改操作不是同一類要求;不能把「支援」當成任何時刻都允許執行。

命令主機提供什麼SSD 處理什麼/主機得到什麼
ReadLBA 範圍及接收 buffer讀取內容,將資料傳回主機。
WriteLBA 範圍及要寫入的資料把資料寫入指定範圍。
CompareLBA 範圍及預期資料比對儲存內容;回報相同或 Compare Failure。
VerifyLBA 範圍與檢查選項執行驗證,沒有一般 Read 的資料回傳。
Copy來源範圍描述子與目的起點在裝置內複製資料,主機不搬送整段內容。
Dataset Management範圍描述子與屬性提供使用提示或要求解除配置;不是寫入零值。
Write UncorrectableLBA 範圍標記不可更正條件;後續存取依規格回報錯誤。
Write ZeroesLBA 範圍與控制選項依零值/解除配置條件處理,不需傳送一般資料 payload。
先以資料方向與問題比較 8 種命令,再到後文讀各自條件。來源:NVM 1.3 §3.3.1–3.3.8。
閱讀相關規格圖表 → 先分清管理命令與資料命令

02 Identify:建立控制器、namespace 與能力的地圖

02.01.Identify 通常回傳 4096-byte 結構;CNS 選結構,CSI 選命令集,NSID、CNTID 或 CNS-specific identifier 決定查詢對象。這幾個選擇值不能互相代替。

CNS
Controller or Namespace Structure;Identify 命令用來選擇回傳資料結構的欄位。
CSI
I/O Command Set Identifier;選擇 I/O 命令集,NVM Command Set 使用 00h。
來源:Base 2.4 §5.2.14.1, 5.2.14.2, 5.2.14.5

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.1, 5.2.14.2, 5.2.14.5, 文件頁 336-405, PDF 頁 362-431

先選「問誰、問哪一種資料」

02.02.CNS=01h 讀控制器共通資料;CNS=02h 讀 active namespace ID 清單;CNS=03h 讀 namespace 的識別描述子。CNS=05h/06h 還要由 CSI 決定命令集版本的 namespace/controller 結構。先把要求寫成一句完整的問題,會比背一長串 CNS 數值容易。

把 4096-byte 長表看成幾組可以回答的問題

02.03.Figure 338 可分為裝置身分、命令能力、資源限制、資料操作能力及電源狀態。VID/SN/MN/FR 辨識裝置;OACS/ONCS 告訴主機可用命令;MDTS 限制傳輸量;ACL/AERL 限制不同未完成要求的數量。FRMW/FWUG 用於 firmware,DSTO/EDSTT 用於 Self-test,SANICAP 用於 Sanitize,LPA 則協助判斷 Log 能力。這些欄位不是一串都要填入每筆命令的參數,而是執行相應工作前要取得的條件。

EDSTT
Extended Device Self-test Time,在 power state 0 下的 extended test 名目完成分鐘數。
DSTO
Device Self-test Options,Identify Controller 中回報 refresh 與 concurrency 選項的欄位。
FRMW
Firmware Updates,Identify Controller 中回報 slot 數、slot 1 read-only 與 activation 能力的欄位。
FWUG
Firmware Update Granularity,download portion 的 granularity/alignment 能力欄位。
VID
Vendor ID,由 PCI-SIG 配置、辨識 vendor 的 identifier。
FR
Firmware Revision,Identify Controller 回報目前 active firmware revision 的八-byte ASCII 欄位。
MN
Model Number,辨識產品型號的字串。
SN
Serial Number,辨識一個產品實例的序號字串。

清單、描述子與能力結構有不同閱讀方式

02.04.清單通常以 count 或固定項目數界定有效內容,分段列舉還要看起始 identifier 的條件;描述子則由 type 和 length 決定下一筆從哪裡開始。NVM Set、Domain、Endurance Group 清單補足資源歸屬;I/O Command Set Vector 是命令集組合的位元圖,不是 namespace 清單。

Endurance Group
Endurance Group,用於隔離與回報耐久度相關狀態的 NVM 資源群組。
NVM Set
NVM Set,把 namespace 與一組共同管理的 NVM 資源建立關聯的容量集合。

Underlying Namespace List:索引選一段清單,NSID 識別其中的空間

02.05.CNS=1Dh 可查詢底層 namespace 對應。CNSSID 在這裡是起始 index,不是 NSID;每次最多回 12 筆。header 的 GENCTR 是清單版本,NUMENT 是有效項目數;每筆 320 bytes,包含底層 NSID 和 IDX。以 PCIe memory-based controller 的格式看,項目內的 CNTLID 欄位須為 0,主機忽略它,不能用它建立 controller 對應。假設有 15 筆,第一次 CNSSID=0 取得 indexes 0–11,第二次 CNSSID=12 取得 12–14;核對 GENCTR 未變,才把兩段當成同一版清單。

index
index;用來選取清單中的項目或格式。它回答「選哪一項」,不是「離起點多遠」。
PCIe
PCI Express,NVMe memory-based controller 使用的 transport 與裝置互連。

Controller State Formats:數的是格式項目,不是目前版本

02.06.CNS=20h 回報可支援的控制器狀態資料格式,供保存或還原狀態時確認格式相容性。NV 是版本 entry 數,NUUID 是廠商 UUID entry 數;版本 entry 每筆 2 bytes,UUID entry 每筆 16 bytes。例如 NV=2、兩筆版本值為 1 和 3,意思是支援這 2 種格式,不是目前運行在「版本 2」。此清單的版本及 UUID 選擇索引從 1 起算;不要直接套用從 0 起算的 LBA Format Index。

Format Index
格式索引;用來選取一組 LBAF/ELBAF 格式資訊的編號。
UUID
Universally Unique Identifier,128-bit identifier;其實際關聯範圍仍由使用它的資料結構決定。
閱讀相關規格圖表 → Identify:建立控制器、namespace 與能力的地圖

03 NVM Identify:用格式與上限驗算一筆 I/O

03.01.NVM Identify 補上 namespace 容量、LBA 格式、metadata/PI、原子性和命令限制。CNS、CSI、NSID 與 Format Index 的組合決定查目前 namespace,或查某個支援格式。

metadata
隨 logical block 儲存的附加資料,可包含資料保護資訊,也可有其他用途。
PI
Protection Information;用 Guard 與 tags 檢查資料及其關聯資訊的保護欄位。
來源: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.02.NSZE、NCAP、NUSE 分別描述 namespace 大小、可配置容量與使用量,不能互當同義詞。FLBAS 指向目前格式,LBAF 的 LBADS 用 2 的次方表示每個 block 的資料大小,MS 則是 metadata bytes。對讀寫命令算 buffer 大小時,用目前格式,不是任選清單中的一個較熟悉格式。

FLBAS
Formatted LBA Size,選擇 namespace 使用的 LBA format,並包含 metadata placement 相關控制。
LBAF
LBA Format;描述一種 logical block 格式,包括資料及 metadata 大小。
NCAP
Namespace Capacity,任一時點最多可配置給 namespace 的 logical blocks。
NSZE
Namespace Size,namespace 的總 logical block 數,LBA 範圍為 0 到 NSZE−1。
NUSE
Namespace Utilization,目前已配置給 namespace 的 logical blocks。
MS
Metadata Size;每個 logical block 的 metadata bytes 數。

再把所有限制放到同一筆要求上

03.03.MDTS 限制資料傳輸量,Copy 的 MSRC/MSSRL/MCL 分別限制來源數、單段和總長度,DSM 還有自己的範圍處理限制。AWUN/AWUPF、namespace 的 NAWUN/NAWUPF 與 boundary 欄位回答原子性,DLFEAT 等欄位回答解除配置後的觀察結果。上限、對齊與提示要用正確單位後再比較。

NAWUPF
Namespace Atomic Write Unit Power Fail;namespace 失敗條件的原子寫入大小;依適用與零值規則判讀。
NAWUN
Namespace Atomic Write Unit Normal;namespace 正常情況原子寫入大小;依適用與零值規則判讀。
DSM
Dataset Management;由 host 提供資料範圍的使用與配置提示。

把格式能力與目前設定分開

03.04.MC、DPC、DPS、PIC 等欄位分別描述 metadata 方式、PI 能力與目前設定;Extended LBA Format 進一步指出 tag 及保護格式。支援某種 PI 不代表每個 namespace 已啟用它,也不表示所有命令的檢查選項都相同。

DPS
End-to-end Data Protection Type Settings;Identify 回報目前 PI 類型與位置,Create payload 則提出新 namespace 的設定。
PIC
Protection Information Capabilities;NVM Identify 中描述 PI 格式及 Storage Tag 支援能力的欄位。

把目前空間與支援格式分成不同查詢

03.05.CNS=09h/0Ah 的 Format Index 查詢,是問某個支援格式的能力,不是在查 NSID 9 或 10。已配置 namespace、active namespace、支援格式和容量粒度也有不同入口。Create 選用的是可支援格式與資源條件;Read/Write 使用的則是目標 namespace 現在真正啟用的格式。先問「正在用哪個」還是「能選哪些」,再選 CNS。

閱讀相關規格圖表 → NVM Identify:用格式與上限驗算一筆 I/O

04 LBA Format List:選定同一筆格式才能配對能力

04.01.LBA Format List 分成共用能力的格式與具有不同能力的格式。NLBAF、NULBAF 決定數量,CNS 決定能查到哪一群;Format Index 則選定這次要解讀的格式。

NULBAF
Number of Unique Attribute LBA Formats;直接表示非共用能力的格式數,0 表示沒有。
NLBAF
Number of LBA Formats;共用能力群組的格式數減 1,至少定義 1 個格式。
來源:NVM Command Set 1.3 §5.6

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

同一個格式編號,要一路用到底

04.02.Format Index 指向支援格式中的一筆。從這筆資料取得 data 大小、metadata 大小和能力,才能把 Read、Write、Compare、Verify、Copy 的 buffer 與 PI 條件算在同一基礎上。若取 data 大小時用 index 2、取保護能力時卻用 index 3,即使兩個數值各自有效,組合也不一定是任何可用格式。

先把兩個計數換成實際格式數

04.03.NLBAF 採零起算,值 2 代表 3 個共用能力的格式;NULBAF 直接表示非共用格式數,值 2 代表另外 2 個。兩者合計 5 個,有效索引為 0–4。圖中的分組要以換算後的個數理解,不可直接把兩個原始欄位相加,少算一個格式。

用 CNS 選對查詢入口

04.04.Figure 193 的 CNS 00h、05h、08h 只涵蓋 NLBAF 所描述的群組;09h、0Ah 能查兩群。對某個非共用格式,要以 Format Index 取得它自己的能力,不能沿用 NSID=FFFFFFFFh 的共用能力結果。CNS 09h 查 NVM Identify Namespace 的格式資料,0Ah 查 NVM 命令集專屬結構的格式資料。

最後確認格式目前可用

04.05.支援的格式若目前不可用,其 LBADS 回報 0h,不能照一般指數公式把它解成可用的 1-byte LBA。可支援的最大格式數還受 LBAFEE 前提限制:0 時至多 16 個,1 時至多 64 個;本篇只說明這個引用條件,不展開其 Feature 設定。

閱讀相關規格圖表 → LBA Format List:選定同一筆格式才能配對能力

05 I/O 佇列:先建立完成端,再接上提交端

05.01.Create I/O SQ 以 CQID 指向已存在的 I/O CQ,因此通常先建立 CQ 再建立 SQ。刪除時先移除引用該 CQ 的 SQ;數量配置、佇列建立與正常送命令是不同步驟。

來源:Base 2.4 §5.3.1–5.3.4

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.1–5.3.4, 文件頁 527-532, PDF 頁 553-558

先畫引用關係,就知道先後順序

05.02.一條 Completion Queue 可以服務多條 Submission Queues。建立 SQ 時要填入目標 CQID,所以不能先建立一條指向不存在 CQ 的 SQ。Number of Queues Feature 只完成可用數量的協商,不會替主機建立這些記憶體佇列。

ID、深度、位址各自檢查

05.03.QID 選新佇列,QSIZE 是從 0 起算的深度,PRP1 指定佇列記憶體或清單;PC 表示實體連續的配置方式,還受 CAP.CQR 等條件約束。CQ 的 IEN/IV 處理中斷;SQ 的 QPRIO 連到仲裁模式,CQID 連到完成端;CDW12 的 NVMSETID 另外指定適用的資源歸屬。

NVMSETID
NVM Set Identifier;辨識 NVM Set。Identify 用它查詢資源,Create SQ 則用它指定該 SQ 的關聯。
CAP
Controller Capabilities,offset 00h 的 controller property,回報 queue、page size、timeout 與其他能力。
CDW
CDW(Command Dword);命令中的 32-bit 欄位單位,例如 CDW10 的 10 是欄位 index,不是 byte offset。
IV
Interrupt Vector,Completion Queue 指定的 interrupt vector 編號。
Delete SQ 的成功 CQE 決定舊命令的最後界線說明性範例:CID 10 已有自己的 CQE;11、12 尚無 CQE。Delete SQ 成功後,11、12 隱含以 Command Aborted due to SQ Deletion 完成,控制器之後不再送出它們的完成狀態。箭頭是時間順序。SQ 3:CID 10先回成功 CQEDelete SQ 3回成功 CQECID 11、12隱含中止成功刪除後,不再等待 11、12 各自的 CQE
說明性範例:CID 10 已有自己的 CQE;11、12 尚無 CQE。Delete SQ 成功後,11、12 隱含以 Command Aborted due to SQ Deletion 完成,控制器之後不再送出它們的完成狀態。箭頭是時間順序。
CID
Command Identifier,與 SQ identifier 合用以辨識 outstanding command。

Delete SQ 成功是舊命令的完成界線

05.04.Delete SQ 的成功 CQE 出現前,原 SQ 裡的命令可以各自回報成功或 Command Aborted due to SQ Deletion。Delete SQ 成功之後,控制器不得再為那條已刪除 SQ 的舊命令送出完成狀態;尚未有 CQE 的舊命令,都隱含以 Command Aborted due to SQ Deletion 結束。因此主機不能永遠等待那些命令各自再回一筆 CQE。

用 3 筆命令追蹤明確完成與隱含完成

05.05.假設 SQ 3 有 CID 10、11、12,CID 10 已有成功 CQE;接著 Delete SQ 3 成功,而 11、12 沒有各自的 CQE。此時 10 保留原結果,11、12 視為因 SQ 刪除而中止。Delete SQ 完成後,主機才可釋放描述該 SQ 的 PRP List。若 SQ 4 仍引用 CQ 2,就還不能刪 CQ 2;CQ 暫時是空的,也不能取代「沒有任何 SQ 引用」的條件。

PRP
Physical Region Page,以 memory page 為單位描述 host-addressable data buffer 的 pointer 格式。
閱讀相關規格圖表 → I/O 佇列:先建立完成端,再接上提交端

06 Read:把範圍、格式與主機 buffer 接起來

06.01.Read 用 SLBA 和 NLB 選 namespace 內的範圍,再依資料格式、metadata 配置及檢查設定把內容送入主機 buffer。命令欄位中的 block 數與 byte 數需要透過目前格式換算。

來源:NVM Command Set 1.3 §3.3.4

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

先把 LBA 當成格子的編號

06.02.假設每個 LBA 有 4096 bytes 的資料,從 LBA 100 讀 8 blocks,範圍是 100–107,主機 data buffer 需要 32768 bytes。100 是位置,不是 byte offset;8 是實際 block 數,命令 NLB 則填 7。

offset
offset;從指定起點算出的位移。它回答「離起點多遠」,不等於 index。

有 metadata 時不要只算 user data

06.03.若每個 block 另有 metadata,傳輸會依 namespace 格式採延伸 LBA 或分離的 metadata buffer。DPTR 與 MPTR 各自描述位置,PRINFO 再決定 PI 的轉移與檢查方式。不能因主機有足夠 data buffer,就省略 metadata 所需的空間及對應。

PRINFO
Protection Information;命令內的 PRACT 與 PRCHK 組合欄位。
MPTR
Metadata Pointer,SQE 中指出獨立 metadata buffer 的欄位。

先選欄位格式,再設定檢查選項

06.04.CDW10–11 合成 64-bit SLBA;CDW12 的 NLB 使用 blocks−1,PRINFO 選 PI 的 action 與檢查。CDW13 在 CETYPE=0 時不使用 Command Extension Value;CETYPE 非零時,低 16 bits 才按指定 extension 定義解讀。一般不使用 extension 的讀取將 CETYPE 設 0,保留欄位填 0;不能因低 16 bits 有空間就自行放入應用程式標籤。

CETYPE
Command Extension Type;選擇命令延伸欄位 CEV 的用途。

把 SLBA、長度與 namespace 終點放在同一條軸上

06.05.若 NSZE=1000,有效 LBA 是 0–999。SLBA=996、NLB=3 讀 4 blocks,最後位置為 999;NLB=4 則需要到 1000,超出可定址範圍。這項檢查與 buffer 足不足是獨立條件:主機即使配置更多記憶體,也不能讓 namespace 多出一個 LBA。

閱讀相關規格圖表 → Read:把範圍、格式與主機 buffer 接起來

07 Write:寫入內容、持久性與原子性分開看

07.01.Write 把主機提供的資料寫入指定 LBA 範圍。FUA、volatile write cache、原子寫入限制及 PI 檢查回答不同問題;單筆命令成功不能自動推論所有可能的持久性與原子性保證。

來源:NVM Command Set 1.3 §3.3.6

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

先建立資料流

07.02.主機把資料放入 DPTR 所描述的 buffer,再用 SLBA/NLB 指定目的範圍。metadata 是否分離、需要傳多少 bytes,要與 Read 一樣依目前 namespace 格式計算。Write 不會因為命令名字相同,就接受任意大小的主機 buffer。

FUA 與 Flush 的使用時機不同

07.03.FUA 把特定 Write 的完成連到該命令要求的非揮發性媒體提交條件;Flush 則對已完成的命令建立較後面的持久保存界線。兩者都不是「原子性開關」。是否有 volatile write cache、目前是否啟用以及指定控制選項,必須一起看。

原子性還要檢查大小與邊界

07.04.Identify 的 atomic write 單位及 boundary 欄位限制哪些範圍有規格保證。後面的 Write Atomicity Normal Feature 也會影響正常操作下的要求;掉電條件與正常條件不能互換。先把一筆 Write 畫到 LBA 軸上,看是否超過單位或跨越相關邊界,再討論保證。

持久保存和原子性可用兩個問題分開

07.05.FUA 的問題是「這筆 Write 完成時,資料是否已符合非揮發性提交要求」;原子性的問題是「失敗或掉電時,受保護範圍會不會只更新一部分」。例如只等到 Write 的一般完成,可能尚未取得持久保存保證;即使用 FUA,超過 atomic write 大小或跨越不允許的 boundary,也不會因而獲得更大的原子範圍。

閱讀相關規格圖表 → Write:寫入內容、持久性與原子性分開看

08 Flush:用完成界線說明持久保存

08.01.Flush 要求指定 namespace 的資料及 metadata 提交至 non-volatile media。它至少涵蓋在 Flush 提交前已完成的命令;同時仍在執行的 Write 不可自動視為被納入。

來源:Base 2.4 §7, 7.2

來源:NVME-BASE-2.4, Rev. 2.4, §7, 7.2, 文件頁 564,567, PDF 頁 590,593

把一般完成與持久保存畫成兩條界線

08.02.若裝置使用 volatile write cache,Write 的正常完成不一定等於資料已進入非揮發性媒體。Flush 是主機要求建立持久保存界線的方法之一。它不把資料再從主機傳一次,而是要求控制器處理已持有的資料與 metadata。

先確定 Write 已完成,再提交 Flush

08.03.假設 Write A 已完成,Write B 還在另一條 SQ 上執行,此時提交 Flush。規格保證至少包括 Flush 提交前已完成的命令;不能因此宣稱 B 也一定持久保存。若應用程式需要 A 與 B 都受這次 Flush 保護,主機先建立兩者都已完成的順序。

cache 狀態和 namespace 範圍都會改變判讀

08.04.指定 NSID 選一份 namespace;FFFFFFFFh 則須看 VWC.FB:11b 對該控制器 attached 的所有 namespaces 生效,10b 回 Invalid Namespace or Format,00b 的舊值行為未定義。若 volatile write cache 不存在或未啟用,Flush 沒有資料提交作用;沒有 Sanitize 進行時必須成功,Sanitize 進行時則允許成功,不能一律宣稱必定成功。這是完成狀態的條件,與 Flush 是否傳送 data buffer 無關。

Write A 的持久保存界線已完成的 A 被後續 Flush 涵蓋;與 Flush 同時仍在執行的 B,不能只靠這次 Flush 判定已持久保存。Write ACQE 已完成Flush主機提交FlushCQE 成功Write B:提交 Flush 時仍未完成
已完成的 A 被後續 Flush 涵蓋;與 Flush 同時仍在執行的 B,不能只靠這次 Flush 判定已持久保存。
閱讀相關規格圖表 → Flush:用完成界線說明持久保存

09 Compare:把主機提供的內容拿來比對

09.01.Compare 將指定 LBA 範圍的資料與主機提供的內容比對,並依設定處理 metadata/PI。成功表示符合比較條件;Compare Failure 是內容不相符,與無法讀取媒體不同。

來源:NVM Command Set 1.3 §3.3.1

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

先問比較的兩邊是什麼

09.02.一邊是 namespace 裡選定 LBA 的資料,另一邊是主機 buffer 中的預期內容。因此 Compare 的主機資料傳輸方向與 Read 不同。若只有「想檢查媒體能不能讀」,沒有預期資料,後面 Verify 才是另一個要比較的命令。

範圍、資料配置與檢查選項要一致

09.03.SLBA 指定起點,NLB 指定從 0 起算的區塊數量;DPTR/MPTR 的配置需配合目前格式及 metadata 是否分離。PRINFO 與 tag 欄位不是另一份待比較的 user data,而是保護資訊檢查的一部分。延伸欄位則先由命令格式選擇值判定是否適用。

結果只對這次命令的範圍成立

09.04.比對成功能說明這次選定內容符合命令要求,不能推論其他 LBA 正確,也不會自動阻止其他命令稍後修改相同位置。需要更強的命令配對或原子操作保證,必須另外具備其定義的條件,不能只由 Compare 名稱推導。

不要把一次比對當成之後內容不會改

09.05.假設 Compare 在 LBA 100 成功,另一條 SQ 的 Write 隨後更新 LBA 100。這兩筆結果可以同時成立:比對當時內容相同,之後內容被合法修改。Compare 沒有替範圍上鎖;若需要比對結果和後續更新不可被插入,還需要明確支援並使用對應的命令配對機制。

閱讀相關規格圖表 → Compare:把主機提供的內容拿來比對

10 Verify:檢查可讀性,沒有主機比對資料

10.01.Verify 對指定 LBA 範圍執行規格定義的驗證,不把正常 Read 的資料傳回主機,也不需要 Compare 的預期資料 buffer。它不能證明內容符合應用程式想要的值。

來源:NVM Command Set 1.3 §3.3.5

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

拿三個問題對照三種命令

10.02.想把內容拿回來,用 Read;已經知道正確內容,想比對是否相同,用 Compare;想讓控制器檢查指定範圍的資料與適用保護條件,用 Verify。這三種要求可能都讀到媒體,但主機提供的資料與最後得到的證據不同。

沒有 data buffer,仍有範圍與 tag

10.03.Verify 仍要指定 SLBA、NLB,並按支援能力與 PRINFO 解讀保護檢查、預期 tag 及命令延伸欄位。不能把 Read 的整個 SQE 複製過來,只把 opcode 換掉,就假設 DPTR/MPTR 仍有相同意義。

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

成功的範圍不要擴張

10.04.Verify 成功只表示這次驗證的條件成立。資料若在應用程式寫入之前就算錯,媒體與 PI 仍可能自洽;Verify 無法知道業務邏輯所期待的值。需要與已知內容比較時,要回到 Compare 的問題。

一個實際的選擇題:要拿回資料,還是只需要檢查結果

10.05.備份程式要把檔案內容傳到另一台機器,必須用 Read 取得 bytes,Verify 成功不會給它檔案。若只是檢查一段範圍的儲存層可讀性與適用 PI,Verify 可省掉一般 data 傳回。若手上有一份應一致的內容,要查是否吻合,才是 Compare 的用途。

閱讀相關規格圖表 → Verify:檢查可讀性,沒有主機比對資料

11 Copy:主機傳描述子,控制器搬資料

11.01.Copy 的 DPTR 指向來源範圍描述子,目的位置由命令指定。描述子格式、來源與目的格式的對應、MSRC/MSSRL/MCL 及完成回覆共同限制一次操作。

來源:NVM Command Set 1.3 §3.3.2

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

不要把 Copy 的 buffer 當成 user data

11.02.Read/Write 的 DPTR 通常搬 user data,Copy 的 DPTR 則傳一份來源範圍清單。控制器依清單在媒體上取得來源資料,再放到目的 LBA。主機省下搬移整批 user data 的工作,但仍需提供正確描述子。

先固定描述子格式,再算每個來源範圍

11.03.DESFMT 決定每筆描述子的欄位與大小,NR 是從 0 起算的描述子數量。每個來源範圍有 SLBA 和 NLB,目的從 SDLBA 起連續放置。最大來源範圍數、單一來源長度與總長度分別受 MSRC、MSSRL、MCL 約束,不能只檢查一個上限。

SDLBA
Starting Destination LBA;指定 Copy 連續目的範圍的起點。

描述子格式決定來源是否可以在另一個 namespace

11.04.DESFMT=0/1 不含 SNSID,來源與目的使用命令同一個 NSID;=2/3 包含 SNSID,可選不同來源 namespace,但除了裝置支援,還需要主機啟用該格式。0/2 對應 16-bit Guard PI,1/3 對應 32-bit 或 64-bit Guard PI。格式相容性不是只比每 LBA 的 data bytes:PI 與 metadata 配置也要相容。來源無 PI、目的有 PI 時,PRINFOW.PRACT 必須要求產生所需 PI,不能直接當作兩端布局完全相同。

PRINFOW
Protection Information Write;Copy 寫入端的 PI 處理與檢查欄位。
Guard
PI 的檢查值欄位;所選格式決定檢查值的寬度與計算方法。
SNSID
Source Namespace Identifier;指定 Copy 的來源 namespace。

失敗回覆的 DW0 不是已完成 block 數

11.05.Copy 失敗時,CQE DW0 回傳最小編號的未成功來源範圍。假設 ranges 0、1、2、5 成功,3、4 未成功,DW0=3;不能因此推論 range 5 沒有執行。控制器也可能已處理部分未成功範圍。若完全沒有寫入目的 LBA,DW0 為 0;反過來只看到 DW0=0,仍不能排除第一段已部分寫入。

目的位址隨前面來源的長度向後推進

11.06.第 1 段來源有 4 blocks,放到 SDLBA=1000 後會使用 1000–1003;第 2 段有 6 blocks,從 1004 接續放到 1009。命令 NR=1 代表 2 個來源描述子,不是 2 blocks;目的總長是每段實際 block 數的總和。主機 buffer 放的是這些描述子,不是 10 blocks 的 user data。

兩個來源範圍接成一段目的範圍說明性範例:4 blocks 接 6 blocks。目的起點為 1000,第二段必須接在 1004;主機傳的是兩筆描述子,NR=1。來源 A:4 blocks來源 B:6 blocks1000–10031004–1009
說明性範例:4 blocks 接 6 blocks。目的起點為 1000,第二段必須接在 1004;主機傳的是兩筆描述子,NR=1。
閱讀相關規格圖表 → Copy:主機傳描述子,控制器搬資料

12 Dataset Management:描述資料用途與解除配置

12.01.Dataset Management 以範圍清單提供存取屬性與 deallocate 要求。解除配置不保證媒體立即抹除,也不保證之後一定讀到零;範圍描述子的 LLB 是直接的 block count,不沿用 Read NLB 的加 1 編碼。

LLB
Length in Logical Blocks;DSM 範圍描述子直接填 block 數。例如 8 blocks 填 8。
來源:NVM Command Set 1.3 §3.3.3

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

檔案刪除後,主機提供的是空間使用資訊

12.02.檔案系統知道某段舊資料不再需要,可以用 Dataset Management 的 AD 告知控制器可解除那些 LBA 的配置。控制器可以選擇對部分或全部範圍不採取解除配置動作;未解除部分的原資料不因此改變。這不是立即抹除 NAND 的保證。Sanitize 才另外定義清除舊 user data 的作業與完成狀態。

一份清單有幾段,每段有多長,是兩個數

12.03.命令 NR 表示範圍描述子數減 1;每筆描述子長 16 bytes。描述子內 SLBA 是起點,LLB 是直接的 block count。2 筆描述子分別有 4 和 6 blocks,命令 NR=1、buffer 長 32 bytes,各 LLB 填 4、6。Read 的 NLB 則用 blocks−1;不能因兩者都在描述範圍,就抄同一個原始數字。

範圍清單不變,旗標描述的意圖改變說明性範例:2 個 16-byte 描述子,NR=1,總 buffer=32 bytes。IDR、IDW 與 AD 是命令旗標,套用到提供的範圍;改旗標不會把 LLB 的 4、6 變成另一種長度。Range 0:SLBA = 200LLB = 4 → LBAs 200–203Range 1:SLBA = 500LLB = 6 → LBAs 500–505IDR = 1預期整段一起讀IDW = 1預期整段一起寫AD = 1可解除配置
說明性範例:2 個 16-byte 描述子,NR=1,總 buffer=32 bytes。IDR、IDW 與 AD 是命令旗標,套用到提供的範圍;改旗標不會把 LLB 的 4、6 變成另一種長度。

AD、IDR、IDW 選擇用途,不改變範圍長度

12.04.CDW11 bit 2 的 AD 表示可解除配置;bit 1 的 IDW 表示主機預期範圍內部分資料被寫入時,其餘部分也會一起被寫;bit 0 的 IDR 表示主機預期部分資料被讀取時,其餘部分也會一起被讀。這是在描述未來存取的關係,不會因 IDR=1 就立即執行 Read。沿用前述 4+6 blocks 的例子,CDW11=1 提供整段讀取提示,=2 提供整段寫入提示,=4 要求解除配置;NR 和 LLB 都不變。

Context Attributes 讓提示更具體

12.05.每筆描述子另有 Context Attributes。CASZE 指預期每次 Read/Write 的 block 數,0 表示未提供;WPREP 表示近期預期寫入,SWR/SRR 表示順序寫入/讀取。AL 描述延遲需求,AF 描述存取頻率。例如一段大型影音資料可帶順序讀取資訊,幫助控制器理解使用方式;這些提示仍不保證固定 NAND 位置或指定延遲。

限制值和 NVMDSMSV 決定超量要求如何處理

12.06.DMRL 限每筆命令的範圍數,DMRSL 限單段處理量,DMSL 限總處理量;這 3 個值必須同為 0 或同為非零。NVMDSMSV=0 時,全零表示不支援 DSM;非零時,超過限制會以 Command Size Limit Exceeded 中止。NVMDSMSV=1 時,全零表示沒有回報這些上限;非零時規格建議處理界線內的屬性而不處理界線外部分,且不因此回 Command Size Limit Exceeded。接受屬性與實際依提示改變媒體配置仍是兩件事。

DMRSL
Dataset Management Range Size Limit;單一 range 的 logical block 處理數量限制。
DMSL
Dataset Management Size Limit;整筆命令的 logical block 處理數量限制。

解除配置後,讀回結果要看哪兩項設定

12.07.DULBE 啟用時,讀到 deallocated/unwritten block 可回 Deallocated or Unwritten Logical Block 錯誤。未啟用時再看 DLFEAT.DRB:001b 回零,010b 回 FFh,000b 可回零或 FFh,並在重新寫入前保持規格要求的一致行為。需要可靠取得零值時,不能只假設所有裝置的 DSM 都會留下相同內容。

logical block
邏輯區塊;namespace 可定址的基本單位,其資料大小由使用中的格式決定。
DRB
Deallocated Read Behavior;指定 deallocated logical block 的資料回傳規則。
閱讀相關規格圖表 → Dataset Management:描述資料用途與解除配置

13 Write Uncorrectable 與 Write Zeroes:兩種不同結果

13.01.Write Uncorrectable 使指定範圍之後的存取呈現不可更正錯誤條件;Write Zeroes 要求規格定義的零值寫入結果。兩者都不需要主機傳送整批一般 user data,但效果完全不同。

來源: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 是錯誤標記

13.02.Write Uncorrectable 以 SLBA/NLB 選範圍,標記後,後續讀取會遇到不可校正的資料錯誤。它不需要主機提供一份「錯誤資料」buffer;成功 Write 相應位置可清除這種標記。它與 Compare 發現內容不一致也不同:前者是主動標記,後者是檢查兩份內容。

Write Zeroes 可以要求範圍,也可以要求整個 namespace

13.03.一般 Write Zeroes 用 SLBA/NLB 選範圍,DEAC=1 另要求解除配置;NSZ=1 要求整個 namespace,必須同時 DEAC=1 且該 namespace 支援解除配置後 data 與非 PI metadata 回零。裝置另以 ONCS.NSZS 表示整體零值功能支援。支援且使用 NSZ 時,SLBA/NLB 被忽略;不支援時可能只處理原本範圍,所以主機還要讀完成資訊。

LBACZ 是一個結果旗標,不是長度

13.04.NSZ=1 且命令成功時,CQE DW0 bit 0 的 LBACZ=1 表示整個 namespace 已清為零,=0 只保證命令範圍。NSZ=0 成功則表示指定範圍已清為零。失敗時可能已有部分或全部清零,不能由失敗反推所有舊內容都保留。這裡沒有「LBACZ+1 個 blocks」的公式。

限制值要配合 NVMWZSV 和 DEAC

13.05.WZSL 與非零 WZDSL 分別對應一般和 DEAC=1 的大小限制;WZDSL=0 時使用 WZSL。NVMWZSV=0 的非零限制是硬性上限,超量回 Invalid Field in Command;NVMWZSV=1 時則是建議上限,超量可能延遲。NSZ=1 的整體零值要求不受這兩個範圍大小欄位限制。

WZSL
Write Zeroes Size Limit;Write Zeroes 的大小限制,需結合 variant 能力判讀。

錯誤標記的恢復與零值寫入是不同觀察

13.06.Write Uncorrectable 對範圍標記不可校正,後續讀取會遇到相應錯誤;之後成功 Write 該位置可移除這種狀態。Write Zeroes 的用途則是讓資料具有零值語意,且不要求主機提供整段零值 buffer。要比較兩者,應問後續讀取看到錯誤還是零值結果,而不是比較「是否有主機 payload」這一項共同特徵。

閱讀相關規格圖表 → Write Uncorrectable 與 Write Zeroes:兩種不同結果

14 Namespace:建立儲存空間,再建立存取關係

14.01.Namespace Management 建立或刪除 namespace;Namespace Attachment 改變 controller 與 namespace 的連接關係。Create 成功回傳 NSID,不代表已附加;Detach 移除存取關係,不等於刪除資料對象。

來源:Base 2.4 §5.2.24, 5.2.25

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

用房間和入口理解兩種操作

14.02.把 namespace 想成已劃出的儲存空間,controller 則是主機存取它的入口。Create 產生空間,Attach 指定哪些入口連得到;Detach 只關掉某些入口,Delete 才移除 namespace。這個比喻只說明物件與連接關係,不表示 namespace 對應一組固定 NAND 顆粒。

Create 的命令與資料結構要配成一組

14.03.Namespace Management 的 SEL=0 選 Create,SEL=1 選 Delete,SEL=2 選 Restore Default。Create 的 CSI 決定如何解讀 DPTR 指向的資料;對 NVM 命令集,容量以 logical blocks 表示,格式選擇決定每 block 有多少 data 與 metadata。成功時 CQE DW0 回傳新 NSID。容量、格式與回傳 ID 分屬輸入條件和輸出結果,不能把要求的容量當成 NSID。

SEL
Select,Get Features 用來選 current、default、saved 或 supported-capabilities view 的欄位。
同一個 namespace,可有不同 controller 的附加關係說明性範例:NSID=7 已建立,A、B 原本都附加。Detach A 移除上方這一條關係,B 的關係與 namespace 物件仍在。虛線表示已移除的關係,不代表資料被刪除。Controller AController BNamespaceNSID = 7Detach AB 仍可存取
說明性範例:NSID=7 已建立,A、B 原本都附加。Detach A 移除上方這一條關係,B 的關係與 namespace 物件仍在。虛線表示已移除的關係,不代表資料被刪除。

把 NVM Create 的必要欄位一起算

14.04.NSZE 是可定址的 block 數,NCAP 是可配置容量,NCAP 不得大於 NSZE;FLBAS 選資料格式。DPS 選保護資訊,NMIC 指定共享能力,NVMSETID 與 ENDGID 選資源歸屬;有支援 storage tag 的保護格式時,LBSTM 參與 storage tag 檢查設定。例如 NSZE=NCAP=1000,選 4096-byte data 格式,資料容量就是 4,096,000 bytes。metadata 與 PI 的設定仍必須與該格式能力相容。

ENDGID
Endurance Group Identifier;辨識一個耐久度資源群組,須連同其所在結構解讀。
LBSTM
Logical Block Storage Tag Mask;配合 PI 格式,決定 Storage Tag 哪些位元參與檢查。
NMIC
Namespace Multi-path I/O and Namespace Sharing Capabilities;Identify 回報共享能力,Create payload 則提出新 namespace 的共享設定。

Attach 用 NSID 選空間,用清單選入口

14.05.Namespace Attachment 的 SEL=0 是 Attach,SEL=1 是 Detach;命令的 NSID 指定 namespace。DPTR 指向 Controller List,開頭 NUMCIDS 是 controller ID 的數量,後面每筆 CID 佔 2 bytes。若要連到 controller 3 和 5,NUMCIDS=2,清單放 3、5;這裡的 CID 是 controller identifier,與 SQE 用來追蹤命令的 Command Identifier 同名但用途不同。

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

從錯誤回到具體對象

14.06.Namespace Already Attached 表示指定的關係已存在;Namespace Not Attached 表示要移除的關係不存在。Namespace Attachment Limit Exceeded 是可附加數量限制;Namespace Insufficient Capacity 則是 Create 的容量問題。先確認操作是 Create、Attach、Detach 還是 Delete,再看錯誤,才知道應檢查空間、關係或控制器能力。

閱讀相關規格圖表 → Namespace:建立儲存空間,再建立存取關係

15 Format:先決定影響誰,再決定新格式

15.01.Format NVM 可變更媒體格式,也可依 SES 要求 secure erase。SES 決定要用 FNS 還是 SENS 判讀範圍;NSID 與 FNVMBS 再決定指定 namespace 或 broadcast 的行為。

來源:Base 2.4 §5.2.11

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.11, 文件頁 206-209, PDF 頁 232-235

格式化與建立空間是不同操作

15.02.namespace 已存在後,可以用 Format 改變它的資料格式和相關設定;Create 才是產生 namespace 的操作。Format 完成後不能再回傳受影響 namespace 原先的 user data,因此它會影響內容,不是替空間換個名稱。接下來先確認影響範圍,再選資料格式,這個順序可以避免只看 NSID 就低估影響。

先沿範圍表選一條路

15.03.SES=000b 表示沒有要求 secure erase,此時看 FNS;SES 為受支援的 secure erase 值時改看 SENS。所選的 scope bit=0 且 NSID 為指定值時,影響指定 namespace;scope bit=1 時則可能影響整個 subsystem 中的 namespaces。FFFFFFFFh 也要檢查 FNVMBS:其值為 1 表示不支援該 broadcast 用法,名稱不能取代位元定義。

格式索引、metadata 和 PI 要互相相容

15.04.LBAFU 與 LBAFL 組成 Format Index=(LBAFU<<4)|LBAFL;延伸索引的可用性受 LBAFEE 的支援及主機宣告條件約束。MSET=0 選分離 metadata,MSET=1 選延伸 LBA;PI=0 停用保護資訊,1/2/3 選對應 PI 類型,PIL 選 metadata 內 PI 的位置。先由 Identify 的 MC、DPC、LBAF 確認傳輸方式、PI 類型和 metadata 大小都支援,再要求該組合。設定值不會替一個 MS=0 的格式憑空增加 metadata。Format 成功 CQE 表示格式化已完成,之後重新取得目前格式才能正確計算 I/O buffer。

閱讀相關規格圖表 → Format:先決定影響誰,再決定新格式

16 NVM 補充:同一個 Admin 命令的資料語意

16.01.Base 定義 AER 與 Format 的共同介面;NVM §4.1.1 補充事件資訊,§4.1.2 定義 Format 的 PIL、PI 與 MSET。此處在同一份 NVM PDF 連續補完,無須再回 Base。

AER
Asynchronous Event Request;主機預先提交,讓控制器日後以命令完成回報事件的 NVMe Admin 命令。
來源:NVM Command Set 1.3 §4.1.1, 4.1.2

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

同一筆 Format,先選資料排列

16.02.MSET 決定 data 與 metadata 是否放在一起傳輸。若每 LBA 為 4096-byte data、8-byte metadata,MSET=1 使用每筆 4104 bytes 的延伸 LBA;MSET=0 則讓 data 與 metadata 分開傳輸。8 blocks 的延伸 buffer 是 32832 bytes,分離時則是 32768-byte data 加 64-byte metadata。能力與格式允許哪種排列,須由 MC 與目前 LBAF 確認。

先確認目前格式能容納設定

16.03.PIL 指定保護資訊的位置,PI 選擇保護類型或停用,MSET 選擇 metadata 傳輸方式。必須具備足夠 metadata 空間與對應能力;填入一組編碼不會自動創造原本不存在的 metadata。

事件表也有命令集專屬分支

16.04.NVM 的 Notice 補充要在 Base 已解出的 Event Type 下使用。LBA 狀態等通知值若指向本次未納入的 Log 或 Feature,只辨識其事件意義,不打開另一段完整管理流程。

閱讀相關規格圖表 → NVM 補充:同一個 Admin 命令的資料語意

17 Get Features:查目前值、預設值或支援能力

17.01.Get Features 的 SEL 選擇 current、default、saved 或 supported capabilities。SEL=011b 時,CQE DW0 的 CHANG、NSSPEC、SVBL 是能力回覆,不是該 Feature 的目前設定值。

NSSPEC
Namespace Specific,指出 Feature 是否具有 per-namespace scope 的 capability bit。
CHANG
Changeable,指出 Feature value 是否可由 Set Features 變更的 capability bit。
SVBL
Saveable,supported-capabilities result 中指出 Feature 是否可保存的 bit。
來源:Base 2.4 §5.2.12

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12, 文件頁 209-212, PDF 頁 235-238

同一個 FID 可以回答不同問題

17.02.想知道目前電源狀態設定,要查 current;想知道 reset 後的預設、先前保存的設定,或是否允許改變與保存,則是不同 SEL。先說明自己要問哪一個問題,再看回來的 DW0,才不會把能力旗標當成電源狀態編號。

三個能力位元分別解釋

17.03.CHANG 表示該功能有可變更的值,不保證目前任何值都可改;SVBL 表示是否能保存。NSSPEC=1 表示 指定的 namespace 範圍;NSSPEC=0 不等於一律 controller scope,仍需看功能的作用範圍定義或 LID 12h。

LID
Log Page Identifier;指定要讀取哪一種 log page 的編號。

資料回在 CQE 還是主機 buffer,要看 Feature

17.04.Power Management 等小型屬性可放在 CQE DW0;APST 則有資料結構,需要 DPTR 指向 buffer。CDW14 的 UUID Index 另負責選擇相應的功能定義,不是 namespace ID。一般標準功能使用其規定的選擇值;不能看見 DPTR 有位址,就假設每個 Feature 都會回一整個 buffer。

APST
Autonomous Power State Transition;依設定的閒置條件自動轉換電源狀態。

把 SEL=0 和 SEL=3 放在同一個例子

17.05.以 Power Management 為例,SEL=0 回目前設定,PS 欄位才是電源狀態編號;SEL=3 回支援能力,DW0 bit 2 的 CHANG、bit 1 的 NSSPEC、bit 0 的 SVBL 要按能力解讀。即使兩次 DW0 都剛好為 1,前者與後者仍可能在回答完全不同的問題。

PS
Power State,controller 的功耗/效能 operating point;PS0 是最高 maximum-power state。
閱讀相關規格圖表 → Get Features:查目前值、預設值或支援能力

18 Set Features:把設定連到佇列、事件與電源行為

18.01.Set Features 的 FID 選功能,SV 要求保存,命令專屬欄位或 buffer 承載設定。每個功能有各自的作用範圍、可變更條件與重設行為,不能只照同一種設定值模型解讀。

FID
Feature Identifier;指定要讀取或設定哪一項 Feature 的編號。
SV
Save,Set Features 要求 controller 同時保存所設定 value 的 bit。
來源:Base 2.4 §5.2.30.1, 5.2.30.4

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1, 5.2.30.4, 文件頁 456-514,519, PDF 頁 482-540,545

按控制對象整理 Feature

18.02.命令資源類包括 Arbitration、Number of Queues 與 PCIe 中斷設定;電源與溫度類包括 Power Management、APST、Temperature Threshold、HCTM 與 Non-Operational Power State Config;其餘設定則控制 cache、事件、時間和命令集組合。Boot 保護與 Sanitize Config 各跟自己的作業一起學。這樣分類是為了找對要改的行為,不表示同一類 Feature 可以互相代替。

HCTM
Host Controlled Thermal Management;由 host 設定溫度門檻的熱管理機制。

先懂數量編碼,再看控制條件

18.03.Number of Queues 的請求與回覆都以從 0 起算的數量編碼,但「要求幾條」與「實際分配幾條」是不同值。Arbitration 的權重控制某仲裁模式下的服務分配,不是每一筆命令附帶的 priority。Volatile Write Cache 控制快取使用行為;要保證資料持久保存,仍須結合之後的 Flush 與 Write 語意。

APST:閒置條件與 I/O 觸發的兩條路徑說明性情境:目前是 operational PS0,目標是已支援的 non-operational PS3;PS0 entry 設 ITPT=2000 ms、ITPS=3。APSTE 啟用且連續閒置超過門檻時轉入 PS3;有未完成 I/O 時不符合閒置定義。若進行中作業會使功率超過目標狀態宣告值,規格建議控制器不要自動轉入。新的 I/O 到達後,控制器返回最近的 operational state,本例是 PS0。箭頭代表事件與轉移,並非等比例時間。PS0 · operational可處理 I/OPS3 · non-operational先退出,才能處理 I/OAPSTE=1;連續閒置 > 2000 ms新 I/O → 返回最近的 operational statePS0 entry:(2000 << 8) | (3 << 3) = 0007D018h
說明性情境:目前是 operational PS0,目標是已支援的 non-operational PS3;PS0 entry 設 ITPT=2000 ms、ITPS=3。APSTE 啟用且連續閒置超過門檻時轉入 PS3;有未完成 I/O 時不符合閒置定義。若進行中作業會使功率超過目標狀態宣告值,規格建議控制器不要自動轉入。新的 I/O 到達後,控制器返回最近的 operational state,本例是 PS0。箭頭代表事件與轉移,並非等比例時間。
APSTE
Autonomous Power State Transition Enable,啟用 APST table timer 判斷的 bit。
ITPS
Idle Transition Power State,APST entry 選擇的目標 non-operational power state。
ITPT
Idle Time Prior to Transition,APST entry 的 idle threshold,單位為 milliseconds。

用狀態與時間分清電源功能

18.04.Power Management 選狀態;APST 依 idle 時間從目前狀態選一個非 operational 目標。低功耗狀態不代表可以不付延遲成本,退出與進入延遲要分開看。HCTM 的 TMT1/TMT2 是 host 給的熱管理界線;Temperature Threshold 是通知門檻;Non-Operational Power State Config 控制背景活動可否暫時超過低功耗限制,它不是另一個電源狀態編號。

Host
主機;執行作業系統並送出 NVMe 命令的一端。
TMT1
Thermal Management Temperature 1,較輕度 thermal-management threshold,單位 Kelvin。
TMT2
Thermal Management Temperature 2,較強 thermal-management threshold,單位 Kelvin。

其餘功能也要說清楚各自的結果

18.05.Timestamp 使用毫秒時間值,Get 還回報其來源與是否可能停止計時;它不能無條件當成精準主機時鐘。I/O Command Set Profile 選擇支援的命令集向量組合,不直接格式化 namespace。Software Progress Marker 的 PBSLC 是主機提供的 pre-boot software load count,不是控制器自行計算的百分比。SV 也不代表所有功能都能保存,先查該功能能力。

用一個 APST 轉移算出代價

18.06.假設目前在可處理 I/O 的 PS0,對應 APST entry 設 ITPT=2000 ms、ITPS=3,且 PS3 是支援的 non-operational state。閒置達到轉移條件時,裝置進入 PS3;新 I/O 到來時須先退出低功耗狀態,才能回到 operational state 處理工作。ENLAT/EXLAT 以 μs 表示進入和退出延遲,不能拿 ITPT 的 ms 原值直接相加。ITPT 控制何時開始轉移,EXLAT 則影響重新服務的等待。

ENLAT
Entry Latency,進入該 power state 的 maximum latency,單位為 microseconds。
EXLAT
Exit Latency,離開該 power state 的 maximum latency,單位為 microseconds。
閱讀相關規格圖表 → Set Features:把設定連到佇列、事件與電源行為

19 NVM 功能補充:閒置退出延遲、LBA 用途與原子性

19.01.本篇只補充 FID 02h、03h、0Ah:Power Management 的 NVM 行為、LBA Range Type 及 Write Atomicity Normal。LBA 用途描述不會自行建立分割區,DN 不會放大掉電原子性保證。

來源:NVM Command Set 1.3 §4.1.3.1, 4.1.3.2, 4.1.3.4

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

NVM 的 IIELL 以特定 Read 工作量作為基準

19.02.Power Management 的 Idle I/O Exit Latency Limit 是閒置控制器恢復處理 I/O 的額外延遲限制。若延遲依命令種類或長度而變,NVM 用讀取 NPWG 所指 block 數的 Read 當基準。更大的 Read 或 Copy 可能超過這個限制;因此它不是所有 I/O 的總延遲保證,也不是工作負載 hint 的另一種寫法。

LBA Range Type 是一份有長度的資料結構

19.03.Set 的 CDW11.NUM 是描述子數減 1;Get 忽略請求中的 NUM,改由 CQE.NUM 回報有效描述子數減 1。每筆 64-byte 描述子包含 Type、Attributes、SLBA、NLB 與 GUID;這裡 NLB 也是 block 數減 1,與 DSM 的直接計數 LLB 不同。Type 描述用途,Attributes 補充覆寫或可見性資訊,GUID 辨識用途實體。它不會替主機建立檔案系統。

DN=1 放棄正常原子單位,仍保留掉電原子單位

19.04.DN=0 時,控制器須遵守適用的 AWUN/NAWUN 和 AWUPF/NAWUPF;DN=1 時,主機表示不要求正常操作的 AWUN/NAWUN,只要求掉電的 AWUPF/NAWUPF。若有效正常單位為 8 blocks、掉電單位為 1 block,DN=1 就不能再用正常的 8-block 單位主張保證。FUA 或 Flush 不會恢復這個被放棄的要求。

原子寫入單位也採數量編碼

19.05.AWUN/AWUPF 與 namespace 對應值用 block 數減 1 表示單位;例如有效 atomic unit 原值為 7,就是 8 blocks。先判斷使用 controller 還是 namespace 的能力,再檢查 boundary 與 DN 的設定。掉電使用的單位與正常操作單位可能不同;不能把 AWUN 的 8 blocks 直接當成 AWUPF 的保證。

閱讀相關規格圖表 → NVM 功能補充:閒置退出延遲、LBA 用途與原子性

20 PCIe 功能:中斷通知與借出的主機記憶體

20.01.Interrupt Coalescing 與 Interrupt Vector Configuration 調整完成通知;HMB 讓控制器使用主機提供的記憶體。中斷設定不改寫 CQE 的完成語意,HMB 也不等於主機把記憶體所有權永久交出去。

HMB
Host Memory Buffer,由 host 配置並在 enable 期間交由 controller 專用的 volatile memory ranges。
來源:Base 2.4 §5.2.30.2

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.2, 文件頁 514-519, PDF 頁 540-545

完成寫入和主機收到中斷有時間差

20.02.控制器可以先把 CQE 寫入 Completion Queue,再依中斷聚合規則發通知。TIME 和 THR 一起控制聚合條件;某 vector 的 CD 可以關閉該 vector 的 aggregation。因此,看到較少中斷不能推論較少命令完成。

HMB 要同時提供總量與配置清單

20.03.HMDL 指出每塊主機記憶體的位置和大小。HSIZE 使用 controller memory page 為單位,HMDLEC 是描述子數量;HMDL 位址和每個 BADD 都要符合對齊要求。總頁數、描述子數與 byte 位址是三種不同數量,不能混著填。

HMDLEC
Host Memory Descriptor List Entry Count,HMDL 中有效 entries 的數量。
HSIZE
Host Memory Buffer Size,以 CC.MPS memory-page units 表示的 HMB 總大小。
BADD
Buffer Address,HMB descriptor 中依 CC.MPS 對齊的 memory-page address。
HMDL
Host Memory Descriptor List,連續存放 16-byte HMB descriptors 的 host-memory array。

MR 說明這份記憶體是不是原來那一份

20.04.EHM 決定是否啟用 HMB;MR=1 表示回傳先前提供的主機記憶體及保留內容。控制器可利用仍有效的內容恢復使用,前提是主機確實保留原配置和內容。重新分配一塊同樣大小的空白記憶體,不符合「歸還原記憶體」的意思。

EHM
Enable Host Memory,啟用或停用 controller 使用 HMB 的 bit。
MR
Memory Return,表示 host 歸還完全相同的舊 HMB size、addresses、descriptors 與 contents。

停用 HMB 的 CQE 是回收記憶體前的界線

20.05.主機用 Set Features FID 0Dh、EHM=0 要求停用 HMB,不能在命令仍未完成時就覆寫或回收原記憶體。成功完成停用後,控制器不再存取先前提供的 HMB,主機才可重新利用。MR=1 表示提供先前那份記憶體及保留內容以便重用;新分配或已更動的內容不能冒充未變的舊 HMB。

閱讀相關規格圖表 → PCIe 功能:中斷通知與借出的主機記憶體

21 Abort:要求中止與確認中止是兩件事

21.01.Abort 用 SQID 與 CID 指定原命令。Abort 的成功 CQE 不保證原命令已立即中止;IANP 和原命令的 CQE 必須分別判讀。

IANP
Immediate Abort Not Performed;1 表示沒有執行立即中止,0 表示已執行。
SQID
Submission Queue Identifier,辨識 command 所屬 SQ 的數值。
來源:Base 2.4 §5.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.1, 文件頁 181-182, PDF 頁 207-208

先找對命令

21.02.CID 只在一條 Submission Queue 內辨識命令,所以 Abort 必須同時給出原命令的 SQID。若 SQ 3 和 SQ 8 都有 CID 7,兩者是不同要求。Abort 本身也是一筆新 Admin 命令,有自己的 CID,不能把它和要中止的 CID 混用。

立即中止有明確的完成界線

21.03.控制器若執行 immediate abort,發出 Abort 的 CQE 之後,原命令除了發出自己的 CQE 外,不得再存取主機記憶體或造成規格列出的狀態與媒體變動。若無法保證這條界線,就不能回報已立即中止。這比「已收到停止要求」更強。

IANP=1 之後要看什麼

21.04.IANP=1 表示沒有執行立即中止,可能是找不到命令、命令已完成,或尚無法停止;控制器仍可能稍後執行 deferred abort。最後要讀原命令 CQE 的 status,才能判斷它是否以 Command Abort Requested 結束。ACL 則限制同時尚未完成的 Abort 數量,與原命令所在 SQ 的深度不同。

用時間線決定 buffer 何時還在使用

21.05.在主機送出 Abort 與收到其 CQE 之間,原命令可能剛好正常完成,兩筆完成回覆也可能前後交錯。先以 SQID/CID 對回原命令,再看 IANP 與原命令結果。沒有 immediate abort 保證且原命令尚未結束時,不能將原 data buffer 交給新用途,否則新資料可能與舊命令的存取重疊。

閱讀相關規格圖表 → Abort:要求中止與確認中止是兩件事

22 AER:讓事件找到接收它的主機

22.01.主機先提交 Asynchronous Event Request,控制器再以完成這筆命令的方式回報事件。事件類型、事件資訊、相關 LID 與 Event Specific Parameter 共同決定後續該讀什麼。

來源:Base 2.4 §5.2.2

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2, 文件頁 183-191, PDF 頁 209-217

這是一張先留下來的接收單

22.02.AER 不像 Read 那樣提交後立刻等資料。主機先提供尚未完成的 AER,事件發生時控制器才完成其中一筆。沒有事件時長時間不完成是正常行為,因此規格說主機不應替它設定一般命令逾時。AERL 是可同時保留的數量限制。

先解事件類型,再解事件值

22.03.同一個 Event Information 數值,在不同 Asynchronous Event Type 下代表不同事情。Figure 151 的 DW0 決定事件類型、資訊與 Log Page Identifier;Figure 152 的 DW1 則是該事件定義的額外參數。後面的 Error、SMART、Notice、Immediate、One Shot 表都是沿這個分支讀,不能把所有 00h 當成同一事件。

通知與取得完整紀錄分兩步

22.04.一般事件回報後,同類事件會被遮蔽,直到主機依規則讀取相應 Log Page 清除事件。Get Log Page 的 RAE=1 保留事件,RAE=0 在成功讀取時依規則清除;讀取失敗不清除。Immediate 與 One Shot 有不同處理規則,不能把一般事件的流程直接套上去。控制器重設還會終止未完成 AER,而不替那些要求回 CQE。

RAE
Retain Asynchronous Event,Get Log Page 是否保留相關 asynchronous event 的 selector。

把事件參數當成有型別的資料

22.05.電壓事件用 VSENT 選感測器,IVM 要配該感測器的 VOLSS 倍率才是 Volts;電力事件用 PMT 選量測類別,IPS 與 IPV 一起換成 Watts。Controller Data Queue 事件的 CDQID 則是佇列 ID,不是量測值。先從 AET/AEI 選到正確格式,再解 DW1;同一個 32-bit 數字不能跨事件直接比較。

AEI
Asynchronous Event Information;由 AET 選定的事件類型決定此值的意義。
AET
Asynchronous Event Type;先選事件類型,再在該類型內解讀事件資訊。

用一個狀態變化接上查詢流程

22.06.假設 namespace 的能力改變,控制器用 Notice 完成一筆 AER。主機由 DW0 找到事件種類與相應 Log,讀到變動的對象後,再重新 Identify 那些 namespaces。AER 負責告訴主機有變化,Log 協助找對象,Identify 提供更新後的能力;三份資料不是重複的同一份狀態。

一般事件:通知與取得完整紀錄分兩步
  1. 主機先提交 AER,讓控制器保有可完成的要求。
  2. 事件發生:控制器完成 AER,帶回 AET/AEI/LID。
  3. 主機讀相應 Log,確認事件內容與有效欄位。
  4. 依事件規則清除通知,並維持需要的 outstanding AER。
這條流程適用於相應的一般事件;Immediate 與 One Shot 的例外在正文分開說明。
閱讀相關規格圖表 → AER:讓事件找到接收它的主機

23 Log:先定位紀錄,再解讀紀錄裡的證據

23.01.本單元整理 LID 00h、01h、02h、03h、04h、05h、12h、24h;06h、07h、08h、15h、81h 配合相應作業另行教學。Get Log Page 的長度、位移與事件保留是共同機制;各 Log 的範圍、單位與有效條件由其資料結構決定。

來源:Base 2.4 §5.2.13, 5.2.13.1.1–5.2.13.1.6, 5.2.13.1.18, 5.2.13.1.33, 5.2.13.2, 5.2.13.4

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, 5.2.13.1.1–5.2.13.1.6, 5.2.13.1.18, 5.2.13.1.33, 5.2.13.2, 5.2.13.4, 文件頁 212-229,276-278,301-302,319,336, PDF 頁 238-255,302-304,327-328,345,362

先分清四種紀錄用途

23.02.LID 00h 告訴主機有哪些 Log 可讀;01h 與 02h 分別提供個別錯誤紀錄與健康統計;03h、04h 用來更新 firmware 與 attached namespace 的認識;05h 和 12h 說明命令及 Feature 的支援與影響;24h 回報製造商預設配置狀態。不要把能力清單、歷史錯誤與目前設定混成同一份資料。

長度、位移和表格索引不能互換

23.03.NUMDU:NUMDL 是從 0 起算的 Dword 數量,資料長度為 (NUMD+1)×4 bytes。OT=0 時 LPO 是 byte offset;OT=1 時是該 Log 定義的 index,必須先確認 IOS。譬如 entry 7 是第 8 個項目,位移 7 bytes 則是離開開頭 7 bytes,兩者毫無必然對應。

Dword
Dword(Double word);32 bits,也就是 4 bytes。對比 word=16 bits;例如 zero-based dword count=3 代表 4 個 Dwords,也就是 16 bytes。
NUMDL
Number of Dwords Lower,Get Log Page 的 NUMD 低 16 bits。
NUMDU
Number of Dwords Upper,Get Log Page 的 NUMD 高 16 bits。
NUMD
Number of Dwords,0's-based transfer dword count;實際 bytes = (NUMD + 1) × 4。

把 SMART 的計數換成有意義的單位

23.04.Composite Temperature 以 Kelvin 編碼,300 K 約為 26.85 °C。Data Units Read/Written 採每單位 1000 個 512-byte units 的累計表示,數值向上取整;讀到 2 不是只傳了 2 個 LBA,也不是保證剛好 1,024,000 bytes。Host Read/Write Commands 是命令計數。相同的命令次數可以對應很不同的資料量;這些欄位也不是 NAND 實際寫入次數。

清單變動與命令影響要轉成不同動作

23.05.LID 04h 列出自上次讀取後有變動的 attached namespace 資訊;它不是 active namespace 的完整清單。LID 05h 把 CSUPP 的支援能力與 LBCC、NCC、NIC、CCC 的內容或能力變化分開;知道執行某命令可能改變 namespace 能力,就要在成功後重新取得相關 Identify 資料。Self-test、Boot、Telemetry 和 Sanitize 的 Log 使用相同傳輸機制,但各自的有效狀態、長度與時間背景不同。

閱讀相關規格圖表 → Log:先定位紀錄,再解讀紀錄裡的證據

24 NVM Log 補充:把數值換回資料範圍與計數

24.01.NVM §4.1.4.1 補充 Error Information 的 User Data,§4.1.4.2 補充 SMART/Health 的 NVM 計數語意。這些是既有 LID 01h、02h 的補充,不是兩個新的 Log。

來源:NVM Command Set 1.3 §4.1.4.1, 4.1.4.2

來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.1, 4.1.4.2, 文件頁 76, PDF 頁 76

錯誤位置要同時有有效旗標和數值

24.02.Base 的 Error Information 結構先用 SQID、CID、status、NSID 區分命令和錯誤;NVM 的 User Data 補充讓部分錯誤指向 logical block。相關資訊有效時,Error Information 的 LBA 指失敗的最低 LBA;不能把無效欄位的零值當成 LBA 0 損壞。這個最低位置規則與 Self-test 的 Failing LBA 不同,後者是測試發現的失敗位置,未要求是最低位址。

健康計數不是目前檔案大小

24.03.Data Units Read/Written 累計的是規格定義的傳輸量;Host Read/Write Commands 累計的是特定命令類別。兩種計數不同,不能把一次命令當成一個固定長度的 data unit,也不能用它直接推論實體 NAND 的寫入放大量。

用兩次快照計算工作負載,不把累計當瞬間值

24.04.假設兩次 SMART 相隔 10 秒,Host Write Commands 相差 100,Data Units Written 相差 10。可以說這段時間新增約 100 筆命令和以 512,000 bytes 為單位的流量計數,但單位的向上取整會影響短區間精度。不要用單次累計值當作當下 IOPS,也不要把 Data Units Written 當成實體 NAND 寫入量。

IOPS
Input/Output Operations Per Second;每秒 I/O 操作數,與每秒傳輸 bytes 的頻寬不同。
閱讀相關規格圖表 → NVM Log 補充:把數值換回資料範圍與計數

25 Device Self-test:從啟動要求到檢查結果

25.01.Device Self-test 的命令完成表示已處理啟動或中止要求;背景作業進度與結果要從 LID 06h 分別讀取。STC 選動作,NSID 選測試對象,結果欄位的有效旗標決定哪些資訊可用。

LID 06h
Device Self-test Log Page 的 identifier 06h;同時包含 current operation 與 20 筆歷史結果。
STC
此縮寫有多種用途:I/O 的 Storage Tag Check 控制保護檢查;Device Self-test 命令的 Self-test Code 選測試動作;Self-test 結果的 Status Code 則補充失敗狀態。先看所在結構,再解讀數值。
來源:Base 2.4 §5.2.6, 5.2.13.1.7

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, 5.2.13.1.7, 文件頁 199-201,230-232, PDF 頁 225-227,256-258

先確認能力,再決定要測誰

25.02.Identify Controller 的 OACS 表示是否支援 Device Self-test;DSTO 說明可同時執行作業的範圍,EDSTT 提供 extended test 的估計時間。NSID=0 只選控制器本身;一般 NSID 選控制器及指定 namespace;FFFFFFFFh 選控制器及測試開始時可存取的 attached namespaces。Host-Initiated Refresh 不使用 NSID 選對象。

用 STC 選動作,不用測試時間猜動作

25.03.CDW10 的 STC=1 啟動 short test,2 啟動 extended test,3 啟動 Host-Initiated Refresh,Eh 是廠商自訂測試,Fh 要求中止。CDW15 的 DSTP 只在 STC=Eh 時有廠商定義的用途;其他 STC 下是保留欄位。一般 NSID 若無效,回 Invalid Namespace or Format;若 namespace 存在但目前 inactive,回 Invalid Field in Command。存在與目前可存取是兩項不同判斷。

DSTP
Device Self-test Parameter,只有 vendor-specific STC=Eh 時才有 vendor-defined 語意的 CDW15。
測試啟動完成與測試結果,是兩個時點說明性範例:命令先成功,測試在背景繼續;LID 06h 的 current 欄位追蹤正在進行的作業,歷史 results 記錄已结束的作業。最前面的舊結果不會因新測試剛開始,就自動變成新測試結果。送出 extended testSTC = 2命令成功背景測試開始目前進度 50%測試仍在進行作業結束 → current = none最新 result:成功/中止/失敗
說明性範例:命令先成功,測試在背景繼續;LID 06h 的 current 欄位追蹤正在進行的作業,歷史 results 記錄已结束的作業。最前面的舊結果不會因新測試剛開始,就自動變成新測試結果。

把兩種命令衝突放到時間順序裡

25.04.已有作業時再要求 short、extended 或 refresh,新命令以 Device Self-test In Progress 結束,舊作業繼續。要求 abort 則會中止舊作業、把結果放進紀錄,並將目前作業設成沒有作業。沒有作業時收到 abort,命令成功而紀錄不變;不能把這種成功解成曾經中止過一次測試。

目前進度和最近結果可能屬於兩次測試

25.05.LID 06h 的 Current Device Self-test Operation 與 Completion 描述正在進行的作業。後面最多 20 筆 Self-test Result Structure 是歷史紀錄,最新的一筆放最前面。因此畫面可能同時顯示 extended test 進行 50%,以及前一次 short test 成功;這兩件事並不矛盾。

先確認有效性,再解讀失敗位置

25.06.一筆結果先看 DSTC 的作業種類、DSTR 的結果,再看 SEGN 指出的失敗測試區段及 POH 的時間背景。VDINFO 分別標示 NSID、Failing LBA、SCT、Status Code 是否有效。未設有效旗標的 FLBA=0 不能解成 LBA 0 損壞;有效 FLBA 提供定位線索,也不是整顆 SSD 的完整壞區清單。

VDINFO
Valid Diagnostic Information,分別 gate NSID、FLBA、SCT 與 SC 的 validity bitmap。
DSTR
Device Self-test Result,結果 entry 中表示成功、abort 或 segment failure 的 nibble。
FLBA
Failing LBA,NVM Command Set 定義為造成 self-test failure 的其中一個 logical block address。
SEGN
Segment Number,只有 DSTR=7h 時指出第一個失敗 diagnostic segment。
POH
Power On Hours,self-test result 建立時累積的 power-on hours,不含指定 low-power 時間。
SCT
Status Code Type;指定完成狀態碼所屬類別,需與 SC 一起解讀。
閱讀相關規格圖表 → Device Self-test:從啟動要求到檢查結果

26 Firmware:先看啟用選擇,再看映像怎麼送入

26.01.Firmware Image Download 傳送映像片段;Firmware Commit 依 CA 與 FS 決定保存及啟用。實際執行是先 Download 再 Commit,Spec 的編排則先介紹 Commit。

CA
Commit Action,Firmware Commit 中選擇 replace、activate 與 reset policy 的欄位。
FS
Firmware Slot,Firmware Commit 中選擇目標 slot 的欄位。
來源:Base 2.4 §5.2.9, 5.2.10

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.9, 5.2.10, 文件頁 202-206, PDF 頁 228-232

先下載,再選保存與啟用方式

26.02.Firmware Image Download 把映像分段送入控制器,Firmware Commit 才指定後續動作。一般 firmware 的 CA=0 替換 slot 但不安排啟用;CA=1 替換並安排在下次 Controller Level Reset 啟用;CA=2 以已存在的 slot 安排下次啟用;CA=3 要求支援的立即啟用。Boot Partition 另外用 CA=6 寫入、CA=7 選 active partition。先分清 firmware slot 和 Boot Partition,才知道 FS 與 BPID 哪一個欄位適用。

保存成功、待啟用、正在執行是三個時點

26.03.FS 選擇 firmware slot;FS=0 讓控制器選 slot,非零值須是受支援的 slot。FRMW 回報 slot 數、slot 1 是否唯讀、是否支援不經 reset 啟用。即使映像已保存,若回覆要求 reset,當前執行版本仍不能只由保存結果推斷。LID 03h 的 CAFS 指目前 slot,NAFS 指下次啟用的 slot,FRS1–FRS7 則存各 slot 的 revision。

LID 03h
Firmware Slot Information log page 的 identifier 03h。
CAFS
Current Active Firmware Slot,AFI 低三 bits,指出目前正在執行的 firmware slot。
NAFS
Next Active Firmware Slot,AFI bits 6:4,指出下一次 reset 後預定啟用的 slot;0 表示未排定。

每一段下載都需要長度和位置

26.04.NUMD 是從 0 起算的 Dword 數量,OFST 是從整份映像開頭起算的 Dword 位移。長度加 1,位移不加 1。片段要符合 FWUG 的粒度與對齊要求;片段重疊可能回 Overlapping Range。MUD 另外描述多個更新序列重疊的偵測,與一筆命令的傳輸長度不同。

OFST
Offset,Firmware Image Download 中以 dword 為單位的 image-relative offset。
MUD
Multiple Update Detected;Firmware Commit 回覆中的 2-bit 欄位,分別回報兩種來源的更新序列重疊偵測。
下載、保存與啟用分別改變什麼
  1. Firmware Image Download:傳送映像的各個片段。
  2. Firmware Commit:依 CA 選擇保存至 slot 與啟用方式。
  3. 需要 reset 的啟用:在指定 reset 發生後切換執行版本。
  4. Firmware Slot Information:分開查看目前執行 slot 與下次預定 slot。
下載完成、映像已保存、版本正在執行,是不同狀態。
閱讀相關規格圖表 → Firmware:先看啟用選擇,再看映像怎麼送入

27 Boot Partition:讀映像、寫映像與切換啟動來源

27.01.Boot Partition 與一般 namespace 是不同對象。LID 15h 讀取所選 partition 的資訊與內容;Firmware Commit CA=6 寫入映像、CA=7 選啟動來源;FID 85h 管理寫入保護。

來源:Base 2.4 §5.2.9, 5.2.13.1.21, 5.2.30.1.39

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.9, 5.2.13.1.21, 5.2.30.1.39, 文件頁 202-204,283-284,513-514, PDF 頁 228-230,309-310,539-540

先分清映像位置和啟動選擇

27.02.裝置的 Boot Partition 以 BPID 區分,不能用一般 Read 命令的 NSID 選取。支援情況由控制器的 Boot Partition 能力確認;active partition 表示被選為啟動來源,不等於另一個 partition 沒有有效映像。更新時可以先準備另一份映像,再決定何時切換來源。

讀 Log 時,映像前面還有 16-byte header

27.03.LID 15h 的 LSP 用 BPID 選 partition;Figure 280 的前 16 bytes 是識別、容量等資訊,Boot Partition Data 從 byte 16 開始。若要讀映像內 offset 4096 的 4096 bytes,採 byte offset 的 Get Log Page 應用 LPO=16+4096=4112,NUMD=4096/4−1=1023。這裡多出的 16 來自 Log header,與映像本身的位置無關。

LSP
Log Specific Field,意義由所選 log page 定義的 command selector。
Log 的起點與映像的起點相差 16 bytes說明性範例:每一行從自己的起點量位移,寬度不按 bytes 比例。映像 offset 4096 對應 Log LPO=4112;讀 4096 bytes 的 NUMD=1023。Log headerbytes 0–15Boot Partition Data從 Log byte 16 開始image bytes 0–4095image bytes 4096–8191image offset 0image offset 4096 → LPO 4112
說明性範例:每一行從自己的起點量位移,寬度不按 bytes 比例。映像 offset 4096 對應 Log LPO=4112;讀 4096 bytes 的 NUMD=1023。

寫好內容不會自動切換 active partition

27.04.Firmware Image Download 先送映像,Firmware Commit 的 CA=6 再將下載內容寫到 BPID 指定的 Boot Partition;CA=7 選定 active partition。這兩種操作不使用 firmware slot 的語意。先確認映像寫入成功,再決定啟動來源,才不會把「已下載」當成「已在指定 partition 保存」。

Set 和 Get 的保護值不能直接互抄

27.05.FID 85h 的 BP0WPS 位於 bits 2:0,BP1WPS 在 bits 5:3。Set 時 000b 表示該 partition 不變,001b 是 Unlocked,010b 是 Locked,011b 是 Locked Until Power Cycle。Get 回的是目前狀態,不會用 000b 表示不變;100b 表示由 RPMB 控制,不能拿來當一般 Set 值。例如只解鎖 BP1,BP0 不變,CDW11=(1<<3)=08h。

把共享限制翻成一個可觀察的情境

27.06.假設同一個 Boot Partition 由兩個 domain 共用,不能用這個 Feature 將它設成 Locked Until Power Cycle;限制的是這種鎖定方式,不是說 partition 無法讀取或完全不能使用。已由 RPMB 控制的保護也不能透過一般 Set Features 改寫。對由此 Feature 設定的保護,Controller Level Reset 不會替主機重新上鎖;power cycle 後則回到 Locked,兩種事件要分開。

閱讀相關規格圖表 → Boot Partition:讀映像、寫映像與切換啟動來源

28 Telemetry:完整取得同一次診斷資料

28.01.LID 07h 由主機要求建立 Telemetry,LID 08h 回報控制器建立的資料。讀取時要同時處理 512-byte block 邊界、累積 Data Area 範圍與 generation,避免拼接不同次擷取。

來源:Base 2.4 §5.2.13.1.8, 5.2.13.1.9

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.8, 5.2.13.1.9, 文件頁 232-237, PDF 頁 258-263

這份 Log 解決的是取得診斷材料

28.02.Telemetry header 提供資料範圍、產生資訊及原因識別;後面的診斷內容可有廠商定義的格式。知道怎樣完整取回資料,與知道廠商如何解釋每一個診斷 byte,是兩個層次。主機至少能檢查長度是否齊全、擷取版本是否一致,並保留 header 供後續解讀。

Data Area 是累積範圍,不是四塊相鄰分區

28.03.每個 block 為 512 bytes,block 0 是 header,各 Data Area 都從 block 1 開始。若 Data Area 1 Last Block=65,其資料有 65×512=33280 bytes;若 Data Area 2 Last Block=1000,Area 2 包含 Area 1,新增部分是 blocks 66–1000。不能把 65 與 1000 相加當成 Area 2 的長度。

Data Area 2 包含 Data Area 1說明性範例:Header 位於 block 0;Area 1 含 blocks 1–65,Area 2 含 blocks 1–1000。橫軸示意包含關係,不按比例。取 Area 2 時,已讀過的 1–65 不須當成另一塊相加。Headerblock 0Area 1blocks 1–65Area 2:blocks 1–1000新增部分:66–1000
說明性範例:Header 位於 block 0;Area 1 含 blocks 1–65,Area 2 含 blocks 1–1000。橫軸示意包含關係,不按比例。取 Area 2 時,已讀過的 1–65 不須當成另一塊相加。

只在開始擷取時要求建立資料

28.04.讀 LID 07h 時,CTHID=1 要求建立 Host-Initiated Data;後續分段取同一份資料時用 CTHID=0。每段都設 1,可能每次都重新擷取,最後拼出不同時間的內容。先取得 header 決定所需範圍,再分批讀取,LPO 使用 byte offset 時等於 block number×512。

用 generation 辨認資料是否在途中更換

28.05.取得資料前後核對相應 Generation Number。假設第一次 header 是 generation 7,取完 payload 後變成 8,代表中間有新擷取,不能把現有片段當成同一份完整紀錄。應重新以一致的擷取取得所需範圍。generation 是有限寬度的計數,不是永久唯一識別碼。

控制器擷取另有可用性和確認時機

28.06.LID 08h 的 TCDA 表示 Controller-Initiated Data 是否可用。要分段保留事件時使用 RAE=1,待資料已完整取得後,再依事件確認機制用 RAE=0 讀取。Data Area 4 另需裝置支援與主機的 Extended Telemetry Data Area 4 宣告;未符合這些條件時,不能只因 header 有固定欄位位置就假設 Area 4 可取。

閱讀相關規格圖表 → Telemetry:完整取得同一次診斷資料

29 Sanitize:清除要求、背景進度與最終狀態

29.01.Sanitize 依支援能力選 Block Erase、Overwrite 或 Crypto Erase;命令成功不表示背景清除已完成。LID 81h 回報狀態、進度與估計時間;FID 17h 的設定會影響要求不解除配置時的處理方式。

來源:Base 2.4 §5.1.1, 5.2.26, 5.2.13.1.38, 5.2.30.1.16

來源:NVME-BASE-2.4, Rev. 2.4, §5.1.1, 5.2.26, 5.2.13.1.38, 5.2.30.1.16, 文件頁 178-179,314-319,449-451,477-478, PDF 頁 204-205,340-345,475-477,503-504

先看能做哪一種清除,再選方法

29.02.Identify Controller 的 SANICAP 分別表示 Block Erase、Overwrite、Crypto Erase 等能力。Block Erase 透過媒體清除機制,Overwrite 以指定樣式覆寫,Crypto Erase 則使保護舊資料的金鑰無法再用。不能把一般 Write Zeroes 或 Dataset Management 的 AD 當成 Sanitize;它們的目標和完成保證不同。

把 action 和只對該 action 有效的欄位配在一起

29.03.CDW10 的 SANACT=2 是 Block Erase,3 是 Overwrite,4 是 Crypto Erase;1 用於離開 Sanitize Failure Mode,5 用於離開 Media Verification State。Overwrite 才需要用 CDW11 的 OVRPAT 指定 32-bit 樣式,並以 OWPASS 選 pass 數:1–15 就是對應次數,0 表示 16 次。OIPBP 決定 pass 間是否反轉樣式,不能把它當成增加 pass 數。

先接受要求,再由 Log 確認背景結果圖示清除的共同時間順序:SANACT 選支援方法,命令成功後背景作業繼續。SSTAT 的最終狀態才回答結果;EMVS 另可要求進入驗證狀態,不能把「清除處理結束」一律畫成回到 Idle。Sanitize 命令要求支援的方法命令成功背景作業進行LID 81h狀態與有效進度正常完成/失敗以最終狀態辨認EMVS 的驗證要求另看 SSI.SANS 狀態
圖示清除的共同時間順序:SANACT 選支援方法,命令成功後背景作業繼續。SSTAT 的最終狀態才回答結果;EMVS 另可要求進入驗證狀態,不能把「清除處理結束」一律畫成回到 Idle。

清除資料和解除 LBA 配置分開判斷

29.04.NDAS=1 要求清除後不要解除配置。若 SANICAP.NDI=1,代表禁止這種要求,此時 FID 17h 的 NODRM=0 會使命令回 Invalid Field in Command;NODRM=1 則處理清除,若成功會以 SOS=100b 告知仍發生解除配置。NDI=0 時,NODRM 不改變處理方式。解除配置是後續邏輯 block 的配置狀態,清除則是舊 user data 的保護目標。EMVS 另外要求完成清除後進入 Media Verification State;它也不是一般清除成功的同義詞。下方欄位表按支援能力、命令要求、設定、結果逐項配對。

先看 SSTAT,再決定 SPROG 是否值得換算

29.05.Sanitize 命令可在背景工作完成前就回 CQE。主機讀 LID 81h 時,先以 SSTAT 判斷目前是否正在清除,再將有效的 SPROG 換算為約 SPROG×100/65536%。例如 32768 約為 50%。狀態若是已完成或失敗,就直接解讀該狀態,不能只看進度數字宣布成功;估計時間欄位也不是成功期限。

完成、失敗與驗證狀態各有下一步

29.06.清除完成後,以 Log 的最終狀態確認結果;若進入 Failure Mode,應辨認是清除失敗狀態,不能把命令曾回成功當成舊資料已處理完。Exit Failure Mode 和 Exit Media Verification State 是不同 SANACT。讀共同命令限制表時,先選目前狀態對應的欄,再看要執行的命令,不能把 Format 期間的允許規則直接套到 Sanitize。

閱讀相關規格圖表 → Sanitize:清除要求、背景進度與最終狀態

30 Security Send/Receive:協定資料的傳遞介面

30.01.Security Send 把安全協定資料送入控制器;Security Receive 取得相應結果。SECP 選協定,SPSP 與 NSSF 的意義由該協定決定,NVMe 命令成功不等於協定內每一步都已成功。

來源:Base 2.4 §5.2.28, 5.2.29

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.28, 5.2.29, 文件頁 454-456, PDF 頁 480-482

外層傳送完成,內層還有自己的結果

30.02.Security Send/Receive 是 NVMe 傳送安全協定訊息的外層。先用 CQE 判斷這筆 NVMe 傳輸命令是否完成,再解讀所選協定的回覆。以驗證身分為例,成功取得一份回覆,內容仍可能表示驗證未通過;「收到回覆」與「驗證通過」是不同結果,不能只看外層成功。

把選擇值和 buffer 容量分開

30.03.SECP 選安全協定,SPSP=(SPSP1<<8)|SPSP0 是 16-bit 協定專屬值。NSSF 只在 SECP=EAh 時使用:SPSP=0001h 選 RPMB 用途,0002h 選 CDP authentication 用途;其他 SECP 下 NSSF 保留。Send 的 TL 是送出的 byte 長度;Receive 的 AL 是接收端配置的 byte 長度,採 INC_512=0 的編碼。256-byte 請求與 512-byte 回覆空間可分別填 TL=256、AL=512,不使用 NUMD 的減 1 編碼。

查詢支援協定,不需要先送一筆請求

30.04.SECP=00h 的 Receive 是列出支援安全協定的查詢,沒有對應的先前 Send。其他安全交換可能由一筆或多筆 Send 形成回覆,配對方式由所選協定定義;不能把全系統最後送出的 Send 一律當成這份回覆的來源。

重設之後,先前待取的回覆可能已不存在

30.05.Security Receive 的待取資料可能不會跨 communication loss 或 Controller Level Reset 保留。例如 Send 已完成,主機尚未取回結果時發生 controller reset;恢復後不能保證 Receive 還能拿到先前那份資料。主機要依所選協定重新建立交換狀態,而不是沿用 reset 前的回覆假設。這是資料可能失效的具體時點。

閱讀相關規格圖表 → Security Send/Receive:協定資料的傳遞介面

31 讀懂本篇的規格圖表

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

圖表組 01 · 先分清管理命令與資料命令 · 2 張圖表

31.02.Figure 143 只讀本篇保留的命令列;Figure 144 讀 Format 與 Sanitize 狀態欄及本篇保留的列。先辨識命令集,再辨識狀態限制。

回到本節的解釋與範例

命令集、方向與狀態是三次判斷

31.03.先選 Admin 或 I/O,再看本篇保留的 opcode 列;支援與目前狀態允許的操作分開檢查。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
Opcode function/Data Transfer/NSID UsedOpcode 低位元描述傳輸型態,但仍需看完整 opcode 和所屬命令集;NSID 的使用由該命令定義。Admin 02h 與 I/O 02h 同值不同義;Flush 沒有一般 user-data payload。
Format 進行中的允許命令列讀 Figure 144 的 Format 欄及本篇保留命令的額外限制;正文保留 may/should 的要求強度。Format 與其他 namespace 操作衝突時,要按是否已在執行及回覆條件分別解釋。
來源:Base 2.4 §5 · Base 2.4 §5.1.1 · Base 2.4 §7

來源:NVME-BASE-2.4, Rev. 2.4, §5, Figure 143, 文件頁 176-177, PDF 頁 202-203

來源:NVME-BASE-2.4, Rev. 2.4, §5.1.1, Figure 144, 文件頁 178-179, PDF 頁 204-205

來源:NVME-BASE-2.4, Rev. 2.4, §7, Figure 645, 文件頁 564, PDF 頁 590

Base Figure 143 · Opcodes for Admin Commands

一句話重點

Base143-1Opcode 必須連同 Admin 命令集、傳輸方向與 NSID 用法判讀;本篇只讀保留命令的列。

來源:Base 2.4 §5

來源:NVME-BASE-2.4, Rev. 2.4, §5, Figure 143, 文件頁 176-177, PDF 頁 202-203

用例子讀懂

Base143-2Admin 02h 讀 Log,I/O 02h 讀資料;兩者數值相同,但所屬命令集不同。

Base Figure 144 · NVM Subsystem Sanitize Operations and Format NVM Command – Admin

一句話重點

Base144-1同一命令在 Format、Sanitize 各作業狀態下,可能有不同執行限制。

來源:Base 2.4 §5.1.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.1.1, Figure 144, 文件頁 178-179, PDF 頁 204-205

用例子讀懂

Base144-2先選 Format 欄或目前的 Sanitize 狀態欄,再找保留命令列及註記。支援該 opcode 只證明有這項能力,不保證目前狀態允許使用。

圖表組 02 · Identify:建立控制器、namespace 與能力的地圖 · 25 張圖表

31.04.Figure 332–337 先教查詢的選擇值;338–358 按保留的 CNS 讀其結構。長表分組講,清單先找 count/起始 ID,描述子先找 type/length。

回到本節的解釋與範例

Identify 的結構選擇與目標選擇

31.05.把主機的一句查詢拆成 CNS、CSI、NSID/CNTID/CNSSID,再確認 4096-byte 回覆用哪張表解讀。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
DPTR/4096-byte bufferIdentify 結構大小固定;使用 PRP 時本節不允許把 DPTR 當 PRP List。能放 4096 bytes 不等於地址與跨 page 配置一定符合要求。
CNS/CNTIDCNS 決定結構;只有相應操作使用 CNTID,不使用時 host 清為 0。CNS=02h 讀 active NSID list,不把 NSID 填成 CNTID。
CSI/CNSSIDCSI 選命令集,CNSSID 是 CNS 專用識別碼。未使用欄位按該處規則處理。NVM Command Set 的 CSI=00h;NVM Set ID 與 CSI 不同。
UIDX指定 UUID 選擇機制的索引,並非 namespace ID。本篇不展開排除的 UUID List。標準格式的查詢不任意選一個非零 UIDX。
CNS applicability/scope依保留 CNS 列確認哪些選擇欄位有效;未使用回覆空間按規格清零。4096 bytes 的尾端零值不自動構成更多有效 entries。
UIDX
UUID Index,指向 UUID List 位置的 index;0 表示未指定 UUID。
來源:Base 2.4 §5.2.14.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.1, Figure 332, 文件頁 336, PDF 頁 362

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.1, Figure 333, 文件頁 337, PDF 頁 363

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.1, Figure 334, 文件頁 337, PDF 頁 363

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.1, Figure 335, 文件頁 337, PDF 頁 363

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.1, Figure 336, 文件頁 338-339, PDF 頁 364-365

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.1, Figure 337, 文件頁 340, PDF 頁 366

Base Figure 332 · Identify – Data Pointer

一句話重點

Base332-1Identify 的 DPTR 指向固定大小的結果 buffer;使用 PRP 時本節不允許以 PRP List 取代該指標。

來源:Base 2.4 §5.2.14.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.1, Figure 332, 文件頁 336, PDF 頁 362

用例子讀懂

Base332-24096-byte 結構最多跨一個 page boundary;不能因為其他命令支援 PRP List,就把同一種配置直接套用到 Identify。

Base Figure 333 · Identify – Command Dword 10

一句話重點

Base333-1CNS 決定回傳結構種類,CNTID 只在指定的 Identify 操作中用來選 controller。

來源:Base 2.4 §5.2.14.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.1, Figure 333, 文件頁 337, PDF 頁 363

用例子讀懂

Base333-2查不使用 CNTID 的 CNS 時,主機依規格將 CNTID 清為 0,而不是把 namespace 的 NSID 填到那裡。

Base Figure 334 · Identify – Command Dword 11

一句話重點

Base334-1CSI 選命令集,CNSSID 的意義則由 CNS 決定;兩個欄位不能互換。

來源:Base 2.4 §5.2.14.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.1, Figure 334, 文件頁 337, PDF 頁 363

用例子讀懂

Base334-2查 CNS=04h 時,低 16 bits 用作 NVM Set 清單的起始識別碼;不能把那個值解成 CSI。

Base Figure 335 · Identify – Command Dword 14

一句話重點

Base335-1UIDX 是 Identify 的 UUID 選擇欄位,不是回傳結構中的 namespace ID。

來源:Base 2.4 §5.2.14.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.1, Figure 335, 文件頁 337, PDF 頁 363

用例子讀懂

Base335-2一般標準結構的查詢不應隨意填入一個 UUID Index;本篇不展開已排除的 UUID List。

Base Figure 336 · Identify – CNS Values

一句話重點

Base336-1CNS 表同時說明回傳哪一種結構及哪些目標欄位參與查詢;只使用本篇保留的入口。

來源:Base 2.4 §5.2.14.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.1, Figure 336, 文件頁 338-339, PDF 頁 364-365

用例子讀懂

Base336-2CNS=05h 要配合命令集選擇;CNS=02h 回傳目前可存取的 NSID 清單,不能把前者的結構套在後者。

Base Figure 337 · Command Set Identifiers

一句話重點

Base337-1CSI 指定 namespace 使用哪一套 I/O Command Set。

來源:Base 2.4 §5.2.14.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.1, Figure 337, 文件頁 340, PDF 頁 366

用例子讀懂

Base337-2CSI=00h 對應 NVM Command Set;這個數值不是 NSID,也不是某個 Read 操作碼。

把 Identify Controller 的長表分成能力群組

31.06.同一個 4096-byte 結構包含多種能力,按要完成的工作分組看;能力和當前設定分開,保留欄位不當成支援證據。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
VID/SSVID/SN/MN/FR/VER裝置身分、型號、firmware revision 與規格版本是不同識別資料;FR 是 ASCII revision。兩台同型號裝置仍有不同 SN;VER 也不是 firmware slot 編號。
OACS/ONCS/LPA/OAES分別查 Admin 能力、NVM 選用命令、Log 能力及事件能力;只看使用的位元。支援 Compare 不保證也支援 Copy,LPA 的 offset 支援不保證所有 Log 都支援 index offset。
ACL/AERL/ELPEAbort、AER 與 Error Log entry 上限各自使用零起算編碼。原值 3 分別代表該類資源 4 筆,不代表三種資源可互相共用。
MDTS/memory page 基準/SQES/CQESMDTS 非零時以最小 memory page 大小乘 2^MDTS 限制傳輸;SQES/CQES 以指數描述 entry 大小。最小 page 4096 bytes、MDTS=5 → 128 KiB;這不是 128 個 LBA。
NN/MNAN/CNTLID/NSETIDMAX/ENDGIDMAX數量、identifier 上限與目前控制器識別不同;配合各清單確認實際存在的對象。NN 非零不代表每個 1 到 NN 的 NSID 都 active。
FRMW.NOFS/FFSRO/FAWR/SMUD/FWUG/MTFA/MPTFAWR分別回答 slot 數、唯讀、無 reset 啟用、重疊偵測、片段粒度及時間限制。FWUG 處理片段大小與對齊,不是 slot 容量;MTFA 與 MPTFAWR 的觀察時間不同。
FNA.FNS/SENS/CES/FNVMBS範圍、erase 能力與 broadcast 限制分別用在 Format 判斷。FNVMBS=1 禁止 Format 使用 FFFFFFFFh;CES 則回答 crypto erase 支援。
HMPRE/HMMIN/HMMINDS/HMMAXD/HMB capabilities偏好量、最小量、描述子大小與數量限制是不同條件,單位按欄位定義換算。主機提供足夠總 bytes,仍可能因單筆描述子太小而不符合要求。
NPSS/PSD.MP、MPS/ENLAT/EXLAT/NOPSNPSS 是零起算的電源狀態數;MP 配 MPS 得到功率,進入/退出延遲與能否處理 I/O 分開。5 個狀態的 NPSS=4;狀態 4 不代表 4 W。
RRT/RRL/RWT/RWL/IDLP、IPS/ACTP、APW、APSrelative 指標只能比較相對表現;idle/active power 配自己的倍率與工作負載條件。RRL 的相對排名不能直接轉成 μs 延遲,APW 也不是 watts 數值。
MTFA 等 time values/Time Scale先確認數值欄位使用的單位或 scale,再換算時間。不能把一個使用 100 ms 的欄位與另一個使用 μs 的原值直接比較。
HCTMA/MNTMT/MXTMT/WCTEMP/CCTEMP/temperature sensors熱管理能力、允許的管理範圍、警告/臨界條件及感測器資料各自使用。TMT1/TMT2 不能超過對應允許範圍,也不能把 warning temperature 當成 PS 編號。
IVMSR.VSRV、VSRS/VOLSS/PIT/PISL/PISV感測器採樣間隔、量測倍率和供電輸入身分分開讀;僅用來解本篇保留的事件參數。VSRS 算時間,VOLSS 算電壓;PISL 辨別供電輸入,不是量測數值。
OACS.Device Self-test/DSTO.SDSO/EDSTTOACS 表支援;SDSO=0 是每 controller 同時 1 個作業,=1 是整個 subsystem 同時 1 個;EDSTT 是 extended test 估計分鐘數。同一 subsystem 的兩個 controllers 能否各測一次,要看 SDSO,不是只看有兩條 Admin SQ。
SANICAP/NDI/NODMMAS/SPRRSSANICAP 分別回報各清除方法、禁止 no-deallocate 的條件、媒體是否可能受修改,以及 Purge 要求支援。支援 Crypto Erase 不表示也支援 Overwrite;NDI=1、NDAS=1 還需配 NODRM 決定拒絕或警告。
HMMINDS
Host Memory Buffer Minimum Descriptor Entry Size,每個可用 descriptor 的最低 4 KiB-unit 大小。
MPTFAWR
Maximum Processing Time for Firmware Activation Without Reset,立即 activation 不需要 reset 時的最大處理時間。
HMMAXD
Host Memory Maximum Descriptor Entries,controller 可使用的 descriptor entry 上限。
WCTEMP
Warning Composite Temperature Threshold,Identify Controller 回報的 composite warning threshold。
HMMIN
Host Memory Buffer Minimum Size,以 4 KiB units 回報 controller 要求的最低大小。
HMPRE
Host Memory Buffer Preferred Size,以 4 KiB units 回報 controller 偏好的配置大小。
MNTMT
Minimum Thermal Management Temperature,HCTM 可設定的最低 Kelvin 值。
MXTMT
Maximum Thermal Management Temperature,HCTM 可設定的最高 Kelvin 值。
SSVID
Subsystem Vendor ID,辨識 subsystem vendor 的 PCI identifier。
ACTP
Active Power,在指定 workload 與時間窗下描述的 average active power。
CQES
Completion Queue Entry Size;以 2 的次方表示 CQE 的最小與最大 bytes。
IDLP
Idle Power,依規格 idle 測量條件描述的 typical power。
MTFA
Maximum Time for Firmware Activation,activation 可能暫停 command processing 的最長時間。
NOPS
Non-Operational State,Power State Descriptor 中指出該 state 不處理 I/O commands 的 bit。
NPSS
Number of Power States Support,以 0's-based 方式回報最高支援 power-state number。
SDSO
Single Device Self-test Operation,選擇 subsystem-wide 單一 operation 或 per-controller operation 的 bit。
SQES
Submission Queue Entry Size;以 2 的次方表示 SQE 的最小與最大 bytes。
MPS
須看所在結構:CC.MPS 是 Memory Page Size;Power State Descriptor 的 MPS 是 Max Power Scale,用來換算 MP 的功率。
PSD
Power State Descriptor,描述一個 power state 的 power、latency、operational 屬性與 relative performance。
MP
Maximum Power,一個 power state 的 sustained maximum power。
來源: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

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, Figure 339, 文件頁 383, PDF 頁 409

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, Figure 340, 文件頁 384-386, PDF 頁 410-412

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, Figure 341, 文件頁 387, PDF 頁 413

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

一句話重點

Base338-1這張長表以裝置身分、命令限制、功能能力與電源描述子建立控制器全貌;各能力只對其對應操作成立。

來源: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-2ACL、AERL、MDTS 分別限制 Abort 數量、AER 數量及資料傳輸量;把三者都當成 queue depth 會做出錯誤配置。

Base Figure 339 · Identify – Voltage Sensor Data Structure

一句話重點

Base339-1Voltage Sensor 結構同時描述採樣間隔、量測倍率與感測器對應的供電輸入。

來源:Base 2.4 §5.2.14.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, Figure 339, 文件頁 383, PDF 頁 409

用例子讀懂

Base339-2IVMSR 用 VSRV 與 VSRS 算時間;IVM 另用 VOLSS 算 Volts,不能拿時間倍率去換算電壓。

Base Figure 340 · Identify – Power State Descriptor Data Structure

一句話重點

Base340-1Power State Descriptor 同時描述功率、性能特性及進出延遲。

來源:Base 2.4 §5.2.14.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, Figure 340, 文件頁 384-386, PDF 頁 410-412

用例子讀懂

Base340-2低功率狀態可能有較長 EXLAT;挑選省電狀態時,不能只比較 MP 而忽略下一次 I/O 等待多久。

Base Figure 341 · Time Scale Values

一句話重點

Base341-1Time Scale 表把編碼對應到時間單位,必須與使用它的數值欄位一起換算。

來源:Base 2.4 §5.2.14.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, Figure 341, 文件頁 387, PDF 頁 413

用例子讀懂

Base341-2原始數值 10 若配不同 scale,實際時間不同;先選這張表的時間單位,再乘以該欄位數值。

識別描述子、資源清單與格式清單有不同形狀

31.07.清單先找個數與起始 ID,描述子先找型別與長度;各入口回報不同對象,不能共用同一個 parser 假設。

parser
資料解析器;依資料結構的長度、欄位與適用條件讀取輸入。
一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
NIDT/NIDL/NID4-byte 描述子 header 後接 NIDL bytes 的 NID;NIDT 決定其型別,CSI 型別也有自己的長度。16-byte NID 加 4-byte header,共占 20 bytes,下一筆從其後開始。
NVMSETID/NUMENT/NSETID/ENDGIDCNS=04h 用起點選清單,NUMENT 指 entry 數;entry 把 NVM Set 連到 Endurance Group。ID 是識別碼,不是配置容量;相鄰數值不代表相鄰媒體。
R4KRT/OWS/TNVMSC/UNVMSC典型讀取時間、最佳寫入 bytes、總容量與未配置容量各有自己的單位和含義。效能提示不保證每次都達到該延遲,也不改變命令最大傳輸限制。
CNS=08h 的 NSFEAT.VWCNP/NMIC/FPI/NSATTR/NSTAT/NVMSETID/ENDGIDVWCNP 表示該 namespace 沒有 volatile cache;NMIC 表共享能力;FPI 先確認支援再讀剩餘 Format 百分比;NSATTR 表目前保護狀態;NSTAT 分 I/O 影響與 ready。資源 ID 補歸屬,資料大小在 NVM 結構補充。看到共通特性位元不能直接推出每個 LBA 有 4096 bytes。
DID/NUMENT/TDC/UDC/MEGDCDomain 清單起點、項目數、總量、未配置量及單一 group 配置上限分開讀。MEGDC 不等於目前 UDC;兩者同是容量也不能互換。
ENGGID/NEGIDS/Endurance Group IDsCNS=19h 的起點與回覆數量界定有效 group identifiers。NEGIDS=2 是兩個 group IDs,不是兩個 namespaces。
IOCSC0…511/I/O Command Set Vector/IOCSCI清單列命令集組合,vector 的位元表示包含哪些命令集,Feature 用索引選組合。IOCSCI=2 指第 3 個 vector,NVMCS=1 才表示該 vector 包含 NVM。
DID
Domain Identifier,辨識 NVM subsystem 內 domain 的 identifier。
來源:Base 2.4 §5.2.14.2.3 · Base 2.4 §5.2.14.2.4 · Base 2.4 §5.2.14.2.8 · Base 2.4 §5.2.14.2.15 · Base 2.4 §5.2.14.2.16 · Base 2.4 §5.2.14.2.19

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.3, Figure 342, 文件頁 388, PDF 頁 414

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.4, Figure 343, 文件頁 388, PDF 頁 414

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.4, Figure 344, 文件頁 389, PDF 頁 415

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.4, Figure 345, 文件頁 389, PDF 頁 415

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

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.15, Figure 349, 文件頁 396, PDF 頁 422

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.15, Figure 350, 文件頁 396-397, PDF 頁 422-423

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.15, Figure 351, 文件頁 397, PDF 頁 423

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.16, Figure 352, 文件頁 397, PDF 頁 423

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.16, Figure 353, 文件頁 397, PDF 頁 423

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.19, Figure 354, 文件頁 398-399, PDF 頁 424-425

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.19, Figure 355, 文件頁 399, PDF 頁 425

Base Figure 342 · Identify – Namespace Identification Descriptor

一句話重點

Base342-1Namespace Identification Descriptor 以 NIDT 選資料型別,NIDL 給 payload 長度,再讀 NID。

來源:Base 2.4 §5.2.14.2.3

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.3, Figure 342, 文件頁 388, PDF 頁 414

用例子讀懂

Base342-2一筆 16-byte 識別資料不代表整筆描述子只有 16 bytes;前面還有 descriptor header,下一筆要從完整長度之後開始。

Base Figure 343 · Command Dword 11 - CNS Specific Identifier

一句話重點

Base343-1CNS=04h 的 CNSSID 用 NVMSETID 決定 NVM Set 清單起點。

來源:Base 2.4 §5.2.14.2.4

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.4, Figure 343, 文件頁 388, PDF 頁 414

用例子讀懂

Base343-2要繼續列舉時,應依這一節的起點條件選下一個識別碼;不要把它當成資料 buffer 的 byte offset。

Base Figure 345 · NVM Set Attributes Entry

一句話重點

Base345-1每筆 NVM Set 項目把 set 與 endurance group 識別、效能提示及總量/未配置容量連在一起。

來源:Base 2.4 §5.2.14.2.4

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.4, Figure 345, 文件頁 389, PDF 頁 415

用例子讀懂

Base345-2OWS 用 bytes;TNVMSC 與 UNVMSC 也用規定的容量單位。不能把 OWS 當成這個 NVM Set 裡的 namespace 數量。

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 資料大小則仍需命令集專屬格式資訊。

Base Figure 349 · Command Dword 11 - CNS Specific Identifier

一句話重點

Base349-1CNS=18h 用 DID 指定 Domain List 的起始 domain。

來源:Base 2.4 §5.2.14.2.15

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.15, Figure 349, 文件頁 396, PDF 頁 422

用例子讀懂

Base349-2DID 是資源識別碼,不是第幾個 4 KiB 區塊;分段列舉需按本節對起始值的規則前進。

Base Figure 351 · Domain Attributes Entry

一句話重點

Base351-1Domain 項目以 DID 配對總容量、未配置容量與單一 Endurance Group 可用上限。

來源:Base 2.4 §5.2.14.2.15

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.15, Figure 351, 文件頁 397, PDF 頁 423

用例子讀懂

Base351-2TDC 與 UDC 是同一 domain 的總量和剩餘量;MEGDC 則是另一個配置上限,不能拿它取代 UDC。

Base Figure 352 · Command Dword 11 - CNS Specific Identifier

一句話重點

Base352-1CNS=19h 的 ENGGID 選 Endurance Group 清單起點。

來源:Base 2.4 §5.2.14.2.16

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.16, Figure 352, 文件頁 397, PDF 頁 423

用例子讀懂

Base352-2ENGGID 是 Endurance Group ID;雖然同樣放在 CDW11 低位元,也不是 CNS=18h 的 Domain ID。

Base Figure 353 · Endurance Group List

一句話重點

Base353-1Endurance Group List 用 NEGIDS 說明後面有多少個有效的 group identifiers。

來源:Base 2.4 §5.2.14.2.16

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.16, Figure 353, 文件頁 397, PDF 頁 423

用例子讀懂

Base353-2清單回報三個 ID,意思是三個可列舉的 Endurance Groups,不是總容量 3 blocks。

Base Figure 354 · Identify I/O Command Set Data Structure

一句話重點

Base354-1Identify I/O Command Set 結構列出可選的命令集組合,每個 IOCSC 是一個 vector。

來源:Base 2.4 §5.2.14.2.19

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.19, Figure 354, 文件頁 398-399, PDF 頁 424-425

用例子讀懂

Base354-2IOCSCI=2 選第 3 個組合;組合裡可以有多個命令集位元,不能把組合索引當成 CSI。

Base Figure 355 · I/O Command Set Vector

一句話重點

Base355-1I/O Command Set Vector 的各 bit 表示某命令集是否在組合中選用。

來源:Base 2.4 §5.2.14.2.19

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.19, Figure 355, 文件頁 399, PDF 頁 425

用例子讀懂

Base355-2NVMCS=1 表示該組合包含 NVM Command Set;它不保證每個選用 NVM 命令都受到支援。

用清單版本、起始索引與固定 entry 大小分段讀取

31.08.先用 CNSSID 選要從第幾筆開始,再用 GENCTR 確認版本,最後按 NUMENT 讀有效 entry;PCIe 不使用的識別欄位不能硬解成連接關係。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
CNSSID/GENCTR bytes 7:0CNSSID 是從 0 起算的開始索引;GENCTR 隨清單變動遞增,相關 subsystem reset 後清 0,也可能計數回繞。第一批 CNSSID=0,第二批 CNSSID=12;兩次 GENCTR 不同時重新取得。
NUMENT bytes 15:8/最多 12 entriesNUMENT 表示本次回覆有效筆數,每筆 320 bytes;第一筆在 bytes 16–335,第二筆 336–655。NUMENT=3 只解讀 3 筆,不把 4096-byte buffer 尾端當成更多空間。
entry 的 NSID bytes 259:256/IDX bytes 319:318NSID 辨識底層 namespace;IDX 是其在可回報清單中的索引。IDX=7、NSID=3 可以同時成立:第 8 個項目記錄 ID 為 3 的空間。
entry 的 CNTLID bytes 261:260/PCIe 條件對本篇 PCIe memory-based controller,CNTLID 必須為 0,主機忽略;entry 前 256 bytes 也不作本情境的識別依據。不能以一個必須忽略的 0,推論底層 namespace 連到 controller 0。
Reserved bytes 317:262這段不是下一筆 entry,也不是可自行填入的附加索引;完整 entry 長度仍是 320 bytes。下一筆從目前 entry 起點+320 開始,不從 NSID 欄位結束處直接接著讀。
來源:Base 2.4 §5.2.14.2.20

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.20, Figure 356, 文件頁 399-400, PDF 頁 425-426

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.20, Figure 357, 文件頁 400, PDF 頁 426

Base Figure 356 · Underlying Namespace List Data Structure

一句話重點

Base356-1GENCTR、NUMENT 與起始 CNSSID 讓主機分批列舉同一版底層 namespace 清單。

來源:Base 2.4 §5.2.14.2.20

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.20, Figure 356, 文件頁 399-400, PDF 頁 425-426

用例子讀懂

Base356-215 筆項目可分 CNSSID=0 和 CNSSID=12 兩次取得,各回最多 12 筆;GENCTR 若改變,需重新取得一致版本,不能直接串接兩段。

Base Figure 357 · Underlying Namespace Entry Data Structure

一句話重點

Base357-1每筆 320-byte entry 以 NSID 識別底層 namespace,以 IDX 標示清單索引。

來源:Base 2.4 §5.2.14.2.20

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.20, Figure 357, 文件頁 400, PDF 頁 426

用例子讀懂

Base357-2在 PCIe memory-based controller 情境,CNTLID 欄位須為 0 且主機忽略。IDX=7 是清單第 8 筆,不是 NSID=7,也不是 byte offset 7。

先算兩種項目各有幾筆,再找 UUID 區起點

31.09.支援的狀態格式清單是相容性資訊。數量、格式值、選擇索引和 byte 位置各自有不同作用。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
NV byte 0/NUUID byte 1兩個直接計數分別表示版本 entry 和廠商格式 UUID entry 數;0 表示該類沒有項目。NV=2、NUUID=1 是 2 個版本項目和 1 個 UUID,不是 3 個版本。
Version entries/UUID entries版本 entry 每筆 2 bytes,從 byte 2 開始;UUID 每筆 16 bytes,從 (NV+1)×2 開始。NV=2 時,版本佔 bytes 2–5,第一個 UUID 佔 bytes 6–21。
格式值/選擇索引版本與 UUID 選擇索引從 1 起算;entry 保存的格式值不等於該 entry 的索引。第 2 筆版本 entry 可保存值 3,表示索引 2 選到格式版本 3。
來源:Base 2.4 §5.2.14.2.22

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.22, Figure 358, 文件頁 400-401, PDF 頁 426-427

Base Figure 358 · Supported Controller State Formats Data Structure

一句話重點

Base358-1NV 和 NUUID 分別決定 2-byte 版本項目與 16-byte UUID 項目的有效數量。

來源:Base 2.4 §5.2.14.2.22

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.22, Figure 358, 文件頁 400-401, PDF 頁 426-427

用例子讀懂

Base358-2NV=2 且版本值是 1、3,代表兩種支援格式。版本資料佔 bytes 2–5,UUID 區從 (NV+1)×2=6 開始,不把 NV=2 解成目前格式版本 2。

圖表組 03 · NVM Identify:用格式與上限驗算一筆 I/O · 12 張圖表

31.10.Figure 122 選入口;123–130 分容量、格式、保護與命令能力;131–133 再看格式查詢和粒度。查詢對象先確定,數值才有可比較的單位。

回到本節的解釋與範例

從指定 namespace 或格式取得一組一致的能力

31.11.先用 CNS/CSI 與目標選擇回覆,再用同一個 Format Index 配對容量、LBA Format、延伸資料與命令限制。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
CNS/CSI/NSID/FIDX/CNTID各 CNS 定義哪個目標欄位有效;Format Index 查詢與已存在 namespace 的查詢不同。FIDX=2 不是 NSID=2;需依該 CNS 的入口選擇。
NSZE/NCAP/NUSE分清可定址大小、可配置容量及已使用量,再按目前 data block 大小換算。NSZE=1000、LBADS=12 → 可定址 data 容量 4000 KiB,不是 1000 KiB。
NLBAF/FLBAS/LBAF/NULBAF清單個數與當前格式索引各有編碼;沿同一索引讀基礎及適用的延伸項目。FLBAS 選 index 2,不把其 data 大小與 index 3 的 PI 格式混用。
LBADS/MS/RPLBADS 是以 2 為底的資料 byte 大小指數,MS 是 metadata bytes,RP 是相對效能。LBADS=0Ch、MS=8 → 4096+8 bytes;RP 不直接換成 IOPS。
MC/DPC/DPS/PIC/PIF/QPIF/STSmetadata 傳輸能力、PI 能力、目前設定與延伸格式分開確認;STS 分配 tag bits。有 PI 能力不代表目前已啟用;要按同一格式檢查 tag 寬度與位置。
NSFEAT/DLFEAT/NUSE特性與解除配置後行為需要一起讀;使用量不能定位哪些連續 LBA 已配置。NUSE=600 不代表只有 LBA 0–599 有資料。
AWUN/AWUPF/ACWU/namespace 對應欄位正常、掉電與融合操作有各自上限;namespace 欄位是否取代 controller 值依能力判讀。正常 8-block 保證不能直接推論掉電也有 8 blocks。
NABSN/NABSPF/NABO原子邊界大小與起點偏移需與整段 Write 一起判斷。長度小於單位但跨到下一個邊界,仍可能沒有整筆原子保證。
ONCS/VWC/NWPC 等命令集能力逐一查使用命令的能力;volatile cache presence 與其 Flush 行為不是同一個 bit。Copy 不能只因 Compare 受支援就直接使用。
MSSRL/MCL/MSRC/Copy format capabilities單一來源長度、總複製長度、來源描述子數和格式能力各自限制 Copy。兩段都未超 MSSRL,總和仍可能超 MCL。
VSL/WZSL/WUSL/WZDSL/DMRL/DMRSL/DMSL各命令的限制依其欄位單位與 0 值規則解讀;DSM 三項分別限制範圍數、單段與總量。DMRL=2 只處理 range numbers 小於 2 的相關屬性;不表示每段只能有 2 blocks。
IOCS specific version/PIC/Extended LBA Format命令集版本與能力支援需一起確認,再讀該格式中的保護資訊。PIC.QPIFS=0 時,不能把不受支援的 QPIF 當成有效格式選項。
NABSPF
Namespace Atomic Boundary Size Power Fail;失敗條件的原子邊界大小。
NABSN
Namespace Atomic Boundary Size Normal;正常情況的原子邊界大小。
ACWU
Atomic Compare and Write Unit;controller 的 fused compare-and-write 大小限制。
QPIF
Qualified Protection Information Format;指定 qualified PI 的格式。
WUSL
Write Uncorrectable Size Limit;Write Uncorrectable 的大小限制,需結合 variant 能力判讀。
PIF
Protection Information Format;選擇 PI 格式;qualified 格式再使用 QPIF。
VSL
Verify Size Limit;Verify 的大小限制,需結合 variant 能力判讀。
來源: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.2 · 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

來源: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.2, Figure 126, 文件頁 94-96, PDF 頁 94-96

來源: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, PDF 頁 103

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

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 資料。

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 格式。

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

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

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
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

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

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

ELBAF
Extended LBA Format;與相同 index 的 LBAF 配對,補充 PI 格式與 Storage 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 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, PDF 頁 103

用例子讀懂

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;格式數量和格式索引不是同一欄。

只讀粒度資料,分清對應關係與單位

31.13.Namespace Granularity List 提供建立 namespace 時的大小與容量建議粒度;格式索引、byte 粒度與實際 block 數需要一起換算。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
NGA.GDM/ND/NGDGDM 決定 Format Index 如何對應描述子,ND 是描述子數減 1,NGD 是各筆描述子。ND=1 表示兩筆,但格式 1 使用哪一筆仍需先看 GDM。
NSG/NCG兩者以 bytes 表示大小和容量建議粒度;與 LBA 數比較前先按相應格式換算。250×4096 bytes=1000 KiB,與 1 MiB 粒度不同;不要把效率提示提高為所有命令的硬性拒絕條件。
NCG
Namespace Capacity Granularity,以 bytes 表示 controller 偏好的 NCAP allocation granularity。
NSG
Namespace Size Granularity,以 bytes 表示 controller 偏好的 NSZE allocation granularity。
來源:NVM Command Set 1.3 §4.1.5.8

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

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

NVM Figure 132 · Namespace Granularity List

一句話重點

NVM132-1Namespace Granularity List 用 GDM 決定格式到粒度描述子的對應,ND 表示零起算的描述子數量。

來源: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-2ND=1 表示兩筆描述子;要知道 Format Index 1 用哪一筆,還需先讀 GDM 的對應規則。

NVM Figure 133 · Namespace Granularity Descriptor

一句話重點

NVM133-1每筆粒度描述子的 NSG 與 NCG 分別給 namespace 大小和容量的建議 byte 粒度。

來源: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-2250 個 4096-byte blocks 是 1000 KiB;若建議粒度為 1 MiB,必須先統一 bytes 才能比較,不能把 250 直接和 1048576 比。

圖表組 04 · LBA Format List:選定同一筆格式才能配對能力 · 2 張圖表

31.14.Figure 192 先分群並換算個數;Figure 193 再決定哪些 CNS 能讀到該群。以 NLBAF=2、NULBAF=2 的 5 個格式驗算兩張圖。

回到本節的解釋與範例

格式清單的分組、個數與查詢入口

31.15.兩張圖一起回答:有多少格式、需要的格式屬哪一群、用哪個 CNS 取得它自己的能力。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
NLBAF/NULBAF/Format Index實際共用格式數為 NLBAF+1,非共用格式數為 NULBAF;索引須小於兩群實際個數總和。NLBAF=2、NULBAF=2 → 共 5 個;最大有效 index=4。
CNS 00h/05h/08h 與 09h/0Ah前三者只涉及共用能力群;後兩者可查兩群,以指定 Format Index 取得需要的結構。index 3 屬非共用群時,選 09h/0Ah;不要以 NSID=FFFFFFFFh 的共用資料代替。
LBADS/格式目前可用性支援但目前不可用的格式以 LBADS=0h 表示;先確認有效,才以 2 的次方計算大小。LBADS=0Ch 可表示 4096 bytes;不可把此處 LBADS=0h 解成可用的 1 byte。
LBAFEE/最大格式數主機未啟用格式延伸時至多 16 個,啟用時至多 64 個;本篇只交代引用前提。索引在 0–63 之內仍不充分,還必須小於該裝置實際格式總數。
來源:NVM Command Set 1.3 §5.6

來源: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 192 · LBA Format List Structure

一句話重點

NVM192-1NLBAF 用零起算表示共用能力的格式數,NULBAF 直接表示另外的非共用格式數;先換算個數再讀分組。

來源:NVM Command Set 1.3 §5.6

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

用例子讀懂

NVM192-2NLBAF=2、NULBAF=2 表示 3+2=5 個格式,索引 0–2 屬共用能力群,3–4 屬非共用群;原始值 2+2 會少算 1 個。

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

一句話重點

NVM193-1CNS 00h/05h/08h 只讀 NLBAF 群;CNS 09h/0Ah 可依 Format Index 查兩群的能力。

來源:NVM Command Set 1.3 §5.6

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

用例子讀懂

NVM193-2若 index 3 屬 NULBAF 群,先用 CNS 09h 查其 NVM Namespace 格式資料,再用 0Ah 查命令集專屬資料,不以共用的 broadcast 查詢結果代替。

圖表組 05 · I/O 佇列:先建立完成端,再接上提交端 · 13 張圖表

31.16.Figures 571–574 是 CQ,575–579 是 SQ,580–583 是刪除。比較相同位置的 QID/QSIZE,再辨認 CQ 的 IV 與 SQ 的 CQID。

回到本節的解釋與範例

佇列欄位與引用關係決定建立及刪除順序

31.17.CQ 先存在,SQ 才能透過 CQID 引用;刪除時先拆 SQ 的引用。對數量、深度及記憶體各做一次檢查。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
Number of Queues/QID/QSIZEFeature 協商可建立數量,QID 指一條 I/O 佇列,QSIZE 指該條深度。QSIZE=0 被禁止。4 條深度 64 的 SQ:數量編碼 3,各 QSIZE=63;不是 QSIZE=3。
PRP1/PC/CAP.CQRPC=1 用連續配置;PC=0 按清單配置規則,還需確認 controller 是否要求實體連續。支援一般資料 PRP List 不自動表示可建立不連續 queue。
CQ.IV/IENIV 選中斷 vector,IEN 決定這條 CQ 是否啟用中斷。IEN=0 可輪詢 CQ;它不是停用 CQE 寫入。
SQ.CQID/QPRIO/NVMSETIDSQ 引用已建立 CQ;priority 依仲裁模式使用,NVMSETID 補上資源關聯。SQ 3 和 SQ 4 共用 CQ 2,兩者仍可有各自的 priority。
Delete SQ 完成/Delete CQ 前提Delete SQ 成功時,尚無各自 CQE 的舊命令隱含以 Command Aborted due to SQ Deletion 結束;之後不再送出那些命令的完成狀態。所有引用 SQ 移除後才可刪 CQ。SQ 3 中 CID 10 已成功、11 未回,Delete SQ 成功保留 10 的結果並使 11 隱含中止;不等待 11 再回一筆。
Invalid Queue Identifier/Queue Size/Completion Queue/Interrupt Vector分開指出 ID、深度、引用或中斷選擇的問題。目標 CQ 不存在時,不要以改小 SQ depth 代替建立該 CQ。
來源:Base 2.4 §5.3.1 · Base 2.4 §5.3.1.1 · Base 2.4 §5.3.2 · Base 2.4 §5.3.2.1 · Base 2.4 §5.3.3 · Base 2.4 §5.3.3.1 · Base 2.4 §5.3.4 · Base 2.4 §5.3.4.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.1, Figure 571, 文件頁 527, PDF 頁 553

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.1, Figure 572, 文件頁 528, PDF 頁 554

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.1, Figure 573, 文件頁 528, PDF 頁 554

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.1.1, Figure 574, 文件頁 528, PDF 頁 554

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.2, Figure 575, 文件頁 529, PDF 頁 555

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.2, Figure 576, 文件頁 529, PDF 頁 555

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.2, Figure 577, 文件頁 529-530, PDF 頁 555-556

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.2, Figure 578, 文件頁 530, PDF 頁 556

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.2.1, Figure 579, 文件頁 530-531, PDF 頁 556-557

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.3, Figure 580, 文件頁 531, PDF 頁 557

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.3.1, Figure 581, 文件頁 531, PDF 頁 557

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.4, Figure 582, 文件頁 532, PDF 頁 558

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.4.1, Figure 583, 文件頁 532, PDF 頁 558

Base Figure 571 · Create I/O Completion Queue – PRP Entry 1

一句話重點

Base571-1Create CQ 的 PRP1 要配合 PC 解讀為連續記憶體基址或所需的 PRP 配置。

來源:Base 2.4 §5.3.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.1, Figure 571, 文件頁 527, PDF 頁 553

用例子讀懂

Base571-2PC=1 時,PRP1 是新 CQ 的對齊基址;不能填入另一條 SQ 的位址或一般資料 buffer。

Base Figure 572 · Create I/O Completion Queue – Command Dword 10

一句話重點

Base572-1CQ 的 QID 與 QSIZE 分別選新佇列識別碼和零起算深度,Admin Queue ID 不可當成新 I/O CQ ID。

來源:Base 2.4 §5.3.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.1, Figure 572, 文件頁 528, PDF 頁 554

用例子讀懂

Base572-2建立 QID=2、深度 64 的 CQ,QSIZE=63;QSIZE=0 被本節禁止,不代表可以建立單一 entry 的 I/O CQ。

Base Figure 573 · Create I/O Completion Queue – Command Dword 11

一句話重點

Base573-1CQ 的 IV、IEN 與 PC 分別指定中斷路徑、是否啟用中斷及記憶體是否實體連續。

來源:Base 2.4 §5.3.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.1, Figure 573, 文件頁 528, PDF 頁 554

用例子讀懂

Base573-2IEN=0 時主機可用輪詢讀 CQE;這不表示 CQ 不會收到完成項目。

Base Figure 574 · Create I/O Completion Queue – Command Specific Status Values

一句話重點

Base574-1Create CQ 的 status 將佇列 ID、深度與中斷 vector 的錯誤分開回報。

來源:Base 2.4 §5.3.1.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.1.1, Figure 574, 文件頁 528, PDF 頁 554

用例子讀懂

Base574-2Invalid Interrupt Vector 應檢查 IV 的可用範圍,不應把 QSIZE 改大來嘗試解決。

Base Figure 575 · Create I/O Submission Queue – PRP Entry 1

一句話重點

Base575-1Create SQ 的 PRP1 配合 PC 指向 Submission Queue 的記憶體配置。

來源:Base 2.4 §5.3.2

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.2, Figure 575, 文件頁 529, PDF 頁 555

用例子讀懂

Base575-2即使 SQ 和 CQ 深度相同,兩者是不同的 buffer;SQ 的 PRP1 不應直接沿用 CQ 的基址。

Base Figure 576 · Create I/O Submission Queue – Command Dword 10

一句話重點

Base576-1SQ 的 QID 與 QSIZE 定義提交端的識別與深度,並受控制器最大 queue entries 限制。

來源:Base 2.4 §5.3.2

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.2, Figure 576, 文件頁 529, PDF 頁 555

用例子讀懂

Base576-2深度 128 的 SQ 以 QSIZE=127 編碼;SQ ID 可以與另一個 CQ ID 數值相同,因兩種 ID 有不同名稱空間。

Base Figure 577 · Create I/O Submission Queue – Command Dword 11

一句話重點

Base577-1CQID 建立 SQ 到 CQ 的引用,QPRIO 選仲裁優先類別,PC 描述 SQ 的記憶體配置。

來源:Base 2.4 §5.3.2

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.2, Figure 577, 文件頁 529-530, PDF 頁 555-556

用例子讀懂

Base577-2SQ 3、SQ 4 都可填 CQID=2;CQID 不是中斷 vector,也不是下一筆 command 的 CID。

Base Figure 578 · Create I/O Submission Queue – Command Dword 12

一句話重點

Base578-1NVMSETID 指定 SQ 關聯的 NVM Set,與 SQ 的 QID 及資料命令的 NSID 不同。

來源:Base 2.4 §5.3.2

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.2, Figure 578, 文件頁 530, PDF 頁 556

用例子讀懂

Base578-2QID=3、NVMSETID=5 表示「SQ 3 關聯 set 5」,不能改寫成 namespace 5 或 CQ 5。

Base Figure 579 · Create I/O Submission Queue – Command Specific Status Values

一句話重點

Base579-1Create SQ 的 status 除 ID 和深度外,也檢查要引用的 CQ 是否有效。

來源:Base 2.4 §5.3.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.2.1, Figure 579, 文件頁 530-531, PDF 頁 556-557

用例子讀懂

Base579-2在 CQ 2 尚未建立時建立 SQ 指向 CQ 2,應看 Invalid Completion Queue,而非以為 SQ 的 PRP 記憶體太小。

Base Figure 580 · Delete I/O Completion Queue – Command Dword 10

一句話重點

Base580-1Delete CQ 以 QID 指定要移除的完成佇列,且須滿足沒有 SQ 仍引用它的條件。

來源:Base 2.4 §5.3.3

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.3, Figure 580, 文件頁 531, PDF 頁 557

用例子讀懂

Base580-2若 SQ 3 還指向 CQ 2,先刪除 SQ 3 再刪 CQ 2;不能因 CQ 暫時沒有新完成項目就直接移除。

Base Figure 581 · Delete I/O Completion Queue – Command Specific Status Values

一句話重點

Base581-1Delete CQ 區分 ID 無效與目前不允許刪除的完成佇列。

來源:Base 2.4 §5.3.3.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.3.1, Figure 581, 文件頁 531, PDF 頁 557

用例子讀懂

Base581-2QID 根本不存在與仍被 SQ 引用是不同情境;前者查 ID,後者查引用關係。

Base Figure 582 · Delete I/O Submission Queue – Command Dword 10

一句話重點

Base582-1Delete SQ 成功表示所有舊命令已明確或隱含完成,之後不再送出其完成狀態。

來源:Base 2.4 §5.3.4

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.4, Figure 582, 文件頁 532, PDF 頁 558

用例子讀懂

Base582-2SQ 3 的 CID 10 已成功,11、12 尚無 CQE;Delete SQ 3 成功時,11、12 隱含以 Command Aborted due to SQ Deletion 結束,不要再等它們各自回 CQE。

Base Figure 583 · Delete I/O Submission Queue – Command Specific Status Values

一句話重點

Base583-1Delete SQ 的命令專屬錯誤指出提交佇列識別碼無效。

來源:Base 2.4 §5.3.4.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.4.1, Figure 583, 文件頁 532, PDF 頁 558

用例子讀懂

Base583-2已刪除 SQ 3 後又用同一 QID 要求刪除,不應把失敗回覆當成原先資料命令的執行結果。

圖表組 06 · Read:把範圍、格式與主機 buffer 接起來 · 10 張圖表

31.18.Figure 50–58 按資料位置、LBA 範圍、控制與 PI 分組;Figure 59 是 Read 的完成錯誤,不與 Compare Failure 混用。

回到本節的解釋與範例

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

31.19.先依格式選交錯或分開傳輸,再由區塊數計算各緩衝區大小。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

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

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 的位數與命令位置

31.20.先確認 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 參與比對,再解釋比較結果;遮罩不是要寫入媒體的另一份資料。
來源: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

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

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

31.21.先合成起始 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 全零。
DSPEC
Directive Specific;內容由 Directive 類型決定。
DTYPE
Directive Type;指定命令使用哪一類 Directive。
CEV
Command Extension Value;內容依 CETYPE 的選擇解讀。
來源: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

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

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 必須全零。

把完成 status 放回該命令的問題

31.22.同一個狀態數字必須配合 SCT 與命令種類解讀;每張表說明該操作的特定失敗條件。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
SCT/SC/命令 Opcode先選命令與 status 類別,再到該表找原因,不能用一張表通解所有命令。Compare Failure 指內容不同;Read 無法取回資料是不同問題。
範圍/格式/能力/命令選項命令可能因範圍無效、格式不相容或所要求的選項不可用而失敗;回到對應欄位檢查。Fast Copy Not Possible 不等於所有 Copy 都不受支援。
部分處理/回覆的命令專屬資訊是否已處理部分範圍及其單位由該命令規定,不用一般的全有或全無假設取代。Copy 的來源範圍與 Write Zeroes 的已處理資訊不能共用同一個解碼公式。
SC
Status Code;指定所選 SCT 類別中的完成結果。
來源:NVM Command Set 1.3 §3.3.1.1 · NVM Command Set 1.3 §3.3.2.5 · NVM Command Set 1.3 §3.3.3.3 · NVM Command Set 1.3 §3.3.4.1 · NVM Command Set 1.3 §3.3.5.1 · NVM Command Set 1.3 §3.3.6.1 · NVM Command Set 1.3 §3.3.7.1 · NVM Command Set 1.3 §3.3.8.1

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

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

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

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

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

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

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

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

NVM Figure 59 · Read – Command Specific Status Values

一句話重點

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

來源:NVM Command Set 1.3 §3.3.4.1

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

用例子讀懂

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

圖表組 07 · Write:寫入內容、持久性與原子性分開看 · 10 張圖表

31.23.Figure 67–75 按來源 buffer→目的 LBA→控制→PI 讀;76 的 status 再對回失敗原因。FUA 與 atomicity 不用同一個圖示代替。

回到本節的解釋與範例

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。

NVM Figure 76 · Write – Command Specific Status Values

一句話重點

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

來源:NVM Command Set 1.3 §3.3.6.1

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

用例子讀懂

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

圖表組 08 · Flush:用完成界線說明持久保存 · 1 張圖表

31.24.Figure 645 只讀 Flush 列。§7.2 的重點在正文的時間先後與範圍,因此使用時間軸比另畫一張欄位表更有幫助。

回到本節的解釋與範例

Base Figure 645 · Opcodes for I/O Commands

一句話重點

Base645-1本篇從 I/O Opcode 表只取 Flush 列,與後面的 NVM 命令 opcode 一起辨識命令集。

來源:Base 2.4 §7

來源:NVME-BASE-2.4, Rev. 2.4, §7, Figure 645, 文件頁 564, PDF 頁 590

用例子讀懂

Base645-2Flush 是 I/O 命令,不因為作用是持久保存,就放到 Admin Submission Queue。

圖表組 09 · Compare:把主機提供的內容拿來比對 · 9 張圖表

31.25.Figure 23–30 按 buffer→範圍→檢查選項讀,31 對回比較失敗與其他錯誤;比較資料與 PI tag 各有用途。

回到本節的解釋與範例

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

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

用例子讀懂

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

圖表組 10 · Verify:檢查可讀性,沒有主機比對資料 · 7 張圖表

31.26.Figure 60–65 只讀 Verify 實際使用的範圍、控制與 tag,66 解完成結果;以缺少主機資料傳輸對比 Read/Compare。

回到本節的解釋與範例

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

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

用例子讀懂

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

圖表組 11 · Copy:主機傳描述子,控制器搬資料 · 12 張圖表

31.27.Figure 32–38 是命令,39–41 是描述子,42 用來源與目的對照驗算,43 解釋失敗結果。每種格式先選定,再讀其欄位。

回到本節的解釋與範例

用來源描述子、目的連續範圍與保護條件讀懂 Copy

31.28.命令給目的位置,每筆描述子給來源;資料不經主機 buffer 往返,但來源、目的和 PI 格式仍須相容。Fast Copy 和原子性另有各自條件。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
DESFMT/NR/DPTRNR 是來源描述子數減 1;DESFMT=0/2 用 32-byte entry,1/3 用 40-byte entry。DPTR 指這份清單。2 個 Format 0 entries:NR=1、payload=64 bytes;不是 2 blocks 的 user data。
DESFMT/SNSID/PI 格式0/1 不含 SNSID、來源與目的同 namespace;2/3 含 SNSID,另須主機啟用。0/2 對應 16-bit Guard,1/3 對應 32-bit 或 64-bit Guard。裝置支援 Format 2,但主機未啟用時,選 DESFMT=2 仍會回 Invalid Field in Command。
SLBA/NLB/SDLBA每段 NLB+1 是實際 block 數;目的從 SDLBA 起依來源清單順序連續安排。4 和 6 blocks、SDLBA=1000:目的先 1000–1003,再 1004–1009。
MSSRL/MCL/MSRCMSSRL 限單段來源的直接 block 數;MCL 限總 block 數;MSRC 是來源範圍數減 1 的上限。每段都小於 MSSRL,總和仍可能超過 MCL;NR 也須不超 MSRC。
FCO/NVMAFC/DNRFCO=1 要求該來源使用 fast copy;無法使用時回 Fast Copy Not Possible。DNR=0 允許重試,=1 表示主機不應重試同一要求。NVMAFC 表示 subsystem 內所有 Copy 都屬 fast copy。Fast copy 指預期不比主機 Read+Write 慢的方法;即使採用該方法,並行負載或錯誤仍可能使某次實際耗時較長。
PRINFOR/PRINFOW/PRACT讀、寫部分分別設定 PI。Format 0/1 且有 PI 時,兩邊 PRACT 必須相同;無 PI 時控制器忽略這兩個 PRINFO 欄位。同 namespace、PRACT 一邊 0 一邊 1,回 Invalid Field in Command,不能把它當成任意 PI 轉換。
跨 namespace 的 data/metadata/PI 相容性data block 大小必須相同;metadata 大小一般也相同,只有全部 metadata 都是 PI 且進行 PI 插入或移除時才有對應例外。4096-byte data 的來源不能直接 Copy 到 512-byte data 的目的;不是只把 block 數乘 8 就變成有效格式。
STCR/STCW/LBST/ILBRT/EILBRT/LBAT/LBATM來源檢查與目的產生的 tag 分開;STCR 受 STCRS 支援限制,LBTU/LBTL 組合可變寬度 tag。移到新的 SDLBA 時,不能把來源 reference tag 原值一律當成目的 reference tag;先依 PI 型別和 PRACT 決定處理。
LR/FUA/CETYPE/CEV/DTYPE/DSPECLR 與 FUA 用於寫入部分;FUA 要求目的 data 及 metadata 提交非揮發性媒體後完成。其餘選擇值分別指定 command extension 或 directive。FUA=1 仍不替另一條 SQ 的命令建立先後次序;未用的保留欄位不填自訂資訊。
NVMCSA/原子單位和邊界NVMCSA=1 把 Copy 的寫入部分當成單一 Write 套用原子規則;不是保證任何長度整筆不可分割。FFFFh 原子單位仍只表示 65536 blocks。總目的長度 12 blocks、有效原子大小 8 blocks 且從邊界開始時,可能分成 8 和 4 的原子操作;來源描述子的分段不是原子邊界。
失敗 CQE DW0/部分完成DW0 是最小編號的未成功來源範圍;其後的來源可能已部分或全部複製。ranges 0、1、2、5 成功而 3、4 未成功,DW0=3;不能推論 range 5 沒有寫入。
PRINFOR
Protection Information Read;Copy 讀取端的 PI 處理與檢查欄位。
STCR
Storage Tag Check Read;要求 Copy 讀取端的 Storage Tag 檢查。
STCW
Storage Tag Check Write;要求 Copy 寫入端的 Storage Tag 檢查。
DNR
Do Not Retry,CQE status 中提示以相同 command 重試預期不會成功的 bit。
來源: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 33, 文件頁 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 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.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

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

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

用例子讀懂

NVM43-2來源與目的發生不允許的重疊,和要求 Fast Copy 卻無法滿足,是不同條件;先依狀態找要重新檢查的部分。

圖表組 12 · Dataset Management:描述資料用途與解除配置 · 6 張圖表

31.29.Figure 44–47 先區分命令的 NR 與描述子的 LLB,48 解 Context Attributes,49 對回操作結果。

回到本節的解釋與範例

先算清單與範圍,再解讀每個提示位元

31.30.命令 flags 套用到提供的範圍,Context Attributes 描述每段的使用方式。數量、位置和提示分開解讀,才能理解控制器實際收到了什麼。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
DPTR/NR bits 7:0DPTR 指向範圍描述子;NR 是描述子數減 1,每筆 16 bytes。2 筆描述子:NR=1,payload=32 bytes;與每段 LLB 無關。
AD bit 2/IDW bit 1/IDR bit 0AD 要求可解除配置;IDW 預期範圍內部分被寫時其餘也會一起被寫;IDR 對讀取有相同整段關係。CDW11=1 是整段讀提示,=2 是整段寫提示,=4 是解除配置要求;不是傳 1、2、4 blocks。
CATTR bytes 3:0/LLB bytes 7:4/SLBA bytes 15:8這些位置相對每筆描述子起點;LLB 是直接 block 數,SLBA 是起點。第二筆的 LLB 在 payload bytes 20–23;SLBA=200、LLB=8 表示 200–207。
CASZE bits 31:24/WPREP bit 10CASZE 是預期每筆 Read/Write 的 block 數,0 表示未提供;WPREP 表示近期預期會寫入。CASZE=8 不會替實際 LLB=100 的描述子改成只有 8 blocks。
SWR bit 9/SRR bit 8分別提示順序寫與順序讀,描述使用模式,不是命令完成旗標。SRR=1 不會把範圍內容立即送到主機。
AL bits 5:40 無資訊,1 允許較長的 idle latency,2 一般延遲,3 低延遲需求。AL=3 是需求描述,不能解成 3 μs 保證。
AF bits 3:00 無資訊,1 典型,2 少讀少寫,3 常讀少寫,4 少讀常寫,5 常讀常寫;6–F 保留。唯讀查詢居多的資料可用 3 表達頻率;它不會把範圍設為唯讀。
DMRL/DMRSL/DMSL/NVMDSMSV分別限定 range number、範圍內 block offset 與累計 block offset;NVMDSMSV 區分硬性限制和可分段處理的支援行為。NVMDSMSV=0 且非零限制被超過,回 Command Size Limit Exceeded;=1 不因該限制回這個錯誤。
來源:NVM Command Set 1.3 §3.3.3 · NVM Command Set 1.3 §3.3.3.2

來源: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.2, Figure 48, 文件頁 47, PDF 頁 47

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

來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3.2, 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.3

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

用例子讀懂

NVM49-2一份清單可能每段都合法,卻因總數超過上限而不被接受;這與同一命令給出衝突屬性不同。

圖表組 13 · Write Uncorrectable 與 Write Zeroes:兩種不同結果 · 13 張圖表

31.31.Figure 77–80 讀錯誤標記命令;81–89 讀零值命令、回覆與 status。對照相同 LBA 範圍在兩種命令後的可觀察結果。

回到本節的解釋與範例

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

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

用例子讀懂

NVM80-2即使這個命令不傳入使用者資料,它仍改變目標區塊的可讀行為,因此不能因「沒有資料 buffer」就忽略唯讀限制。

把範圍零值、整體零值與回覆旗標配在一起

31.32.Write Zeroes 不傳一般的 data payload;範圍、PI 生成和是否解除配置由命令選項決定。回覆的 LBACZ 是判斷整體效果的旗標。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
SLBA/NLB/NSZ/NSZS一般使用 SLBA 和 NLB+1;支援 NSZS 且 NSZ=1 時改為整個 namespace,控制器忽略原範圍欄位。未支援 NSZS 時可能只處理原 SLBA/NLB 範圍,不能只因送出 NSZ=1 就宣稱整體清零。
DEAC bit 25/NSZ bit 23/DLFEATNSZ=1 須同時 DEAC=1,且支援 deallocated data 與非 PI metadata 回零;否則回 Invalid Field in Command。NSZ=1、DEAC=0 是無效要求;一般範圍清零不一定要求 DEAC。
LR/FUA/PRINFO/STCLR 控制重試努力程度;FUA 要求非揮發性提交後完成。Write Zeroes 的 PRCHK 必須為 000b,STC 必須清 0。不把一般 Read 的 PRCHK 檢查位元整組複製到 Write Zeroes。
CETYPE/CEV/DTYPE/DSPECCETYPE 選 command extension;DTYPE 選 directive,DSPEC 的含義由該 directive 決定。CETYPE=0 時 CDW13 低 16 bits 為保留。未使用延伸功能時不能把低 16 bits 當成自訂工作編號。
LBTU/LBTL/LBAT/LBATMtag 欄位配合所選 PI 格式;未格式化使用 PI 時控制器忽略這些 tag。LBTU 與 LBTL 合成 tag bits,不是額外的目的 LBA 起點。
LBACZ/Successful CompletionNSZ=1 且成功時,LBACZ=1 表示整個 namespace,=0 表示命令範圍;失敗則可能已有部分或全部處理。LBACZ=1 是布林結果,不表示只清 1 個 block。
WZSL/WZDSL/NVMWZSV依 DEAC 選非零 WZDSL 或 WZSL;NVMWZSV=0 的上限是硬性限制,=1 則是建議。NSZ=1 不適用這兩個範圍上限。相同大小在兩種 variant 下可分別是必須拒絕或可能延遲,不能只比較長度。
來源:NVM Command Set 1.3 §3.3.8 · NVM Command Set 1.3 §3.3.8.1

來源: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 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 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, §3.3.8.1, Figure 88, 文件頁 61, PDF 頁 61

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-1NSZ=1 的成功回覆以 LBACZ 區分整個 namespace 與原本指定範圍。

來源:NVM Command Set 1.3 §3.3.8.1

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

用例子讀懂

NVM88-2LBACZ=1 表示全部 logical blocks 已清為零;LBACZ=0 只保證命令範圍。這是旗標,沒有加 1 換成 block 數的規則。

NVM Figure 89 · Write Zeroes – Command Specific Status Values

一句話重點

NVM89-1Write Zeroes 的錯誤要連回清零、配置與保護設定。

來源:NVM Command Set 1.3 §3.3.8.1

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

用例子讀懂

NVM89-2相同 LBA 範圍可能因 PI 設定不同而不被接受;先依命令專屬狀態找條件,而非改成一般 Write 就認為語意等同。

圖表組 14 · Namespace:建立儲存空間,再建立存取關係 · 10 張圖表

31.33.Figure 442–444 把 Attachment 的對象、controller 清單及錯誤連起來;445–450 解 Management 的 SEL、CSI、Create 資料及回傳 NSID。

回到本節的解釋與範例

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

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

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
Management SEL/CSI/DPTRSEL 選 Create、Delete 或 Restore;Create 的 CSI 決定建立資料格式,DPTR 給資料位置。Management SEL=0h 是 Create,Attachment SEL=0h 是 Attach;數值相同但動作不同。
Create buffer/CSI/4096 bytesBase Figure 448 是共同布局;CSI=0 的 NVM 定義更具體,以 Figure 134 指定 Host Specified Fields,並將 bytes 512–767 用作 Placement Handle List。不能把這段仍一律當成 Base 表的保留區。NSZE/NCAP 描述 block 數,FLBAS 決定每 block 大小;整份 Create buffer 不保存那些 blocks 的 user data。
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 選擇。
DNCS
Default Namespace Configuration Status,表示目前 namespace configuration 是否等於 active firmware image defaults 的 status bit。
來源:Base 2.4 §5.2.24 · Base 2.4 §5.2.24.1 · Base 2.4 §5.2.25 · Base 2.4 §5.2.25.2

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

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

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

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

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

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

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

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

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

Base Figure 442 · Namespace Attachment – Data Pointer

一句話重點

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

來源:Base 2.4 §5.2.24

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

用例子讀懂

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

Base Figure 443 · Namespace Attachment – Command Dword 10

一句話重點

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

來源:Base 2.4 §5.2.24

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

用例子讀懂

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

Base Figure 444 · Namespace Attachment – Command Specific Status Values

一句話重點

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

來源:Base 2.4 §5.2.24.1

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

用例子讀懂

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

Base Figure 445 · Namespace Management – Data Pointer

一句話重點

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

來源:Base 2.4 §5.2.25

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

用例子讀懂

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

Base Figure 446 · Namespace Management – Command Dword 10

一句話重點

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

來源:Base 2.4 §5.2.25

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

用例子讀懂

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

Base Figure 447 · Namespace Management – Command Dword 11

一句話重點

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

來源:Base 2.4 §5.2.25

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

用例子讀懂

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

Base Figure 448 · Namespace Management – Data Structure for Create

一句話重點

Base448-1Create buffer 的實際欄位由 CSI 所選的命令集補充,不能只按 Base 共同布局解讀。

來源:Base 2.4 §5.2.25

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

用例子讀懂

Base448-2NVM 的 Figure 134 以 bytes 512–767 定義 Placement Handle List;它對這段給出更具體的規則,所以不是將 Base 的 Reserved 原樣套上。

Base Figure 449 · Namespace Management – Command Specific Status Values

一句話重點

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

來源:Base 2.4 §5.2.25.2

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

用例子讀懂

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

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

一句話重點

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

來源:Base 2.4 §5.2.25.2

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

用例子讀懂

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

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

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

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

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。

圖表組 15 · Format:先決定影響誰,再決定新格式 · 3 張圖表

31.36.Figure 194 依 SES→scope bit→NSID 判讀;Figure 195 再解格式與 erase 選項,Figure 196 說明 Invalid Format。

回到本節的解釋與範例

範圍與格式是互相獨立的兩組選擇

31.37.先選影響哪些 namespaces,再選它們的新格式和 erase 設定;兩組條件都滿足才是一筆有效的 Format。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
SES/FNS/SENS/NSIDSES=0 看 FNS,secure erase 看 SENS;所選 scope bit 與 NSID 一起決定範圍。NSID=3、SES=0、FNS=1 仍影響規格定義的所有 namespaces。
FNVMBS這個 bit=1 時不支援 NSID=FFFFFFFFh 的 Format broadcast 用法,會回 Invalid Field in Command。不能只看欄位名稱裡有 Support 就把 1 理解為支援。
LBAFU bits 13:12/LBAFL bits 3:0符合延伸格式前提時,Format Index=(LBAFU<<4)|LBAFL;格式須在可用清單中。LBAFU=1、LBAFL=2 → Format Index 18,而非 12 bytes。
SES bits 11:90 不要求 secure erase;1 User Data Erase,2 Cryptographic Erase;其餘值保留。User Data Erase 完成後內容不指定為全零,不能拿零值讀回當成唯一成功條件。
PIL/PI/MSET這三個共同位置的 NVM 意義由 NVM Figure 91 補充,需與 metadata 空間和能力配合。不能在沒有足夠 metadata 的格式上僅靠 PI 非零啟用保護。
CQE/Invalid FormatFormat CQE 在格式化完成時回報;Invalid Format 包含不支援格式或設定不相容等情況。成功後重新 Identify 取得新格式,再計算後續 Read/Write buffer。
來源:Base 2.4 §5.2.11 · Base 2.4 §5.2.11.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.11, Figure 194, 文件頁 207, PDF 頁 233

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.11, Figure 195, 文件頁 208-209, PDF 頁 234-235

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.11.1, Figure 196, 文件頁 209, PDF 頁 235

Base Figure 194 · Format NVM – Operation Scope

一句話重點

Base194-1Format 的範圍先由 SES 決定使用 FNS 或 SENS,再由 scope bit 與 NSID 選出影響對象。

來源:Base 2.4 §5.2.11

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.11, Figure 194, 文件頁 207, PDF 頁 233

用例子讀懂

Base194-2SES=000b、FNS=1 時,即使 NSID=3,也不能只按 namespace 3 解讀影響範圍。

Base Figure 195 · Format NVM – Command Dword 10

一句話重點

Base195-1Format CDW10 把 Format Index、secure erase 與命令集專屬格式設定放在不同欄位。

來源:Base 2.4 §5.2.11

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.11, Figure 195, 文件頁 208-209, PDF 頁 234-235

用例子讀懂

Base195-2Format Index=18(12h)需要 LBAFU=1、LBAFL=2,並滿足延伸格式的前提;SES 與這個索引是獨立選擇。

Base Figure 196 · Format NVM – Command Specific Status Values

一句話重點

Base196-1Invalid Format 不只表示格式編號不存在,也可能表示 metadata 空間或目前配置不允許所選格式。

來源:Base 2.4 §5.2.11.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.11.1, Figure 196, 文件頁 209, PDF 頁 235

用例子讀懂

Base196-2所選 PI 需要的 metadata 大於格式提供的空間時,不能只檢查 Format Index 有在清單中就認為要求有效。

圖表組 16 · NVM 補充:同一個 Admin 命令的資料語意 · 2 張圖表

31.38.Figure 90 放回 AER 的 Notice 分支;91 放回 Format CDW10 的既有位置,不重講共同命令。

回到本節的解釋與範例

先選 Notice,再讀命令集所定義的事件資訊

31.39.這些值屬 Base AER 的 Notice 分支;事件資訊不是一般 I/O 的 status,也不等於查詢所得的完整狀態。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
AEI=00h/09h分別是 Attached/Allocated Namespace Attribute Changed;NUSE 改變,以及 ANA 狀態變化造成的 NUSE/NVMCAP 改變,不得據此送這兩種事件。資料寫入導致使用量增加,不表示一定有 namespace 屬性變更通知。
AEI=05hLBA Status Information Alert 表示已符合潛在不可恢復 LBA 的通知條件;相關紀錄提供後續定位資訊。事件值 05h 不是第 5 個 LBA 壞掉;取得相應 Log 且 RAE=0 才按該事件規則清除。
AEI=0AhRate Limiting Configuration Change 表示配置變更影響回報的 rate limits;讀事件指定的 Log 且 RAE=0 以確認。收到通知時要重新取得限制資訊,不能把 0Ah 當成新的速度值。
ANA
Asymmetric Namespace Access;描述同一 namespace 經不同 controllers 存取時的路徑狀態。
來源:NVM Command Set 1.3 §4.1.1

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

NVM Figure 90 · Asynchronous Event Information – Notice

一句話重點

NVM90-1NVM Notice 補充 namespace 屬性變化、LBA 狀態及 rate limit 變動;一般使用量變動不一定觸發通知。

來源: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-2NUSE 頻繁增加時,控制器不得只因這項改變就送 Attached 或 Allocated Namespace Attribute Changed Notice;不能每次看到寫入就預期一筆 AER。

PIL、PI 與 MSET 補上 NVM 的格式選擇

31.40.Base 決定範圍與 Format Index,本表把其中的命令集專屬 bits 對回 metadata 與 PI 的配置。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
PIL/PIPI 選保護資訊類型或停用,PIL 指定 PI 在 metadata 的位置;須具備對應能力與空間。metadata 不夠時,不能只填 PI 非零就使該格式合法。
MSET/metadata 傳輸MSET 分開選 metadata 以延伸 LBA 或單獨 buffer 傳輸,需和格式的支援能力相符。每 block 4096+8 bytes 的 metadata 若分離,8 blocks 的 data 與 metadata 分別是 32768、64 bytes。
來源:NVM Command Set 1.3 §4.1.2

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

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 排列。

圖表組 17 · Get Features:查目前值、預設值或支援能力 · 6 張圖表

31.41.Figure 197–200 定位請求的資料指標與選擇值;Figure 201 專門解 SEL=011b,Figure 202 是命令錯誤。排除 FID 的表格列略過。

回到本節的解釋與範例

查能力、讀取值與寫入值的區別

31.42.FID 指功能,Get 的 SEL 指要查哪一種資訊,Set 的 SV 指是否要求保存。支援能力回覆的 bits 與功能值是不同結構。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
FID/UIDX/DPTRFID 選功能,必要時 UIDX 協助選 UUID,DPTR 傳輸該功能所需的資料結構。不是每個 Feature 都只靠 CQE DW0 回覆;有 buffer 的功能還需讀其資料格式。
SEL=000b/001b/010b/011b分別要求目前值、預設值、保存值、支援能力。要確認裝置現在採用什麼值,應讀目前值;保存值不等於正在使用的值。
CHANG/NSSPEC/SVBL → SV能力分別指出可變更、是否與 namespace 有關、可否保存;SV 是主機的保存要求。SVBL=0 時提出保存要求可能被拒絕;Set 成功也不能一律推論跨 power cycle 保留。
來源:Base 2.4 §5.2.12 · Base 2.4 §5.2.12.2

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12, Figure 197, 文件頁 209, PDF 頁 235

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12, Figure 198, 文件頁 209-210, PDF 頁 235-236

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12, Figure 199, 文件頁 210, PDF 頁 236

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12, Figure 200, 文件頁 210-211, PDF 頁 236-237

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12.2, Figure 201, 文件頁 212, PDF 頁 238

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12.2, Figure 202, 文件頁 212, PDF 頁 238

Base Figure 197 · Get Features – Data Pointer

一句話重點

Base197-1Get Features 的 DPTR 是需要資料結構時的回傳位置。

來源:Base 2.4 §5.2.12

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12, Figure 197, 文件頁 209, PDF 頁 235

用例子讀懂

Base197-2查詢一個會回傳資料 buffer 的 Feature,先準備相應大小的目的空間;不是每個 Feature 都只靠 CQE DW0 回傳全部內容。

Base Figure 198 · Get Features – Command Dword 10

一句話重點

Base198-1Get Features 的 FID 選功能,SEL 選要查目前值、預設值等資訊。

來源:Base 2.4 §5.2.12

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12, Figure 198, 文件頁 209-210, PDF 頁 235-236

用例子讀懂

Base198-2查 current 與查 saved 可以回不同內容;兩次 FID 相同不表示查詢完全相同。

Base Figure 199 · Get Features – Command Dword 14

一句話重點

Base199-1Get Features 的 UIDX 在使用 UUID 選擇時提供索引。

來源:Base 2.4 §5.2.12

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12, Figure 199, 文件頁 210, PDF 頁 236

用例子讀懂

Base199-2UIDX 是 UUID List 中的位置,不是把 128-bit UUID 直接塞進命令欄位;使用前先確認該索引對應誰。

Base Figure 200 · Get Features – Feature Identifiers

一句話重點

Base200-1Get Features 的 FID 表是共同入口;本篇只讀保留 FID 的列,再到各功能定義解讀回覆。

來源:Base 2.4 §5.2.12

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12, Figure 200, 文件頁 210-211, PDF 頁 236-237

用例子讀懂

Base200-2FID=07h 回覆的是佇列數量相關資訊,不用 FID=02h 的 Power State 欄位解讀同一個 DW0。

Base Figure 201 · Completion Queue Entry Dword 0 when Select is set to 11b

一句話重點

Base201-1Supported Capabilities 回覆把可修改、namespace 範圍與可保存能力分開。

來源:Base 2.4 §5.2.12.2

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12.2, Figure 201, 文件頁 212, PDF 頁 238

用例子讀懂

Base201-2CHANG 表示可修改,SVBL 表示可保存;支援其中一項,不代表另一項也成立。

Base Figure 202 · Get Features – Command Specific Status Values

一句話重點

Base202-1Get Features 的命令專屬錯誤指出查詢目標等要求不成立。

來源:Base 2.4 §5.2.12.2

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12.2, Figure 202, 文件頁 212, PDF 頁 238

用例子讀懂

Base202-2回覆 Invalid Controller Identifier 時,應確認指定控制器識別碼,不把它解釋成 Feature 數值本身超出範圍。

圖表組 18 · Set Features:把設定連到佇列、事件與電源行為 · 24 張圖表

31.43.先讀 Figure 463–466 的共同格式,再沿保留 FID 閱讀各表。請求與回覆分開,電源欄位對回狀態和延遲;跳過排除的 FID,不由表格連結擴張範圍。

回到本節的解釋與範例

保留的共同 Feature:控制哪一個行為

31.44.先看共同 FID/SV,再按功能分支讀欄位;同一個 CDW11 在不同 FID 下不是同一種值。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
FID/SV/DPTR/UIDXFID 選功能,SV 要求保存;資料結構與 UUID 選擇依該功能定義,不能推論全部支援。SV=1 不可用於不支援保存的功能;與值能否變更是兩個問題。
HPW/MPW/LPW/AB權重採零起算數量,AB 以 2^AB 或特殊值表示一次仲裁最多服務的命令數。weight=3 → 4;AB=3 → 8。適用於所選仲裁機制,並非每命令 priority。
PS/WH/IIELL狀態、工作負載提示與 Idle I/O Exit Latency Limit 分開;IIELL 單位為 100 μs。IIELL=20 → 2 ms;PS=3 只是狀態索引。
TMPSEL/THSEL/TMPTH/TMPTHH選感測器、上/下門檻、Kelvin 門檻值與遲滯;恢復事件需要按照遲滯規則判斷。溫度剛越過上限後小幅下降,不必然立刻發出恢復事件。
WCE/FUA/FlushWCE 控制 volatile cache;FUA 和 Flush 另建立資料提交條件。完成通知的時間不等於一般 Write 已持久保存。
NCQR/NSQR/NCQA/NSQA請求與回覆皆是零起算數量;實際配置不得由請求值代替。requested=3、allocated=1 → 要求 4,實得 2。
Asynchronous Event Configuration各位元選擇所支援事件是否可回報,不是事件歷史;只配置本篇保留的功能分支。開啟溫度事件回報,不表示現在已經過溫。
APSTE/ITPT/ITPS啟用 APST 後,以目前狀態對應的 entry 選 idle 超過 ITPT 時要進入的非 operational state。ITPT=2000 ms、ITPS=3 → entry 低 Dword 0007D018h;有 I/O 時按規則回到先前 operational 狀態。
APSTE/NOPPME/互動表APST 控制自動狀態轉移,NOPPME 控制非 operational 狀態中的背景活動電力行為。兩個 bit 的四種組合不是四個 Power State IDs。
TSTMP/TSTMPO/SYNCTSTMP 用毫秒;Get 的來源及同步屬性説明計數來源與是否可能停止。1000 是 1 秒;某些 SYNC 狀態下不能把時間差全當 drift。
TMT1/TMT2/HCTMA/MNTMT/MXTMT熱管理界線需符合支援能力及規格允許範圍,TMT1/TMT2 彼此也有關係。給出一個很高的值不代表能要求控制器越過安全或支援範圍工作。
IOCSCI/Get 回覆Set 選支援的命令集組合;Get 回目前組合索引。IOCSCI=1 不是 CSI=1,也不是 namespace 1。
PBSLCSoftware Progress Marker 的 pre-boot software load count 由主機設定,依規格回報。不能把 PBSLC=3 畫成 3% 進度條。
Feature Not Saveable/Not Changeable/Not Namespace Specific錯誤分別表示保存、變更與指定 namespace 的使用方式有問題。清 SV 只處理保存要求,不能改變功能的 scope 或不可變更條件。
NOPPME
Non-Operational Power State Permissive Mode Enable,控制 controller background work 能否暫時超過 non-operational power limit。
TMPSEL
Temperature Sensor Select,選擇 Composite Temperature 或 sensor 1 到 8 的欄位。
TMPTHH
Temperature Threshold Hysteresis,結束 threshold event 時使用的 Kelvin hysteresis。
THSEL
Threshold Type Select,選擇 over-temperature 或 under-temperature threshold。
TMPTH
Temperature Threshold,16-bit Kelvin threshold value。
WH
Workload Hint,host 提供給 controller 的 workload category 提示,不是效能保證。
來源:Base 2.4 §5.2.30 · Base 2.4 §5.2.30.1.1 · Base 2.4 §5.2.30.1.2 · Base 2.4 §5.2.30.1.2.1 · Base 2.4 §5.2.30.1.3.1 · Base 2.4 §5.2.30.1.4 · Base 2.4 §5.2.30.1.5 · Base 2.4 §5.2.30.1.6 · Base 2.4 §5.2.30.1.7 · Base 2.4 §5.2.30.1.8 · Base 2.4 §5.2.30.1.10 · Base 2.4 §5.2.30.1.11 · Base 2.4 §5.2.30.1.18 · Base 2.4 §5.2.30.1.34 · Base 2.4 §5.2.30.4

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30, Figure 463, 文件頁 456, PDF 頁 482

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30, Figure 464, 文件頁 457, PDF 頁 483

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30, Figure 465, 文件頁 457, PDF 頁 483

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30, Figure 466, 文件頁 457-459, PDF 頁 483-485

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.1, Figure 467, 文件頁 460, PDF 頁 486

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.2, Figure 468, 文件頁 461, PDF 頁 487

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.2.1, Figure 469, 文件頁 462, PDF 頁 488

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.3.1, Figure 470, 文件頁 463-464, PDF 頁 489-490

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.4, Figure 471, 文件頁 464-465, PDF 頁 490-491

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.5, Figure 472, 文件頁 465, PDF 頁 491

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.5, Figure 473, 文件頁 466, PDF 頁 492

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

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.7, Figure 475, 文件頁 468, PDF 頁 494

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.7, Figure 476, 文件頁 469, PDF 頁 495

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.7, Figure 477, 文件頁 469, PDF 頁 495

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.7, Figure 478, 文件頁 469, PDF 頁 495

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.8, Figure 479, 文件頁 470, PDF 頁 496

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.8, Figure 480, 文件頁 470-471, PDF 頁 496-497

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.10, Figure 482, 文件頁 472, PDF 頁 498

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.11, Figure 483, 文件頁 472-473, PDF 頁 498-499

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.18, Figure 494, 文件頁 479, PDF 頁 505

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.18, Figure 495, 文件頁 479, PDF 頁 505

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.34, Figure 536, 文件頁 508, PDF 頁 534

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.4, Figure 554, 文件頁 519, PDF 頁 545

Base Figure 463 · Set Features – Data Pointer

一句話重點

Base463-1Set Features 的 DPTR 提供需要傳入的功能資料。

來源:Base 2.4 §5.2.30

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30, Figure 463, 文件頁 456, PDF 頁 482

用例子讀懂

Base463-2設定 HMB 時傳入描述子相關資料,與單純只在 CDW11 放一個開關不同;先看該 Feature 是否使用資料 buffer。

Base Figure 464 · Set Features – Command Dword 10

一句話重點

Base464-1Set Features 的 FID 選功能,SV 表示是否要求保存。

來源:Base 2.4 §5.2.30

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30, Figure 464, 文件頁 457, PDF 頁 483

用例子讀懂

Base464-2主機要求 SV=1 前先確認 Feature 可保存;設定成功與重設後仍保留,是需要分別核對的行為。

Base Figure 465 · Set Features – Command Dword 14

一句話重點

Base465-1Set Features 的 UIDX 用於相應 UUID 關聯的選擇。

來源:Base 2.4 §5.2.30

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30, Figure 465, 文件頁 457, PDF 頁 483

用例子讀懂

Base465-2若使用 UUID List 的某一項,先確認索引對應與適用規則;UIDX 不是 Set Features 的新 FID。

Base Figure 466 · Set Features – Feature Identifiers

一句話重點

Base466-1Set Features 的 FID 表是設定入口;本篇只讀保留項目與其 scope、保存和變更規則。

來源:Base 2.4 §5.2.30

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30, Figure 466, 文件頁 457-459, PDF 頁 483-485

用例子讀懂

Base466-2FID=06h 設定 write cache,FID=07h 協商 queue 數量;同樣使用 CDW11 不代表兩者有同樣位元含義。

Base Figure 467 · Arbitration & Command Processing – Command Dword 11

一句話重點

Base467-1仲裁設定用 HPW/MPW/LPW 控制權重,AB 控制一次仲裁的 burst 上限。

來源:Base 2.4 §5.2.30.1.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.1, Figure 467, 文件頁 460, PDF 頁 486

用例子讀懂

Base467-2某個 weight 欄位填 3 表示對應的 4 個命令單位;AB 則依 2 的次方或特殊值解讀,不能全部加 1。

Base Figure 468 · Power Management – Command Dword 11

一句話重點

Base468-1Power Management 的 PS 選狀態,WH 提供工作負載提示。

來源:Base 2.4 §5.2.30.1.2

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.2, Figure 468, 文件頁 461, PDF 頁 487

用例子讀懂

Base468-2選 PS 3 前先確認該 power state 存在;WH 描述負載特性,不會替控制器新增一個 PS 3。

Base Figure 469 · Power Management – Completion Queue Entry Dword 0

一句話重點

Base469-1Power Management 的 Get 回覆同時給目前 PS、WH 和 IIELL。

來源:Base 2.4 §5.2.30.1.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.2.1, Figure 469, 文件頁 462, PDF 頁 488

用例子讀懂

Base469-2IIELL=20 以 100 μs 為單位是 2 ms;PS=3 是狀態編號,不是 3 ms。

Base Figure 470 · Temperature Threshold – Command Dword 11

一句話重點

Base470-1溫度門檻要同時指定感測器、方向、門檻值與遲滯。

來源:Base 2.4 §5.2.30.1.3.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.3.1, Figure 470, 文件頁 463-464, PDF 頁 489-490

用例子讀懂

Base470-2對同一感測器設定高溫門檻與低溫門檻時,THSEL 不同;不能只用一個 TMPTH 數值描述兩種觸發條件。

Base Figure 471 · Volatile Write Cache – Command Dword 11

一句話重點

Base471-1WCE 控制 volatile write cache 是否啟用,不能單獨代替資料已持久保存的證據。

來源:Base 2.4 §5.2.30.1.4

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.4, Figure 471, 文件頁 464-465, PDF 頁 490-491

用例子讀懂

Base471-2WCE=1 時,普通 Write 成功不自動等同已提交至非揮發性媒體;還要看 FUA 或後續 Flush。

Base Figure 472 · Number of Queues – Command Dword 11

一句話重點

Base472-1Number of Queues 的 NCQR/NSQR 分開表達主機要求的 CQ 與 SQ 數量。

來源:Base 2.4 §5.2.30.1.5

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.5, Figure 472, 文件頁 465, PDF 頁 491

用例子讀懂

Base472-2各要求 4 條時都填 3;需要 4 條 SQ 並不代表一定需要 4 條 CQ,因多條 SQ 可共用 CQ。

Base Figure 473 · Number of Queues – Completion Queue Entry Dword 0

一句話重點

Base473-1NCQA/NSQA 回報實際配置數量,主機必須依回覆決定後續能建立多少佇列。

來源:Base 2.4 §5.2.30.1.5

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.5, Figure 473, 文件頁 466, PDF 頁 492

用例子讀懂

Base473-2請求值是 3,但回覆 NCQA=1,代表分配 2 條 CQ,不能照請求自行建立 4 條。

Base Figure 474 · Asynchronous Event Configuration – Command Dword 11

一句話重點

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

來源:Base 2.4 §5.2.30.1.6

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

用例子讀懂

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

Base Figure 475 · Autonomous Power State Transition – Command Dword 11

一句話重點

Base475-1APSTE 控制是否啟用自動 power state 轉換。

來源:Base 2.4 §5.2.30.1.7

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.7, Figure 475, 文件頁 468, PDF 頁 494

用例子讀懂

Base475-2主機準備好 APST 表之後才啟用 APSTE;開關本身不包含「閒置多久、轉去哪個 state」的完整策略。

Base Figure 476 · Autonomous Power State Transition Data Structure

一句話重點

Base476-1APST 表按目前 power state 索引到各自的轉換項目。

來源:Base 2.4 §5.2.30.1.7

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.7, Figure 476, 文件頁 469, PDF 頁 495

用例子讀懂

Base476-2有 32 個 entries、每個 8 bytes,共 256 bytes;第 3 個 state 的 entry 不等於「下一個一定轉去 state 3」。

Base Figure 477 · Autonomous Power State Transition Data Structure Entry

一句話重點

Base477-1APST entry 把閒置等待時間 ITPT 與目標 state ITPS 分開編碼。

來源:Base 2.4 §5.2.30.1.7

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.7, Figure 477, 文件頁 469, PDF 頁 495

用例子讀懂

Base477-2ITPT=2000 ms、ITPS=3 時,低 Dword 為 (2000<<8)+(3<<3)=0007D018h;時間在 bits 31:8,state 在 bits 7:3。

Base Figure 478 · Interactions between APSTE and NOPPME

一句話重點

Base478-1APST 與 NOPPME 的互動取決於進入狀態的方式。

來源:Base 2.4 §5.2.30.1.7

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.7, Figure 478, 文件頁 469, PDF 頁 495

用例子讀懂

Base478-2主機直接指定非操作狀態,與 APST timer 自動進入同名狀態,可能有不同背景處理規則;按表中進入方式讀對应列。

Base Figure 479 · Timestamp – Data Structure for Set Features

一句話重點

Base479-1Set Timestamp 的 TSTMP 是自 UTC epoch 起算的毫秒值。

來源:Base 2.4 §5.2.30.1.8

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.8, Figure 479, 文件頁 470, PDF 頁 496

用例子讀懂

Base479-21000 表示 epoch 後 1 秒,不是 1000 秒;結構中未定義的 bytes 按 reserved 規則處理。

Base Figure 480 · Timestamp – Data Structure for Get Features

一句話重點

Base480-1Get Timestamp 除了時間值,還回報時間來源及計時是否可能停止的屬性。

來源:Base 2.4 §5.2.30.1.8

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.8, Figure 480, 文件頁 470-471, PDF 頁 496-497

用例子讀懂

Base480-2如果 SYNC 表示計數可能曾停止,就不能把與主機時鐘的差值全部解釋成傳輸延遲。

Base Figure 482 · HCTM – Command Dword 11

一句話重點

Base482-1HCTM 用 TMT1 與 TMT2 指定兩個熱管理門檻。

來源:Base 2.4 §5.2.30.1.10

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.10, Figure 482, 文件頁 472, PDF 頁 498

用例子讀懂

Base482-2先標出兩個門檻在溫度軸上的順序,再看進入與解除條件;不能把 TMT2 當成第二個感測器編號。

Base Figure 483 · Non-Operational Power State Config – Command Dword 11

一句話重點

Base483-1NOPPME 控制非操作 power state 下的相應行為許可。

來源:Base 2.4 §5.2.30.1.11

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.11, Figure 483, 文件頁 472-473, PDF 頁 498-499

用例子讀懂

Base483-2允許某些背景行為,不代表該狀態因此變成一般可處理 I/O 的操作狀態;仍要看 power state 定義。

Base Figure 494 · I/O Command Set Profile – Command Dword 11

一句話重點

Base494-1IOCSCI 選擇 Identify I/O Command Set 清單中的組合索引。

來源:Base 2.4 §5.2.30.1.18

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.18, Figure 494, 文件頁 479, PDF 頁 505

用例子讀懂

Base494-2IOCSCI=1 選第 2 個支援組合,不是直接設定 CSI=1,也不會替 namespace 變更資料格式。

Base Figure 495 · I/O Command Set Profile – Completion Queue Entry Dword 0

一句話重點

Base495-1Get I/O Command Set Profile 回傳目前選定的組合索引。

來源:Base 2.4 §5.2.30.1.18

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.18, Figure 495, 文件頁 479, PDF 頁 505

用例子讀懂

Base495-2回覆 IOCSCI=2 後,要讀先前取得的第 3 個 vector 才知道含有哪些命令集。

Base Figure 536 · Software Progress Marker – Command Dword 11

一句話重點

Base536-1PBSLC 是主機提供的 pre-boot software load count,並非控制器自行估算的工作完成百分比。

來源:Base 2.4 §5.2.30.1.34

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.34, Figure 536, 文件頁 508, PDF 頁 534

用例子讀懂

Base536-2PBSLC=3 不能呈現為「已完成 3%」;它是在這個 Feature 定義下的載入計數。

Base Figure 554 · Set Features – Command Specific Status Values

一句話重點

Base554-1Set Features 的命令專屬錯誤分辨不可保存、不可變更、作用對象及支援條件。

來源:Base 2.4 §5.2.30.4

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.4, Figure 554, 文件頁 519, PDF 頁 545

用例子讀懂

Base554-2Feature Not Saveable 和 Feature Not Changeable 是不同結果;把 SV 清零不能自動解決不可變更的值。

圖表組 19 · NVM 功能補充:閒置退出延遲、LBA 用途與原子性 · 4 張圖表

31.45.Figure 94–96 分開看請求數量、回覆數量與每筆描述子;98 讀 DN 的正常操作條件。未指定的 NVM Feature 小節直接略過。

回到本節的解釋與範例

LBA Range Type 的個數、用途與範圍

31.46.一筆 entry 描述一段既有 LBA 空間的用途;它不建立新的 namespace 或檔案系統。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
Set CDW11.NUM/Get CQE.NUM兩者都是描述子數減 1;Get 不使用請求中的 NUM,回覆 NUM 才表示有效筆數。NUM=1 對應兩筆 entries;不能只提供第一筆的 buffer。
Type/Attributes/SLBA/NLB/GUIDType 表用途,Attributes 補覆寫與可見性,SLBA 指起點,NLB 為 block 數減 1,GUID 辨識用途實體。Type 與 GUID 並不改變 LBADS,範圍大小仍要按目前 LBA 格式換算。
來源: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

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

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。

DN 控制正常條件的要求,不代替持久保存

31.47.Write Atomicity Normal 與掉電原子性、FUA/Flush 分別回答不同問題。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
DN/AWUN/NAWUNDN=0 須遵守適用的正常與掉電原子單位;DN=1 不要求 AWUN/NAWUN,仍須遵守 AWUPF/NAWUPF。正常單位 8 blocks、掉電單位 1 block 時,DN=1 不能再主張正常 8-block 保證。
AWUPF/NAWUPF/FUA/Flush前兩者對應掉電條件,後兩者對應資料持久保存,不能用 DN 統一替代。FUA 不會放大 atomic write unit,Flush 不會把已跨原子邊界的 Write 改成整筆原子。
來源: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

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 參數;正常運作的設定不能當成斷電保證的總開關。

圖表組 20 · PCIe 功能:中斷通知與借出的主機記憶體 · 11 張圖表

31.48.Figure 543–544 先分清全域聚合設定與單一 vector 設定;545–553 再按 enable→總量→清單位址→每筆區塊→回覆讀 HMB。

回到本節的解釋與範例

中斷聚合和單一 vector 的例外

31.49.CQE 的寫入與中斷送達可以不同時;聚合設定影響通知次數及延遲,不改變完成項目的內容。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
TIME/THRTIME 用 100 μs 為單位,THR 是零起算 entry 門檻;任一欄為 0 時依本節停用聚合。TIME=10、THR=7 分別是 1 ms 與 8 entries;THR=0 另有特殊意義。
IV/CD/CQ.IENCD 停用指定 vector 的 coalescing,IEN 則在建立 CQ 時決定是否啟用中斷。CD=1 不等於 IEN=0;主機仍可能收到不聚合的中斷。
來源:Base 2.4 §5.2.30.2.1 · Base 2.4 §5.2.30.2.2

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.2.1, Figure 543, 文件頁 515, PDF 頁 541

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.2.2, Figure 544, 文件頁 515, PDF 頁 541

Base Figure 543 · Interrupt Coalescing – Command Dword 11

一句話重點

Base543-1TIME 與 THR 是中斷聚合的時間及完成項目門檻,兩者的編碼方式不同。

來源:Base 2.4 §5.2.30.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.2.1, Figure 543, 文件頁 515, PDF 頁 541

用例子讀懂

Base543-2TIME=10 對應 1 ms;THR=7 對應 8 個完成項目的門檻。0 值另有停用規則,不能一律解成正常的最小門檻。

Base Figure 544 · Interrupt Vector Configuration – Command Dword 11

一句話重點

Base544-1CD 對指定 IV 停用中斷聚合,而不是停用這條 CQ 的所有中斷。

來源:Base 2.4 §5.2.30.2.2

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.2.2, Figure 544, 文件頁 515, PDF 頁 541

用例子讀懂

Base544-2IV=2、CD=1 讓 vector 2 不採用 aggregation;CQ 是否啟用中斷仍由建立 CQ 時的 IEN 決定。

描述記憶體清單與交接使用權

31.50.主機配置記憶體、建立描述子,再以 HMB Feature 提供清單。總容量、描述子數量、每段位址與每段大小都要互相一致。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
EHM/MR/CTZ/HMNARE啟用、記憶體返回及相關可選行為需依各 bit 的條件配合使用。重新提供原記憶體與提供新記憶體是不同情境,不能一概保留原內容假設。
HSIZE/HMDLEC總容量依 CC.MPS 的 page 單位解讀;HMDLEC 是清單中的描述子數。總容量為 16 pages,不代表必須有 16 個描述子;一個描述子可以描述多個 pages。
HMDLUA/HMDLLA;BADD/BSIZE高低欄位組成清單位址;每個描述子的 BADD 與 BSIZE 再給出實際記憶體段。清單位址要求與資料區域 page 對齊分別檢查,不能用其中一個通過替代另一個。
HMNAR 與主機回收完成回覆的相關狀態與使用權交接連在一起。控制器仍可使用記憶體時,主機不能提前把相同範圍拿去保存其他資料。
HMNARE
Host Memory Non-operational Access Restriction Enable,配置 non-operational HMB access policy 的 bit。
BSIZE
Buffer Size,HMB descriptor 中以 CC.MPS pages 表示的連續範圍長度。
HMNAR
Host Memory Non-operational Access Restricted,回報 restriction 此刻是否實際生效的 state bit。
CC
Controller Configuration,host 用來選擇設定並啟用或停用 controller 的 property。
來源:Base 2.4 §5.2.30.2.3

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.2.3, Figure 545, 文件頁 516-517, PDF 頁 542-543

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.2.3, Figure 546, 文件頁 517, PDF 頁 543

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.2.3, Figure 547, 文件頁 517, PDF 頁 543

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.2.3, Figure 548, 文件頁 517, PDF 頁 543

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.2.3, Figure 549, 文件頁 518, PDF 頁 544

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.2.3, Figure 550, 文件頁 518, PDF 頁 544

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.2.3, Figure 551, 文件頁 518, PDF 頁 544

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.2.3, Figure 552, 文件頁 518-519, PDF 頁 544-545

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.2.3, Figure 553, 文件頁 519, PDF 頁 545

Base Figure 545 · Host Memory Buffer – Command Dword 11

一句話重點

Base545-1HMB 控制欄位分別表示啟用、記憶體返回及相關要求。

來源:Base 2.4 §5.2.30.2.3

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.2.3, Figure 545, 文件頁 516-517, PDF 頁 542-543

用例子讀懂

Base545-2EHM 啟用 HMB,MR 涉及先前記憶體返回的情境;兩個 bit 不是「新記憶體地址」與「舊地址」的編碼。

Base Figure 546 · Host Memory Buffer – Command Dword 12

一句話重點

Base546-1HMB 的 HSIZE 以控制器設定的記憶體頁大小計算。

來源:Base 2.4 §5.2.30.2.3

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.2.3, Figure 546, 文件頁 517, PDF 頁 543

用例子讀懂

Base546-2CC.MPS 對應 4096 bytes、HSIZE=16 時,提供 65536 bytes;HSIZE 不是描述子數量。

Base Figure 547 · Host Memory Buffer– Command Dword 13

一句話重點

Base547-1HMDLLA 提供 HMB 描述子清單位址的低部。

來源:Base 2.4 §5.2.30.2.3

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.2.3, Figure 547, 文件頁 517, PDF 頁 543

用例子讀懂

Base547-216-byte 對齊的清單位址,其低 4 bits 必為零;這是清單的對齊,不代表每個資料 buffer 只需 16-byte 對齊。

Base Figure 548 · Host Memory Buffer – Command Dword 14

一句話重點

Base548-1HMDLUA 補齊描述子清單位址的高部。

來源:Base 2.4 §5.2.30.2.3

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.2.3, Figure 548, 文件頁 517, PDF 頁 543

用例子讀懂

Base548-2清單位址=00000001_00001000h 時,高部為 1、低部為 1000h;只設定低部會指到不同記憶體。

Base Figure 549 · Host Memory Buffer – Command Dword 15

一句話重點

Base549-1HMDLEC 指定 HMB 描述子清單包含多少項目。

來源:Base 2.4 §5.2.30.2.3

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.2.3, Figure 549, 文件頁 518, PDF 頁 544

用例子讀懂

Base549-2HMDLEC=2 表示清單有 2 個 entries;它不直接表示只有 2 個資料頁,因每個 entry 可以描述多頁。

Base Figure 550 · Host Memory Buffer – Host Memory Descriptor List

一句話重點

Base550-1HMB Descriptor List 由固定大小 entries 組成。

來源:Base 2.4 §5.2.30.2.3

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.2.3, Figure 550, 文件頁 518, PDF 頁 544

用例子讀懂

Base550-22 個 16-byte entries 共占 32 bytes;清單本身的大小與它們描述的 HMB 總容量是不同數量。

Base Figure 551 · Host Memory Buffer – Host Memory Buffer Descriptor Entry

一句話重點

Base551-1每個 HMB 描述子用基底位址和頁數描述一段記憶體。

來源:Base 2.4 §5.2.30.2.3

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.2.3, Figure 551, 文件頁 518, PDF 頁 544

用例子讀懂

Base551-2BSIZE=8、頁大小 4 KiB 時,該項描述 32 KiB;BADD 指起點,不能把 BSIZE 當成 byte 長度。

Base Figure 552 · Host Memory Buffer – Completion Queue Entry Dword 0

一句話重點

Base552-1HMB 完成回覆中的 HMNAR 要連回此次要求的條件。

來源:Base 2.4 §5.2.30.2.3

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.2.3, Figure 552, 文件頁 518-519, PDF 頁 544-545

用例子讀懂

Base552-2收到非零回覆前先確認 HMNARE 與 EHM 的設定;不能把任意 DW0 值都當成實際配置頁數。

Base Figure 553 · Host Memory Buffer – Attributes Data Structure

一句話重點

Base553-1HMB Attributes 回報目前採用的大小及描述子清單資訊。

來源:Base 2.4 §5.2.30.2.3

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.2.3, Figure 553, 文件頁 519, PDF 頁 545

用例子讀懂

Base553-2讀回 HSIZE、HMDLAL/HMDLAU、HMDLEC 後,可與先前設定分別對照;成功設定命令的 CQE 不包含這份完整屬性表。

圖表組 21 · Abort:要求中止與確認中止是兩件事 · 3 張圖表

31.51.依 Figure 147 的目標、Figure 148 的 IANP、Figure 149 的 Abort 並行數限制順序讀;不要把兩筆 CQE 合成一筆結果。

回到本節的解釋與範例

目標命令、立即中止與最終完成

31.52.Abort 自己的 CQE 和原命令的 CQE 分別提供不同證據;立即中止還有不得再造成後續效果的界線。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
SQID/CIDCDW10 低 16 bits 是 SQID,高 16 bits 是原命令 CID;一起辨識目標。SQID=3、CID=7 → 00070003h。
IANP/原命令 statusIANP=0 表示立即中止已執行;=1 只表示未立即中止,最後結果看原 CQE。Abort status 成功、IANP=1,不足以證明原資料 transfer 已停止。
ACL/Abort Command Limit ExceededACL 是從 0 起算的並行 Abort 限制;不要與 SQ depth 混用。ACL=3 表示最多 4 筆 outstanding Abort;超過可能回 03h。
來源:Base 2.4 §5.2.1 · Base 2.4 §5.2.1.2

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.1, Figure 147, 文件頁 182, PDF 頁 208

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.1.2, Figure 148, 文件頁 182, PDF 頁 208

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.1.2, Figure 149, 文件頁 182, PDF 頁 208

Base Figure 147 · Abort – Command Dword 10

一句話重點

Base147-1Abort 的 CDW10 同時指定原命令的 SQID 和 CID。

來源:Base 2.4 §5.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.1, Figure 147, 文件頁 182, PDF 頁 208

用例子讀懂

Base147-2SQID=3、CID=7 形成 CDW10=00070003h;SQ 4 上的 CID 7 不在這筆要求的目標內。

Base Figure 148 · Abort Command – Completion Queue Entry Dword 0

一句話重點

Base148-1IANP 只回答是否執行了立即中止,不能單獨證明原命令的最終結果。

來源:Base 2.4 §5.2.1.2

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.1.2, Figure 148, 文件頁 182, PDF 頁 208

用例子讀懂

Base148-2IANP=1 時,原命令可能稍後才以 Command Abort Requested 完成,也可能早已正常完成;必須再讀原 CQE。

Base Figure 149 · Abort – Command Specific Status Values

一句話重點

Base149-1Abort Command Limit Exceeded 指尚未完成的 Abort 太多,不是原 SQ 的命令數超限。

來源:Base 2.4 §5.2.1.2

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.1.2, Figure 149, 文件頁 182, PDF 頁 208

用例子讀懂

Base149-2若目前已達 ACL 所允許的並行數,再送一筆 Abort 可能回 03h;增加原 SQ 的記憶體深度不能解除這個限制。

圖表組 22 · AER:讓事件找到接收它的主機 · 12 張圖表

31.53.先讀 Figure 150–152 的完成格式,再按事件類型閱讀 Figure 153–161。共同格式只教一次,每張後續表指出其值所屬的事件類型。

回到本節的解釋與範例

先解事件型別,再決定 DW1 和後續讀取

31.54.AER 的格式是共同入口,後續事件表才定義 AEI 和 EVNTSP。這裡解釋收到的事件,不加入已排除功能的設定流程。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
AET bits 2:0/AEI bits 15:8/LID bits 23:16AET 選 Error、SMART、Notice、Immediate、One Shot 或命令集分支;AEI 再在分支內解碼。AET=1、AEI=1 連到溫度門檻,不能直接把 AEI=1 當成所有事件共通定義。
EVNTSP DW1事件定義決定這 32 bits 的格式;未定義時為 reserved。讀不屬該事件的位元表會把 ID 誤算成量測數值。
AERL/status 05hAERL 為零起算的 outstanding AER 上限,超限可能回 05h。AERL=3 表示允許 4 筆,而不是 3 筆。
一般事件/RAE一般事件回報後遮蔽同類事件,依該事件規則成功讀取相應 Log 並清除才解除;RAE=1 保留。正在分次讀取事件紀錄時先保留事件,讀取失敗也不應視為已清除。
Immediate/One ShotImmediate 只在事件當下已有 outstanding AER 時回報,沒有則不補報;One Shot 只回報一次,回報時由控制器清除,pending 事件的清除按各事件定義。不要為了清除 Immediate 事件而任意讀一個無關 Log。
Error/SMART/Notice 各表的 AEIError 指介面或內部錯誤;SMART 指健康條件;Notice 指狀態變化。不存在的 doorbell 與 spare 低於門檻要進不同事件分支。
VSENT/VTHT/IVM/VOLSSVSENT 指向感測器,VTHT 分超壓或欠壓,IVM 乘該感測器的 VOLSS 換算 Volts。先在 Identify 選同一感測器的倍率,再換算量測,不能只由原始 IVM 比較不同感測器。
PMT/IPS/IPVPMT 指量測類別,IPS 的倍率乘 IPV 得到 Watts;IPM 是含倍率和數值的欄位組合。報告功率值時同時帶出類別、單位與這是 interval measurement 的背景。
CDQID bits 15:0Controller Data Queue 事件的 DW1 指出資料佇列 ID,本表沒有把 tail pointer 位置直接放入此欄。CDQID=3 不等於 tail offset=3。
來源:Base 2.4 §5.2.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 150, 文件頁 184, PDF 頁 210

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 151, 文件頁 184-185, PDF 頁 210-211

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 152, 文件頁 185, PDF 頁 211

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 153, 文件頁 185, PDF 頁 211

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 154, 文件頁 185, PDF 頁 211

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

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 156, 文件頁 189-190, PDF 頁 215-216

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 157, 文件頁 190, PDF 頁 216

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 158, 文件頁 190, PDF 頁 216

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 159, 文件頁 190-191, PDF 頁 216-217

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 160, 文件頁 191, PDF 頁 217

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 161, 文件頁 191, PDF 頁 217

Base Figure 150 · Status Code – Command Specific Status Values

一句話重點

Base150-1AER 的命令專屬 status 05h 表示同時尚未完成的事件要求超過上限。

來源:Base 2.4 §5.2.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 150, 文件頁 184, PDF 頁 210

用例子讀懂

Base150-2AERL 的編碼換算成允許的要求數後再安排 AER;不要把長時間等待事件誤當作要求已失效而一直補送。

Base Figure 151 · Asynchronous Event Request – Completion Queue Entry Dword 0

一句話重點

Base151-1AER 的 DW0 用 AET 選事件表,再以 AEI 與 LID 指出事件內容及相應紀錄。

來源:Base 2.4 §5.2.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 151, 文件頁 184-185, PDF 頁 210-211

用例子讀懂

Base151-2AET=001b、AEI=01h 是溫度門檻事件;AEI=01h 若出現在其他 AET 下,必須換到那張表解讀。

Base Figure 152 · Asynchronous Event Request – Completion Queue Entry Dword 1

一句話重點

Base152-1EVNTSP 的含義由特定事件決定,沒有定義時就是該事件的保留欄位。

來源:Base 2.4 §5.2.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 152, 文件頁 185, PDF 頁 211

用例子讀懂

Base152-2收到電壓事件才用電壓事件的感測器與量測格式;不能把另一事件的 DW1 也解成相同 bit 欄位。

Base Figure 153 · Asynchronous Event Information – Error Status

一句話重點

Base153-1Error Status 的事件資訊區分不存在的 doorbell、無效寫入值及控制器內部錯誤。

來源:Base 2.4 §5.2.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 153, 文件頁 185, PDF 頁 211

用例子讀懂

Base153-2寫一個未建立的 queue doorbell 是 00h;已存在的 queue 卻寫出非法 pointer 值是 01h,兩者不是同一條件。

Base Figure 154 · Asynchronous Event Information – SMART / Health Status

一句話重點

Base154-1SMART/Health 事件分成可靠度、溫度門檻與 spare 低於門檻三類。

來源:Base 2.4 §5.2.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 154, 文件頁 185, PDF 頁 211

用例子讀懂

Base154-2AEI=01h 要再確認是哪個感測器與上下限條件;它不等於所有感測器都過熱。

Base Figure 155 · Asynchronous Event Information – Notice

一句話重點

Base155-1Notice 的 AEI 指定狀態變動的類別;本篇以 namespace 清單變動與 firmware 啟用通知連到保留的 Log。

來源:Base 2.4 §5.2.2.1

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

用例子讀懂

Base155-2收到 namespace 變動通知後讀 LID 04h,再重新 Identify 受影響對象;通知不是一份完整的 namespace 清單。

Base Figure 156 · Asynchronous Event Information – I/O Command Specific Status

一句話重點

Base156-1I/O Command Specific Status 的 AEI 必須在其專屬 AET 分支解讀;這張表不提供一般 Read/Write 的 CQE status 對照。

來源:Base 2.4 §5.2.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 156, 文件頁 189-190, PDF 頁 215-216

用例子讀懂

Base156-2AER 是事件通知;某一筆 Read 的成功或失敗仍從那筆 Read 的 CQE 判斷。本表的專題事件流程不在本篇重講。

Base Figure 157 · Asynchronous Event Information – Immediate

一句話重點

Base157-1Immediate 事件有自己的處理方式,包括正常 subsystem shutdown 與溫度遲滯恢復。

來源:Base 2.4 §5.2.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 157, 文件頁 190, PDF 頁 216

用例子讀懂

Base157-2Temperature Threshold Hysteresis Recovery 表示遲滯事件結束;它不是重新發出同一個過溫事件。

Base Figure 158 · Asynchronous Event Information – One Shot

一句話重點

Base158-1One Shot 的 AEI 指出單次通知種類,再由相應 EVNTSP 格式補充目標或量測。

來源:Base 2.4 §5.2.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 158, 文件頁 190, PDF 頁 216

用例子讀懂

Base158-2One Shot 的 03h 先選到電壓事件,再讀 Figure 159;不能只拿 03h 到 Error Status 表找定義。

Base Figure 159 · Voltage Threshold Event – Event Specific Parameter

一句話重點

Base159-1電壓事件用 VSENT 選感測器、VTHT 分超壓或欠壓、IVM 配合 VOLSS 換算電壓。

來源:Base 2.4 §5.2.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 159, 文件頁 190-191, PDF 頁 216-217

用例子讀懂

Base159-2相同 IVM 數字若配到不同 VOLSS,代表的伏特數不同;先確認 VSENT 指到哪一筆 Identify 感測器資料。

Base Figure 160 · Power Threshold Exceeded – Event Specific Parameter

一句話重點

Base160-1功率事件把 PMT 的量測類別與 IPV/IPS 的數值及倍率分開儲存。

來源:Base 2.4 §5.2.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 160, 文件頁 191, PDF 頁 217

用例子讀懂

Base160-2收到一個功率數值時,先以 IPS 換算成 Watts,再和同一 PMT 的情境比較;本篇不進入功率 Feature 的配置。

Base Figure 161 · Controller Data Queue Tail Pointer – Event Specific Parameter

一句話重點

Base161-1這個事件的 EVNTSP 回報 CDQID,而不是把 tail pointer 的位移直接放進 DW1。

來源:Base 2.4 §5.2.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 161, 文件頁 191, PDF 頁 217

用例子讀懂

Base161-2DW1 低 16 bits=3 表示事件屬於資料佇列 3;不能把它當作 tail 已前進 3 bytes 或 3 entries。

圖表組 23 · Log:先定位紀錄,再解讀紀錄裡的證據 · 19 張圖表

31.55.先讀 Figure 203–211 的共同機制,再沿保留的 Log 順序讀 212–217、270–271、304。Figure 331 是共同完成狀態,不必為它重讀中間已排除的 Log。

回到本節的解釋與範例

一次 Log 讀取的目標、位置、長度與事件處理

31.56.先依所選 LID 解讀 LSP/LSI,再設定要傳回主機的區段;所有欄位都有效,才構成可解讀的一次讀取。

LSI
Log Specific Identifier,意義由所選 log page 定義的 identifier。
一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
LID/CSI/LSP/LSILID 選紀錄,CSI 在適用時選命令集;LSP/LSI 的定義由該 Log 指定。同樣填 LSI=1,必須先知道該 Log 是否把它用作 controller identifier;不能任意當成 entry 1。
NUMDU/NUMDL合成 NUMD=(NUMDU<<16)|NUMDL,再以 (NUMD+1)×4 計算 bytes;只對合成值加 1。512 bytes 使用 NUMDU=0、NUMDL=127。
LPOU/LPOL/OT/IOS合成 64-bit LPO;OT=0 使用 byte offset,OT=1 使用該 Log 的索引規則,後者先確認 IOS 支援。位移 512 bytes 填 LPO=512;entry index 7 表示項目位置,不能未讀布局就換成 7 bytes。
DPTR/RAEDPTR 指接收記憶體;RAE=1 保留相應事件,RAE=0 在成功讀取時依事件規則清除。讀取失敗不清除事件;事件處理與 NUMD 指定的 buffer 大小是兩個獨立條件。
LSUPP/IOS/LID Specific ParameterLID 00h 先確認 Log 與其進階選項的支援;每個 LID 的專屬參數仍依該紀錄解讀。控制器支援 Get Log Page,不表示所有 LID 或 index 模式都可用。
LPOL
Log Page Offset Lower;LPO 的低 32 bits,合成後由 OT 決定使用 byte 位移或 Log 定義的索引。
LPOU
Log Page Offset Upper;LPO 的高 32 bits,與 LPOL 合成完整的 64-bit 位置。
來源:Base 2.4 §5.2.13 · Base 2.4 §5.2.13.1.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 203, 文件頁 213, PDF 頁 239

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 204, 文件頁 213, PDF 頁 239

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 205, 文件頁 214, PDF 頁 240

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 206, 文件頁 214, PDF 頁 240

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 207, 文件頁 214, PDF 頁 240

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 208, 文件頁 214-215, PDF 頁 240-241

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.1, Figure 210, 文件頁 217, PDF 頁 243

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.1, Figure 211, 文件頁 217-218, PDF 頁 243-244

Base Figure 204 · Get Log Page – Command Dword 10

一句話重點

Base204-1Get Log Page 的 CDW10 選擇 log、低位長度及相關控制參數。

來源:Base 2.4 §5.2.13

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 204, 文件頁 213, PDF 頁 239

用例子讀懂

Base204-2讀取 512 bytes 共 128 Dwords,長度原始值為 127;同時填正確 LID,才能知道回來的是哪一份紀錄。

Base Figure 206 · Get Log Page – Command Dword 12

一句話重點

Base206-1LPOL 是 log offset 的低 32 bits,單位還要看 offset 模式。

來源:Base 2.4 §5.2.13

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 206, 文件頁 214, PDF 頁 240

用例子讀懂

Base206-2byte-offset 模式下讀下一段 512 bytes,LPOL 設 512;index-offset 模式則以項目索引解釋,數字 512 不再表示相同位置。

index-offset
index-offset 對比;index 選取項目,offset 計算位置。例如從 0 起算的 Format Index=2 選第 3 個格式,而 OFST=256 表示從 image 起點位移 256 個 Dwords。

Base Figure 208 · Get Log Page – Command Dword 14

一句話重點

Base208-1CDW14 的 CSI、OT、UIDX 決定命令集、offset 模式與相關選擇。

來源:Base 2.4 §5.2.13

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 208, 文件頁 214-215, PDF 頁 240-241

用例子讀懂

Base208-2相同 LPOL=4,在 byte-offset 與 index-offset 下表示不同事物;先看 OT 才能正確解讀位置。

同一筆 Get Log Page 的目標、範圍與資料位置

31.57.讀 log 先選 LID 與命令集,再解讀該 log 的 LSP/LSI;NUMD 決定本次量,LPO 決定本次起點,DPTR 決定主機接收位置。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
LID/CSI/LSP/LSILID 與 CSI 選紀錄種類,LSP、LSI 的含義由所選 log 定義。LSP 在 Boot 中可含 BPID,在 Telemetry 中有建立 capture 的控制位元,不能跨 log 照搬。
NUMDU/NUMDL先合成 NUMD=(NUMDU<<16)|NUMDL,再計算 (NUMD+1)×4 bytes。512 bytes 對應 NUMD=127;高低部分不能各自加 1。
LPOU/LPOL/OT高低欄位組成 64-bit offset;OT 決定按 byte 位移或項目索引解讀。byte-offset 模式下,從 512-byte 表頭後開始讀資料要保留起點差異;index 模式不能直接使用同一個 byte 數。
DPTR/RAEDPTR 給接收記憶體,RAE 控制相關事件的保留行為。分段讀取先準備每段 buffer,再在恰當時機確認事件,避免中途改變可取得的紀錄。
LSUPP/LID Specific ParameterSupported Log Pages 回報實際支援及 log 專屬能力。規格列有某個 LID,不代表此裝置一定實作;先查支援再使用進階選項。
來源:Base 2.4 §5.2.13

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 209, 文件頁 215-216, PDF 頁 241-242

Base Figure 209 · Get Log Page – Log Page Identifiers

一句話重點

Base209-1LID 表指出 Log 的名稱、scope 與是否使用 CSI;本篇保留八種 Log,不把整張清單當成報告範圍。

來源:Base 2.4 §5.2.13

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 209, 文件頁 215-216, PDF 頁 241-242

用例子讀懂

Base209-2LID 03h 與 LID 02h 的作用範圍及欄位不同;即使都由 Get Log Page 讀取,也不是同一種紀錄。

Base Figure 210 · Supported Log Pages Log Page

一句話重點

Base210-1Supported Log Pages 列出裝置實際支援哪些紀錄。

來源:Base 2.4 §5.2.13.1.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.1, Figure 210, 文件頁 217, PDF 頁 243

用例子讀懂

Base210-2規格定義某個 LID,但裝置沒有支援時,不能把表中定義當成裝置能力;先查支援清單。

Base Figure 211 · LID Supported and Effects Data Structure

一句話重點

Base211-1每個 LID 的支援與效果描述子補上紀錄特性。

來源:Base 2.4 §5.2.13.1.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.1, Figure 211, 文件頁 217-218, PDF 頁 243-244

用例子讀懂

Base211-2LSUPP 表示是否支援,LID-specific parameter 另描述相應特性;不能只看一個 bit 就推論全部參數可用。

八種 Log 的內容,分別能證明什麼

31.58.共同傳輸格式不重講;這一組直接把每個保留 Log 的欄位連到有效範圍、單位和後續判斷。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
ECNT/SQID/CID/STS/PELECNT=0 是無效 entry;非命令專屬錯誤的 SQID/CID 可為 FFFFh。PEL 分 byte 和 bit,STS 按 status 格式解讀。BYTLOC=40、BITLOC=0 指向 SQE 第 40 byte 的 bit 0;不是 LBA。
NSID/LBA/VSIA/CSI/opcode/命令專屬資訊先確認欄位在該錯誤下有效,再回到對應 namespace、命令集和來源命令;VSIA=0 表示沒有額外廠商 Log。錯誤紀錄中的值不足以定位特定命令時,不能憑 FFFFh 猜測最後一筆命令。
Critical Warning/Available Spare/Percentage Used分別表示警示位元、可用 spare 百分比與耐久度估計使用量,不能當成相同的剩餘容量。Percentage Used 不是檔案系統已使用的磁碟空間比例。
Composite Temperature/TST/Sensor entries溫度用 Kelvin,感測器 entry 的 0 表示未實作;實際量測位置由實作決定。300 K 約為 26.85 °C;未實作的 0 值不轉換成攝氏。
Data Units/Host Commands/Media Errors/Error Entries流量、命令次數、資料錯誤數與錯誤紀錄數是不同統計;NVM 計數補充集中在後面的 §4.1.4.1–.2。同一筆大 Write 與小 Write 都可增加一筆命令,但流量不同。
Power Cycles/Power On Hours/Unsafe Shutdowns/Busy Time/Thermal counters各計數有自己的單位與累計條件,時間欄位不能全部當秒數。Controller Busy Time 以分鐘、Power On Hours 以小時呈現,直接比較原始數字沒有意義。
AFI.CAFS/NAFS/FRS1–FRS7分清目前啟用 slot、下次啟用 slot 與各 slot 的 revision;revision 是 ASCII 字串。slot 2 已保存新版且 NAFS=2,不等於 CAFS 已經變成 2。
Changed Attached Namespace List回報變動的 NSID;特殊全 FFFFFFFFh 值表示須依規則重新取得完整資訊。不能把 changed 清單當成所有 active namespaces 的完整清單。
ACS/IOCS/CSUPP/LBCC/NCC/NIC/CCC先選 Admin 或 I/O 表,再看支援及可能改變的內容/能力;每項有獨立含義。Admin opcode 2 在 byte 8;I/O opcode 2 在 byte 1032。NCC 提醒之後重新確認 namespace 能力。
CSE/CSER/CSPCSER 有有效且主機支援的值時按其優先規則判讀,CSE 描述相應提交與執行限制;CSP=0 是未回報範圍。支援某命令不代表可與任何其他 namespace 命令並行。
FIS/FSUPP/UDCC/NCC/NIC/CCC/FSPLID 12h 每筆以 FID 索引;FSUPP 表支援,其餘 bits 區分 user data、namespace 能力、inventory 與 controller 能力變動。FSP 非零時只選一個範圍,0 是未回報。FID 07h 在 byte 28;不把 scope=0 解成沒有影響。
MDCSV/MDCS.DCCS、DNCS、DSCS版本為 0;三個 default status bits 各須配對相應支援能力。不支援時值為 0 且主機應忽略。DNCS=0 不能單獨證明 namespace 配置曾被修改。
Log command statusInvalid Log Page、Invalid Controller Identifier 與 I/O Command Set Not Supported 分別定位不同選擇錯誤。LID 對但 LSI 指到無效 controller,不能簡化為該 Log 不存在。
AFI
Active Firmware Info,LID 03h 中同時包含目前 active slot 與下一次 reset 後預定 active slot 的 byte。
來源:Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.13.1.3 · Base 2.4 §5.2.13.1.4 · Base 2.4 §5.2.13.1.6 · Base 2.4 §5.2.13.1.18 · Base 2.4 §5.2.13.1.33 · Base 2.4 §5.2.13.4

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.2, Figure 212, 文件頁 218-220, PDF 頁 244-246

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.3, Figure 213, 文件頁 221-225, PDF 頁 247-251

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.3, Figure 214, 文件頁 225, PDF 頁 251

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.4, Figure 215, 文件頁 226, PDF 頁 252

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.6, Figure 216, 文件頁 227, PDF 頁 253

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.6, Figure 217, 文件頁 228-229, PDF 頁 254-255

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.18, Figure 270, 文件頁 276, PDF 頁 302

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.18, Figure 271, 文件頁 277-278, PDF 頁 303-304

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

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.4, Figure 331, 文件頁 336, PDF 頁 362

Base Figure 212 · Error Information Log Entry Data Structure

一句話重點

Base212-1Error Entry 先用 ECNT 判定紀錄,再用 SQID/CID、STS、PEL、NSID 及有效的專屬資訊描述錯誤。

來源:Base 2.4 §5.2.13.1.2

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.2, Figure 212, 文件頁 218-220, PDF 頁 244-246

用例子讀懂

Base212-2PEL 的 BYTLOC=40、BITLOC=0 指 SQE 的第 40 byte 中 bit 0,不是 LBA 40,也不是第 40 個 Dword。

Base Figure 213 · SMART / Health Information Log Page

一句話重點

Base213-1SMART/Health log 把溫度、健康狀態與累計統計分開回報。

來源:Base 2.4 §5.2.13.1.3

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.3, Figure 213, 文件頁 221-225, PDF 頁 247-251

用例子讀懂

Base213-2Composite Temperature 與個別感測器溫度不同,HCTM 累計計數又是另一種單位;不能把整張表全部當成即時溫度。

Base Figure 214 · Temperature Sensor Data Structure

一句話重點

Base214-1每個 Temperature Sensor 項目以 Kelvin 儲存溫度;0h 表示沒有實作該感測器。

來源:Base 2.4 §5.2.13.1.3

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.3, Figure 214, 文件頁 225, PDF 頁 251

用例子讀懂

Base214-2TST=300 表示約 26.85 °C;TST=0 不能翻成裝置溫度為 −273.15 °C。

Base Figure 215 · Firmware Slot Information Log Page

一句話重點

Base215-1Firmware Slot log 以啟用資訊連到各 slot 的韌體版本。

來源:Base 2.4 §5.2.13.1.4

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.4, Figure 215, 文件頁 226, PDF 頁 252

用例子讀懂

Base215-2先讀 AFI 所指 slot,再讀對應 FRS;其他 slot 存有映像,不代表它目前已在執行。

FRS
Firmware Revision for Slot,LID 03h 中每個 slot 的八-byte revision 字串欄位。

Base Figure 216 · Commands Supported and Effects Log Page

一句話重點

Base216-1Commands Supported and Effects 依 Admin 與 I/O 分成兩張固定位置的 opcode 索引表。

來源:Base 2.4 §5.2.13.1.6

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.6, Figure 216, 文件頁 227, PDF 頁 253

用例子讀懂

Base216-2Admin Opcode 02h 的項目在 byte 8;I/O Opcode 02h 的項目在 byte 1032。相同 opcode 要先選對清單。

Base Figure 217 · Commands Supported and Effects Data Structure

一句話重點

Base217-1每個命令項目分別回報支援、資料或能力變動、執行限制與作用範圍。

來源:Base 2.4 §5.2.13.1.6

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.6, Figure 217, 文件頁 228-229, PDF 頁 254-255

用例子讀懂

Base217-2CSUPP=1 只回答支援;若 NCC 表示可能改變 namespace 能力,完成後還應重新 Identify,而非直接沿用舊格式資料。

Base Figure 270 · Feature Identifiers Effects Log Page

一句話重點

Base270-1Feature Identifiers Effects Log 以 FID 為索引,每筆項目描述 Set Features 對該功能的影響。

來源:Base 2.4 §5.2.13.1.18

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.18, Figure 270, 文件頁 276, PDF 頁 302

用例子讀懂

Base270-2FID 07h 的項目從 byte 7×4=28 開始;這是 Log 內的 byte offset,不是 Get Features 的回覆值。

Base Figure 271 · FID Supported and Effects Data Structure

一句話重點

Base271-1FID 項目分別回報支援、scope、UUID 選擇支援及可能造成的內容或能力變動;保存與變更能力另由 Get Features 查詢。

來源:Base 2.4 §5.2.13.1.18

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.18, Figure 271, 文件頁 277-278, PDF 頁 303-304

用例子讀懂

Base271-2FSP=0 表示未回報 scope,不是「完全不影響任何對象」;非零 FSP 按規格只設一個 scope bit。

Base Figure 304 · Manufacturer Default Configuration Status Log Page

一句話重點

Base304-1MDCSV 選資料結構版本,MDCS 的三個旗標分別描述不同層次的預設配置狀態。

來源:Base 2.4 §5.2.13.1.33

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

用例子讀懂

Base304-2DNCS=0 可能是目前不同於預設,也可能是控制器不支援對應能力;先看相應 support bit,不能直接宣稱配置已被改過。

Base Figure 331 · Get Log Page – Command Specific Status Values

一句話重點

Base331-1Get Log Page 的 status 分清 LID、controller identifier 與命令集不受支援三類問題。

來源:Base 2.4 §5.2.13.4

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.4, Figure 331, 文件頁 336, PDF 頁 362

用例子讀懂

Base331-29h 的 Invalid Log Page 不等於 1Fh 的 Invalid Controller Identifier;後者應對照 LSI 中選到的 controller。

圖表組 24 · NVM Log 補充:把數值換回資料範圍與計數 · 1 張圖表

31.59.Figure 110 只補 Error Entry 的 User Data;SMART 的 NVM 計數定義在正文,直接對照前面已講過的 LID 02h 欄位。

回到本節的解釋與範例

事件分支與錯誤位置的 NVM 定義

31.60.這兩張圖分別補 Base AER 與 Error Information,並沒有新增一種共同 Log 格式。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
AER.AET/AEI/NoticeNVM Notice 值放在既有事件型別下解讀;其對應狀態流程若不在範圍內,僅辨識通知意義。不能把事件的 AEI 數字當成某筆 Read 的 status。
Error Entry bytes 23:16/LBA在適用的錯誤情境下,回報發生錯誤的最低編號 LBA。錯誤涉及 LBA 100 與 108 時,這個欄位取 100;不代表已列出所有錯誤位置。
Data Units Read/Written 的 NVM 補充當 logical block 大小不是 512 bytes,先把資料量轉成 512-byte units,再依 Base 的統計格式回報。4096-byte data 對應 8 個 512-byte units;還需套用 Base 的千單位計數和進位規則。
來源: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

NVM Figure 110 · Error Information Log Entry Data Structure – User Data

一句話重點

NVM110-1Error Information 的 NVM User Data 欄位在適用時指出發生錯誤的最低編號 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 100 與 108,這個欄位依定義取最低的 100;不把其他 Log 的位置保證套到這裡。

圖表組 25 · Device Self-test:從啟動要求到檢查結果 · 7 張圖表

31.61.Figure 176–180 說明選對象、選動作和命令互動;218–219 把目前進度與歷史結果分開。先讀有效旗標,再讀失敗位置。

回到本節的解釋與範例

測試種類、範圍與目前作業共同決定處理方式

31.62.STC 選測試或控制動作,NSID 選對象,DSTP 是適用測試的參數。控制器還要結合是否已有作業及其他命令的影響,決定接受、拒絕或中止。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
STC/DSTP先解讀 STC,再查 DSTP 在該作業下是否有定義;保留編碼不得自行賦予測試種類。要求 short test 與要求 abort 是不同動作;不能把 STC 數字當成測試次數。
NSID=0h/單一 NSID/FFFFFFFFh分別依命令規則選控制器、單一 namespace 或開始時可存取的 namespaces;Host-Initiated Refresh 忽略 NSID。NSID=7 未附加到本控制器時,不能因另一個控制器可存取它就認為本要求有效。
目前作業/新 STC/結果建立互動表的起點與輸入共同決定是否留下原作業結果及新要求的狀態。看到 Device Self-test in Progress,先對照新要求與目前作業,不能當成測試發現媒體錯誤。
Format NSID/SES/FNS/SENSFormat 的範圍與動作會影響正在測試的對象;須比較兩者範圍。Format 的對象與 self-test 對象不相交,和兩者相交時,不應直接套用同一個中止結論。
segment/test performed/failure criteria示例列出一種測試切分方式;informative 範例不要求每個裝置都實作相同 segment。SEGN 可用於理解哪段失敗,但不能單憑範例推論廠商內部每個測試步驟。
來源:Base 2.4 §5.2.6 · Base 2.4 §5.2.6.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, Figure 176, 文件頁 199, PDF 頁 225

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, Figure 177, 文件頁 199, PDF 頁 225

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, Figure 178, 文件頁 200, PDF 頁 226

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, Figure 179, 文件頁 200, PDF 頁 226

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6.1, Figure 180, 文件頁 201, PDF 頁 227

Base Figure 176 · Device Self-test Namespace Test Action

一句話重點

Base176-1Self-test 的 NSID 分清控制器本身、指定 namespace 與目前可存取的全體。

來源:Base 2.4 §5.2.6

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, Figure 176, 文件頁 199, PDF 頁 225

用例子讀懂

Base176-2NSID=0 只測 controller。一般 NSID 無效時回 Invalid Namespace or Format;NSID 處於 inactive 時則回 Invalid Field in Command。這是 ID 是否有效與目前存取狀態的差別。

Base Figure 177 · Device Self-test – Command Dword 10

一句話重點

Base177-1STC 選擇短測試、延伸測試、Refresh、廠商測試或中止。

來源:Base 2.4 §5.2.6

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, Figure 177, 文件頁 199, PDF 頁 225

用例子讀懂

Base177-2想執行短測試填 1h,想中止正在執行的測試填 Fh;這個選擇器不是測試目前完成百分比。

Base Figure 179 · Device Self-test – Command Processing

一句話重點

Base179-1Self-test 命令處理取決於是否已有測試在執行。

來源:Base 2.4 §5.2.6

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, Figure 179, 文件頁 200, PDF 頁 226

用例子讀懂

Base179-2沒有測試時送 Abort 可以成功但不新增測試結果;有測試時送 Abort 則會中止並記錄結果,兩種成功有不同效果。

Base Figure 180 · Device Self-test – Command Specific Status Values

一句話重點

Base180-1Device Self-test in Progress 表示已有測試,新的要求未能開始。

來源:Base 2.4 §5.2.6.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6.1, Figure 180, 文件頁 201, PDF 頁 227

用例子讀懂

Base180-2收到此狀態後,先讀目前測試資訊;它不是新測試的通過結果,也不是說裝置的資料一定壞掉。

目前進度與歷史結果使用不同欄位

31.63.先由 log header 讀目前作業,再選一筆結果紀錄。紀錄內先看測試種類與結果,再按有效性旗標讀失敗欄位。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
DSTOS/DSTCS;RDS1–RDS20前者是目前作業與進度,後者是結果紀錄序列。目前進度 50% 與最前面的歷史成功結果可以同時存在,兩者未必屬於同一作業。
DSTC/DSTR/SEGN/POH分別描述測試種類、結果、適用的失敗區段與作業時間背景。先確認作業如何結束,再決定 SEGN 能否用於解釋失敗位置。
VDINFO → NSID/FLBA/STCT/STC有效性旗標決定哪些資訊可信;STCT 與狀態碼需成對解讀。FLBA Valid=0 時,FLBA 的非零內容不能用來指出故障 LBA。
VS廠商專屬結果需依廠商格式解讀,不沿用其他裝置的定義。未知 VS bytes 保留原值及來源,不能任意翻成錯誤類別。
DSTCS
Device Self-test Completion Status,LID 06h 中的 0 到 100 完成百分比。
DSTOS
Device Self-test Operation Status,LID 06h 中表示目前 operation 類型的 nibble。
來源:Base 2.4 §5.2.13.1.7

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.7, Figure 218, 文件頁 230, PDF 頁 256

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.7, Figure 219, 文件頁 231-232, PDF 頁 257-258

Base Figure 218 · Device Self-test Log Page

一句話重點

Base218-1Self-test log 同時保存目前作業狀態與歷史結果。

來源:Base 2.4 §5.2.13.1.7

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.7, Figure 218, 文件頁 230, PDF 頁 256

用例子讀懂

Base218-2目前進度 50% 表示正在執行的測試;最前面的歷史結果可能屬於前一次已結束測試,兩者不要混成同一次結果。

Base Figure 219 · Self-test Result Data Structure

一句話重點

Base219-1Self-test Result 的有效標記決定哪些失敗欄位可以解讀。

來源:Base 2.4 §5.2.13.1.7

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.7, Figure 219, 文件頁 231-232, PDF 頁 257-258

用例子讀懂

Base219-2先看 VDINFO,再決定 NSID、FLBA 或狀態欄位是否有效;欄位有非零內容不代表它在這次結果中有效。

圖表組 26 · Firmware:先看啟用選擇,再看映像怎麼送入 · 7 張圖表

31.64.Figure 187–189 解釋 CA/FS、MUD 與啟用結果;Figure 190–193 解釋資料位址、數量、位移及重疊。CA=6/7 的 BPID 及保護條件接到本篇 Boot 單元。

回到本節的解釋與範例

把映像的傳送位置接到保存與啟用時機

31.65.先看 Commit 的選擇,再看 Download 的欄位;實際更新仍先傳送完整映像,接著執行適用的保存及啟用動作。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
CA/FS只讀一般 firmware 動作:CA=0 保存已下載映像但不啟用;1 保存並安排下次 Controller Level Reset 啟用;2 對既有 slot 安排下次 Controller Level Reset 啟用;3 保存新映像後立即啟用,若沒有新下載則啟用 slot 的既有映像。各項仍須符合其支援條件。CA=0 成功只證明映像已保存;之後仍要選所需的啟用動作。
FRMW/FS/CA=3slot 數、slot 1 唯讀及不經 reset 啟用的支援各自確認;FS=0 依規格由控制器選擇適用 slot。裝置支援多個 slot,不代表每個 slot 都能覆寫,也不代表能立即啟用。
MUD/MEFWO/ASQFWO偵測多個更新序列的情況,與單筆 Download 片段重疊是不同層次。先確認是否支援該回覆,再判斷更新序列是否受其他更新影響。
DPTR/NUMD/OFST/FWUGDPTR 給映像片段位置;NUMD 是 Dword 數減 1,OFST 是 Dword 位移;FWUG 約束粒度與對齊。第二個 4096-byte 片段:NUMD=1023、OFST=1024,不把 OFST 也減 1。
completion status/AFI.CAFS/NAFS/FRSstatus 可能指出啟用所需 reset;LID 03h 分開檢查目前 slot、下次 slot 與版本字串。NAFS=2 而 CAFS=1,表示目前仍執行 slot 1;不能用 slot 2 已有版本字串證明已切換。
來源:Base 2.4 §5.2.9 · Base 2.4 §5.2.9.1 · Base 2.4 §5.2.10 · Base 2.4 §5.2.10.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.9, Figure 187, 文件頁 203, PDF 頁 229

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.9.1, Figure 188, 文件頁 204, PDF 頁 230

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.9.1, Figure 189, 文件頁 204-205, PDF 頁 230-231

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.10, Figure 190, 文件頁 205, PDF 頁 231

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.10, Figure 191, 文件頁 205, PDF 頁 231

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.10, Figure 192, 文件頁 206, PDF 頁 232

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.10.1, Figure 193, 文件頁 206, PDF 頁 232

Base Figure 187 · Firmware Commit – Command Dword 10

一句話重點

Base187-1CA 決定 firmware 或 Boot 映像的保存及啟用動作,FS 和 BPID 各有自己的對象。

來源:Base 2.4 §5.2.9

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.9, Figure 187, 文件頁 203, PDF 頁 229

用例子讀懂

Base187-2CA=1 以 FS 指定 firmware slot 的替換及下次啟用;CA=6 以 BPID 指定要寫入的 Boot Partition。不能拿 slot 2 當成第三個 Boot Partition。

Base Figure 188 · Firmware Commit – Completion Queue Entry Dword 0

一句話重點

Base188-1Firmware Commit 回覆中的旗標描述特定更新偵測結果。

來源:Base 2.4 §5.2.9.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.9.1, Figure 188, 文件頁 204, PDF 頁 230

用例子讀懂

Base188-2命令完成後,仍應逐個解讀 MUD 等回覆位元;不能用一個非零 DW0 直接推論「韌體版本已切換」。

Base Figure 189 · Firmware Commit – Command Specific Status Values

一句話重點

Base189-1Firmware Commit 狀態區分映像、slot 與需要重設等條件。

來源:Base 2.4 §5.2.9.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.9.1, Figure 189, 文件頁 204-205, PDF 頁 230-231

用例子讀懂

Base189-2回覆需要 reset 的啟用條件,與 Invalid Firmware Image 是不同結果;前者需要安排流程,後者先檢查映像。

Base Figure 190 · Firmware Image Download – Data Pointer

一句話重點

Base190-1Firmware Image Download 的 DPTR 指向此次傳入的映像區段。

來源:Base 2.4 §5.2.10

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.10, Figure 190, 文件頁 205, PDF 頁 231

用例子讀懂

Base190-2分兩次傳映像時,第二次 DPTR 可以指另一段主機 buffer;映像內的目的偏移另由 OFST 指定。

Base Figure 191 · Firmware Image Download – Command Dword 10

一句話重點

Base191-1Firmware Download 的 NUMD 以 Dwords 且從零起算表示長度。

來源:Base 2.4 §5.2.10

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.10, Figure 191, 文件頁 205, PDF 頁 231

用例子讀懂

Base191-2傳入 4096 bytes 時共有 1024 Dwords,NUMD=1023;若直接填 4096,單位及編碼都會錯。

Base Figure 192 · Firmware Image Download – Command Dword 11

一句話重點

Base192-1Firmware Download 的 OFST 指定映像中的 Dword 偏移。

來源:Base 2.4 §5.2.10

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.10, Figure 192, 文件頁 206, PDF 頁 232

用例子讀懂

Base192-2接續前面 4096 bytes 的區段,OFST=1024;它不是主機記憶體位址,也不是接續區段的 byte 長度。

Base Figure 193 · Firmware Image Download – Command Specific Status Values

一句話重點

Base193-1Overlapping Range 狀態指出傳入的映像區段發生不允許的重疊。

來源:Base 2.4 §5.2.10.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.10.1, Figure 193, 文件頁 206, PDF 頁 232

用例子讀懂

Base193-2第一段覆蓋前 4096 bytes,第二段卻又從 byte 2048 開始時,需要按下載規則檢查重疊,不能只核對兩個 buffer 各自長度。

圖表組 27 · Boot Partition:讀映像、寫映像與切換啟動來源 · 3 張圖表

31.66.Figure 279 選 partition,280 分 header 和映像;542 分開解釋 Set/Get 的狀態值,再對回 Firmware Commit 的 CA=6/7。

回到本節的解釋與範例

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

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

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

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.21, Figure 279, 文件頁 283, PDF 頁 309

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.21, Figure 280, 文件頁 284, PDF 頁 310

Base Figure 279 · Boot Partition Log Specific Parameter Field

一句話重點

Base279-1Boot Partition log 的參數用 BPID 選要讀的分割區。

來源:Base 2.4 §5.2.13.1.21

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.21, Figure 279, 文件頁 283, PDF 頁 309

用例子讀懂

Base279-2同一 LID 配 BPID=0 或 1 會選到不同 partition;LID 指紀錄種類,BPID 才指此次目標。

Base Figure 280 · Boot Partition Log Page

一句話重點

Base280-1Boot Partition log 先回報 header,再提供分割區資料。

來源:Base 2.4 §5.2.13.1.21

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.21, Figure 280, 文件頁 284, PDF 頁 310

用例子讀懂

Base280-2讀回 buffer 後先找 BPD 的開始位置;不能把 header 內容當成開機映像的第一段 bytes。

把保護機制、分割區狀態與操作結果分開

31.68.先判斷目前由 Set Features 或 RPMB 控制,再選 BP0 或 BP1。讀值、要求變更、重設後保留與驗證操作分別有自己的規則。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
BP0WPS bits 2:0/BP1WPS bits 5:3兩個 3-bit 欄位獨立描述分割區狀態。只要求解鎖 BP1 並保留 BP0,CDW11=(001b<<3)|000b=08h。
000b/001b/010b/011b/100b依序為 Set 不改變、解鎖、鎖定、鎖到 power cycle,以及 Get 回報 RPMB 控制;不是所有編碼都能同時用於 Set 與 Get。Get 不回 000b;Set 指定 100b 會是 Invalid Field in Command。
Controller Level Reset/power cycleSet Features 的解鎖可跨 controller reset;power cycle 會回 locked。RPMB 啟用後,兩種事件都會使已解鎖分割區重新鎖定。要恢復寫入,先看是哪個機制控制,再採用對應的解鎖操作。
Write Locked Until Power Cycle/CTRATT.MDS/共享關係目前狀態與裝置配置一起限制是否可變更;multi-domain 且跨控制器共享的分割區禁止使用此狀態。A、B 共享 BP0,將 BP0 設 011b 的要求會回 Feature Not Changeable;不能以只重設 A 來解除。
RPMB Enable/各分割區 Write Protection bits啟用機制與分割區鎖定是不同層次;啟用後不能停用機制,但可依驗證流程變更各分割區保護狀態。FID 85h 回 100b 表示應改走 RPMB 控制,不表示所有分割區永遠不可解鎖。
MDS
Multiple Domain Subsystem,指出 NVM subsystem 是否包含多個 domains 的能力 bit。
來源:Base 2.4 §5.2.30.1.39

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.39, Figure 542, 文件頁 513-514, PDF 頁 539-540

Base Figure 542 · Boot Partition Write Protection Config - Command Dword 11

一句話重點

Base542-1Boot Partition Write Protection Config 分別設定兩個分割區的保護狀態。

來源:Base 2.4 §5.2.30.1.39

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.39, Figure 542, 文件頁 513-514, PDF 頁 539-540

用例子讀懂

Base542-2Partition 0 鎖定而 Partition 1 未鎖定是可分別描述的配置;不能只用一個「Boot 已鎖」句子忽略目標分割區。

圖表組 28 · Telemetry:完整取得同一次診斷資料 · 4 張圖表

31.69.Figure 220/222 的建立與選擇參數決定讀哪一份資料;221/223 的邊界、可用性和 generation 決定如何完整取回。

回到本節的解釋與範例

用建立選項、累積範圍與紀錄版本取回同一次 Telemetry

31.70.Host-Initiated 和 Controller-Initiated 資料各有來源。共同的 512-byte block 編號只負責定位;generation、可用旗標和 scope 決定這些 bytes 屬於哪份紀錄。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
LID 07h/08h/LPI07h 讀主機發起資料,08h 讀控制器發起資料;header 的 Log Identifier 對應這份紀錄種類。LID 相同只能證明種類相同,還須看 generation 才能追蹤擷取版本。
CTHID/MCDA/MCDASCTHID=1 要求建立;MCDAS 回報支援 Maximum Created Data Area 選擇,MCDA 在受支援時選建立到哪個 Area。第一筆建立用 CTHID=1,後續讀同一份資料用 0;不能每段都重新建立。
THDA1LB–THDA4LB/TCDA1LB–TCDA4LBLast Block 是含終點的 block 編號;各 Area 都從 block 1 開始,較大 Area 包含前面的範圍。Area 1 Last Block=65 有 33280 bytes data;加 header 為 33792 bytes,Area 2 的新增部分才從 block 66 起。
THDGN/TCDGN/TCDA前兩者辨認主機/控制器資料的擷取版本;TCDA 表示控制器資料可用,清除後不可假設先前紀錄仍待取。分段前後 generation 由 7 變 8 時,不拼接現有片段;RAE=1 可在讀取期間保留相關事件。
THS/TCS/RID/IEEE OUIscope 描述此份資料涵蓋的範圍;Reason Identifier 與廠商識別資料協助解讀來源和原因,payload 可採廠商格式。知道 Last Block=65 能算資料量,但無法從這個數字推導廠商診斷內容。
LPA/ETDAS/Area 4LPA 的 Telemetry Data Area 4 支援能力與主機 Host Behavior Support 的 ETDAS 宣告須一起成立,才可使用延伸 Area 4。固定 header 中存在 DA4 Last Block 欄位,不代表每台裝置或每次主機配置都能取 Area 4。
LPO/NUMD/512-byte blocks採 byte offset 時,block n 起點是 n×512;傳 n 個 blocks 的 Get Log Page 長度為 NUMD=n×128−1。從 block 66 讀 2 blocks:LPO=33792、NUMD=255;不是 LPO=66。
OUI
Organizationally Unique Identifier,由 IEEE 配置給組織的 identifier 前綴。
來源:Base 2.4 §5.2.13.1.8 · Base 2.4 §5.2.13.1.8.1 · Base 2.4 §5.2.13.1.9

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.8, Figure 220, 文件頁 232-233, PDF 頁 258-259

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.8, Figure 221, 文件頁 234-235, PDF 頁 260-261

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.8.1, Figure 222, 文件頁 235, PDF 頁 261

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.9, Figure 223, 文件頁 236-237, PDF 頁 262-263

Base Figure 220 · Telemetry Host-Initiated Log Specific Parameter Field

一句話重點

Base220-1Host-Initiated Telemetry 的參數選擇是否建立新資料及收集範圍。

來源:Base 2.4 §5.2.13.1.8

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.8, Figure 220, 文件頁 232-233, PDF 頁 258-259

用例子讀懂

Base220-2想分段讀同一份紀錄時,不應每段都要求重新建立,否則可能把不同時間的資料接在一起。

Base Figure 221 · Telemetry Host-Initiated Log Page

一句話重點

Base221-1Host-Initiated Telemetry header 給出各資料區終點與紀錄版本。

來源:Base 2.4 §5.2.13.1.8

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.8, Figure 221, 文件頁 234-235, PDF 頁 260-261

用例子讀懂

Base221-2讀完第一段後若 generation 資訊改變,就要重新確認是否仍為同一份紀錄,不能僅按 byte offset 繼續串接。

Base Figure 222 · Telemetry Host-Initiated Log Page - LID Specific Parameter Field

一句話重點

Base222-1MCDAS 回報主機發起 Telemetry 支援的收集資料區能力。

來源:Base 2.4 §5.2.13.1.8.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.8.1, Figure 222, 文件頁 235, PDF 頁 261

用例子讀懂

Base222-2打算要求較大的資料區前,先查支援能力,再設 MCDA;要求欄位與支援欄位不能互相取代。

Base Figure 223 · Telemetry Controller-Initiated Log Page

一句話重點

Base223-1Controller-Initiated Telemetry 由控制器建立並回報可讀取狀態。

來源:Base 2.4 §5.2.13.1.9

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.9, Figure 223, 文件頁 236-237, PDF 頁 262-263

用例子讀懂

Base223-2TCDA 表示有相應資料可供取得時,主機還要依 TCDGN 等資訊讀完同一份紀錄並遵守確認規則。

圖表組 29 · Sanitize:清除要求、背景進度與最終狀態 · 5 張圖表

31.71.Figure 451–453 解 action、Overwrite 與命令結果;312 解背景狀態與時間;492 解 no-deallocate 設定。Figure 144 用狀態判斷其他命令能否執行。

回到本節的解釋與範例

把作業狀態、要求參數與時間估計接起來

31.72.同一份 log 同時保留狀態與補充資訊。讀取順序是目標、狀態、有效欄位、數值;不要從一個進度值直接跳到「資料已清除」的結論。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
SSTAT.SOS/SPROGSOS=000b 尚未開始,001b 成功,010b 作業進行中,011b 失敗,100b 成功但發生非預期解除配置。作業進行中才按有效條件換算 SPROG×100/65536%。SPROG=32768 約為 50%;SOS=010b 也可能涵蓋 Media Verification 或 Post-Verification Deallocation,須配合 SSI 確認目前階段。
SSTAT.OPC/GDE/NDE/MVCNCLD/PRGDOPC 是已完成覆寫次數;GDE 與 NDE 分別涉及 subsystem 與 namespace 資料狀態;MVCNCLD 記錄驗證是否取消;PRGD 在有效條件下回報 Purge 結果。覆寫次數已達要求時,仍要讀 SOS 與後續狀態,不能只靠 OPC 宣告回到 Idle。
SCDW10保存啟動相關作業的命令 CDW10,讓狀態與 SANACT、NDAS、EMVS 等原始要求對得上。先前選 Overwrite 時才把 OPC 當覆寫 pass 數;不要用 Crypto Erase 的紀錄解釋它。
ETO/ETBE/ETCE/ETODMM/ETBENMM/ETCENMM/ETPVDS時間以秒表示;依方法、NDAS 與 NODMMAS 選欄位,驗證後解除配置另有估計。ETO 以 16 passes 為基礎。FFFFFFFFh 表示未回報時間,不能換算成數十年的剩餘等待;估計也不取代實際完成狀態。
SSI.SANS/FAILS/VERS支援驗證狀態資訊時,SANS 回報目前狀態;FAILS 在 SOS 指出失敗時補充失敗發生的狀態。SANS 與 FAILS 的數字可能不同,因為前者是現在,後者是失敗發生時。
MNSOIP/STNSIDMNSOIP 是允許同時執行的 namespace sanitize 作業數上限;STNSID 確認此次查詢目標。MNSOIP=4 不表示現在有 4 個作業。查 subsystem 時 STNSID=0;查 namespace 時 STNSID 回應要求的 NSID。
來源: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

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 判斷成功、失敗或其他狀態;不能只以百分比作完成證明。

每個選項會在哪一階段改變結果

31.73.SANACT 先決定方法或控制動作,再判斷各選項是否適用;Sanitize Status 把要求與背景作業結果接起來。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
SANACT/AUSESANACT 選方法或控制動作;AUSE 決定失敗後的受限處理路徑。同樣的 Block Erase,AUSE 選擇不同會走向不同失敗狀態;它不改變方法本身。
OWPASS bits 7:4/OIPBP/OVRPATOWPASS=0 表示 16 passes,其餘非零編碼直接表示 pass 數;OIPBP=1 還要依總 pass 數的奇偶決定第一遍樣式。要求 2 passes、樣式 00000000h、反相=1:第一遍 FFFFFFFFh,第二遍 00000000h,最後一遍回到指定樣式。
PREQ/SPRRSPREQ 提出 Purge 要求;SPRRS=0 時該位元為保留位元。SPRRS=1 且 PREQ=1,若未達規定的 Purge 保證,作業應失敗;不能只靠讀回零來替代這項判斷。
NDAS/SANICAP.NDI/FID 17h.NODRM只有 NDI=1 且要求 NDAS=1 時,NODRM 才決定該衝突的回應。NODRM=0:Invalid Field in Command;NODRM=1:處理命令,成功時 SOS=100b,告知仍發生解除配置。NDI=0 時 NODRM 不影響行為。
EMVS/GDE/後續狀態EMVS 要求在 sanitize processing 成功後進入 Media Verification;它是要求值,GDE 與狀態是結果資訊。EMVS=1 不能直接當成現在已進入驗證,仍需查詢 SANS。
PMR enabled/pending firmware activation/controller suspended這些條件可能阻止開始 subsystem Sanitize,各自有命令專屬狀態。PMR 尚啟用與韌體待 reset 是不同原因;後者還需分辨所要求的 reset 類型。
PMR
Persistent Memory Region,由 controller 暴露、具有持久性語意的記憶體區域。
來源:Base 2.4 §5.2.26 · Base 2.4 §5.2.26.1 · Base 2.4 §5.2.30.1.16

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

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.26.1, Figure 453, 文件頁 451, PDF 頁 477

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.16, Figure 492, 文件頁 477-478, PDF 頁 503-504

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 與輪數判斷各輪是否反相;它不是進度或清除後資料量。

Base Figure 453 · Sanitize – Command Specific Status Values

一句話重點

Base453-1啟動 Sanitize 的命令失敗與背景清除失敗是不同階段。

來源:Base 2.4 §5.2.26.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.26.1, Figure 453, 文件頁 451, PDF 頁 477

用例子讀懂

Base453-2命令因 PMR Enabled 被拒絕時,清除可能尚未開始;背景作業稍後失敗則要讀 Sanitize Status,不能只看啟動 CQE。

Base Figure 492 · Sanitize Config – Command Dword 11

一句話重點

Base492-1NODRM 只在 NDI=1 且要求 NDAS=1 時,選擇拒絕或以警告模式處理。

來源:Base 2.4 §5.2.30.1.16

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.16, Figure 492, 文件頁 477-478, PDF 頁 503-504

用例子讀懂

Base492-2NODRM=0 回 Invalid Field in Command;NODRM=1 處理清除,若成功則 SOS=100b,表示仍發生解除配置。NDI=0 時 NODRM 不影響行為。

圖表組 30 · Security Send/Receive:協定資料的傳遞介面 · 7 張圖表

31.74.Figure 456–462 分開讀資料指標、協定選擇與長度。Figure 459 只解 EAh 下的選擇值;不因此進入 Boot 或其他專題。

回到本節的解釋與範例

協定選擇、資料方向與兩種長度

31.75.Security 命令提供傳輸外層;回覆內容是否成功,還需要依所選安全協定判斷。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
SECP/SPSP1/SPSP0SECP 選 protocol,SPSP=(SPSP1<<8)|SPSP0;各協定定義相應子選項。12h 與 34h 組成 1234h,而非兩個不同 protocols。
NSSF在 SECP=EAh 時按所選用途解讀;其他協定為 reserved。不能在未知協定上沿用 RPMB target 的解讀方式。
DPTR/AL/TLReceive 的 AL 是接收配置長度,Send 的 TL 是輸出傳輸長度;採指定的安全協定長度規則。256-byte 請求配 512-byte 回覆空間,不必讓 TL=AL。
SECP=00h/EAh/結果資料00h Receive 可獨立查支援協定;EAh 再按 SPSP 分用途,其他交易的配對由協定定義。Receive 不一定對應緊接在前的某一筆 Send;需要讀協定結果狀態。
Receive 回覆的保留時間先前 Send 所產生的資料可能無法跨 communication loss 或 Controller Level Reset 保留。Send 後、Receive 前發生 reset,不能假設先前回覆仍存在;重新依選定協定建立交換狀態。
來源:Base 2.4 §5.2.28 · Base 2.4 §5.2.28.3 · Base 2.4 §5.2.29

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.28, Figure 456, 文件頁 454, PDF 頁 480

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.28, Figure 457, 文件頁 454-455, PDF 頁 480-481

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.28, Figure 458, 文件頁 455, PDF 頁 481

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.28.3, Figure 459, 文件頁 455, PDF 頁 481

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.29, Figure 460, 文件頁 456, PDF 頁 482

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.29, Figure 461, 文件頁 456, PDF 頁 482

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.29, Figure 462, 文件頁 456, PDF 頁 482

Base Figure 456 · Security Receive – Data Pointer

一句話重點

Base456-1Security Receive 的 DPTR 指向主機接收協定回覆的 buffer。

來源:Base 2.4 §5.2.28

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.28, Figure 456, 文件頁 454, PDF 頁 480

用例子讀懂

Base456-2主機預留的接收空間要配合 AL;DPTR 只給位置,不表示已經收到一份成功的安全協定結果。

Base Figure 457 · Security Receive – Command Dword 10

一句話重點

Base457-1Security Receive 的 SECP、SPSP 與適用的 NSSF 共同選出所要讀取的協定回覆。

來源:Base 2.4 §5.2.28

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.28, Figure 457, 文件頁 454-455, PDF 頁 480-481

用例子讀懂

Base457-2SPSP1=12h、SPSP0=34h 合成 1234h;低 8 bits 的 NSSF 不是 SPSP 的第三個 byte。

Base Figure 458 · Security Receive – Command Dword 11

一句話重點

Base458-1AL 直接給 Security Receive 的 byte 配置長度,沒有 NUMD 的加 1 換算。

來源:Base 2.4 §5.2.28

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.28, Figure 458, 文件頁 455, PDF 頁 481

用例子讀懂

Base458-2預留 512 bytes 時 AL=512;Get Log Page 要讀相同 bytes 才使用 NUMD=127。兩個命令的長度編碼不同。

Base Figure 459 · Security Protocol EAh – Security Protocol Specific Field Values

一句話重點

Base459-1在 SECP=EAh 下,SPSP 再選協定用途,NSSF 的含義也跟著該用途改變。

來源:Base 2.4 §5.2.28.3

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.28.3, Figure 459, 文件頁 455, PDF 頁 481

用例子讀懂

Base459-2SPSP=0001h 與 0002h 是不同用途;只能依選中的那一列解讀 NSSF,不能跨列混合。

Base Figure 460 · Security Send – Data Pointer

一句話重點

Base460-1Security Send 的 DPTR 指向待送出的安全協定資料。

來源:Base 2.4 §5.2.29

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.29, Figure 460, 文件頁 456, PDF 頁 482

用例子讀懂

Base460-2主機 buffer 存的是協定訊息;它不是 namespace 的一般 Write user-data buffer。

Base Figure 461 · Security Send – Command Dword 10

一句話重點

Base461-1Security Send 的選擇欄位格式與 Receive 配合,但這筆操作負責把資料送入控制器。

來源:Base 2.4 §5.2.29

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.29, Figure 461, 文件頁 456, PDF 頁 482

用例子讀懂

Base461-2相同 SECP/SPSP 可出現在請求與回覆階段,仍須依協定配對,不能只靠欄位值相同就視為同一次交易。

Base Figure 462 · Security Send – Command Dword 11

一句話重點

Base462-1TL 表示 Security Protocol Out 的傳輸長度,與 Receive 的 AL 分別描述傳出資料和接收配置。

來源:Base 2.4 §5.2.29

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.29, Figure 462, 文件頁 456, PDF 頁 482

用例子讀懂

Base462-2傳出 256 bytes、預留接收 512 bytes 是合理的不同數量;不必為了讓 TL 等於 AL 而補送無關資料。

學完後想一想

1. Abort 的 status 成功,但 IANP=1,可以立即收回原命令的 buffer 嗎?

32.01.不能只根據這筆 Abort 回覆作決定。IANP=1 沒有立即中止保證,必須確認原命令最終完成與其記憶體使用已結束。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.1, 文件頁 181-182, PDF 頁 207-208

2. 8 blocks 的 Read 與 8 blocks 的 DSM 範圍,長度欄位應各填多少?

32.02.Read 的 NLB 填 7;DSM 範圍描述子的 LLB 填 8。兩者不是同一個欄位,外層 DSM 的 NR 還另外表示描述子數減 1。

來源

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

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

3. Format 指定 NSID=3,為什麼還可能影響其他 namespaces?

32.03.還必須檢查 SES 選出的 FNS 或 SENS 分支。scope bit 若指定整體範圍,單看 NSID 不能縮小該命令的效果。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.11, 文件頁 206-209, PDF 頁 232-235

4. 刪除共用 CQ 前,為什麼不能只確認它現在是空的?

32.04.空佇列只描述目前沒有待消費的完成項目,不代表沒有 SQ 引用。先移除那些 SQ 並遵守完成及記憶體生命週期條件,再刪 CQ。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §5.3.1–5.3.4, 文件頁 527-532, PDF 頁 553-558

5. Write A 尚未完成就提交 Flush,只等到 Flush 成功,能證明 A 已持久保存嗎?

32.05.不能。保證集合至少包含 Flush 提交前已完成的命令;若要把 A 納入保證,主機先建立 A 已完成再提交 Flush 的順序。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §7, 7.2, 文件頁 564,567, PDF 頁 590,593

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