NVMe 管理與資料命令:沿著 Spec 講解
00.01.這份報告串起主機管理 SSD 與執行資料操作所需的介面:如何確認能力、調整運作方式、接收狀態,再把 Read/Write 等命令的範圍與完成保證講清楚。先看全貌,接著真的打開 Base 與 NVM Command Set,依頁碼往後讀。
- NVM
- Non-Volatile Memory,斷電後仍能保存資料的記憶體。
這篇的主軸
認識裝置與可用能力
01-01Identify 是裝置及 namespace 的能力地圖;Log 補充狀態與變動。先知道查詢在問誰,才知道如何使用回覆。
- namespace
- namespace,主機透過 controller 存取的一份已格式化非揮發性容量。
安排命令與設定行為
02-01Features 設定行為,SQ/CQ 承接命令。維護時再依目的選動作:Create 與 Attach 分別建立空間及存取關係;Self-test、Telemetry、Sanitize 則各有作業狀態與結果。
- CQ
- Completion Queue,controller 放入完成結果的完成佇列。
- SQ
- Submission Queue,主機放入命令的提交佇列。
用資料流比較 I/O
03-01Read 取回資料,Write 送入資料,Compare 接收預期資料,Verify 不傳回一般資料,Copy 只傳來源描述子。用資料方向和結果比較八種命令。
判斷結果能保證什麼
04-01命令完成、立即中止、內容相同、持久保存與原子性是不同證據;用範圍、時間順序和格式條件界定每一種保證。
00.02.讀者已學過 OS 與 Computer Organization。本篇用 4096-byte LBA 的例子建立共同背景;實際裝置的大小仍須從 Identify 確認。本篇依主範圍納入 Self-test、namespace 操作、Boot、Telemetry 與 Sanitize 的相關介面。
- LBA
- Logical Block Address;以 logical block 為單位的地址。例如每 block 為 4096 bytes 時,LBA 2 的資料起點對應第 8192 byte。
把主軸連起來
00.03.學習時,把「能力 → 設定 → 操作 → 結果」連起來;正式開 Spec 報告時,則採「Base 5 → Base 7 → NVM 指定章節」的順序。兩種順序解決不同需求:先建立理解,再減少翻頁。
00.04.Base 和 NVM 的共同介面與專屬定義不用每次來回找。例如先在 Base 說明 Format 範圍,等讀到 NVM 時再補 PIL/PI/MSET。先前留下的問題在 NVM 段集中回答,全程只切換一次文件。
- PI
- Protection Information;用 Guard 與 tags 檢查資料及其關聯資訊的保護欄位。
開著 Spec 的報告路徑
R-1先開 Base 2.4 PDF,從檢視器的第 202 頁開始。完成 B22 後,再切換 NVM Command Set 1.3 PDF 的第 27 頁。表中使用檢視器的 PDF 頁數,不是印在頁面下方或目錄中的數字。
| 打開的檔案 | 頁碼對照 |
|---|---|
| NVM-Express-Base-Specification-Revision-2.4-Ratified-2026.07.31.pdf | PDF 頁 = 正文印刷頁 + 26;以本表實際位置為準。 |
| NVM-Express-NVM-Command-Set-Specification-Revision-1.3-Ratified-2026.07.31.pdf | PDF 頁與印刷頁相同。 |
R-2每站先跳到「起點」的章節標題,按順序往下讀,到列出的停止標題前停下。起點或停止點可能在頁面中段,因此不以整頁作為納入範圍。§5.2.13.2 沒有需要另講的 PCIe Log 定義;§5.2.14.3 的子項已全部排除,兩處不另外停留。
- PCIe
- PCI Express,NVMe memory-based controller 使用的 transport 與裝置互連。
先讀 Base 2.4:B01–B22
| 站點 | 起點(PDF 頁/章節) | 這一段怎麼講 | 停止位置 |
|---|---|---|---|
| B01 | 202 §5 | Admin opcode、資料方向與 NSID;Figure 144 同時比較 Format 與 Sanitize 各狀態下的命令限制。 | PDF 205 §5.1.2 標題前 |
| B02 | 207 §5.2 | Abort:目標與 IANP → AER:完成格式、事件型別、事件參數。 | PDF 217 §5.2.3 標題前 |
| B03 | 225 §5.2.6 | Device Self-test:NSID 與 STC → 作業互動 → 完成狀態。先提醒啟動命令成功不等於背景測試完成,稍後在 LID 06h 看紀錄。 | PDF 227 §5.2.7 標題前 |
| B04 | 228 §5.2.9 | Firmware Commit → Image Download → Format → Get Features → Get Log Page 共同格式 → LID 00h–08h。LID 06h 接回 Self-test;07h/08h 用同一張 block 範圍圖說明 Telemetry。 | PDF 263 §5.2.13.1.10 標題前 |
| B05 | 302 §5.2.13.1.18 | LID 12h:依 FID 索引,區分支援、scope 與內容/能力變動;不展開排除 FID。 | PDF 304 §5.2.13.1.19 標題前 |
| B06 | 309 §5.2.13.1.21 | Boot Partition LID 15h:BPID 選對象,16-byte header 與映像資料分開,LPO 用 Log 起點計算。 | PDF 310 §5.2.13.1.22 標題前 |
| B07 | 327 §5.2.13.1.33 | LID 24h:只讀預設配置狀態及其支援條件,不進入還原配置流程。 | PDF 328 §5.2.13.1.34 標題前 |
| B08 | 339 §5.2.13.1.38 | Sanitize Status LID 81h:先看 SSTAT,再看有效的 SPROG、action 資訊及估計時間;把命令接受與最終結果分開。 | PDF 345 §5.2.13.2 標題前 |
| B09 | 362 §5.2.13.4 | 先讀 Get Log Page completion,再讀 Identify 請求。CNS 01h 長表分組講,接著依原順序讀 02h、03h、04h、05h、06h、07h、08h、10h、11h、12h、13h、16h。 | PDF 421 §5.2.14.2.14 標題前 |
| B10 | 422 §5.2.14.2.15 | CNS 18h、19h、1Ah、1Bh、1Ch、1Dh、1Fh、20h:資源與格式清單。以 CNSSID 起始索引、GENCTR 與最多 12 筆項目示範 Underlying Namespace 列舉。 | PDF 427 §5.2.14.2.23 標題前 |
| B11 | 431 §5.2.14.5 | Identify 的共同完成行為;接著順向跳到 Namespace Attachment。 | PDF 431 §5.2.15 標題前 |
| B12 | 470 §5.2.24 | Namespace Attachment → Management → Sanitize。先比較附加關係和儲存物件,再用 SEL/CSI/回傳 NSID 讀 Management;Sanitize 的 SANACT 和 Overwrite 欄位接回先前 LID 81h 的狀態。 | PDF 478 §5.2.27 標題前 |
| B13 | 480 §5.2.28 | Security Receive → Send → Set Features 共同規則 → FID 01h、02h、04h、06h、07h、0Bh、0Ch、0Eh。 | PDF 497 §5.2.30.1.9 標題前 |
| B14 | 497 §5.2.30.1.10 | FID 10h 與 11h:熱管理界線、非 operational 狀態的背景活動。 | PDF 499 §5.2.30.1.12 標題前 |
| B15 | 503 §5.2.30.1.16 | Sanitize Config FID 17h:用 NDI=1、NDAS=1 的例子比較 NODRM=0 的拒絕與 NODRM=1 的警告處理。 | PDF 504 §5.2.30.1.17 標題前 |
| B16 | 504 §5.2.30.1.18 | FID 19h:Set 選組合索引,Get 回目前索引;對回稍早 Identify 的命令集 vector。 | PDF 505 §5.2.30.1.19 標題前 |
| B17 | 534 §5.2.30.1.34 | FID 80h:PBSLC 的 pre-boot software load count,不解成進度百分比。 | PDF 534 §5.2.30.1.35 標題前 |
| B18 | 539 §5.2.30.1.39 | Boot Write Protection FID 85h 的 Set/Get 狀態 → PCIe 中斷 FID 08h/09h → HMB FID 0Dh。同頁的章節界線須辨清。 | PDF 545 §5.2.30.3 標題前 |
| B19 | 545 §5.2.30.4 | 在同一頁略過 §5.2.30.3,直接讀 §5.2.30.4 的 Set Features completion。 | PDF 546 §5.2.31 標題前 |
| B20 | 553 §5.3 | Create CQ → Create SQ → Delete CQ → Delete SQ;頁面依此順序,但實際刪除先 SQ 後 CQ。 | PDF 558 §5.3.5 標題前 |
| B21 | 590 §7 | 第 7 章 opcode 表只讀 Flush 列;同頁 Cancel 開始處停下。 | PDF 590 §7.1 標題前 |
| B22 | 593 §7.2 | 從頁面中的 §7.2 開始,讀 Flush 時間界線、VWC.FB、cache 不存在或未啟用時的行為。然後關閉 Base 的報告段落。 | PDF 594 §7.3 標題前 |
只切換這一次:NVM Command Set 1.3,N01–N07
| 站點 | 起點(PDF 頁/章節) | 這一段怎麼講 | 停止位置 |
|---|---|---|---|
| N01 | 27 §3.3.1 | Compare → Copy → Dataset Management → Read → Verify → Write → Write Uncorrectable → Write Zeroes。先比較要提供什麼,再讀每筆命令欄位與結果。 | PDF 62 §4 標題前 |
| N02 | 62 §4.1.1 | NVM 的 AER Notice 與 Format 專屬欄位,補回前面 Base 留下的共同位置。 | PDF 63 §4.1.3 標題前 |
| N03 | 64 §4.1.3.1 | NVM Power Management 補充 → LBA Range Type。 | PDF 66 §4.1.3.3 標題前 |
| N04 | 66 §4.1.3.4 | 在同頁跳過 Error Recovery,從 Write Atomicity Normal 的 DN 開始。 | PDF 67 §4.1.3.5 標題前 |
| N05 | 76 §4.1.4.1 | 同頁只讀 Error Information 與 SMART/Health 兩節;不要繼續到 Device Self-test。 | PDF 76 §4.1.4.3 標題前 |
| N06 | 83 §4.1.5 | 依序讀 NVM Identify 各 CNS:容量與基本格式 → controller 能力 → 延伸 namespace 格式 →命令限制 →格式查詢及粒度。 | PDF 110 §4.1.6 標題前 |
| N07 | 160 §5.6 | LBA Format List 的布局與 CNS 適用表;用同一個 Format Index 把整份 I/O 例子串起來。 | PDF 162 §5.7 標題前 |
R-3有些共用表格列出已排除的功能。本次不朗讀那些功能列,也不跟進其設定章節;但保留命令本身的欄位,仍要解釋其單位與有效條件。例如 AER 的事件參數照 §5.2.2 判讀,不因此加入電壓或資料佇列 Feature 的配置。
- AER
- Asynchronous Event Request;主機預先提交,讓控制器日後以命令完成回報事件的 NVMe Admin 命令。
核對本篇的納入與排除清單
| 範圍項目 | 內容 |
|---|---|
| 主範圍 | Base 第 5、7 章扣除下列項目;NVM 只納入明列小節及其子節。 |
| NVM | 3.3.1, 3.3.2, 3.3.3, 3.3.4, 3.3.5, 3.3.6, 3.3.7, 3.3.8, 4.1.1, 4.1.2, 4.1.3.1, 4.1.3.2, 4.1.3.4, 4.1.4.1, 4.1.4.2, 4.1.5, 5.6 |
| Base 排除章節 | 5.1.2, 5.2.3, 5.2.4, 5.2.5, 5.2.7, 5.2.8, 5.2.13.3, 5.2.14.4, 5.2.15, 5.2.16, 5.2.17, 5.2.18, 5.2.19, 5.2.20, 5.2.21, 5.2.22, 5.2.23, 5.2.27, 5.2.30.3, 5.2.31, 5.2.32, 5.3.5, 5.3.6, 5.4, 7.1, 7.3, 7.4, 7.5, 7.6, 7.7, 7.8 |
| 保留 FID | 01h, 02h, 03h, 04h, 06h, 07h, 08h, 09h, 0Ah, 0Bh, 0Ch, 0Dh, 0Eh, 10h, 11h, 17h, 19h, 80h, 85h |
| 保留 LID | 00h, 01h, 02h, 03h, 04h, 05h, 06h, 07h, 08h, 12h, 15h, 24h, 81h |
| 保留 CNS | 00h, 01h, 02h, 03h, 04h, 05h, 06h, 07h, 08h, 09h, 0Ah, 10h, 11h, 12h, 13h, 16h, 18h, 19h, 1Ah, 1Bh, 1Ch, 1Dh, 1Fh, 20h |
| 排除 FID | 0Fh, 12h, 13h, 14h, 16h, 18h, 1Ah, 1Bh, 1Dh, 1Eh, 1Fh, 21h, 22h, 23h, 24h, 25h, 26h, 27h, 78h, 79h, 7Dh, 7Eh, 7Fh, 81h, 82h, 83h, 84h |
| 排除 LID | 09h, 0Ah, 0Bh, 0Ch, 0Dh, 0Fh, 10h, 11h, 13h, 14h, 16h, 17h, 18h, 1Ah, 1Bh, 1Ch, 1Dh, 20h, 21h, 22h, 23h, 25h, 27h, 7Fh, 80h |
| 排除 CNS | 14h, 15h, 17h, 21h, 22h |
- CNS
- Controller or Namespace Structure;Identify 命令用來選擇回傳資料結構的欄位。
- FID
- Feature Identifier;指定要讀取或設定哪一項 Feature 的編號。
- LID
- Log Page Identifier;指定要讀取哪一種 log page 的編號。
01 先分清管理命令與資料命令
| 命令 | 主機提供什麼 | SSD 處理什麼/主機得到什麼 |
|---|---|---|
| Read | LBA 範圍及接收 buffer | 讀取內容,將資料傳回主機。 |
| Write | LBA 範圍及要寫入的資料 | 把資料寫入指定範圍。 |
| Compare | LBA 範圍及預期資料 | 比對儲存內容;回報相同或 Compare Failure。 |
| Verify | LBA 範圍與檢查選項 | 執行驗證,沒有一般 Read 的資料回傳。 |
| Copy | 來源範圍描述子與目的起點 | 在裝置內複製資料,主機不搬送整段內容。 |
| Dataset Management | 範圍描述子與屬性 | 提供使用提示或要求解除配置;不是寫入零值。 |
| Write Uncorrectable | LBA 範圍 | 標記不可更正條件;後續存取依規格回報錯誤。 |
| Write Zeroes | LBA 範圍與控制選項 | 依零值/解除配置條件處理,不需傳送一般資料 payload。 |
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
02 Abort:要求中止與確認中止是兩件事
02.01.Abort 用 SQID 與 CID 指定原命令。Abort 的成功 CQE 不保證原命令已立即中止;IANP 和原命令的 CQE 必須分別判讀。
- IANP
- Immediate Abort Not Performed;1 表示沒有執行立即中止,0 表示已執行。
- SQID
- Submission Queue Identifier,辨識 command 所屬 SQ 的數值。
- CID
- Command Identifier,與 SQ identifier 合用以辨識 outstanding command。
- CQE
- Completion Queue Entry,CQ 中的一筆完成結果資料結構。
來源:Base 2.4 §5.2.1
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.1, 文件頁 181-182, PDF 頁 207-208
03 AER:讓事件找到接收它的主機
- 主機先提交 AER,讓控制器保有可完成的要求。
- 事件發生:控制器完成 AER,帶回 AET/AEI/LID。
- 主機讀相應 Log,確認事件內容與有效欄位。
- 依事件規則清除通知,並維持需要的 outstanding AER。
- AEI
- Asynchronous Event Information;由 AET 選定的事件類型決定此值的意義。
- AET
- Asynchronous Event Type;先選事件類型,再在該類型內解讀事件資訊。
03.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
04 Firmware:先看啟用選擇,再看映像怎麼送入
- Firmware Image Download:傳送映像的各個片段。
- Firmware Commit:依 CA 選擇保存至 slot 與啟用方式。
- 需要 reset 的啟用:在指定 reset 發生後切換執行版本。
- Firmware Slot Information:分開查看目前執行 slot 與下次預定 slot。
- CA
- Commit Action,Firmware Commit 中選擇 replace、activate 與 reset policy 的欄位。
04.01.Firmware Image Download 傳送映像片段;Firmware Commit 依 CA 與 FS 決定保存及啟用。實際執行是先 Download 再 Commit,Spec 的編排則先介紹 Commit。
- 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
05 Format:先決定影響誰,再決定新格式
05.01.Format NVM 可變更媒體格式,也可依 SES 要求 secure erase。SES 決定要用 FNS 還是 SENS 判讀範圍;NSID 與 FNVMBS 再決定指定 namespace 或 broadcast 的行為。
- NSID
- Namespace Identifier;識別命令作用的 namespace。
來源:Base 2.4 §5.2.11
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.11, 文件頁 206-209, PDF 頁 232-235
06 Log:先定位紀錄,再解讀紀錄裡的證據
06.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
07 Identify:建立控制器、namespace 與能力的地圖
07.01.Identify 通常回傳 4096-byte 結構;CNS 選結構,CSI 選命令集,NSID、CNTID 或 CNS-specific identifier 決定查詢對象。這幾個選擇值不能互相代替。
- 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
08 Security Send/Receive:協定資料的傳遞介面
08.01.Security Send 把安全協定資料送入控制器;Security Receive 取得相應結果。SECP 選協定,SPSP 與 NSSF 的意義由該協定決定,NVMe 命令成功不等於協定內每一步都已成功。
- NVMe
- Non-Volatile Memory Express,主機與非揮發性記憶體子系統之間的介面規範家族。
來源: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
09 Set Features:把設定連到佇列、事件與電源行為
- Host 設定 APST entries 的閒置時間 ITPT 與目標狀態 ITPS。
- 啟用 APST 後,controller 依閒置計時判斷轉移。
- 到達適用門檻後,進入指定 non-operational power state。
- 恢復處理 I/O 前,需要計入離開該狀態的延遲。
- controller
- controller,實作 NVMe 介面、取走 command 並回報 completion 的控制實體。
- APST
- Autonomous Power State Transition;依設定的閒置條件自動轉換電源狀態。
- Host
- 主機;執行作業系統並送出 NVMe 命令的一端。
- ITPS
- Idle Transition Power State,APST entry 選擇的目標 non-operational power state。
- ITPT
- Idle Time Prior to Transition,APST entry 的 idle threshold,單位為 milliseconds。
09.01.Set Features 的 FID 選功能,SV 要求保存,命令專屬欄位或 buffer 承載設定。每個功能有各自的作用範圍、可變更條件與重設行為,不能只照同一種設定值模型解讀。
- 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
10 I/O 佇列:先建立完成端,再接上提交端
- 先用 Number of Queues 協商可用數量。
- 建立 CQ 2,再建立指向 CQ 2 的 SQ 3、SQ 4。
- 正常命令的完成項目寫到 CQ 2。
- 移除時先刪 SQ 3、SQ 4,再刪 CQ 2。
10.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
11 Flush:用完成界線說明持久保存
11.01.Flush 要求指定 namespace 的資料及 metadata 提交至 non-volatile media。它至少涵蓋在 Flush 提交前已完成的命令;同時仍在執行的 Write 不可自動視為被納入。
- metadata
- 隨 logical block 儲存的附加資料,可包含資料保護資訊,也可有其他用途。
來源:Base 2.4 §7, 7.2
來源:NVME-BASE-2.4, Rev. 2.4, §7, 7.2, 文件頁 564,567, PDF 頁 590,593
12 Copy:主機傳描述子,控制器搬資料
12.01.Copy 的 DPTR 指向來源範圍描述子,目的位置由命令指定。描述子格式、來源與目的格式的對應、MSRC/MSSRL/MCL 及完成回覆共同限制一次操作。
- DPTR
- Data Pointer,SQE 中指出 command data buffer 的欄位。
來源:NVM Command Set 1.3 §3.3.2
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, 文件頁 30-43, PDF 頁 30-43
13 Read:把範圍、格式與主機 buffer 接起來
13.01.Read 用 SLBA 和 NLB 選 namespace 內的範圍,再依資料格式、metadata 配置及檢查設定把內容送入主機 buffer。命令欄位中的 block 數與 byte 數需要透過目前格式換算。
- SLBA
- Starting LBA;指定命令範圍的起點。
來源:NVM Command Set 1.3 §3.3.4
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, 文件頁 48-51, PDF 頁 48-51
14 Write:寫入內容、持久性與原子性分開看
14.01.Write 把主機提供的資料寫入指定 LBA 範圍。FUA、volatile write cache、原子寫入限制及 PI 檢查回答不同問題;單筆命令成功不能自動推論所有可能的持久性與原子性保證。
- FUA
- Force Unit Access;其效果由命令定義。對 Write 而言,要求資料與 metadata 提交至非揮發性媒體後才完成。
來源:NVM Command Set 1.3 §3.3.6
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, 文件頁 53-56, PDF 頁 53-56
15 NVM Identify:用格式與上限驗算一筆 I/O
15.01.NVM Identify 補上 namespace 容量、LBA 格式、metadata/PI、原子性和命令限制。CNS、CSI、NSID 與 Format Index 的組合決定查目前 namespace,或查某個支援格式。
- Format Index
- 格式索引;用來選取一組 LBAF/ELBAF 格式資訊的編號。
- index
- index;用來選取清單中的項目或格式。它回答「選哪一項」,不是「離起點多遠」。
來源:NVM Command Set 1.3 §4.1.5
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5, 文件頁 83-110, PDF 頁 83-110
16 Device Self-test:從啟動要求到檢查結果
16.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
17 Namespace:建立儲存空間,再建立存取關係
17.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
18 Boot Partition:讀映像、寫映像與切換啟動來源
18.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
19 Telemetry:完整取得同一次診斷資料
19.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
20 Sanitize:清除要求、背景進度與最終狀態
20.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
接著打開 Spec 看什麼
21.01.正式報告時使用開頭的 B01–B22、N01–N07 順向路徑;以下僅供按觀念查找,不需要逐列重新翻一次 Spec。
| 要說明的觀念 | Spec 閱讀位置 |
|---|---|
| 先分清管理命令與資料命令 | Base 2.4 §5, 5.1.1 |
| Abort:要求中止與確認中止是兩件事 | Base 2.4 §5.2.1 |
| AER:讓事件找到接收它的主機 | Base 2.4 §5.2.2 |
| Firmware:先看啟用選擇,再看映像怎麼送入 | Base 2.4 §5.2.9, 5.2.10 |
| Format:先決定影響誰,再決定新格式 | Base 2.4 §5.2.11 |
| Get Features:查目前值、預設值或支援能力 | Base 2.4 §5.2.12 |
| 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 |
| Identify:建立控制器、namespace 與能力的地圖 | Base 2.4 §5.2.14.1, 5.2.14.2, 5.2.14.5 |
| Security Send/Receive:協定資料的傳遞介面 | Base 2.4 §5.2.28, 5.2.29 |
| Set Features:把設定連到佇列、事件與電源行為 | Base 2.4 §5.2.30.1, 5.2.30.4 |
| PCIe 功能:中斷通知與借出的主機記憶體 | Base 2.4 §5.2.30.2 |
| I/O 佇列:先建立完成端,再接上提交端 | Base 2.4 §5.3.1–5.3.4 |
| Flush:用完成界線說明持久保存 | Base 2.4 §7, 7.2 |
| Compare:把主機提供的內容拿來比對 | NVM 1.3 §3.3.1 |
| Copy:主機傳描述子,控制器搬資料 | NVM 1.3 §3.3.2 |
| Dataset Management:描述資料用途與解除配置 | NVM 1.3 §3.3.3 |
| Read:把範圍、格式與主機 buffer 接起來 | NVM 1.3 §3.3.4 |
| Verify:檢查可讀性,沒有主機比對資料 | NVM 1.3 §3.3.5 |
| Write:寫入內容、持久性與原子性分開看 | NVM 1.3 §3.3.6 |
| Write Uncorrectable 與 Write Zeroes:兩種不同結果 | NVM 1.3 §3.3.7, 3.3.8 |
| NVM 補充:同一個 Admin 命令的資料語意 | NVM 1.3 §4.1.1, 4.1.2 |
| NVM 功能補充:閒置退出延遲、LBA 用途與原子性 | NVM 1.3 §4.1.3.1, 4.1.3.2, 4.1.3.4 |
| NVM Log 補充:把數值換回資料範圍與計數 | NVM 1.3 §4.1.4.1, 4.1.4.2 |
| NVM Identify:用格式與上限驗算一筆 I/O | NVM 1.3 §4.1.5 |
| LBA Format List:選定同一筆格式才能配對能力 | NVM 1.3 §5.6 |
| Device Self-test:從啟動要求到檢查結果 | Base 2.4 §5.2.6, 5.2.13.1.7 |
| Namespace:建立儲存空間,再建立存取關係 | Base 2.4 §5.2.24, 5.2.25 |
| Boot Partition:讀映像、寫映像與切換啟動來源 | Base 2.4 §5.2.9, 5.2.13.1.21, 5.2.30.1.39 |
| Telemetry:完整取得同一次診斷資料 | Base 2.4 §5.2.13.1.8, 5.2.13.1.9 |
| Sanitize:清除要求、背景進度與最終狀態 | Base 2.4 §5.1.1, 5.2.26, 5.2.13.1.38, 5.2.30.1.16 |
學完後想一想
1. Abort 的 status 成功,但 IANP=1,可以立即收回原命令的 buffer 嗎?
22.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 範圍,長度欄位應各填多少?
22.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?
22.03.還必須檢查 SES 選出的 FNS 或 SENS 分支。scope bit 若指定整體範圍,單看 NSID 不能縮小該命令的效果。
來源
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.11, 文件頁 206-209, PDF 頁 232-235
4. 刪除共用 CQ 前,為什麼不能只確認它現在是空的?
22.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 已持久保存嗎?
22.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


Comments