儲存空間與格式
01-01先理解 namespace 的容量、LBA 格式,以及資料與 metadata 的關係。
- metadata
- 隨 logical block 儲存的附加資料,可包含資料保護資訊,也可有其他用途。
- LBA
- Logical Block Address;以所選格式的 block 為單位。
NVMe · 規格與原理
00.01.NVM Command Set 說明主機如何以 logical block 為單位讀寫與管理儲存空間。理解它的關鍵,是把資料格式、命令行為、資料完整性與資源管理連起來:同一筆命令,會因 namespace 格式、支援能力與設定不同而有不同的適用條件。
01-01先理解 namespace 的容量、LBA 格式,以及資料與 metadata 的關係。
02-01比較 Read、Write、Compare、Verify、Copy 與空間管理命令的作用及完成條件。
03-01理解原子性、命令相依、Protection Information,以及資料檢查的範圍。
04-01以 Identify、Features 和 log 理解格式選擇、效能限制及進階資源功能。
00.02.主機透過提交佇列送出命令,控制器透過完成佇列回報結果。Base 規格定義這套共同機制;本篇聚焦命令如何作用於 namespace 內的 logical blocks。
00.03.可以沿著一筆資料的生命週期讀這篇:先建立 namespace 並選格式,讓主機知道 LBA、資料及 metadata 如何對應;接著使用命令讀寫或搬移資料,再判斷順序、原子性及保護資訊能提供哪些保證。
00.04.後半部把單筆操作放回整個裝置:效能提示影響操作安排,Rate Limiting 管理共享資源,FDP/Streams 描述資料放置,追蹤與狀態結構記錄資源變化。這些功能都要回到前面的格式與能力資訊判斷能否使用。學完應能解釋一筆命令的範圍、資料長度、必要條件與完成結果。
01.01.作業系統可以要求讀取檔案中的一段資料,但控制器收到的 NVM 命令是針對 namespace 裡的區塊。LBA 用來選區塊;區塊內有多少資料,則由目前採用的格式決定。因此,同樣是讀 8 個區塊,採用 512-byte 與 4096-byte 資料格式時,需要的主機緩衝區大小不同。先把「位置」與「每個位置容納多少資料」分清楚,後面才能看懂命令範圍。
01.02.LBADS 儲存的是以 2 為底的指數。例如 0Ch 是十六進位的 12,所以資料大小為 2^12 = 4096 bytes。MS 再告訴我們每個區塊附帶多少 metadata。Format Index 則只是格式清單中的選項編號;它既不是資料大小,也不是緩衝區中的位移。這三種數字可能都很小,計算方式卻完全不同。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §1.1-1.6; 4.1.3.9; 4.1.4.8; 4.1.5, 文件頁 9-12,73-75,79-83, PDF 頁 9-12,73-75,79-83
01.03.NVM Command Set 補充 Base 的 logical-block 語意;logical block data size 不含 metadata,logical block size 則包含。NVM 的 CSI 是 00h,命令、Feature、log 與 Identify 的相同數字分屬不同識別空間。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §1.1-1.6; 4.1.3.9; 4.1.4.8; 4.1.5, 文件頁 9-12,73-75,79-83, PDF 頁 9-12,73-75,79-83
| 要讀的資訊 | 如何解讀 | 還需要哪一項資訊 |
|---|---|---|
| LBADS | data bytes = 2^LBADS | 另加 MS 才是 logical block size |
| Format Index | 同時選 LBAF 與 ELBAF | 不能只看資料大小 |
| Specification family | 通用機制由 Base 定義 | 相依欄位另以 Base 來源標示 |
02.01.Namespace 的可定址範圍、最多可配置的容量、目前已配置的容量,是三個不同問題。NSZE 決定主機可以使用哪些 LBA;NCAP 描述可配置給資料的區塊數;NUSE 描述已配置的區塊數。它們都以區塊計數,因此換算為 bytes 時還需要所用的區塊格式。
02.02.以支援精簡配置的 namespace 為例,NSZE=1000、NCAP=800、NUSE=600。LBA 900 雖然落在 0 到 999 的有效位址範圍內,仍不能只憑位址有效就推論一定能再配置空間。反過來,NUSE=600 也不表示只有 LBA 0 到 599 有資料:已配置的區塊可以分散在整個位址範圍。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.1; 4.1.5.1, 文件頁 13-14,85-93, PDF 頁 13-14,85-93
02.03.NSZE ≥ NCAP ≥ NUSE;NSZE 定義可定址範圍,NCAP 限制同時配置的 blocks,NUSE 計算目前已配置 blocks。THINP=0 時 NCAP=NSZE;NVMCAP 以 bytes 計,不能直接當成 NSZE 乘資料大小。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.1; 4.1.5.1, 文件頁 13-14,85-93, PDF 頁 13-14,85-93
| 容量或操作 | 描述的範圍或變化 | 判斷時須注意什麼 |
|---|---|---|
| NSZE | 有效 LBA 為 0 到 NSZE−1 | LBA 越界與容量不足不同 |
| THINP | 支援時須追蹤 NUSE | 不支援時可固定回 NCAP |
| Allocation | Write、Copy 寫入端及 WU 可配置 | Read/Verify 不改 deallocation 狀態 |
03.01.Identify 並不是一張包含所有答案的大表。主機要先說明想查控制器、某個 namespace,還是某個格式的能力;CNS 等選擇欄位決定回傳哪種結構。讀回來的資料即使都是 4096-byte 緩衝區,也不能互相套用欄位位置,因為每種查詢的結構定義不同。
03.02.查目前正在使用的格式,與查尚未選用格式的能力,是兩條不同的閱讀路徑。前者從 namespace 現況找到格式編號,再連到該編號的格式項目;後者直接指定想了解的格式,並結合共同能力。這可以解釋為什麼「控制器支援這個格式」不等於「namespace 現在就使用這個格式」。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5, 文件頁 83-110, PDF 頁 83-110
03.03.NVM CSI=00h。完整 namespace 資訊需結合 CNS 08h 的 command-set-independent 結構、CNS 00h 的 NVM 結構與 CNS 05h/CSI 00h 的 NVM 延伸結構;CNS 01h 與 06h 則提供 controller 資訊。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5, 文件頁 83-110, PDF 頁 83-110
| 查詢選擇值 | 可以取得的資訊 | 如何連到其他查詢 |
|---|---|---|
| CNS 00h / 05h | namespace 的 NVM 基本/延伸欄位 | FLBAS 決定目前 FIDX;MC/DPC 是能力 |
| CNS 01h / 06h | AWUN 等通用位置與 NVM 專屬限制 | 06h 的 VSL/WZSL 等需結合 variant bits |
| CNS 11h / 1Bh | allocated namespace 資訊 | 不等同 active namespace 查詢 |
| CNS 09h / 0Ah | 以 FIDX 查能力 | Common=No 欄位清零 |
| CNS 16h | namespace granularity list | GDM 決定 descriptor 如何對應 format |
04.01.格式可以看成一組共同生效的屬性:資料大小、metadata 大小、資料保護格式及相關能力。兩個格式的資料部分即使同為 4096 bytes,其他屬性仍可能不同。比較格式時如果只看容量,就會漏掉主機緩衝區配置或保護資訊處理方式的差異。
04.02.LBAF 與 ELBAF 是相同格式編號的兩部分說明,應配對閱讀。格式的「數量」與「最後一個編號」也不同:NLBAF 採從 0 起算的數量編碼,必須先加 1 得到共同格式數,才能再接上唯一屬性格式。把編碼值直接當數量,會少算一個選項。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.1; 4.1.5.3; 5.6, 文件頁 85-94,96-102,160-162, PDF 頁 85-94,96-102,160-162
04.03.LBAF 與 ELBAF 以同一 Format Index 配對;總 format 數為 raw NLBAF+1+NULBAF。NLBAF 是 0-based、NULBAF 是實際數量。有效 index 還要檢查 LBADS:值 0 表示該支援格式目前不可用。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.1; 4.1.5.3; 5.6, 文件頁 85-94,96-102,160-162, PDF 頁 85-94,96-102,160-162
| 格式資料 | 記錄哪些屬性 | 如何選取或解讀 |
|---|---|---|
| LBAF | LBADS、MS、RP | RP 是指定 workload 的相對級別 |
| ELBAF | PIF、QPIF、STS | QPIF 只在 qualified type 下適用 |
| FLBAS | FIDXU 與 FIDXL 組成 index | MTELBA 是另一個 metadata bit |
| NULBAF | 追加在共同格式之後 | 09h/0Ah 能讀各自能力 |
05.01.Format NVM 選擇的是 namespace 的資料格式與相關處理方式。主機不能任意拼出一組欄位,再假設控制器一定接受;選擇必須落在已回報的格式與能力之內。使用延伸格式時,還要確認主機已透過 Host Behavior Support 宣告可以理解對應格式。
05.02.資料保護類型、Guard 寬度與 metadata 傳輸方式,分別由不同欄位決定。PI=1 選的是保護類型,不會單獨把 Guard 改成 64 bits。MSET 則決定資料與 metadata 一起傳輸或分開傳輸。把每個選擇放回它所控制的問題,才知道最後需要什麼緩衝區與檢查方式。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.2; 4.1.3.7, 文件頁 62-63,68-69, PDF 頁 62-63,68-69
05.03.Format NVM 選取已支援的 Format Index、PI type 與 metadata 傳輸方式。延伸 PI 及超過 legacy 16 個 entries 的 LBA formats 需檢查 controller ELBAS 與 host LBAFEE;沒有 host 啟用不可直接使用。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.2; 4.1.3.7, 文件頁 62-63,68-69, PDF 頁 62-63,68-69
| 設定欄位 | 選擇哪種行為 | 使用前須確認什麼 |
|---|---|---|
| PI / PIL | PI=0 關閉,1/2/3 選 protection type | 本版 PIL 必須 0,PI 位於末端 |
| MSET | 1:extended LBA;0:separate metadata | MS=0 時忽略 |
| LBAFEE | FID 16h byte 2,合法值 0/1 | 配合 ELBAS 決定延伸格式 |
| STS | Format 不提供自由改成非零 STS 的方法 | 新配置可由 namespace create 建立 |
06.01.建立 namespace 時,主機同時描述需要多大的空間,以及這個空間採用什麼格式。NSZE、NCAP 是區塊數,配置粒度卻以 bytes 表示;兩者比較前,要先乘上所選格式的區塊大小。格式、保護資訊與遮罩也必須彼此相容,不能只檢查容量。
06.02.配置粒度是一項減少空間浪費的建議,與命令欄位是否合法是不同問題。若容量不是建議粒度的整數倍,控制器實際配置的空間可能包含主機無法定址的部分;只要其他要求都符合,就不能單憑這一點拒絕建立。建立成功後,仍需要 Attachment 才能讓指定控制器存取該 namespace。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6; 4.1.5.8; 5.8, 文件頁 108,110-113,165, PDF 頁 108,110-113,165
06.03.Namespace create 的 NVM payload 指定 NSZE、NCAP、FLBAS、DPS、LBSTM 與 placement handles。Namespace Size/Capacity Granularity 以 bytes 回報且是 hints;不符合 granularity 但其他條件合法時,不得僅因此拒絕 create。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6; 4.1.5.8; 5.8, 文件頁 108,110-113,165, PDF 頁 108,110-113,165
| 建立資料或結果 | 數值描述什麼 | 必須檢查的規則 |
|---|---|---|
| NSZE / NCAP | 值以 logical blocks 指定 | 與 bytes granularity 比較前先換算 |
| LBSTM | 需符合 PIC/PIFA mask 約束 | 不符回 Invalid Field in Command |
| GDM / ND | GDM=0 使用 descriptor 0 對全部格式 | ND 是 0-based |
| Completion | 成功 create 後已按指定屬性 format | attachment 是另一個管理動作 |
07.01.每個區塊的 metadata 必須與該區塊的資料對應。一起傳輸時,緩衝區按「資料 0、metadata 0、資料 1、metadata 1」排列;分開傳輸時,資料放在一個區域,metadata 放在另一個區域。分開只改變傳輸配置,不表示 metadata 可以與另一批區塊配對。
07.02.先用 PRACT=0 的例子理解長度:8 個區塊、每個區塊 4096 bytes 資料及 16 bytes metadata,資料合計 32768 bytes,metadata 合計 128 bytes。一起傳輸需要 32896 bytes;分開傳輸則分別準備這兩個長度。後續若要求控制器產生或移除保護資訊,才再依 PRACT 與格式調整傳輸量。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.6; 5.2.3; 5.3, 文件頁 22,129-131, PDF 頁 22,129-131
07.03.每個 namespace 在 format 時選一種 metadata 傳輸機制:與 data 相連形成 extended LBA,或由 MPTR 指向 separate buffer。不能把 metadata 分拆到兩種機制;寫入時 metadata 必須與其 logical block 原子寫入。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.6; 5.2.3; 5.3, 文件頁 22,129-131, PDF 頁 22,129-131
| 傳輸配置或位置 | 主機如何準備緩衝區 | 格式對它的限制 |
|---|---|---|
| Extended LBA | DPTR 指向 data+metadata 交錯序列 | MSET/MTELBA 反映此選擇 |
| Separate buffer | DPTR 給 data,MPTR 給 metadata | PRP metadata 需 實體位址連續;SGL 可分散 |
| PI location | 本版有效格式的 PI 在 metadata 末端 | CRC 包含之前的非 PI metadata |
08.01.主機要使用命令,先要確認控制器類型能處理它,以及相關選用能力是否存在。Opcode 說明要求執行什麼操作;NSID 指出操作對象;完成狀態則說明這次操作的結果。這些資訊相互關聯,卻不能用其中一個值推論另外兩個。
08.02.狀態碼也需要上下文。相同 SC 數值搭配不同 SCT,可能代表不同原因;因此讀完成項目時,要同時辨認狀態類別及狀態碼。Copy 的資料方向則是另一個例子:主機傳入的是來源描述子,不是把來源的所有資料讀回來再寫一次。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.2; 3.1; 3.3, 文件頁 22-27, PDF 頁 22-27
08.03.NVM I/O controller 必須支援 Read 與 Write;其他列出的 NVM 命令依各能力條件判斷。Opcode 低兩 bits 表示資料傳輸方向,狀態值必須連同 SCT 解讀,不能只用 SC 數值查錯誤。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.2; 3.1; 3.3, 文件頁 22-27, PDF 頁 22-27
| 命令或識別值 | 用途或支援要求 | 解讀時的上下文 |
|---|---|---|
| Read 02h / Write 01h | 必要 I/O 命令 | Administrative controller 不處理 I/O |
| Get LBA Status 86h | 選用 Admin 命令 | I/O controller 適用能力 |
| SC 80h | 依 SCT 區分 LBA Out of Range 等 | 同時記錄 opcode、NSID、SCT、SC、DNR |
| FID / LID | 05h、0Ah 為必要 NVM Features | 功能支援不等於要求寫入 Persistent Event Log |
09.01.假設 namespace 使用每 block 4096 bytes、沒有獨立 metadata 的格式。要讀 LBA 100 到 103,共 4 blocks,因此 SLBA=100,NLB=3。NLB 是數量減 1,SLBA 是起點,兩者不能套同一換算。
09.02.資料總量是 4×4096=16384 bytes。DPTR 應描述這份量所需的主機記憶體;若資料跨 memory pages,再用 PRP 或 SGL 的規則組合。LBA 大小與 memory page 大小即使這次恰好相同,仍是不同概念。
09.03.Read 成功表示完成這次資料讀取。Write 還要配合 cache、FUA 與 Flush 等規則討論持久性;不能把任一成功 CQE 都直接翻成所有資料已永久保存。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4; 3.3.6, 文件頁 48-51,53-56, PDF 頁 48-51,53-56
09.05.Read/Write 以 SLBA 與 0-based NLB 指定連續範圍。Read 的 DPTR 是目的 buffer,Write 的 DPTR 是來源 buffer;FUA=1 要求使用 nonvolatile media,並沒有隱含其他命令的順序。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4; 3.3.6, 文件頁 48-51,53-56, PDF 頁 48-51,53-56
| 命令欄位 | 描述的資料或操作 | 哪些選擇會改變解讀 |
|---|---|---|
| CDW10 / CDW11 | SLBA 低/高 32 bits | NLB=0 仍有一個 block |
| CDW12 | LR、FUA、PRINFO、STC、CETYPE、NLB | Read 的 DTYPE 區是 reserved |
| CDW13 | CETYPE 決定 DSM 或 CEV 解讀 | Write 另含 DTYPE/DSPEC |
| MPTR | 單獨傳 metadata 時使用 | 不可把一部分 metadata 分到兩種機制 |
10.01.考慮「目前資料仍是 A,才更新成 B」的需求。若先送 Compare,收到成功後才送獨立的 Write,另一個寫入者可能在兩筆命令之間修改資料。Compare 的成功只描述當時的比較結果,不會替後面的獨立 Write 保留那個條件。
10.02.融合的 Compare-and-Write 把比較與更新連成有條件的原子操作。主機仍需遵守融合命令的提交方式、相同範圍,以及回報的大小和邊界限制。原子性在這裡描述這個操作的不可分割性,不等於任意長度的多筆命令都變成一個交易。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.2-2.1.3, 文件頁 14-15, PDF 頁 14-15
10.03.一般命令不因同在一個 SQ 就取得 LBA 相依順序;host 必須建立必要順序。Fused Compare-and-Write 先比對,成功才寫入;Compare 失敗則 Write 以 Failed Fused Command 類別中止。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.2-2.1.3, 文件頁 14-15, PDF 頁 14-15
| 操作方式或限制 | 保證的內容 | 成立所需的條件 |
|---|---|---|
| Ordinary I/O | 同 LBA 的 Read/Write 完成先後無保證 | host 以完成相依控制 |
| Fused pair | Compare 與 Write 的 range 相同 | 範圍不符 should 拒絕 |
| ACWU / NACWU | 限制 fused atomic update 大小 | 還要遵守 atomic boundaries |
11.01.原子性描述更新是否可能被觀察到只完成一部分。正常運作與突然斷電是不同情境,所以規格分別回報 normal 與 power-fail 的保證。這不是效能排名,也不是單一命令只要小於某個數量就一定符合;起始位置和是否跨過指定邊界同樣重要。
11.02.假設解碼後的邊界大小是 8 個區塊,從 LBA 4 寫 12 個區塊會跨越 LBA 8 的邊界。在允許多段原子性的模式下,可以分成 4–7 與 8–15 兩段理解;每段有保證,並不表示兩段必須同時成功或同時失敗。這個區分能避免把儲存裝置的保證誤當成資料庫交易。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4; 4.1.3.4; 5.9, 文件頁 15-21,66-67,165, PDF 頁 15-21,66-67,165
11.03.AWUN/NAWUN 與 AWUPF/NAWUPF 分別描述正常及失敗條件原子性。Single Atomicity Mode 跨 boundary 不保證整筆原子;Multiple Atomicity Mode 在每個 boundary 切成各自原子的 subranges,並不承諾整筆一起成功。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4; 4.1.3.4; 5.9, 文件頁 15-21,66-67,165, PDF 頁 15-21,66-67,165
| 原子性欄位或模式 | 規定什麼範圍 | 不能由此推論什麼 |
|---|---|---|
| AWUN / AWUPF | 大小採 0-based 編碼 | AWUPF 不大於 AWUN |
| NABO / NABSN / NABSPF | 邊界在 offset + k × size | 需依各欄位換算與未回報規則 |
| MAM | 每個 atomic subrange 獨立保證 | fused 仍用 Single 模式 |
| FID 0Ah.DN | DN=1 可不遵守 normal atomicity | 仍須遵守 power-fail 保證 |
12.01.Compare 回答「儲存內容是否等於主機提供的預期內容」,因此主機需要提供比較資料。Verify 回答的是所指定資料的完整性檢查是否通過,不需要把預期資料交給控制器,也不把資料傳回主機。兩者的成功代表不同事情。
12.02.例如主機想知道一段空間是否全為 0,可以提供全零資料進行 Compare。單靠 Verify 成功無法得到相同結論,因為一段內容不是全零的資料,也可以通過完整性檢查。讀大小限制時還要注意 variant:同一欄位可能表示建議大小,也可能是不能超過的上限。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1; 3.3.5, 文件頁 27-30,51-53, PDF 頁 27-30,51-53
12.03.Compare 比較媒體資料與 host 提供的 buffer;Verify 檢查已儲存資料完整性而不把資料或 metadata 回傳 host。兩者要求 PRACT=0;Verify 與 Read 偵測到的失敗不必使用相同錯誤碼。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1; 3.3.5, 文件頁 27-30,51-53, PDF 頁 27-30,51-53
| 命令或大小欄位 | 實際檢查什麼 | 結果的解釋範圍 |
|---|---|---|
| Compare | miscompare 回 Compare Failure | host 與 media 兩側 PI 可分別檢查 |
| Verify | 沒有資料 buffer 傳輸 | 驗證量仍計入 Data Units Read |
| VSL / NVMVFYS | variant 決定建議大小或硬上限 | 非零 VSL 以 2^n × minimum page size 表示 |
13.01.假設來源是同一 namespace 的 LBA 10–11 與 30–32,目的從 LBA 100 開始。目的接收到 5 個 blocks,依描述子順序對應到 100–104;來源之間不需要連續。
13.02.每個來源 descriptor 有自己的起點及長度,命令的 destination 起點只有一個。NR 決定有效來源描述子數,不能把它當成總 blocks;總量要逐筆計算後加總。
13.03.描述子格式、控制器支援的數量和長度限制,以及來源與目的保護資訊的處理都要成立。命令縮短主機搬資料的流程,並沒有取消各範圍的格式與權限檢查。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, 文件頁 30-44, PDF 頁 30-44
13.05.Copy 把一個或多個 source ranges 依 descriptor 順序接成單一連續目的範圍。Format 0h/1h 來源與目的在同一 namespace;2h/3h 帶 SNSID,需 controller 支援與 host 啟用。失敗 CQE DW0 是最低未成功 source index,後面的 ranges 仍可能已複製。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, 文件頁 30-44, PDF 頁 30-44
| 描述子或行為 | 資料如何安排 | 限制及完成結果 |
|---|---|---|
| NR / NLB | source count 與各範圍 block count 都是 0-based | 檢查 MSRC、MSSRL、MCL |
| FCO | 2h/3h 可要求 fast copy only | Fast Copy Not Possible 再看 DNR |
| Overlap | 2h/3h 禁止同 namespace source 與 destination 重疊 | 0h/1h 重疊結果需依原子條件另讀 |
| NVMCSA | 1.3 將目的寫入視為單一 write command | 仍受 MAM、大小及 boundary 限制 |
14.01.複製資料時,來源與目的的保護資訊不一定能逐 byte 原樣搬移。兩端格式相同時,可以依命令選項保留或重新產生;一端有 PI、另一端沒有時,則需要規格允許的插入或移除方式。這些選擇還涉及讀取端與寫入端各自的 PRACT。
14.02.特別要分清楚 metadata 是否全部都是 PI。如果 16 bytes metadata 中只有 8 bytes 是 PI,其餘 8 bytes 還有其他用途;移除 PI 不代表可以連其他 metadata 一起丟棄。因此,兩端的資料大小相同,並不足以證明能使用有 PI 與無 PI 之間的轉換特例。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2.3-3.3.2.4; 5.3.2.5, 文件頁 40-43,146-150, PDF 頁 40-43,146-150
14.03.Copy 的 matching formats 要比對資料大小、metadata 大小、DPS、PIFA、有效 LBSTM、PIF/QPIF 與 STS。Corresponding PI formats 只容許有 PI 的一方 metadata 全為 PI,另一方完全沒有 metadata;不能拿 Copy 任意轉換資料格式。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2.3-3.3.2.4; 5.3.2.5, 文件頁 40-43,146-150, PDF 頁 40-43,146-150
| 來源與目的保護格式 | 如何處理保護資訊 | 允許這種處理的條件 |
|---|---|---|
| PI → PI, 0/0 | matching formats:pass-through | 保護檢查仍由 checking bits 控制 |
| PI → PI, 1/1 | matching formats:replace | 讀端檢查,寫端產生 PI |
| No PI → PI | corresponding formats 且 write PRACT=1:insert | 目的 metadata 不得包含其他用途 |
| PI → No PI | corresponding formats 且 read PRACT=1:strip | 來源 metadata 只能是 PI |
15.01.Dataset Management 讓主機描述一組 LBA 範圍及其使用特性,例如資料不再需要。它與直接搬移資料的 Read、Write 不同,很多資訊具有提示性質。因此必須分開看主機傳入了什麼、控制器必須處理到什麼程度,以及配置狀態最後可能如何改變。
15.02.三個限制分別涉及範圍數量、單一範圍大小及總大小。variant 又決定超出限制時的處理方式:不能只讀其中一個上限,就推論整筆命令必須失敗或所有區塊都已被釋放。計算部分可處理的範圍時,也要把第二段只處理一部分的情況算進去。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, 文件頁 44-48, PDF 頁 44-48
15.03.Dataset Management 是 advisory:處理 attributes 不等於一定執行 deallocate。NR 是 0-based,16-byte descriptor 的 LLB 是 1-based;DMRL、DMRSL、DMSL 分別約束 range 數、單一 range 長度與總長度。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, 文件頁 44-48, PDF 頁 44-48
| 屬性或限制組合 | 控制器需要如何處理 | 可否由成功推論已釋放空間 |
|---|---|---|
| AD / IDW / IDR | deallocate/整體寫入/整體讀取 hints | 可組合使用 |
| Limits nonzero, variant=0 | 超過任一 limit 回 Command Size Limit Exceeded | 全部符合則須處理 attributes |
| Limits nonzero, variant=1 | 宜處理符合 limits 的部分 | 不以此原因回 Size Limit Exceeded |
| All limits=0 | variant=1:不回報 limits;variant=0:不支援 | 三欄需全零或全非零 |
16.01.區塊被解除配置,描述的是空間配置狀態;它並不直接回答下一次 Read 應回傳哪些 bytes。讀取行為還要看裝置回報的規則,以及主機是否啟用對 deallocated 或 unwritten 區塊的錯誤回報。能力存在與功能已啟用,也要分開確認。
16.02.因此,讀到全零可能來自未寫入或解除配置後的回傳規則,不能單憑這次結果推論資料曾被安全清除。若讀取回報錯誤,也可能是主機啟用 DULBE 後所要求的行為。理解錯誤時,要把命令、區塊狀態與設定放在一起。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3.2.1; 4.1.3.3, 文件頁 47-48,66, PDF 頁 47-48,66
16.03.支援且啟用 DULBE 時,Copy、Read、Verify、Compare 存取 deallocated/unwritten blocks 會失敗。未啟用時,DRB=001b 回零、010b 回 FFh、000b 可選其一;同 block 在下一次寫入前的回值須保持 deterministic。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3.2.1; 4.1.3.3, 文件頁 47-48,66, PDF 頁 47-48,66
| 能力或讀取設定 | 如何影響讀取結果 | 判斷時需同時讀什麼 |
|---|---|---|
| DAE / DULBE | DAE 是 capability,DULBE 是啟用 | DULBE 預設 0 |
| DRB=000b | 不是任意舊資料 | 依 §3.3.3.2.1 為零或 FFh |
| PI after deallocation | tag bytes 回 FFh;Guard 為 FFh 或 CRC | 配合 DLFEAT.GDS |
17.01.Write Uncorrectable 用來標記指定區塊,使後續讀取依規格回報無法修正的資料;Write Zeroes 則要求將指定範圍表現為零值。這兩個命令處理的結果不同,不能只因它們都沒有一般 Write 的資料 buffer,就視為同一種操作。
17.02.Write Zeroes 的命令成功,還需要結合命令模式及回傳欄位判斷影響範圍。當主機要求整個 namespace 清零時,LBACZ 是確認整體結果的重要資訊。若回報只代表指定 range,就不能把命令成功延伸成整個 namespace 都已清零。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.7-3.3.8, 文件頁 56-61, PDF 頁 56-61
17.03.Write Uncorrectable 將範圍標為無法修復的讀取錯誤;Write Zeroes 使成功的後續讀取資料及非 PI metadata 回零。NSZ=1 的整個 namespace 清零需 NSZS、DEAC=1 與零值 deallocation read behavior,且 host 應檢查 CQE.LBACZ。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.7-3.3.8, 文件頁 56-61, PDF 頁 56-61
| 命令或回傳欄位 | 改變或回報什麼 | 確認結果所需的條件 |
|---|---|---|
| Write Uncorrectable | 標記 block 後,讀取可能報 Unrecovered Read Error | WUSL 與 NVMWUSV 需成對看 |
| Write Zeroes PI | PRCHK=000b、STC=0 | PRACT=1 宜用於產生有效 PI |
| WZSL / WZDSL | 依 DEAC 選適用 limit | NSZ=1 不受這兩欄限制 |
| LBACZ | 成功 NSZ 命令回 1 才表示全 namespace | 回 0 是指定 range |
18.01.PI 不只有 CRC。它包含 Guard、Application Tag,以及配置給 Storage Tag、Reference Tag 的空間。Guard 寬度選定後,PI 的整體格式也跟著確定;STS 再決定其中多少 bits 分給 Storage Tag,剩餘部分才交給 Reference Tag。
18.02.以 64-bit Guard 為例,扣除 Guard 與 Application Tag 後,有 48 bits 可分給兩種 tags。若 STS=18,Storage Tag 使用 18 bits,Reference Tag 使用 30 bits。增加 STS 是重新分配同一塊空間,不會把 PI 自動變大。Qualified PI 還會引入另外的格式及遮罩限制。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1; 4.1.5.3, 文件頁 97-102,130-138, PDF 頁 97-102,130-138
18.03.16b Guard PI 共 8 bytes;32b 與 64b Guard PI 各 16 bytes。Application Tag 固定 16 bits,Storage/Reference Space 分別為 32、80、48 bits。32b/64b 格式限 logical block data size 至少 4 KiB。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1; 4.1.5.3, 文件頁 97-102,130-138, PDF 頁 97-102,130-138
| Guard 格式 | PI 中的空間分配 | Storage Tag 大小或遮罩限制 |
|---|---|---|
| 16b Guard | 2-byte Guard + 2-byte App + 4-byte space | STS=0..32 |
| 32b Guard | 4-byte Guard + 2-byte App + 10-byte space | STS=16..64 |
| 64b Guard | 8-byte Guard + 2-byte App + 6-byte space | STS=0..48 |
| STMLA | bit mask/byte mask/no mask | qualified type 與 QPIFS 共同決定適用 |
19.01.CRC 的結果由輸入資料與整套計算參數共同決定。除了多項式,還有初始值、位元反射方式與最後的 XOR。兩個程式即使都宣稱計算 CRC-64,如果採用不同參數,也不應期待得到相同結果。資料進入計算的順序和計算結果的儲存方式也要分開理解。
19.02.已知向量可以提供一個有明確輸入和輸出的對照。例如長度同為 4 KiB 的全零資料與全 FFh 資料,因為內容不同,Guard 也不同。比較向量時,必須同時保留輸入長度、輸入內容及輸出表示方式;只列一串十六進位數字,讀者無法知道它如何得到。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.1-5.3.1.3, 文件頁 131-137, PDF 頁 131-137
19.03.32b Guard 使用 CRC-32C;64b Guard 使用 NVM Express 64b CRC,polynomial AD93D23594C93659h、全一 Init/XorOut、RefIn/RefOut=true。不能只用「CRC64」名稱選任意 polynomial。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.1-5.3.1.3, 文件頁 131-137, PDF 頁 131-137
| CRC 或計算範圍 | 定義或已知結果 | 比對前須確認什麼 |
|---|---|---|
| CRC-16 | SBC-4 定義的 Guard CRC | NVM 不支援 DIX 的 optional IP checksum |
| CRC-32C | polynomial 1EDC6F41h | 4 KiB zero vector → 98F94189h |
| CRC-64/NVME | 反射式 register 算例 123456789 → AE8B14860A799888h | 4 KiB zero vector → 6482D367EB22B64Eh |
| Coverage | data + PI 前的 metadata | 排除 PI 本身 |
20.01.Tag 在概念上是一個數值,但命令格式可能把它分散在幾個 Dword。閱讀時先確定 Guard 格式與 STS,再決定每段 bits 屬於哪一種 tag。不能把 CDW14 永遠當成完整的 Reference Tag,因為某些格式會把它的高位分給 Storage Tag。
20.02.64-bit Guard、STS=18 的例子中,Storage Tag 的高 16 bits 放進 CDW3 的低 16 bits,剩餘 2 bits 放在 CDW14 的高位;Reference Tag 使用 CDW14 其餘 30 bits。先拆分再組合,可以清楚看到哪些 bits 會改變,而不用把十六進位值當成必須記憶的常數。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, 文件頁 137-141, PDF 頁 137-141
20.03.Storage Tag 使用 Storage/Reference Space 的高 STS bits,其餘低 bits 是 Reference Tag。命令以 CDW2、CDW3、CDW14 的最多 80 bits 傳入實際或 expected tags;不同 Guard 格式使用不同子集合。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, 文件頁 137-141, PDF 頁 137-141
| 保護格式與 STS | Storage/Reference Tag 放在哪裡 | 欄位寬度如何分配 |
|---|---|---|
| 16b Guard, STS=0 | CDW14 為 32-bit reference | CDW2/3 對此 tag 忽略 |
| 32b Guard, STS=32 | CDW2 low16 + CDW3 high16 是 Storage | CDW3 low16 + CDW14 為 48-bit Reference |
| 64b Guard, STS=18 | CDW3 low16 + CDW14 high2 是 Storage | CDW14 low30 是 Reference |
21.01.PI 格式決定 Guard 與各 tag 的大小、位置及使用方式。Storage Tag 與 Reference Tag 的分界還可能由格式設定決定,不能以固定切半的方式解讀每種格式。
21.02.PRCHK 中的檢查選擇與 PRACT 的插入/移除行為影響此次操作。格式有某個 tag,與本次命令要求檢查它,是兩個層次;其他有效性與不檢查的特殊條件仍要一起看。
21.03.Guard 檢查資料內容,tag 檢查相應識別或位置資訊。若 Guard 正確而 Reference Tag 不符合預期,不能說「資料 bytes 正確所以整筆必定成功」;選中的檢查仍可能指出錯置。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.5; 5.3.2-5.3.3, 文件頁 21-22,141-152, PDF 頁 21-22,141-152
21.05.PRACT 決定 PI 的傳遞、插入、移除或取代;PRCHK 的 Guard/Application/Reference bits 與獨立 STC 決定檢查要求。PRACT=1 且 MS>PI size 時,Read 仍傳回全部 metadata,不能一律解讀為刪除 PI。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.5; 5.3.2-5.3.3, 文件頁 21-22,141-152, PDF 頁 21-22,141-152
| 操作或保護條件 | 控制器如何處理 PI | 對檢查或傳輸量的影響 |
|---|---|---|
| Write, PRACT=1 | MS=PI 時插入;MS>PI 時取代 PI | 此生成分支忽略 PRCHK/STC |
| Read, PRACT=1 | 先做要求的檢查;MS=PI 才移除 | MS>PI 仍回 metadata 與 PI |
| Type 1 / Type 2 | Reference 每個 block 遞增 | Type1 初值須等於對應 SLBA 低 bits |
| Type 3 | 不宜比對 computed reference | 若因 RTCHK 拒絕,使用 Invalid Protection Information |
| Disable sentinels | Type 1/2:Application Tag=FFFFh 時停用所有 PI checks;Type 3 另要求 Reference Tag(若有)也全一 | 不受 PRCHK/STC 設定影響 |
| Masks | mask bit=0 不比較 | Storage mask 另受 STMLA 約束 |
22.01.Feature 會改變控制器或 namespace 的某項行為,但每個 Feature 的資料格式、作用對象與保存方式都可能不同。設定前先確認是在改整個控制器還是某個 namespace,再看值放在命令欄位或另傳資料結構。相同 Get/Set Features 命令不表示資料結構可以共用。
22.02.TLER 是從錯誤復原開始計時的限制。TLER=5 對應 500 ms,並不是從主機提交命令那刻開始的整體期限。LBA Range Type 的用途提示也是類似的區分:告訴軟體一段空間的用途,不會因此提供權限隔離或保證資料不被覆寫。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.1-4.1.3.4, 文件頁 64-67, PDF 頁 64-67
22.03.FID 03h 描述 namespace LBA ranges,05h 控制 namespace error recovery,0Ah 控制 controller normal atomicity。Power Management 的 NVM 補充以 NPWG 大小的 Read 作為 Idle I/O Exit Latency Limit 的參考命令。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.1-4.1.3.4, 文件頁 64-67, PDF 頁 64-67
| Feature 或欄位 | 設定的行為與單位 | 作用範圍或例外 |
|---|---|---|
| FID 03h | 4096-byte contiguous buffer;最多 64 個 64-byte entries | NUM 是 0-based;新 Set 取代前一次 |
| FID 05h.TLER | 100 ms 單位,從 error recovery 開始計時 | 0 代表不設 timeout;適用 LR 命令 |
| FID 03h attributes | Hide/Overwriteable 是 host 使用提示 | 不是安全隔離或資料保護機制 |
| FID 02h extension | idle exit 參考 NPWG-sized Read | 其他命令可超過該 latency limit |
23.01.事件通知是提醒主機有事需要查看,log 則提供可以閱讀的內容。事件設定、事件回報與取得 log 是不同步驟,不能因讀到某種 log 就假設相關通知已啟用。NVM Command Set 另外補充某些計數應納入哪些命令,以及欄位如何解讀。
23.02.計數的名字相似,也可能採不同統計口徑。例如 Verify 沒有把資料傳回主機,仍可能納入指定的讀取資料量計數。錯誤位置同樣如此:Self-test 的 FLBA 可指出其中一個失敗區塊,不能套用另一個 log 對「最低失敗 LBA」的定義。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §1.4.2; 4.1.1; 4.1.3.5; 4.1.4.1-4.1.4.4, 文件頁 10-11,62,67,75-77, PDF 頁 10-11,62,67,75-77
23.03.NUSE 的頻繁改變及 ANA 造成的 capacity 回報變動不產生 Namespace Attribute Changed 事件。Error Information 的 LBA 指最低發生錯誤的 LBA;Self-test FLBA 只在 valid bit 設定時有效,且可只代表多個失敗 blocks 中的一個。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §1.4.2; 4.1.1; 4.1.3.5; 4.1.4.1-4.1.4.4, 文件頁 10-11,62,67,75-77, PDF 頁 10-11,62,67,75-77
| 事件或計數 | 記錄及啟用方式 | 哪些解讀容易混淆 |
|---|---|---|
| LBASIN / RLCCN | FID0Bh bits 13/22 | 分別啟用 LBA Status/Rate Limiting notices |
| SMART units | 先換算 512-byte units,再套 Base counter 編碼 | 不是每個 4 KiB block 加一個 Data Unit |
| Read categories | Data Units Read 含 Verify;Host Read 含 Copy | Compare、Read 為兩類共同項 |
| Persistent Event 06h | create/single-delete 有 FLBAS、DPS | delete-all 時這兩欄 reserved |
24.01.LBA Status 讓主機了解特定範圍或已記錄的 LBA 狀況。主機要求的查詢範圍、控制器實際掃描到哪裡,以及這次 buffer 裡放得下多少描述子,是三個不同限制。因此,取得一批結果不一定代表整個查詢已完成。
24.02.可變長度的結果與分段讀取還需要版本一致性。如果讀到一半資料更新,前後兩段可能不再屬於同一份記錄。讀取流程因此需要結合 generation、保留事件的設定與最後的確認,而不是單純從 offset 0 一直增加到結尾。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.6; 4.1.4.5; 4.2.1; 5.2.1, 文件頁 67-68,77-79,114-122, PDF 頁 67-68,77-79,114-122
24.03.LID 0Eh 先指出值得調查的 namespace ranges;Get LBA Status 再回詳細 descriptors。ATYPE=02h 回 tracked allocated LBAs,10h 掃描並回 tracked/untracked 候選,11h 只回 tracked 候選且不做 foreground scan。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.6; 4.1.4.5; 4.2.1; 5.2.1, 文件頁 67-68,77-79,114-122, PDF 頁 67-68,77-79,114-122
| 查詢或回報欄位 | 數值代表什麼 | 讀取時的判斷 |
|---|---|---|
| MNDW / RL | MNDW 是 0-based dwords;RL=0 到 NSZE−1 | 不是 RL=0 查一個 block |
| NLSD / CMPC | 實際 descriptor 數/完成原因 | CMPC=1 尚有資料或 scan 未完成;2 完成 |
| LSIPI / LSIRI | 100 ms 單位;poll interval 不可由 host 改 | Set 回傳最接近支援值 |
| RAE / LSGC | RAE=1 分段讀,RAE=0 清事件並允許更新 | 重讀 header 檢查 generation |
| TLBAAG | 02h 可用較大 allocation granularity | 混合 allocated/deallocated unit 會整段回 allocated |
25.01.Sanitize 的啟動命令可以先完成,清除作業仍在背景執行。主機需要另外讀取狀態與進度,才能知道作業是否成功結束。一般 Read 的資料保護規則,也不能直接套用到清除後的 Media Verification 狀態。
25.02.Media Verification 的目的是讓主機觀察清除後的媒體資料,因此指定 Read 的允許檢查與回傳狀態有特別規定。理解這一段時,要先確定控制器所處狀態,再解讀命令結果。只看到「成功」或看到全零資料,都不能跳過狀態與操作範圍的判斷。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.7; 5.12, 文件頁 113,173-175, PDF 頁 113,173-175
25.03.NVM Sanitize 命令採 Base 定義,背景 operation 的資料語意由 §5.12 補充。成功後 Block Erase 回值由廠商定義、Crypto Erase 回值不確定、Overwrite 依 pattern 規則;若 block 已 deallocate,則改用 deallocated-read 規則。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.7; 5.12, 文件頁 113,173-175, PDF 頁 113,173-175
| 清除狀態或讀取方式 | 控制器回報什麼 | 允許的檢查與結果 |
|---|---|---|
| LID81h | 追蹤 operation status/progress | 啟動命令成功不是 operation 完成 |
| Error Information | sanitize 期間 NVM LBA 欄位回 0 | 僅此 NVM 補充,仍須遵守 Base command allowlist |
| Media Verification Read | PRCHK=000b、STC=0 | 要求 checking 則 Invalid Field in Command |
| Allocated media | 可讀則回實際資料;不可讀則錯誤 | 符合條件回 Successful Media Verification Read |
26.01.對齊描述起點是否落在指定邊界上;粒度描述長度是否以指定單位成組。兩筆寫入可以同樣長,卻因起點不同而跨過不同數量的內部處理單位。所以只把 I/O 長度調成建議大小,未必同時符合起點對齊要求。
26.02.例如建議單位是 8 個區塊,LBA 8–15 正好涵蓋一個單位,LBA 9–16 則橫跨兩個單位。後者仍是 8 個區塊,但控制器可能需要處理兩端的其他資料。這些欄位提供效能建議;原子性與 Key Per I/O 的必要對齊要求,仍要各自判斷。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, 文件頁 122-129, PDF 頁 122-129
26.03.NPWG/NPWA、NPRG/NPRA 分別描述寫入與讀取的建議大小及對齊,NOWS/NORS 描述最佳大小。這些 performance hints 不取代 atomic boundaries、命令硬限制或格式規則。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, 文件頁 122-129, PDF 頁 122-129
| 效能提示欄位 | 建議的長度或起點 | 何時解讀這組欄位 |
|---|---|---|
| NPWG / NPWA | 長度與起點同時符合 | 先看 NSFEAT.OPTPERF |
| NPRG / NPRA / NORS | 適用讀取最佳化 | 先看 OPTRPERF |
| NPDG / NPDGL | deallocate granularity 的不同欄位 | 用 OPTPERF 決定;Large 不一律加一 |
| NOIOB / NABO | 最佳 I/O boundary 與 atomic offset 不同 | 可分割 I/O 以符合多種條件 |
27.01.Performance Characteristics 用來描述或選擇效能相關屬性。標準欄位可能用區間編碼表示效能,而不是直接填入時間。廠商屬性則需要識別碼決定資料如何解讀,不能因為它放在標準結構內,就假設每個 byte 都有標準定義。
27.02.例如 R4KARL=0Eh 不是 14 μs,而是代表指定測試條件下的一個平均延遲區間。比較兩個裝置前,要先確認採用相同屬性及測試條件。保存屬性的槽位數量與識別碼也不同;有剩餘空位不代表已用索引一定連續。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.8, 文件頁 69-73, PDF 頁 69-73
27.03.FID 1Ch 用 ATTRI 選屬性:00h 為只讀標準效能,C0h 為只讀 identifier list,C1h..FFh 為 vendor attributes。Current、Default、Saved 是不同視圖,RVSPA 用來移除指定 vendor attribute 的 保存值。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.8, 文件頁 69-73, PDF 頁 69-73
| 效能屬性欄位 | 回報或設定的內容 | 解讀所需的尺度或識別 |
|---|---|---|
| R4KARL | 標準化 4 KiB random read 的平均 latency 區間 | 00h 是未回報 |
| MSVSPA / USVSPA | 可 save 總數/剩餘數 | index 可不連續 |
| PAID / ATTRL | 128-bit identifier/有效 vendor bytes | ATTRL 最大 FE0h |
| RVSPA | 刪除 保存值 後取 default | 此操作不使用 data buffer 內容 |
28.01.Rate Limiting 先要選定限制誰,再設定限制多少。控制器識別值只有在相對應的目標種類下才具有該意義,因此 TGT 和 TID 必須一起讀。設定內容又分成總頻寬、寫入頻寬、總 IOPS 與寫入 IOPS,不能把四個值混成單一速度。
28.02.頻寬值需要乘上 BWSF 選定的尺度。例如尺度為每單位 10 MiB/s,數值 50 才代表 500 MiB/s。寫入對總額度的消耗還可能經過比例加權,所以「傳了 4 KiB」與「扣了 4 KiB 的總頻寬額度」不一定相同。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.9; 4.1.5.4; 5.10, 文件頁 73-75,106,165-168, PDF 頁 73-75,106,165-168
28.03.FID 28h 以 TGT/TID 選 target,1024-byte buffer 指定 enable、mode、bandwidth、IOPS 與 write/read ratios。TGT=0 指 controller,不能指定 Admin controller 或保留 ID。此 Feature 必須可 save。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.9; 4.1.5.4; 5.10, 文件頁 73-75,106,165-168, PDF 頁 73-75,106,165-168
| 限制設定欄位 | 指定的對象或數值 | 如何換成實際限制 |
|---|---|---|
| TGT / TID | CDW11[23:16]/[15:0] | TGT=0 才是標準 controller target |
| RLC | RLE bit15;RLM=0 Hard、1 Soft | 支援 Soft 必須也支援 Hard |
| BWSF | 0/1/2 = 1/10/100 MiB/s;3/4/5 = 1/10/100 GiB/s | 值乘 scale 才是 bandwidth |
| WRIOPSR / WRBWR | write 分子除 read 分母 | 兩者的各 ratio bytes 均需非零 |
29.01.一個 namespace、一組資源或不同存取類型可能有不同設定。先由 Scope 與 Scope Identifier 找到對象,再理解對應速率及模式,不能拿一個 controller 級數值直接套到所有 I/O。
29.02.Token bucket 以隨時間補充的額度控制工作,bucket 大小決定可累積多少短期額度。相同補充速率而容量不同的 bucket,面對瞬間一批要求可能有不同等待時間。
29.03.以教學例說明:每秒補 100 單位、最多累積 200 單位,空閒後可有 200 單位供突發使用;持續工作仍受每秒補充量限制。實際命令使用的單位與扣除規則須再對照設定格式,不能直接把此例當成固定 IOPS 規則。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.10.1-5.10.2; Appendix A, 文件頁 166-168,176-177, PDF 頁 166-168,176-177
29.05.Hard Limit 設 ceiling,Soft Limit 可利用未用 bandwidth/IOPS;資源不足時依設定比例分配。Appendix A 是多個 token buckets 的實作範例,不要求所有 controllers 採用相同內部實作。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.10.1-5.10.2; Appendix A, 文件頁 166-168,176-177, PDF 頁 166-168,176-177
| 模式或命令 | 如何分享或消耗額度 | 理解這個結果的限制 |
|---|---|---|
| Hard | 有需求且資源不足時按比例分享 | 設定上限不是最低效能保證 |
| Soft | 可使用閒置額度 | 多個 soft targets 依 limits 比例分享 |
| Write tokens | total bytes × WRBWR;write bytes;total IOPS × WRIOPSR;write IOPS 1 | 四個 buckets 各自檢查 |
| Read tokens | total bytes 及 total IOPS 1 | 不扣 write-only buckets |
30.01.Rate Limiting log 描述的不是一張把所有速度相加就能得到總量的表。多個控制器或連接埠可能共用同一組媒體資源;因此資料結構需要表示「誰連到哪個資源」,讓主機知道哪些能力其實來自同一個來源。
30.02.例如兩個控制器都能使用同一個 Endurance Group。若其中一個已占用該組媒體的頻寬,另一個不會因為走不同連接埠就憑空多出相同頻寬。閱讀描述子時,重複指向同一個資源的關係應保留,不能把每次引用都當成獨立資源。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.8; 5.10.3, 文件頁 79-83,168-172, PDF 頁 79-83,168-172
30.03.LID 28h 以 log 起點為基準的 dword offsets 連接 port、controller 與 storage-medium access descriptors;descriptor 可共享,不能假設為固定順序陣列。分段讀取後應重讀 GC,改變時重收整份資料。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.8; 5.10.3, 文件頁 79-83,168-172, PDF 頁 79-83,168-172
| 能力圖欄位 | 描述哪種關係或尺度 | 讀取時須避免的誤解 |
|---|---|---|
| LPL / offsets | 長度與指標皆有 dword 單位 | byte offset = dword offset ×4 |
| NP / NC / NST | 都是 0-based counts | NNSMAD 是實際數量 |
| SC / SI | subsystem/domain/EG/namespace 及其 ID | 依 scope 解讀,避免共享節點重算 |
| RLMA | 最大 read/write bandwidth/IOPS | workload 需符合相關 size/queue-depth 條件 |
31.01.FDP 讓主機參與資料放置的選擇,目的是把不同使用特性的資料安排到適合的回收單位。主機使用 handle 表達選擇,並不是直接指定 NAND 的實體位址。理解 FDP 時,要把 namespace 使用的格式、handle 與底層回收資源的關係連起來。
31.02.回報的剩餘可寫量與估計時間,可以協助觀察資源狀況,但它們有各自的單位及未回報值。共享同一個 RUH 的 namespace 還必須符合格式條件;資料大小同為 4 KiB,不足以證明兩種 Format Index 可以互換。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.2.1; 4.1.4.6-4.1.4.7; 4.1.6.3, 文件頁 26,79,110-113, PDF 頁 26,79,110-113
31.03.FDP namespace 的 placement handles 對應 Reclaim Unit Handles。共享 RUH 的 namespaces 必須使用相同 Format Index;host 指定的 handle list 不得重複 RUHID。RUH Status descriptors 先依 Placement Handle、再依 Reclaim Group Identifier 排序。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.2.1; 4.1.4.6-4.1.4.7; 4.1.6.3, 文件頁 26,79,110-113, PDF 頁 26,79,110-113
| FDP 欄位或記錄 | 描述的配置與活動 | 數值的有效性或限制 |
|---|---|---|
| NPHNDLS | 最多 128,且不超過 configuration 的 RUH 數 | 0 有 controller 選擇與共享規則 |
| EARUTR / RUAMW | 剩餘秒數估計/可寫 logical blocks | EARUTR=0 未回報;不是保證壽命 |
| LID 22h | HBMW/MBMW 含 NVM 指定寫入類命令 | 含 Copy 寫入端、Zeroes、Uncorrectable |
| LID 23h event 0h | LBAV 控制 LBA 有效性 | NLBAM=FFFFh 表示至少 FFFFh |
32.01.Streams 讓主機以資料流的方式表達資料關係。規格回報的 SWS 與 SGS 幫助主機選擇寫入及解除配置的大小,但兩個數值描述的層次不同。SWS 先以區塊表示建議寫入單位,SGS 再表示一個 stream granularity 包含多少個這樣的單位。
32.02.若 SWS=8、SGS=4,寫入單位是 8 個區塊,較大的粒度單位則是 32 個區塊。一次 8-block Write 符合前者,不代表同長度的解除配置也涵蓋完整粒度。使用 Streams 時,相關提示與一般 namespace 提示的優先關係也要一起考慮。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2.3; 5.13, 文件頁 128-129,175, PDF 頁 128-129,175
32.03.NVM 的 Stream Write Size 以 logical blocks 表示;stream granularity length 是 SGS 乘依欄位換算後 SWS blocks。使用 Streams 時,host 宜依 SGS/SWS 的建議處理 write/deallocate,再協調 namespace hints。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2.3; 5.13, 文件頁 128-129,175, PDF 頁 128-129,175
| Streams 提示 | 換算出的操作單位 | 與其他提示的關係 |
|---|---|---|
| SWS | 建議寫入大小,以 blocks 計 | 宜為 NPWG 的倍數 |
| SGS × SWS | stream granularity 的長度 | 適用 stream deallocate 對齊/長度 |
| Priority | 用 Streams 時優先 Streams attributes | 未使用則用 namespace hints |
33.01.可以透過某個控制器看到 namespace,不代表每一種命令都能使用。ANA 描述路徑與存取狀態,Reservations 則依保留類型及主機身分決定哪些存取會衝突。這是兩組不同條件,必須各自成立,不能用其中一組通過代替另一組。
33.02.例如路徑可用時,非保留持有者的 Write 仍可能衝突,而 Read 是否允許取決於保留類型。Copy 甚至同時涉及多個來源的讀取權限與目的的寫入權限。閱讀權限矩陣時,要先把命令分成讀取類或寫入類,再核對主機身分。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.1; 5.11, 文件頁 119,172-173, PDF 頁 119,172-173
33.03.ANA 狀態會限制指定 Features 並改變 capacity 回報;Reservations 則依 reservation type、holder 與 registration 狀態決定各命令是否允許。這些共用 namespace 能力可適用於 PCIe 多 controller 情境。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.1; 5.11, 文件頁 119,172-173, PDF 頁 119,172-173
| 路徑狀態或保留類型 | 對讀寫或回報的影響 | 還需確認的身分與對象 |
|---|---|---|
| ANA Identify | Inaccessible/Persistent Loss 下 NUSE、NVMCAP 回零 | 不是 media 被清空 |
| ANA FID05h | Get 的 Inaccessible/Persistent Loss/Change 受限 | 使用對應 ANA status |
| Write Exclusive / Exclusive Access | 非 holder:前者允許 read-like;後者 read/write-like 都衝突 | 兩者的非 holder write-like 都衝突 |
| Registrants Only / All Registrants | Write Exclusive 類允許所有人 read、registrants write;Exclusive Access 類僅 registrants read/write | Copy 每個 source 用 read 權限,destination 用 write 權限 |
| Reservations | 分 read-like、write-like 命令查矩陣 | holder、registrant 與 type 必須一起看 |
34.01.Key Per I/O 的相關欄位同時涉及能力、啟用狀態與資料存取的對齊要求。支援某個功能只是第一步,使用時還要確認 namespace 的設定和這筆 I/O 的範圍都符合要求。這些必要條件與一般效能提示的強度不同。
34.02.KPIODAAG 採從 0 起算的粒度編碼,因此原始值 7 表示 8 個區塊。起點 16、長度 8 都落在這個單位上;起點改為 17 或長度改為 7,就不符合。檢查長度時應使用實際區塊數,而不是直接拿命令中尚未加 1 的 NLB 比較。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.5; 4.1.5, 文件頁 91-92,105,160, PDF 頁 91-92,105,160
34.03.Key Per I/O 的 NVM 補充要求使用 key tag 的命令符合 KPIODAAG 的 LBA 起點對齊與長度 granularity;不符合時回 Invalid Field in Command。Capability、namespace enablement 與 key 管理是不同層次。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.5; 4.1.5, 文件頁 91-92,105,160, PDF 頁 91-92,105,160
| 能力或對齊欄位 | 描述的支援與設定 | 操作必須符合什麼 |
|---|---|---|
| KPIOCAP | 支援與 subsystem/指定的 namespace 範圍 | 不能只看單一 enable bit |
| KPIOSNS / KPIOENS | namespace 支援/啟用 | 未支援時 enable 必須為 0 |
| KPIODAAG | 0-based logical-block granularity | 起點及長度都必須符合 |
35.01.變更追蹤記錄的是哪些 LBA 範圍發生需要追蹤的變化,不是原始命令的逐筆副本。多個相鄰寫入可以合併成一段記錄,因此不能用 queue entry 數量反推寫入命令數。讀取一筆 entry 前,也必須先判斷它是否包含有效的 range。
35.02.佇列還會記錄開始、停止、暫停與已滿等狀態。佇列已滿時,後續變更不一定還能記錄;只看見先前完整的 entries,不能推論後面沒有變更。追蹤命令完成與記錄中的狀態標記,也需要依規格定義分開理解先後關係。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.8; 5.7, 文件頁 113-114,162-164, PDF 頁 113-114,162-164
35.03.Track Send 啟用 LBA Migration Queue 後,controller 可聚合邏輯 block 修改或 deallocation 記錄。Entry 只在所報命令效果生效後發布,可早於該命令 CQE;queue entry 與 I/O completion 是不同時間點。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.8; 5.7, 文件頁 113-114,162-164, PDF 頁 113-114,162-164
| 追蹤欄位或事件 | 描述的範圍及狀態 | 讀取記錄時的限制 |
|---|---|---|
| LBACIR | 00:range;01:整個 namespace;10:無 range | 先判斷欄位是否有效 |
| ESA | 001 start/resume;010 stop;011 suspend;111 full | full 表示 logging 已停止 |
| DLBA / CDQP | deallocated 標記/entry phase | DLBA=0 仍可能描述 deallocate 類修改 |
| RALBAS | 開始命令處理期間的變更可由 ATYPE02h 補齊 | start/stop marker 不要求先於 Track Send CQE |
36.01.資源匯出範本描述控制器應向外呈現哪些能力和資料,並限制這些值與底層資源的關係。對外回報可以受範本約束,不能任意超過實際可提供的資源。這裡討論的是已納入範圍的 memory-based 資料結構及規則。
36.02.範本中的版本欄位有自己的指定值,不會因閱讀的規格 PDF 版本較新就自動變更。佇列數也要依欄位編碼解碼後比較:原始 NCQS=7 代表 8 個,NCQS=3 代表 4 個。Namespace 的格式相容性則還要看資料、metadata 及相關設定,不能只比較名稱。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4.1-5.4.1.1, 文件頁 152-159, PDF 頁 152-159
36.03.Reference Exported NVM Subsystem Template 是選用的 memory-based 範本,限定一個 controller(ID 0h)及一個 namespace(ID 1h)。建立時必須設 TR=1;configuration state 只能以一筆命令設定一次,重複設定回 Command Sequence Error。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4.1-5.4.1.1, 文件頁 152-159, PDF 頁 152-159
| 範本項目 | 規定的對外值或相容條件 | 與底層資源的關係 |
|---|---|---|
| Identity and version | CAP.CSS=1、VS=020300h;NVM VER=010200h | 範本固定 Base 2.3/NVM 1.2,不隨本 PDF 版本自動升級 |
| Controller limits | MDTS、RAB、NCQS、NSQS、MQES、AWUN/AWUPF 受 underlying 限制 | NCQS/NSQS 是 0-based |
| Namespace compatibility | LBAF0 的 LBADS/MS 必須相同,MS=0;DPS/KPIOENS/CWP 必須為零 | controller 負責 Format Index remapping |
| Observable defaults | Error entries 與 SMART 為零;firmware active slot=1 | 支援清單、Feature defaults 與 Identify exceptions 另有固定規則 |
37.01.配置資料描述資源被安排成什麼樣子,執行中狀態則記錄當下使用哪些設定。兩者可能都有 Feature 名稱,但一個描述範本或配置,另一個描述目前值。恢復或解讀狀態時,如果把預設值當成目前值,就會失去原本的執行設定。
37.02.可變長度結構先有固定 64-byte header,再接 NVMECSS 指定的內容;NVMECSS 的單位是 Dword。因此值為 16 時,後段是 64 bytes,整體為 128 bytes。長度正確還不等於狀態一定一致,CSATTR.CP 另外回報處理期間的暫停條件。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4.1.2, 文件頁 159-160, PDF 頁 159-160
37.03.Reference Exported NVM Subsystem State 保存目前 Feature values 與 controller state。CSATTR.CP=1 表示整段 Migration Receive 處理期間 controller 都處於 suspended;NVMECSS 以 dwords 指出可變 NVMECS 長度,內層 VER 固定為 1h。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4.1.2, 文件頁 159-160, PDF 頁 159-160
| 狀態欄位 | 保存或描述什麼 | 長度及一致性如何判斷 |
|---|---|---|
| Feature values | 保存 arbitration、power、temperature、error recovery、queues、interrupt、atomicity 與 AEC | 是 current values,不是 Figure 187 defaults |
| CSATTR.CP | 1 表示整段處理期間 suspended | 0 不保證完全沒有 suspension |
| NVMECSS | 總長度 = 64 + 4 × NVMECSS bytes | 0 時 NVMECS 欄位不存在 |
38.01.以下依概念整理規格中的圖表。每組先說明讀取順序與要判斷的問題,接著列出各圖的欄位或行為說明。可以由正文的連結跳到對應組別,也可以用這一節檢查自己能否把欄位連回完整操作。
38.02.規格關係圖先回答由哪份規格定義行為,區塊圖再回答資料如何編址。讀格式表時先找到 Format Index 對應的項目,再分別解讀 LBADS 和 MS。不要把表格中的選項編號直接當作 byte 數。
回到本節的解釋與範例38.03.NVM 命令以 logical blocks 描述資料;Base 定義共同命令格式,PCIe Transport 定義傳輸,NVM Command Set 決定資料操作與格式。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| LBA/logical block size | LBA 選位置,格式決定每個位置包含多少資料。 | 相同的 8 個 blocks,512-byte 與 4096-byte 格式分別需要 4096 與 32768 bytes 資料。 |
| 欄位名稱/縮寫 | 先分辨它是識別碼、數量、位移或能力,才選擇解讀方式。 | Format Index 選一種格式;LBADS 是大小的指數,兩個值不能直接互換。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §1.1, Figure 1, 文件頁 9, PDF 頁 9
來源:NVME-NVM-CS-1.3, Rev. 1.3, §1.5, Figure 2, 文件頁 11, PDF 頁 11
NVM1-1三份規格分別回答共通協定、傳輸方式與資料操作的問題。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §1.1, Figure 1, 文件頁 9, PDF 頁 9
NVM1-2要解釋一次 Read,先在 NVM 規格看讀取語意,到 Base 看 SQE 與資料指標,再到 PCIe Transport 看佇列與 doorbell 如何存取。
NVM2-1LBA 是資料區塊的編號,換成 byte 位置還需要區塊大小。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §1.5, Figure 2, 文件頁 11, PDF 頁 11
NVM2-2每個 logical block 有 4096 bytes 時,LBA 3 的資料起點是 3×4096=12288 bytes;數字 3 本身不是 3 bytes。
38.04.容量示意圖的長條比較的是數量,不表示資料一定集中在前端。先用 NSZE 判斷位址是否在範圍內,再以 NCAP、NUSE 理解配置量,最後確認 THINP 所描述的支援能力。
回到本節的解釋與範例38.05.先用 CNS 及對象識別選回覆結構,再由 Format Index 配對格式資料。基本 Identify、命令集專屬 Identify 與延伸格式共同決定合法設定。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| CNS/NSID/CSI/CNTID/FIDX | 分別選結構、namespace、命令集、控制器與候選格式;依 CNS 定義決定哪些有效。 | 查目前格式與查尚未使用的候選格式,是不同查詢,不能把兩份資料當成同一現況。 |
| FLBAS/NLBAF/NULBAF/LBAF/ELBAF | 先解出有效格式清單,再沿同一 Format Index 配對基本與延伸欄位。 | FLBAS 選中 index 2 時,應讀同一 index 的 LBAF 與 ELBAF,不把數值 2 當成每 block 2 bytes。 |
| LBADS/MS/RP;PIF/QPIF/STS | 資料大小為 2^LBADS bytes;MS 給 metadata 大小;延伸欄位補上保護格式與 tag 寬度。 | LBADS=12、MS=16 表示 4096 bytes 資料及 16 bytes metadata,接著依 PI 格式計算 tag。 |
| MC/DPC/DPS/PIC/PIFA/LBAFEE | 能力描述可選項,目前設定與主機宣告決定真正使用哪種配置。 | 控制器支援延伸 PI,不代表主機在未宣告相應能力時就可直接建立該格式。 |
| VSL/WZSL/WUSL/DMRL/DMRSL/DMSL/WZDSL | 各自限制不同命令的長度、描述子數或處理量,先辨認目標命令與單位。 | Copy 的來源範圍限制不能拿來當 Write Zeroes 的單筆長度限制。 |
| NSZE/NCAP/NUSE;NSFEAT/DLFEAT | 容量量與能力、解除配置後讀取行為共同描述 namespace。 | NUSE=600 不代表只有 LBA 0–599 有資料;配置可以分散在整個有效範圍。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.2, Figure 91, 文件頁 63, PDF 頁 63
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.7, Figure 101, 文件頁 68, PDF 頁 68
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5, Figure 122, 文件頁 83-84, PDF 頁 83-84
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.1, Figure 123, 文件頁 85-93, PDF 頁 85-93
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.1, Figure 125, 文件頁 94, PDF 頁 94
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.3, Figure 127, 文件頁 97-101, PDF 頁 97-101
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.3, Figure 128, 文件頁 101-102, PDF 頁 101-102
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.4, Figure 129, 文件頁 103-106, PDF 頁 103-106
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.4, Figure 130, 文件頁 107, PDF 頁 107
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.5, Figure 131, 文件頁 107, PDF 頁 107
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.6, Figure 192, 文件頁 161, PDF 頁 161
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.6, Figure 193, 文件頁 162, PDF 頁 162
NVM123-1Identify Namespace 同時描述容量、格式與資料操作能力。
來源: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 格式。
38.06.先按查詢對象分組閱讀 CNS 表,再連接同一 namespace 的基本與延伸結構。FLBAS 是目前選擇,LBAF/ELBAF 是選項內容,能力位則說明允許哪些選擇;三者不能互相代替。
回到本節的解釋與範例NVM122-1Identify 的 CNS 選擇器決定回傳哪種資料結構。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5, Figure 122, 文件頁 83-84, PDF 頁 83-84
NVM122-2CNS 相同時,NSID、CSI 等相依欄位仍要正確;不能只憑回傳長度推斷這是控制器還是 namespace 資料。
38.07.正常操作與斷電情境各有原子性參數。先確認採用控制器或 namespace 的參數,再把命令的整段範圍放到原子邊界上判斷。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| AWUN/NAWUN;AWUPF/NAWUPF;ACWU/NACWU | 分別對應正常寫入、斷電情境與融合 Compare/Write 的保證上限;有效選擇依 namespace 能力。 | 支援 8-block 的正常原子寫入,不代表斷電時也保證相同的 8 blocks。 |
| NABSN/NABSPF/NABO | 邊界大小與起點決定一段 I/O 是否跨界,與單筆長度上限一起檢查。 | 長度雖未超過原子單位,起點若靠近邊界,結束位置仍可能落到下一段。 |
| MAM/DN | 多重原子模式與正常原子性停用選擇有各自條件。 | 多重模式下應畫出可獨立保證的子範圍,不能沿用整筆命令全有或全無的結論。 |
| Compare/Write/FUSE | 融合操作需符合配對與範圍規則,Compare 的結果影響 Write 是否執行。 | 先前內容不符預期時,不能把後面的 Write 當成獨立無條件寫入。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.3, Figure 3, 文件頁 14, PDF 頁 14
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 4, 文件頁 15-16, PDF 頁 15-16
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 5, 文件頁 17, PDF 頁 17
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 6, 文件頁 18, PDF 頁 18
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 7, 文件頁 18, PDF 頁 18
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 8, 文件頁 19, PDF 頁 19
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 9, 文件頁 20, PDF 頁 20
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 10, 文件頁 21, PDF 頁 21
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.4, Figure 98, 文件頁 66-67, PDF 頁 66-67
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.2, Figure 126, 文件頁 94-96, PDF 頁 94-96
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 146, 文件頁 124, PDF 頁 124
NVM126-1控制器層的原子性欄位提供適用於相應 namespace 的基準。
來源: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 是否提供覆寫參數。
NVM129-1命令集專屬控制器資料列出各種命令的能力與大小限制。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.4, Figure 129, 文件頁 103-106, PDF 頁 103-106
NVM129-2支援 Write Zeroes 不代表可以一次清零任意長度;仍須依 WZSL 等相應欄位計算上限。
NVM130-1版本描述子把主、次與修訂版本分開編碼。
來源: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,而不是把三欄相加或當成容量值。
NVM131-1FIDX 為需要格式索引的 Identify 查詢指定目標格式。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.5, Figure 131, 文件頁 107, PDF 頁 107
NVM131-2要看索引 20 的格式,先使用支援該查詢的 CNS,再用 FIDX 指向 20;格式數量和格式索引不是同一欄。
38.08.Base Identify Controller 提供跨命令使用的能力與限制;NVM 命令集的 Identify 結構再補上格式與命令專屬能力。兩份資料需要按同一控制器配對。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| ONCS | 各位元回報特定選用 NVM 命令或功能的支援,應按所選操作檢查相應位元。 | Compare 支援不能替代 Copy 支援;不能只看 ONCS 非零就使用所有選用命令。 |
| MDTS/CAP.MPSMIN | 非零 MDTS 以最小 memory page 大小為基礎計算最大傳輸量,與 namespace 的 LBA 大小不同。 | MDTS=5、最小 page=4096 bytes,最大傳輸量是 4096×2^5=128 KiB;再換成所選格式的 blocks。 |
| CTRATT/SANICAP | 前者提供控制器屬性,後者提供清除方法及相關能力;命令專屬設定要沿對應位元分支確認。 | 準備 Crypto Erase 時查 CES,再依目標與後續要求檢查其餘條件;不由支援 Block Erase 推論其他方法。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, Figure 338, 文件頁 340-382, PDF 頁 366-408
Base338-1Identify Controller 先告知能力與限制,主機再決定可使用的操作。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, Figure 338, 文件頁 340-382, PDF 頁 366-408
Base338-2規格列出某選用命令時,先查相應支援欄位再發出要求;「命令有定義」與「這台控制器支援」是不同證據。
38.09.Namespace Management 管理物件是否存在,Namespace Attachment 管理控制器能否存取。兩種命令各有 SEL,其編碼必須放在各自命令內解讀。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| Management SEL/CSI/DPTR | SEL 選 Create、Delete 或 Restore;Create 的 CSI 決定建立資料格式,DPTR 給資料位置。 | Management SEL=0h 是 Create,Attachment SEL=0h 是 Attach;數值相同但動作不同。 |
| Create payload → NSZE/NCAP/FLBAS 等欄位 | Base 定義共同傳輸結構,所選命令集補上主機設定;命令集延伸部分須以更具體的定義解讀。 | 使用 NVM Command Set 時,需把 Base Figure 448 與 NVM Figure 134 合讀,包含 Placement Handle List。 |
| CQE DW0/NSID | Create 成功回傳已建立 namespace 的識別碼,後續管理與 I/O 以它選物件。 | 回傳 NSID=7 不能單獨證明任何控制器已附加到它。 |
| Attachment DPTR/Controller List/NUMCIDS | 清單選控制器,NSID 選 namespace;SEL 決定附加或分離。 | NUMCIDS=2、列 A 與 B,表示對兩個控制器建立或移除關係。 |
| DNCS/ANAGRPID/NVMSETID/ENDGID | DNCS 回報預設配置狀態;另外三者說明 namespace 的資源歸屬。 | Restore Default 後仍需重新 Identify 實際配置,不能只拿 DNCS=1 推論 namespace 的容量。 |
| 命令專屬錯誤 | 格式、容量、識別碼及附加限制是不同檢查條件。 | Insufficient Capacity 與 NSID Unavailable 分別指出空間與識別碼資源問題,不應合併成同一種失敗。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.8, Figure 346, 文件頁 391-394, PDF 頁 417-420
Base346-1與命令集無關的 Identify Namespace 提供共享、屬性與路徑相關資訊。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.8, Figure 346, 文件頁 391-394, PDF 頁 417-420
Base346-2先知道某 NSID 對應的 namespace 是否共享,再解釋控制器間的存取關係;LBA 資料大小則仍需命令集專屬格式資訊。
38.10.沿同一個 Format Index 配對 LBAF、ELBAF,再看 FLBAS 選中哪一項。讀數量圖時,把欄位原始值、解碼後數量及最後一個 index 分開列出;例如 6 個選項的 index 是 0 到 5。
回到本節的解釋與範例38.11.先依對齊偏移找到合法或建議起點,再以粒度檢查長度,最後看是否跨越相關邊界。欄位若只是效能提示,不能提高成命令必須遵守的要求。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| NPWA/NPWG;NPRA/NPRG | 分別對應寫入與讀取的起點對齊及粒度,保留各欄位的數量編碼規則。 | 長度是粒度整數倍,但起點偏移一個 block,仍可能未符合對齊提示。 |
| NPDG/NPDGL/NPDAL/NOWS/NORS | 解除配置與最佳讀寫大小分別有自己的提示或限制,先辨認動作再使用。 | 讀取的最佳大小不能直接當成解除配置描述子的最大範圍。 |
| NOIOB/NABO/NABSN;SWS/SGS | I/O 邊界、原子邊界與串流大小是不同維度。 | 即使寫入符合 NPWG,仍需另查是否跨過要保證的原子邊界。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.1, Figure 124, 文件頁 94, PDF 頁 94
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 145, 文件頁 124, PDF 頁 124
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 147, 文件頁 125, PDF 頁 125
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 148, 文件頁 126, PDF 頁 126
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 149, 文件頁 127, PDF 頁 127
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 150, 文件頁 127, PDF 頁 127
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 151, 文件頁 128, PDF 頁 128
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 152, 文件頁 128, PDF 頁 128
NVM124-1對齊與粒度屬性分別描述起點位置和操作長度。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.1, Figure 124, 文件頁 94, PDF 頁 94
NVM124-2長度是粒度整數倍,但起點偏移 1 block 的寫入,仍可能不符合對齊建議;要分開比較兩個條件。
NVM125-1LBA Format 用 LBADS 與 MS 描述資料和 metadata 大小。
來源: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。
NVM127-1命令集專屬 Identify Namespace 補充 PI、格式與效能屬性。
來源: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 的配置。
NVM128-1Extended LBA Format 描述保護格式及 Storage Tag 分配。
來源: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 位元配置。
NVM192-1LBA Format List 把格式數量與每筆格式索引分開表示。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.6, Figure 192, 文件頁 161, PDF 頁 161
NVM192-2格式索引 20 不代表總共有 20 筆;先依 NLBAF/NULBAF 讀清單,再找到對應 Format Index。
NVM193-1不同 CNS 查詢會呈現不同範圍的格式清單項目。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.6, Figure 193, 文件頁 162, PDF 頁 162
NVM193-2使用 CNS 00h 與較新的格式查詢時,先查這張適用表,避免把第一種查詢的截取方式套給另一種。
38.12.把 Format 的命令欄位與 Identify 的能力欄位成對閱讀:先找允許的格式,再看命令選擇。LBAFEE/ELBAS 處理延伸格式支援,PI 處理保護類型,MSET 處理傳輸配置。
回到本節的解釋與範例NVM91-1Format NVM 決定 PI 類型與 metadata 的傳輸安排。
來源: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 排列。
NVM101-1LBAFEE 告知主機使用擴充的 LBA Format 機制。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.7, Figure 101, 文件頁 68, PDF 頁 68
NVM101-2要存取超出傳統格式索引表示範圍的格式前,先確認並設定主機行為,不能只把較大索引塞入舊欄位。
38.13.建立資料表先讀容量與格式,再讀保護欄位及遮罩;granularity 表另外用來計算配置是否有效率。先確認 GDM 如何把描述子對應到格式,再解讀 ND 的數量編碼。
回到本節的解釋與範例38.14.先選格式,再換算 NSZE、NCAP,配對粒度描述子,最後檢查資料保護及啟用中的 FDP 設定。粒度是配置效率提示,其他合法性要求仍需獨立滿足。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| NGA.GDM/ND/NGD → NSG/NCG | GDM 決定格式到描述子的對應,ND 是描述子數減 1;NSG、NCG 以 bytes 給建議粒度。 | NSZE=250、每 block 4096 bytes 是 1000 KiB;與 1 MiB 粒度比較前,先統一單位。 |
| NSZE/NCAP/FLBAS/DPS/NMIC | 容量、格式、保護與共享設定共同形成新 namespace。 | NCAP 的 byte 值依 FLBAS 選中的資料大小換算;不能另用另一個格式的 block size。 |
| ANAGRPID/NVMSETID/ENDGID | 說明資源歸屬;零值及不支援時的處理需依各欄位規則。 | FDP 在指定 Endurance Group 啟用時,還須遵守其與 NVM Set 的限制。 |
| LBSTM/LBAFEE/格式能力 | 主機提供的 Storage Tag mask 與延伸格式設定需符合 Identify 及 Host Behavior Support。 | 不能只因容量夠就忽略不相容的 PI 或遮罩設定。 |
| NPHNDLS/Placement Handle List/RUH | 數量決定清單有效項目,清單把 Placement Handle 對應到 Reclaim Unit Handle。 | NPHNDLS=0 由控制器依規則選 handle;非零清單需檢查範圍、重複值與共享格式一致性。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.8, Figure 132, 文件頁 108, PDF 頁 108
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.8, Figure 133, 文件頁 108, PDF 頁 108
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6.4, Figure 134, 文件頁 112-113, PDF 頁 112-113
NVM132-1Namespace Granularity List 說明有哪些配置粒度描述子。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.8, Figure 132, 文件頁 108, PDF 頁 108
NVM132-2先看模式與描述子數,再選符合情境的描述子;不能永遠只讀第一個 NSG/NCG。
NVM133-1NSG 與 NCG 分別提供 namespace 大小及容量的粒度提示。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.8, Figure 133, 文件頁 108, PDF 頁 108
NVM133-2若 NSG=1 MiB、每個 block=4 KiB,NSZE=250 對應 1000 KiB,不是 1 MiB 的整數倍;這可能影響配置效率,但不能單憑未遵循提示就否決其他方面合法的 Create。
NVM134-1Create payload 把主機選擇的容量、格式與放置參數交給控制器。
來源: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。
38.15.傳輸圖的上下兩種排列描述同一批區塊。逐一對照 Data 0 與 MD 0、Data 1 與 MD 1,再追蹤 DPTR、MPTR 指向哪個緩衝區。PI 位於 metadata 中的位置,與 metadata 是否分開傳輸是兩個不同維度。
回到本節的解釋與範例38.16.先依格式選交錯或分開傳輸,再由區塊數計算各緩衝區大小。DPTR 與 MPTR 的角色由傳輸配置及命令方向決定。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| DPTR/MPTR/FLBAS | 資料指標與 metadata 指標的適用性由格式及傳輸方式決定。 | 分開傳輸時,Data 0 必須對應 Metadata 0;分成兩個 buffer 不會改變配對順序。 |
| 區塊數×資料大小/區塊數×MS | 先計算兩部分,再依 PRACT 等處理調整實際傳輸量。 | PRACT=0、8 blocks、4096 bytes 資料與 16 bytes metadata,兩部分是 32768 與 128 bytes。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 23, 文件頁 28, PDF 頁 28
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 24, 文件頁 28, PDF 頁 28
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 50, 文件頁 49, PDF 頁 49
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 51, 文件頁 49, PDF 頁 49
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 67, 文件頁 53, PDF 頁 53
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 68, 文件頁 54, PDF 頁 54
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.3, Figure 153, 文件頁 129, PDF 頁 129
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.3, Figure 154, 文件頁 130, PDF 頁 130
NVM153-1Extended LBA 把每個 block 的資料與 metadata 相鄰傳輸。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.3, Figure 153, 文件頁 129, PDF 頁 129
NVM153-22 個 4096-byte 資料 blocks、各帶 8-byte metadata,排列是資料0、metadata0、資料1、metadata1,共 8208 bytes。
NVM154-1Separate metadata 使用資料與 metadata 兩個對應 buffer。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.3, Figure 154, 文件頁 130, PDF 頁 130
NVM154-2相同的 2 blocks 改用分離方式後,資料 buffer 為 8192 bytes,metadata buffer 為 16 bytes;兩者的 block 順序必須一致。
38.17.Opcode 表用來辨認操作及支援要求;狀態表要先選 SCT 再查 SC。FID、LID 與 opcode 屬於不同識別空間,即使數字相同,也不能拿其中一張表解釋另一種命令。
回到本節的解釋與範例38.18.先辨認命令、控制器類型及目前狀態,再讀支援或限制。狀態碼還要配 SCT,不能只看 SC 的數字。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| Opcode/NSID/資料方向 | Opcode 選操作,NSID 選對象,方向決定主機提供或接收什麼。 | Copy 的主機傳入資料是描述子清單,並非整份來源資料。 |
| SCT/SC | 狀態類別決定使用哪份狀態表;同一類別內再判斷原因。 | LBA Out of Range 針對位址範圍,Capacity Exceeded 針對配置容量,不應混為一談。 |
| 支援標記/適用註腳 | 需要结合可選能力、控制器種類與目前操作的限制。 | 控制器平常支援 Read,不代表清除的每一種受限狀態都允許同樣行為。 |
| ANA/Reservation type/Holder/Registrant | 路徑狀態與主機的存取資格分別影響操作;逐項配合命令種類判斷。 | 同一 namespace 對兩個主機可有不同存取資格,不能只用 NSID 相同推論结果相同。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.2.1, Figure 13, 文件頁 23, PDF 頁 23
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.2.1, Figure 14, 文件頁 23, PDF 頁 23
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.2.2, Figure 15, 文件頁 23, PDF 頁 23
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.2.3, Figure 16, 文件頁 23-24, PDF 頁 23-24
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.2.3, Figure 17, 文件頁 24, PDF 頁 24
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.1.2, Figure 18, 文件頁 25, PDF 頁 25
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.1.2, Figure 19, 文件頁 25, PDF 頁 25
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.1.2, Figure 20, 文件頁 26, PDF 頁 26
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3, Figure 22, 文件頁 27, PDF 頁 27
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 31, 文件頁 30, PDF 頁 30
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 59, 文件頁 51, PDF 頁 51
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 66, 文件頁 53, PDF 頁 53
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 76, 文件頁 56, PDF 頁 56
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.7, Figure 80, 文件頁 57, PDF 頁 57
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 89, 文件頁 61, PDF 頁 61
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3, Figure 92, 文件頁 64, PDF 頁 64
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3, Figure 93, 文件頁 64, PDF 頁 64
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4, Figure 109, 文件頁 75-76, PDF 頁 75-76
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.1, Figure 141, 文件頁 119, PDF 頁 119
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.11, Figure 199, 文件頁 173, PDF 頁 173
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.12, Figure 200, 文件頁 173, PDF 頁 173
NVM13-1Admin 命令支援表要同時看命令列與控制器種類。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.2.1, Figure 13, 文件頁 23, PDF 頁 23
NVM13-2Get LBA Status 對 I/O controller 是選用功能,對 Administrative controller 則禁止;不能因為看到命令名稱就認為每種控制器都能執行。
NVM14-1I/O 命令清單區分必備操作與需要另查能力的操作。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.2.1, Figure 14, 文件頁 23, PDF 頁 23
NVM14-2Read、Write 是基本命令;打算使用 Copy 前,仍要確認控制器支援 Copy 及需要的格式。
NVM15-1Log 清單說明不同控制器可支援哪些紀錄。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.2.2, Figure 15, 文件頁 23, PDF 頁 23
NVM15-2要讀 LID 0Eh,先查這一列對目前控制器是否適用,再查裝置實際支援情況;LID 數字不是通用於所有情境的保證。
NVM16-1Feature 支援程度與設定作用範圍是兩個不同資訊。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.2.3, Figure 16, 文件頁 23-24, PDF 頁 23-24
NVM16-2即使 Performance Characteristics 對某類控制器可用,仍要確認是否允許以 namespace 作為設定對象。
NVM17-1Feature 更新是否記入事件紀錄,不等於 Feature 能不能使用。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.2.3, Figure 17, 文件頁 24, PDF 頁 24
NVM17-2LBA Range Type 的紀錄建議標成 NR,意思是此類更新不建議記入該紀錄,並非禁止使用這個 Feature。
NVM18-1LBA 超出可定址範圍與容量不足有不同回覆。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.1.2, Figure 18, 文件頁 25, PDF 頁 25
NVM18-2NSZE=1000 時,存取 LBA 1000 已越界;在合法 LBA 範圍內分配更多資料卻超過容量,則是另一種問題。
NVM19-1命令專屬狀態要連同命令種類解釋。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.1.2, Figure 19, 文件頁 25, PDF 頁 25
NVM19-2Copy 回覆範圍重疊時,應檢查來源及目的範圍;不能拿 Read 的狀態表替它解釋同一個數值。
NVM20-1完整性錯誤可能是資料不符或區塊配置狀態,不一定是媒體損壞。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.1.2, Figure 20, 文件頁 26, PDF 頁 26
NVM20-2Compare Failure 表示資料與主機提供的預期內容不同;Deallocated or Unwritten Logical Block 則要連回該區塊狀態與 DULBE 設定。
NVM22-1操作碼中的傳輸方向描述主機與控制器之間交換的資料。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3, Figure 22, 文件頁 27, PDF 頁 27
NVM22-2Copy 雖然在裝置內搬移使用者資料,主機仍要傳入來源描述子,所以命令的傳輸方向不能只從「複製」二字推測。
38.19.先以 Phase Tag 辨認新完成項目,再用 SQID 與 CID 對回要求。SCT 決定 SC 所屬表格,DNR 與 CRD 補充重試資訊;SQHD 表示提交佇列進度,不能當成這筆命令的資料長度。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| SQID/CID/SQHD | 前兩者辨認命令,SQHD 告知控制器的 SQ Head。 | 一個 CQ 收到多個 SQ 的完成項目時,即使 CID 相同也可由 SQID 區分。 |
| SCT → SC | 先選 Generic、Command Specific、Media 或 Path 等類別,再查具體碼值。 | SC=某個值不能單獨命名錯誤;必須保留它搭配的 SCT。 |
| DNR/CRD/CRDT | DNR 與重試延遲資訊影響如何理解重新提交;不能把它們當成原命令已成功。 | 重試前仍要確認原操作的狀態與副作用,不能只看延遲已經過。 |
| DW0/DW1/Phase Tag | 前兩個 Dwords 的內容依命令解釋;Phase Tag 隨 CQ 回繞而變化。 | Create 成功時 DW0 可回 NSID;同一位置在另一種命令不一定有這種意義。 |
來源:NVME-BASE-2.4, Rev. 2.4, §4.2.1, Figure 97, 文件頁 144, PDF 頁 170
來源:NVME-BASE-2.4, Rev. 2.4, §4.2.1, Figure 98, 文件頁 144, PDF 頁 170
來源:NVME-BASE-2.4, Rev. 2.4, §4.2.1, Figure 99, 文件頁 145, PDF 頁 171
來源:NVME-BASE-2.4, Rev. 2.4, §4.2.3, Figure 101, 文件頁 145-146, PDF 頁 171-172
Base97-1CQE 把命令結果、佇列資訊與識別碼組成完成紀錄。
來源:NVME-BASE-2.4, Rev. 2.4, §4.2.1, Figure 97, 文件頁 144, PDF 頁 170
Base97-2先用 SQID 與 CID 找回原命令,再解 status 與命令專屬結果;DW0 並非每種命令都代表相同東西。
Base98-1CQE DW2 回報來源 SQ 與該 SQ 的 head 資訊。
來源:NVME-BASE-2.4, Rev. 2.4, §4.2.1, Figure 98, 文件頁 144, PDF 頁 170
Base98-2SQID 指向 SQ2、SQHD 已前進時,主機可理解控制器消耗進度;它不表示其他所有命令都已完成。
Base99-1CQE DW3 同時帶有命令識別碼與完成狀態。
來源:NVME-BASE-2.4, Rev. 2.4, §4.2.1, Figure 99, 文件頁 145, PDF 頁 171
Base99-2找到 CID 7 的回覆後,仍要讀 STATUS;識別到這筆命令並不等於它成功執行。
Base101-1Status 欄位必須把類型、代碼與附加控制資訊一起解釋。
來源:NVME-BASE-2.4, Rev. 2.4, §4.2.3, Figure 101, 文件頁 145-146, PDF 頁 171-172
Base101-2相同 SC 數值搭配不同 SCT 可以有不同意思;DNR 也不能從 SC 名稱猜出,必須看實際 bit。
38.20.先把 CDW10、CDW11 組成 SLBA,再把 NLB 換成實際區塊數,算出完整 LBA 範圍及 buffer 長度。最後依 CETYPE、PRACT 等選擇解讀其他欄位,避免把另一種格式的同一 bit 位置照搬過來。
回到本節的解釋與範例NVM50-1Read 的 MPTR 是獨立 metadata 的接收位置。
來源: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 指定。
NVM51-1Read 的 DPTR 指向主機接收使用者資料的空間。
來源: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 不等於這個主機記憶體位址。
38.21.先確認 Guard 格式及 STS,再計算 Storage Tag 與 Reference Tag 的位數。命令中的高低欄位組合成 tag 空間,而不是各自獨立的位址。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| PIF/QPIF/STS | Guard 格式決定可用 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/LBSTM | Application Tag、預期值與遮罩、Storage Tag 遮罩分別服務不同檢查。 | 先選擇哪些 bits 參與比對,再解釋比較結果;遮罩不是要寫入媒體的另一份資料。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 25, 文件頁 28, PDF 頁 28
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 29, 文件頁 29, PDF 頁 29
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 30, 文件頁 29, PDF 頁 29
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 33, 文件頁 30, PDF 頁 30
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 37, 文件頁 31, PDF 頁 31
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 38, 文件頁 32, PDF 頁 32
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 52, 文件頁 49, PDF 頁 49
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 57, 文件頁 50, PDF 頁 50
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 58, 文件頁 51, PDF 頁 51
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 60, 文件頁 52, PDF 頁 52
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 64, 文件頁 53, PDF 頁 53
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 65, 文件頁 53, PDF 頁 53
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 69, 文件頁 54, PDF 頁 54
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 74, 文件頁 55, PDF 頁 55
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 75, 文件頁 55, PDF 頁 55
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 81, 文件頁 59, PDF 頁 59
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 86, 文件頁 60, PDF 頁 60
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 87, 文件頁 60, PDF 頁 60
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.1, Figure 155, 文件頁 131, PDF 頁 131
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.1, Figure 156, 文件頁 132, PDF 頁 132
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.2, Figure 157, 文件頁 133, PDF 頁 133
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.3, Figure 159, 文件頁 134, PDF 頁 134
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 164, 文件頁 137, PDF 頁 137
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 165, 文件頁 138, PDF 頁 138
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 166, 文件頁 138, PDF 頁 138
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 167, 文件頁 139, PDF 頁 139
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 168, 文件頁 139, PDF 頁 139
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 169, 文件頁 139-140, PDF 頁 139-140
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 170, 文件頁 140, PDF 頁 140
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 171, 文件頁 140, PDF 頁 140
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 172, 文件頁 141, PDF 頁 141
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 173, 文件頁 141, PDF 頁 141
NVM52-1Read 的高位預期 tag 要與低位欄位一起解釋。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 52, 文件頁 49, PDF 頁 49
NVM52-2讀取使用 80-bit tag 空間的格式時,不能只檢查 CDW14;CDW2、CDW3 也參與表示預期內容。
38.22.先合成起始 LBA、解出實際區塊數,再檢查範圍、格式與處理選項。CDW13 的解讀方式會因 CETYPE 等選擇而改變。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| CDW10/CDW11 → SLBA;NLB | 兩個 Dwords 合成起點;NLB 是區塊數減 1,終點為 SLBA+NLB。 | SLBA=100、NLB=7 表示 LBA 100–107,共 8 blocks。 |
| LR/FUA/PRINFO/STC | 分別影響錯誤恢復、持久化相關行為及 PI 檢查;保留各自適用條件。 | 設定 FUA 不會自動排序另一個 queue 的命令;資料相依仍需主機安排。 |
| CETYPE/CEV/DSM/DTYPE/DSPEC | 先由命令格式選擇欄位的含義,再讀提示或命令擴充內容。 | CETYPE 非零時,不能再把同一 CDW13 位置套成 CETYPE=0 的 DSM hints。 |
| DEAC/NSZ/LBACZ | Write Zeroes 的選項與回傳量需結合命令結果解讀。 | 解除配置、回傳零值與指定範圍確實被處理是不同問題,不能只看 buffer 全零。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 26, 文件頁 28, PDF 頁 28
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 27, 文件頁 28-29, PDF 頁 28-29
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 28, 文件頁 29, PDF 頁 29
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 53, 文件頁 49, PDF 頁 49
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 54, 文件頁 49, PDF 頁 49
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 55, 文件頁 50, PDF 頁 50
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 56, 文件頁 50, PDF 頁 50
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 61, 文件頁 52, PDF 頁 52
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 62, 文件頁 52, PDF 頁 52
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 63, 文件頁 52, PDF 頁 52
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 70, 文件頁 54, PDF 頁 54
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 71, 文件頁 54, PDF 頁 54
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 72, 文件頁 54-55, PDF 頁 54-55
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 73, 文件頁 55, PDF 頁 55
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.7, Figure 77, 文件頁 56, PDF 頁 56
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.7, Figure 78, 文件頁 56, PDF 頁 56
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.7, Figure 79, 文件頁 57, PDF 頁 57
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 82, 文件頁 59, PDF 頁 59
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 83, 文件頁 59-60, PDF 頁 59-60
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 84, 文件頁 60, PDF 頁 60
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 85, 文件頁 60, PDF 頁 60
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 88, 文件頁 61, PDF 頁 61
NVM53-1Read 的起始 LBA 跨越兩個 32-bit 命令字。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 53, 文件頁 49, PDF 頁 49
NVM53-2SLBA=00000001_00000020h 時,CDW10=20h、CDW11=1h;把兩個字接反會讀到完全不同的位置。
NVM54-1Read 的 NLB 決定長度,其餘 bits 決定這次讀取的行為。
來源: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 大小另依格式計算。
NVM55-1未使用命令擴充時,Read 的 CDW13 可以描述存取提示。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 55, 文件頁 50, PDF 頁 50
NVM55-2主機預期接著循序讀更多資料,可按支援規則提供提示;提示不是保證控制器一定預先讀取多少資料。
NVM56-1使用命令擴充時,Read 的低 16 bits 依 CEV 解釋。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 56, 文件頁 50, PDF 頁 50
NVM56-2從 CETYPE=0 改成非零值後,不能沿用上一張表的低位元含義,必須切換到擴充定義。
NVM57-1Read 的 CDW14 提供低位預期 Storage/Reference Tag 空間。
來源: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 非零時須重新分隔。
NVM58-1Read 可以只檢查 Application Tag 中 mask 指定的部分。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 58, 文件頁 51, PDF 頁 51
NVM58-2mask=FFFFh 表示所有 16 bits 都參與相應比較;mask=0000h 則排除這些位元,不代表媒體 tag 必須全零。
NVM59-1Read 的命令專屬錯誤指出請求是否符合該命令要求。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4, Figure 59, 文件頁 51, PDF 頁 51
NVM59-2讀取設定與 namespace 的 PI 格式不相容時,應先修正格式理解;不要把它與媒體上的 Guard Check Error 合成同一結果。
NVM67-1Write 的 MPTR 提供要寫入的獨立 metadata。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 67, 文件頁 53, PDF 頁 53
NVM67-2主機的新使用者資料與對應 metadata 放在不同 buffer 時,要讓兩者指向相同順序的 logical blocks。
NVM68-1Write 的 DPTR 指向主機準備寫入的新資料。
來源: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;資料內容與媒體位置分別由不同欄位提供。
NVM69-1Write 的高位 tag 是要建立的目的端保護資訊的一部分。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 69, 文件頁 54, PDF 頁 54
NVM69-2先依 PI 格式組出 Storage/Reference Tag,再拆到命令字;不能因為高位目前是零,就假設所有格式都不用這些欄位。
NVM70-1Write 的 SLBA 只表示媒體目的起點。
來源: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 另外指出新資料在主機記憶體的哪裡。
NVM71-1Write 的長度、FUA 與 PI 選項各自控制不同事項。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 71, 文件頁 54, PDF 頁 54
NVM71-28-block Write 用 NLB=7;設定 FUA 影響持久化要求,並不自動保證其他佇列中的命令先完成。
NVM72-1一般 Write 的 CDW13 把 Directive 資訊與資料集提示分開。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 72, 文件頁 54-55, PDF 頁 54-55
NVM72-2使用 Streams 等 Directive 時先辨識高位 DSPEC;低位 DSM 提示仍有自己的含義,不是同一個編號。
NVM73-1擴充 Write 的 CDW13 以 CEV 取代相應的一般低位解釋。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 73, 文件頁 55, PDF 頁 55
NVM73-2CETYPE 非零後,保留高位 Directive 資訊時仍須按擴充定義設定低位,不把 DSM 提示塞進 CEV。
NVM74-1Write 的 CDW14 提供初始 tag 的低位部分。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 74, 文件頁 55, PDF 頁 55
NVM74-2連續寫入多個 blocks 時,先確認第一個 block 的 tag 初值,再依所用保護類型理解後續值。
NVM75-1Write 的 Application Tag 與 mask 是不同的欄位。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 75, 文件頁 55, PDF 頁 55
NVM75-2LBAT 提供 tag 內容,LBATM 指定相應處理的位元範圍;不能把 FFFFh mask 當成要寫入 FFFFh tag。
NVM76-1Write 的命令專屬狀態協助區分配置不符與寫入目標限制。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 76, 文件頁 56, PDF 頁 56
NVM76-2嘗試寫入唯讀範圍時,重點是存取規則;它與 tag 配置不合法屬於不同原因。
38.23.CDW0 先選操作與資料指標格式;NSID 選操作對象;DPTR/MPTR 再指向資料。命令專屬 Dwords 的含義由 OPC 與命令集決定。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| OPC/FUSE/CID | OPC 選操作,FUSE 說明融合操作角色,CID 讓完成項目找回原命令。 | 相同的 CDW10 數值放在 Read 與 Set Features 中,可能完全不是同一種意思。 |
| PSDT → DPTR/MPTR | PSDT 決定指標依 PRP 或 SGL 等格式解讀;指標內的數值不可在未選格式時直接當成長度。 | 主機先選指標格式,再按該格式準備 buffer 描述,最後由命令語意判斷資料方向。 |
| NSID/CDW2–CDW15 | NSID 與命令專屬欄位共同決定對象、範圍及選項。 | Create 的 DPTR 指向建立參數;它不是新 namespace 的實體儲存位址。 |
| NDT/NDM/MDPTR | 廠商命令使用共同格式時,資料與 metadata 長度各有自己的欄位及指標。 | 先看廠商命令格式支援宣告,再依長度定義換算,不能把欄位上限直接加 1 後存回同寬整數。 |
來源:NVME-BASE-2.4, Rev. 2.4, §4.1.1, Figure 93, 文件頁 140-142, PDF 頁 166-168
Base93-1共通 SQE 固定各命令共用欄位的位置。
來源:NVME-BASE-2.4, Rev. 2.4, §4.1.1, Figure 93, 文件頁 140-142, PDF 頁 166-168
Base93-2同樣在 CDW10,Read 與管理命令可以有完全不同含義;先依 OPC 選命令,再查專屬欄位表。
38.24.PRP1 的 page offset 決定第一頁還能容納多少資料,總長度再決定 PRP2 是下一頁位址還是 PRP List 位址。指標串接與資料是否實體連續是兩個問題。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| Page Base Address/Offset | 將位址拆為 page 基底與頁內位移;page 大小以主機所選記憶體 page 設定解讀。 | page 為 4096 bytes、offset=3072,第一頁只剩 1024 bytes 可放資料。 |
| PRP2/PRP List entries | 先扣掉第一頁已涵蓋的長度,再依剩餘量判斷直接指下一頁或使用清單。 | 傳輸 8192 bytes 且第一頁只剩 1024 bytes 時,還需涵蓋後續 7168 bytes,不能只給一個下一頁。 |
| 清單串接與對齊 | 清單中的頁位址及下一段清單各有對齊與最後項目的使用規則。 | 不能把作為下一張清單指標的位置,又當成一頁實際資料。 |
來源:NVME-BASE-2.4, Rev. 2.4, §4.3.1, Figure 110, 文件頁 158, PDF 頁 184
來源:NVME-BASE-2.4, Rev. 2.4, §4.3.1, Figure 111, 文件頁 158, PDF 頁 184
Base110-1PRP entry 是有固定位元配置的記憶體指標。
來源:NVME-BASE-2.4, Rev. 2.4, §4.3.1, Figure 110, 文件頁 158, PDF 頁 184
Base110-2先按圖取出位址相關位元,再配合頁大小判斷它指向哪一頁;不能把 64-bit entry 當成資料長度。
Base111-1PRP 的頁基底與頁內 offset 共同形成第一段資料位置。
來源:NVME-BASE-2.4, Rev. 2.4, §4.3.1, Figure 111, 文件頁 158, PDF 頁 184
Base111-24 KiB 頁、offset=128 時,第一頁剩餘 4096−128=3968 bytes;是否需要下一個 PRP 由總長度決定。
38.25.SGL 的型別與子型別決定描述子是在描述資料、下一段描述子,或其他受支援行為。LEN 的單位雖然是長度,所指的內容仍由型別決定。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| SGLID/SGLDT/SGLDST | 型別與子型別決定此描述子的結構及合法組合。 | Data Block 的 ADDR 指向資料;Segment 的 ADDR 指向更多描述子,兩者不能當成相同 buffer。 |
| ADDR/LEN | 一起描述一段範圍;主機還需檢查總涵蓋長度與命令要求相符。 | 前段 1024 bytes、後段 3072 bytes 可涵蓋 4096 bytes,但每個描述子仍需符合自身規則。 |
| Segment/Last Segment/Bit Bucket | Segment 與 Last Segment 表達清單串接,Bit Bucket 表達特定資料處理方式。 | 遇到 Last Segment 就按最後一段的規則處理,不再假定有下一段指標。 |
來源:NVME-BASE-2.4, Rev. 2.4, §4.3.2, Figure 116, 文件頁 161, PDF 頁 187
Base116-1Generic SGL Descriptor 固定型別欄位的位置。
來源:NVME-BASE-2.4, Rev. 2.4, §4.3.2, Figure 116, 文件頁 161, PDF 頁 187
Base116-2先讀 SGLID 判斷 descriptor 類型,再解其餘 bytes;同一位置在資料描述子與 segment 描述子中指向不同對象。
38.26.命令順序圖要分開觀察提交、執行與完成。閱讀 fused pair 的格式時,把兩筆命令的範圍並列,再檢查 ACWU/NACWU 及邊界;不要只看到 FUSE 設定就推論大小一定符合。
回到本節的解釋與範例NVM3-1融合的 Compare 與 Write 把比對結果當成是否更新的條件。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.3, Figure 3, 文件頁 14, PDF 頁 14
NVM3-2媒體原本為 A,主機要求「若仍為 A 就改成 B」;比對失敗時不能繼續寫 B,否則會覆蓋別人的更新。
38.27.大小表先解碼 AWUN/AWUPF,再依 namespace 欄位及模式選取適用值。邊界圖從 NABO 開始標出每個分界,將實際寫入範圍畫在同一條 LBA 軸上,才能看出是否跨界。
回到本節的解釋與範例NVM4-1原子性參數要先選控制器或 namespace 的值,再換算實際大小。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 4, 文件頁 15-16, PDF 頁 15-16
NVM4-2若適用的 AWUN 原始值為 7,大小是 8 個 blocks;若 namespace 欄位使用零值繼承規則,不能把該零直接當成 1 block。
NVM5-1正常運作下的重疊寫入結果取決於原子大小與讀寫範圍。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 5, 文件頁 17, PDF 頁 17
NVM5-2把一次寫入分成「原子保證內」與「跨出保證」兩種長度,再沿表中的讀取範圍比較可能看到的舊、新資料組合。
NVM6-1斷電結果表必須先有明確的寫入前資料與此次更新範圍。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 6, 文件頁 18, PDF 頁 18
NVM6-2假設某段原本都是 A,這次打算改為 B;先在圖上標出哪些 blocks 本來就是 A,哪些是這次命令要改的,才能讀下一張表。
NVM7-1斷電時的資料保證依寫入是否符合 power-fail 原子範圍而變化。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 7, 文件頁 18, PDF 頁 18
NVM7-2寫入中途斷電後,沿表中對應的寫入大小與完成情況讀結果;不能把「命令尚未完成」直接理解成全部更新都已保存。
NVM8-1寫入長度足夠小,仍可能因起點位置而跨越原子邊界。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 8, 文件頁 19, PDF 頁 19
NVM8-2教學例:邊界每 8 blocks 一次,LBA 7 起寫 2 blocks 會跨界;LBA 4 起寫 2 blocks 則不會。兩筆長度相同,位置不同。
NVM9-1Multiple 模式把較大寫入分成符合參數的原子子範圍。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 9, 文件頁 20, PDF 頁 20
NVM9-2一筆寫入跨越 3 個原子單位時,應逐個單位討論保證;不能把 3 個單位合稱為一次全有或全無的交易。
NVM10-1圖中的大命令 D 對應多個子範圍,方便比較兩種原子模式。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4, Figure 10, 文件頁 21, PDF 頁 21
NVM10-2先把 A、B、C 各覆蓋的範圍畫在同一條 LBA 軸上,再看 D 如何一次涵蓋它們;比較的是提交方式與各段保證,不是命令名稱。
38.28.比較命令圖時,先找有沒有主機資料 buffer,再找控制器使用什麼作為比較或檢查依據。大小表必須連同 VSL 與 NVMVFYS 閱讀,才知道數值是建議還是上限。
回到本節的解釋與範例NVM23-1Compare 的 MPTR 指向要一起比較的獨立 metadata。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 23, 文件頁 28, PDF 頁 28
NVM23-2若資料與 metadata 分開傳輸,預期使用者資料放在 DPTR 所指區域,預期 metadata 則放在 MPTR 所指區域。
NVM24-1Compare 的 DPTR 提供預期內容,供控制器與媒體資料比較。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 24, 文件頁 28, PDF 頁 28
NVM24-2主機把預期值 A 放進輸入 buffer;命令比較媒體是否也為 A,不會把這個 buffer 當成一般 Read 的輸出目的地。
NVM25-1Compare 的高位 tag 欄位要與 CDW14 合併才能形成完整預期值。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 25, 文件頁 28, PDF 頁 28
NVM25-2某種 PI 格式使用超過 32 bits 的 tag 空間時,只填 CDW14 會缺少高位;應先組出完整 tag,再按圖拆入各欄位。
NVM26-1Compare 的 SLBA 指定比較範圍起點。
來源: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 由另一個欄位決定。
NVM27-1Compare 的長度與保護檢查選項放在同一個命令字中。
來源: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 傳輸設定直接照搬。
NVM28-1Compare 的 CDW13 在啟用命令擴充時承載擴充值。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 28, 文件頁 29, PDF 頁 29
NVM28-2CETYPE 非零時依對應擴充解釋 CEV;若 CETYPE=0,不能把相同低位元當成有效擴充值。
NVM29-1Compare 的 CDW14 是預期 tag 空間的低 32 bits。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 29, 文件頁 29, PDF 頁 29
NVM29-2若 STS 分走部分位元,這 32 bits 就不全是 Reference Tag;先依格式分隔,再比較對應的預期值。
NVM30-1Compare 的 Application Tag mask 決定哪些位元參與比對。
來源: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 為零而被要求等於零。
NVM31-1Compare 的設定錯誤與實際資料比對失敗需要分開理解。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1, Figure 31, 文件頁 30, PDF 頁 30
NVM31-2PI 格式設定不成立時,尚未進入有效的資料比較;Compare Failure 則表示比較已發現內容不相同。
NVM60-1Verify 的高位 tag 提供媒體檢查的預期值。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 60, 文件頁 52, PDF 頁 52
NVM60-2Verify 雖不把資料讀回主機,仍可需要預期 tag;沒有輸出資料 buffer 並不表示不檢查資料保護。
NVM61-1Verify 用 SLBA 指定要檢查的起點。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 61, 文件頁 52, PDF 頁 52
NVM61-2要檢查 LBA 200~203,起點填 200,長度由 NLB 表達;不需要提供一份預期使用者資料作逐 byte 比較。
NVM62-1Verify 的長度與檢查選項決定此次驗證範圍。
來源: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 處理方式原封不動搬過來。
NVM63-1Verify 的命令擴充欄位只在相應 CETYPE 下有意義。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 63, 文件頁 52, PDF 頁 52
NVM63-2同一個低 16-bit 數值放在不同 CETYPE 中,可能表示不同內容;報告時須把選擇器和值一起說明。
NVM64-1Verify 的 CDW14 是預期 tag 的低位部分。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 64, 文件頁 53, PDF 頁 53
NVM64-2若格式還用到 CDW2/3,讀者應先合併再拆分 Storage Tag 與 Reference Tag,避免只驗證了低位。
NVM65-1Verify 的 Application Tag mask 用來選擇檢查位元。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 65, 文件頁 53, PDF 頁 53
NVM65-2只檢查高位的 mask 與檢查全部位元會得到不同的通過條件;mask 是比較範圍,不是另一份資料。
NVM66-1Verify 的回覆要依驗證命令的狀態集合閱讀。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.5, Figure 66, 文件頁 53, PDF 頁 53
NVM66-2命令成功表示要求的驗證已完成,不能推論媒體內容與主機心中某份資料相同;若要比較已知內容,需使用 Compare。
38.29.先解碼 NR 得到來源描述子數,再逐段解碼 NLB,把長度累加到 SDLBA。對照 MSRC、MSSRL、MCL 時,分清楚它們限制的是來源數、單段長度或總長度;完成 DW0 另讀其回報語意。
38.30.Copy 的 DPTR 指向來源描述子;SDLBA 是目的起點。每個描述子先選來源 namespace 與範圍,再把各段長度依序累加到目的位置。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| DESFMT/NR/DPTR | DESFMT 決定描述子版型,NR 是描述子數量減 1,DPTR 給清單位置。 | NR=1 代表兩個描述子;格式不同時,不能沿用同一個描述子長度解析清單。 |
| SNSID/SLBA/NLB → SDLBA | 來源可由描述子選 namespace;各段實際長度決定下一段目的位置。 | 第一段 3 blocks、第二段 2 blocks、SDLBA=100,目的依序是 100–102 與 103–104。 |
| FCO/能力與命令專屬狀態 | 快速複製要求需要支援與資源條件;相關錯誤指出哪個要求未成立。 | Fast Copy Not Possible 與來源範圍重疊是不同條件,不能只稱為「Copy 不支援」。 |
| PRINFOR/PRINFOW/STCR/STCW | 兩端保護資訊處理分開選擇,再對照來源與目的格式。 | 目的位置改變時,要重新檢查 Reference Tag 的生成與檢查方式。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 32, 文件頁 30, PDF 頁 30
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 34, 文件頁 30, PDF 頁 30
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 35, 文件頁 30-31, PDF 頁 30-31
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 36, 文件頁 31, PDF 頁 31
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 39, 文件頁 32, PDF 頁 32
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 40, 文件頁 33-34, PDF 頁 33-34
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 41, 文件頁 35-36, PDF 頁 35-36
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 42, 文件頁 38, PDF 頁 38
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 43, 文件頁 43-44, PDF 頁 43-44
NVM32-1Copy 的 DPTR 指向來源範圍描述子。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 32, 文件頁 30, PDF 頁 30
NVM32-2要複製來源 LBA 100~103,buffer 中放的是來源起點、長度等描述,不必把這 4 blocks 的使用者資料先讀回主機。
NVM33-1Copy 命令本身的高位 tag 描述目的端資料保護。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 33, 文件頁 30, PDF 頁 30
NVM33-2來源端的預期 tag 從來源描述子取得,目的端要寫入的 tag 則由命令欄位提供;兩者可能不同。
NVM34-1Copy 的 SDLBA 是串接所有來源範圍後的目的起點。
來源: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 寫一次。
NVM35-1Copy 分別指定讀端與寫端 PI 行為,並選擇描述子格式。
來源: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 個來源範圍。
NVM36-1Copy 的 CDW13 分別容納 Directive 資訊與命令擴充資訊。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 36, 文件頁 31, PDF 頁 31
NVM36-2使用 Directive 時讀高 16 bits 的 DSPEC;命令擴充是否使用低 16 bits 的 CEV,仍由 CETYPE 決定。
NVM37-1Copy 的 CDW14 補齊目的端 tag 的低位元。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 37, 文件頁 31, PDF 頁 31
NVM37-2目的起點改變時,要重新核對初始 Reference Tag;不能直接把第一個來源描述子的 tag 當成目的 tag。
NVM38-1Copy 的 LBAT 和 LBATM 描述目的端 Application Tag。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 38, 文件頁 32, PDF 頁 32
NVM38-2若只關心某些 tag 位元,先列出要保留或比對的位元,再依圖理解 mask;mask 與 tag 值不能互換。
NVM39-1Copy 描述子格式決定來源 namespace 與 PI 資訊如何表示。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 39, 文件頁 32, PDF 頁 32
NVM39-2需要指定另一個來源 namespace 時,先選支援 SNSID 的格式;不能只在不含該欄位的格式後面自行加上 NSID。
NVM40-1Format 0h 與 2h 的來源項目使用相應的較短 tag 表示。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 40, 文件頁 33-34, PDF 頁 33-34
NVM40-2填入一段來源時,先確定格式是否包含 SNSID,再設定 SLBA 與 NLB;相同 byte 位置須依選定格式閱讀。
NVM41-1Format 1h 與 3h 為較大的 tag 空間提供高、低欄位。
來源: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;省略高位就不再是原本的預期值。
NVM42-1多個來源範圍按描述子順序連續寫入目的範圍。
來源: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。
NVM43-1Copy 失敗原因可以來自範圍、資源或快速複製條件。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.2, Figure 43, 文件頁 43-44, PDF 頁 43-44
NVM43-2來源與目的發生不允許的重疊,和要求 Fast Copy 卻無法滿足,是不同條件;先依狀態找要重新檢查的部分。
38.31.Host Behavior Support 是主機對可處理行為或格式的宣告。控制器本身支援某功能,不足以推論主機已能解釋該功能的進階資料結構。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| LBAFEE/ETDAS/CDF2E/CDF3E | 分別連到延伸 LBA 格式、Telemetry Area 4 及 Copy 描述子格式;每篇只使用所需分支。 | 使用需要延伸格式的 namespace 建立設定前,先確認主機相應宣告已成立。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.15, Figure 491, 文件頁 476-477, PDF 頁 502-503
Base491-1Host Behavior Support 告知控制器主機能處理哪些延伸行為。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.15, Figure 491, 文件頁 476-477, PDF 頁 502-503
Base491-2裝置支援某功能與主機宣告已能使用它不同;先確認能力,再看主機是否按對應欄位啟用相容行為。
38.32.把轉換表當成來源格式與目的格式的交叉比較:先確定兩端是否有 PI,再選讀端/寫端 PRACT 的組合,最後核對 metadata 是否只包含 PI。表中的 0/0、1/1 必須分別對應到兩端。
回到本節的解釋與範例38.33.PRACT 選資料保護處理方式,PRCHK 的各 bit 選檢查項目;格式、metadata 大小與命令方向共同決定實際傳輸量。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| PRACT/MS/PI size | 結合所選格式判斷 PI 是隨資料傳輸,還是由控制器插入或移除。 | MS 大於 PI 大小時,移除 PI 不代表整份 metadata 都消失。 |
| GRDCHK/ATCHK/RTCHK/STC | Guard、Application Tag、Reference Tag 及 Storage Tag 的檢查分別選擇。 | 只選 Guard 檢查,不可宣稱同時驗證了所有 tag 的關聯。 |
| PRINFOR/PRINFOW;STCR/STCW | Copy 的來源讀取與目的寫入可有不同處理;兩端的選擇需要成對閱讀。 | 來源有 PI、目的沒有 PI 的 Strip,與來源沒有 PI、目的需要 PI 的 Insert,資料流方向相反。 |
| 來源資料/主機資料/比較結果 | Compare 先依設定處理與檢查,再比較指定資料;錯誤可來自不同階段。 | PI 檢查失敗與資料比較不相等,不能合成同一種 Compare Failure。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.5, Figure 11, 文件頁 21-22, PDF 頁 21-22
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.5, Figure 12, 文件頁 22, PDF 頁 22
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.1, Figure 174, 文件頁 143, PDF 頁 143
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.2, Figure 175, 文件頁 145, PDF 頁 145
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.4, Figure 176, 文件頁 146, PDF 頁 146
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.5, Figure 177, 文件頁 147, PDF 頁 147
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.5, Figure 178, 文件頁 147, PDF 頁 147
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.5, Figure 179, 文件頁 148, PDF 頁 148
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.5, Figure 180, 文件頁 148, PDF 頁 148
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.5, Figure 181, 文件頁 149, PDF 頁 149
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.5, Figure 182, 文件頁 149, PDF 頁 149
NVM177-18-byte PI 的 Copy pass-through 讓保護資訊隨資料傳遞。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.5, Figure 177, 文件頁 147, PDF 頁 147
NVM177-2PRINFOR.PRACT=0、PRINFOW.PRACT=0 時沿圖追來源 PI 到目的端,不在中間自行插入重新產生步驟。
NVM178-116-byte PI 的 Copy pass-through 保留較大的 PI 結構。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.5, Figure 178, 文件頁 147, PDF 頁 147
NVM178-2與 Figure 177 比較時,先將每個 block 的 PI 從 8 bytes 換成 16 bytes,再看資料與 PI 的對應,不能沿用 8-byte 欄位切法。
NVM179-18-byte PI 的 Copy replace 分開處理來源檢查與目的 PI 產生。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.5, Figure 179, 文件頁 148, PDF 頁 148
NVM179-2讀端和寫端 PRACT 都為 1 時,沿圖看舊 PI 在哪裡移除、新 PI 在哪裡產生,而非把原 PI 原封不動複製。
NVM180-116-byte PI 的 Copy replace 使用目的格式重新建立較大的 PI。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.5, Figure 180, 文件頁 148, PDF 頁 148
NVM180-2來源、目的都帶 16-byte PI 時,仍須用目的端 tag 設定產生新保護資訊;大小相同不表示內容也相同。
NVM181-1Copy insert 用在來源無 PI、目的需要 PI 的資料轉換。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.5, Figure 181, 文件頁 149, PDF 頁 149
NVM181-2來源只有使用者資料,目的每個 block 需要 8-byte PI;沿寫端流程看控制器如何補上目的保護資訊。
NVM182-1Copy strip 用在來源帶 PI、目的不保留 PI 的轉換。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.5, Figure 182, 文件頁 149, PDF 頁 149
NVM182-2來源的 8-byte PI 仍按規則參與讀端處理,但不成為目的使用者資料的一部分;移除 PI 不是少複製使用者資料。
38.34.先讀屬性位,再把每個 range 的長度列出並累加。限制表必須同時看三個 limits 是否為零,以及 variant 的值;完成狀態不能取代對實際配置語意的解讀。
回到本節的解釋與範例38.35.Dataset Management 傳入一份範圍清單。命令選共同動作,描述子給個別範圍及用途提示;不同欄位的數量編碼不能互相套用。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| DPTR/NR/AD/IDW/IDR | DPTR 指清單,NR 是描述子數減 1;其他 bits 指解除配置或完整讀寫等屬性。 | NR=1 需要兩個範圍描述子,但每段涵蓋多少 blocks 要另讀描述子。 |
| SLBA/LLB/CATTR | SLBA 是起點,LLB 直接表示 logical blocks 數;CATTR 是該範圍的上下文屬性。 | LLB=8 表示 8 blocks,不能套用一般 Read 的 NLB+1 規則變成 9。 |
| CASZE/WPREP/SWR/SRR/AL/AF | 是存取大小、讀寫方式與頻率等提示;不是實際讀寫完成結果。 | 提示順序讀取,不會替主機執行 Read,也不能當成所有後續 I/O 的強制排序。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 44, 文件頁 44, PDF 頁 44
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 45, 文件頁 44, PDF 頁 44
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 46, 文件頁 44-45, PDF 頁 44-45
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 47, 文件頁 45, PDF 頁 45
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 48, 文件頁 47, PDF 頁 47
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 49, 文件頁 48, PDF 頁 48
NVM44-1Dataset Management 傳入的是範圍清單,不是那些範圍內的資料。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 44, 文件頁 44, PDF 頁 44
NVM44-2要提示兩段資料的使用方式,只需傳入兩個描述子,無須把兩段使用者資料放入 DPTR buffer。
NVM45-1Dataset Management 的 NR 採從零起算的範圍數。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 45, 文件頁 44, PDF 頁 44
NVM45-2NR=0 表示 1 個範圍,NR=2 表示 3 個範圍;配置清單大小時先加 1,再乘描述子大小。
NVM46-1AD、IDW、IDR 表示主機對所列範圍提出的管理資訊。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 46, 文件頁 44-45, PDF 頁 44-45
NVM46-2主機不再需要某段資料時可提出 deallocate;這與只告知讀寫特性不同,不能把所有 bits 都解釋成「刪除」。
NVM47-1每個 Dataset Management 描述子都有自己的起點、長度與屬性。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 47, 文件頁 45, PDF 頁 45
NVM47-2兩段不連續的 LBA 範圍要用兩個項目表示;不能只把總長度相加,否則中間未指定的區域也會被涵蓋。
NVM48-1Context Attributes 描述預期的存取方式,供控制器參考。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 48, 文件頁 47, PDF 頁 47
NVM48-2循序讀取與隨機讀取可給不同提示;這些提示不會替主機建立命令完成順序。
NVM49-1Dataset Management 的錯誤表區分屬性衝突與命令大小限制。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 49, 文件頁 48, PDF 頁 48
NVM49-2一份清單可能每段都合法,卻因總數超過上限而不被接受;這與同一命令給出衝突屬性不同。
38.36.先依 opcode 分開閱讀兩種命令,再看 Write Zeroes 的 NSZ、DEAC 與保護選項。最後對照 CQE 的 LBACZ;圖上的命令要求和完成回報分別描述「想做什麼」與「確認做到什麼」。
回到本節的解釋與範例NVM77-1Write Uncorrectable 指定之後應呈現不可修正狀態的 LBA 起點。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.7, Figure 77, 文件頁 56, PDF 頁 56
NVM77-2指定 LBA 40 起的範圍時,命令沒有要求主機提供一份損壞資料內容;它設定的是媒體對外呈現的行為。
NVM78-1Write Uncorrectable 的 NLB 決定標記多少 blocks。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.7, Figure 78, 文件頁 56, PDF 頁 56
NVM78-2NLB=0 表示 1 block;不能把它理解成空操作而忽略對該 LBA 後續讀取的影響。
NVM79-1Write Uncorrectable 的 Directive 資訊只在指定用途下解釋。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.7, Figure 79, 文件頁 57, PDF 頁 57
NVM79-2若沒有啟用相應 Directive,就不能自行把 DSPEC 當成額外的 LBA 或長度;其適用性需回看 DTYPE。
NVM80-1唯讀範圍也限制 Write Uncorrectable。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.7, Figure 80, 文件頁 57, PDF 頁 57
NVM80-2即使這個命令不傳入使用者資料,它仍改變目標區塊的可讀行為,因此不能因「沒有資料 buffer」就忽略唯讀限制。
NVM81-1Write Zeroes 的高位 tag 仍需依目的格式設定。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 81, 文件頁 59, PDF 頁 59
NVM81-2使用資料保護的 namespace 中,寫零資料也有相應 tag;使用者資料全零不代表所有保護欄位也都填零。
NVM82-1Write Zeroes 的 SLBA 指定清零範圍起點。
來源: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。
NVM83-1Write Zeroes 的清零範圍、deallocate 與保護選項要一起閱讀。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 83, 文件頁 59-60, PDF 頁 59-60
NVM83-2要求讀回零,與要求繼續保留配置,是不同問題;要連同 DEAC 及相關支援條件判斷。
NVM84-1未啟用命令擴充的 Write Zeroes 使用一般 Directive 欄位。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 84, 文件頁 60, PDF 頁 60
NVM84-2設定 DSPEC 前先確認 DTYPE;不能把保留的低位元拿來表示額外清零長度。
NVM85-1啟用命令擴充後,Write Zeroes 的低位元改由 CEV 定義。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 85, 文件頁 60, PDF 頁 60
NVM85-2同一筆命令從一般模式改用擴充模式時,先更換對 CDW13 的解釋,再填參數。
NVM86-1Write Zeroes 的低位 tag 初值與全零資料內容是兩件事。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 86, 文件頁 60, PDF 頁 60
NVM86-2資料全部設為零時,Reference Tag 仍需符合目的位置與保護類型;不能以全零使用者資料推導 tag 必為零。
NVM87-1Write Zeroes 的 Application Tag 欄位描述保護資訊。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 87, 文件頁 60, PDF 頁 60
NVM87-2若系統使用特定 Application Tag 識別資料類別,清零資料後仍須按命令及格式規則處理這個 tag。
NVM88-1Write Zeroes 的完成資訊可回報實際清零的 LBA 數量。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 88, 文件頁 61, PDF 頁 61
NVM88-2使用允許部分處理的情境時,將 LBACZ 與要求範圍對照,不能只看成功狀態就假設整段都已處理。
NVM89-1Write Zeroes 的錯誤要連回清零、配置與保護設定。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.8, Figure 89, 文件頁 61, PDF 頁 61
NVM89-2相同 LBA 範圍可能因 PI 設定不同而不被接受;先依命令專屬狀態找條件,而非改成一般 Write 就認為語意等同。
38.37.格式圖先看 PI 總長度,再分辨固定欄位與由 STS 決定的分界。把 Storage Tag bits 與 Reference Tag bits 相加,應回到該格式的 tag 空間大小;遮罩表則另外說明哪些 bits 參與比較。
回到本節的解釋與範例NVM155-1STS=0 的 16b Guard 格式保留完整 32-bit Reference Tag。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.1, Figure 155, 文件頁 131, PDF 頁 131
NVM155-28-byte PI 分成 2-byte Guard、2-byte Application Tag、4-byte Reference Tag;此格式中沒有 Storage Tag 位元。
NVM156-1非零 STS 從 32-bit tag 空間中分出 Storage Tag。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.1, Figure 156, 文件頁 132, PDF 頁 132
NVM156-2若 STS=8,Storage Tag 用 8 bits,剩餘 Reference Tag 為 24 bits;兩者總和仍是 32 bits。
NVM157-132b Guard 格式提供較大的 Storage/Reference Tag 空間。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.2, Figure 157, 文件頁 133, PDF 頁 133
NVM157-216-byte PI 中 Guard 4 bytes、Application Tag 2 bytes,餘下 10 bytes=80 bits 供兩種 tag 分配。
NVM159-164b Guard 格式的 tag 空間與 32b Guard 格式不同。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.3, Figure 159, 文件頁 134, PDF 頁 134
NVM159-216-byte PI 中 Guard 佔 8 bytes、Application Tag 佔 2 bytes,剩下 6 bytes=48 bits 作為 Storage/Reference Tag 空間。
NVM164-1STS 決定連續 tag 空間中哪部分屬於 Storage Tag。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 164, 文件頁 137, PDF 頁 137
NVM164-248-bit tag 空間、STS=18 時,剩下 30 bits 是 Reference Tag;先做 48−18,再按圖找各部分。
NVM165-1不同 PI 格式允許的 tag 寬度有各自上、下限。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 165, 文件頁 138, PDF 頁 138
NVM165-2想配置 40-bit Reference Tag 時,先檢查所用 PI 格式是否提供足夠空間,不能僅因命令有多個字就認為一定放得下。
38.38.CRC 圖表分成計算參數、涵蓋資料及已知向量三部分閱讀。Guard 涵蓋資料及 PI 前的 metadata,不包含 PI 本身。位元圖用來確認輸出如何排列,不用圖上的左右位置猜測整數端序。
回到本節的解釋與範例38.39.先確定要計算哪些資料及 metadata,再套用指定多項式、初值、反射與最後 XOR;相同多項式不保證得到相同 CRC。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| Width/Poly/Init/RefIn/RefOut/XorOut | 完整參數組決定演算法;檢查時還需確認輸入與輸出表示方式。 | 改變 RefIn 卻沿用原本測試值,結果不同不表示資料本身改變。 |
| F(x)/G(x)/R(x) | 分別描述訊息、多項式及餘數等數學關係;與實際 byte 順序配合。 | 先把輸入資料順序固定,再將數學表示對回執行步驟。 |
| Zero/FF/遞增 bytes 測試向量 | 每種向量固定資料長度與每個 byte 的內容,適合驗證完整參數組。 | 4 KiB 的全零向量不等於空輸入;長度也會影響 CRC。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.2, Figure 158, 文件頁 133, PDF 頁 133
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.3, Figure 160, 文件頁 134-135, PDF 頁 134-135
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.3, Figure 161, 文件頁 136, PDF 頁 136
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.3, Figure 162, 文件頁 136, PDF 頁 136
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.3, Figure 163, 文件頁 137, PDF 頁 137
NVM158-1CRC32C 測試向量用已知資料對照預期 Guard 計算結果。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.2, Figure 158, 文件頁 133, PDF 頁 133
NVM158-24096 個零 bytes 的向量對應 98F94189h;這是固定輸入的核對值,不是任意 4 KiB 資料都應得到的結果。
NVM160-1CRC 多項式表定義計算所使用的數學規則。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.3, Figure 160, 文件頁 134-135, PDF 頁 134-135
NVM160-2兩個演算法即使都輸出 64 bits,只要多項式不同,就不能用同一組預期值驗證;先確認使用哪一個定義。
NVM161-1Rocksoft 參數完整指定 CRC64 的初始化、反射與最後處理。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.3, Figure 161, 文件頁 136, PDF 頁 136
NVM161-2只知道 Poly 還不夠;Init、RefIn、RefOut、XorOut 任一不同,同一串 bytes 也可能得到不同結果。
NVM162-1CRC 的輸入順序包含 byte 排列及每個 byte 的位元處理方向。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.3, Figure 162, 文件頁 136, PDF 頁 136
NVM162-2先按圖排列 logical block 與 metadata,再按反射規則处理;不能先把整段資料反轉,再假設等同逐 byte 位元反射。
NVM163-1CRC64 測試向量讓資料排列與計算參數可被實際核對。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.3, Figure 163, 文件頁 137, PDF 頁 137
NVM163-24096 個零 bytes 對應 6482D367EB22B64Eh;改成全部 FFh 後,預期結果也會改變。
38.40.以選定格式的圖為準,沿每個 tag 的高位到低位追蹤跨 Dword 的部分。用 Storage Tag=12345h 的低 2 bits 和高 16 bits 驗算配置,再把 Reference Tag 放入剩餘 30 bits。
回到本節的解釋與範例NVM166-1命令中的 tag 可能分散在 CDW2、CDW3 與 CDW14。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 166, 文件頁 138, PDF 頁 138
NVM166-2將完整 tag 當成一個整數後,再依圖切出高、中、低部分,可避免把資料結構中的連續位元誤認為命令內也連續。
NVM167-1同一套命令欄位在不同 PI 格式下有不同有效位元。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 167, 文件頁 139, PDF 頁 139
NVM167-2從 16b Guard 切換成 64b Guard 後,重新核對哪些位元有效;上一種格式被忽略的高位,在新格式中可能已有用途。
NVM168-116b Guard Write 範例從初始 Reference Tag 建立寫入端保護。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 168, 文件頁 139, PDF 頁 139
NVM168-2STS=0 時,先將初始 Reference Tag 放入 CDW14,再沿圖看第一個 block 的保護資訊如何產生。
NVM169-116b Guard Read 範例用預期 Reference Tag 檢查讀出的資料。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 169, 文件頁 139-140, PDF 頁 139-140
NVM169-2把 Figure 168 寫入的同一範圍讀回時,主機提供對應預期值;這是檢查既有 PI,不是重新選一個寫入 tag。
NVM170-132b Guard Write 範例展示 80-bit tag 如何分散到命令字。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 170, 文件頁 140, PDF 頁 140
NVM170-2Storage Tag 32 bits、Reference Tag 48 bits 加起來為 80 bits;逐段對照 CDW2、CDW3、CDW14,不能只保留低 32 bits。
NVM171-132b Guard Read 範例以相同格式拆分預期 tag。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 171, 文件頁 140, PDF 頁 140
NVM171-2保持 Figure 170 的格式和 STS,再把讀取端預期 tag 放到相對應欄位,才能與媒體上的同一結構比較。
NVM172-164b Guard Write 範例把 18-bit Storage Tag 與 30-bit Reference Tag 合併。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 172, 文件頁 141, PDF 頁 141
NVM172-2教學值 Storage=12345h、Reference=2Ah,合併為 12345h×2^30+2Ah;低 32 bits 為 4000002Ah,高部為 48D1h。
NVM173-164b Guard Read 範例需要保留跨命令字的預期 tag。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.1.4, Figure 173, 文件頁 141, PDF 頁 141
NVM173-2沿用上一例時,若只填低部 4000002Ah 而漏掉高部 48D1h,就不再表示同一個預期 Storage Tag。
38.41.處理流程先按 Read/Write 分支,再檢查 PRACT、MS 與 PI 大小,最後判斷要求的檢查及停用檢查的特殊值。Mask=0 的位不參與比較;不要把遮罩數值當作期待的 tag 值。
回到本節的解釋與範例NVM11-1PRACT 決定 PI 的處理方式,PRCHK 決定要進行哪些檢查。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.5, Figure 11, 文件頁 21-22, PDF 頁 21-22
NVM11-2同樣 PRACT=1,metadata 大小等於 PI 大小或大於 PI 大小時,傳輸的內容可能不同;要沿表中相應列追資料,而非只看 PRACT。
NVM12-1Storage Tag 是否存在,決定 STC 檢查要求是否有對象。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.5, Figure 12, 文件頁 22, PDF 頁 22
NVM12-2STS=0 表示沒有 Storage Tag,因此設定 STC 也不會憑空產生一個要比對的 tag;改成非零 STS 後才有對應位元。
NVM174-1Write 的 PI 流程依 PRACT 與 metadata 大小決定傳入或產生哪些資料。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.1, Figure 174, 文件頁 143, PDF 頁 143
NVM174-2metadata 剛好只有 PI,與另含其他 metadata 的情況要走不同分支;先標明主機實際傳了什麼,再追控制器處理。
NVM175-1Read 的 PI 流程決定哪些保護資訊會回到主機。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.2, Figure 175, 文件頁 145, PDF 頁 145
NVM175-2讀取前先比較 MS 與 PI 大小,再沿 PRACT 對應分支看 PI 是否移除;不能只從 Read 名稱推論回傳 buffer 排列。
NVM176-1Compare 同時涉及主機預期內容與媒體讀出內容。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.3.2.4, Figure 176, 文件頁 146, PDF 頁 146
NVM176-2主機提供 A、媒體為 B 時,即使兩邊各自 PI 都合法,資料比較仍可能失敗;完整性通過與內容相同是不同條件。
38.42.Feature 總表先看 FID、作用對象及是否需要 buffer,再閱讀各 FID 的欄位。時間欄位要連同單位和計時起點解讀;描述子數量則先確認是否採從 0 起算的編碼。
回到本節的解釋與範例NVM92-1Feature 表把設定識別碼、作用範圍及保存特性放在一起比較。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3, Figure 92, 文件頁 64, PDF 頁 64
NVM92-2對 namespace 的設定不應直接當成整個控制器設定;報告某項 Feature 時要說出改變的是哪個物件。
NVM93-1Set Features 的重疊範圍錯誤有其特定 Feature 上下文。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3, Figure 93, 文件頁 64, PDF 頁 64
NVM93-2設定兩個不能互相重疊的 LBA ranges 時,即使各自起點和長度合法,合在一起仍可能衝突。
38.43.Get 或 Set Features 選定功能後,才依該功能的 buffer、命令 Dword 或 CQE 解釋回覆。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| NUM/Type/ATTRB/SLBA/NLB/GUID | LBA Range Type 的數量選擇與每個範圍的類型、範圍、識別分開。 | 先解出有效項目數,再逐項檢查範圍,不能只讀第一個項目代表所有 LBAs。 |
| DULBE/TLER | Error Recovery 的解除配置讀取錯誤選擇與恢復時間限制各自影響行為。 | 開啟 DULBE 後,解除配置 LBA 的讀取結果要依相應規則判斷;TLER 不是 buffer 傳輸長度。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.2, Figure 94, 文件頁 65, PDF 頁 65
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.2, Figure 95, 文件頁 65, PDF 頁 65
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.2, Figure 96, 文件頁 65-66, PDF 頁 65-66
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.3, Figure 97, 文件頁 66, PDF 頁 66
NVM94-1LBA Range Type 的 NUM 指示這次提供的項目數。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.2, Figure 94, 文件頁 65, PDF 頁 65
NVM94-2NUM 原始值為 1 時要按該欄位的從零起算規則準備 2 個項目,不是只配置 1 個描述子。
NVM95-1完成回覆中的 NUM 要在回覆語境中解釋。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.2, Figure 95, 文件頁 65, PDF 頁 65
NVM95-2把要求的 range 數與回覆欄位分開記錄,才能知道控制器實際回報多少項;兩個欄位名稱相同不代表傳輸方向相同。
NVM96-1LBA Range Type 項目把範圍與資料用途資訊放在一起。
來源: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。
NVM97-1Error Recovery 把恢復時間限制與未配置區塊的讀取行為分開設定。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.3, Figure 97, 文件頁 66, PDF 頁 66
NVM97-2DULBE 影響讀取 deallocated blocks 時是否回報錯誤;TLER 則處理恢復時間,兩者不會互相取代。
NVM98-1Write Atomicity Normal 的 DN 會影響正常寫入原子性要求的使用。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.4, Figure 98, 文件頁 66-67, PDF 頁 66-67
NVM98-2比較 DN 設定前後時,仍要保留 power-fail 參數;正常運作的設定不能當成斷電保證的總開關。
38.44.通知表先對照事件種類與啟用位,再連到對應 log。讀計數表時分開列出納入的命令及單位換算;讀錯誤位置時先檢查有效旗標,並保留該 log 對位置的定義。
回到本節的解釋與範例38.45.先辨認紀錄種類與對象,再使用相應的有效性、數量及範圍欄位。通知資料可能只提供查詢起點,完整狀態需要後續命令取得。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| FLBA/FLBA Valid;LBA/LBAV/NLBAM | 不同紀錄對失敗位置或重配置範圍有各自有效性與數量規則。 | Self-test 的 FLBA Valid=0 時忽略 FLBA;有效時也只指出一個失敗 block,不是完整錯誤列表。 |
| LSLPLEN/NLSLNE/NEID/NLRD/RATYPE | 外層給 log 長度與 namespace 元素數,內層再給對象及範圍描述子數。 | 不能把 NLSLNE 當成 LBA 數;每個 namespace 元素仍需讀自己的範圍清單。 |
| RSLBA/RNLB;SLBA/RL/ATYPE/MNDW | log 給建議查詢範圍,Get LBA Status 選行為與回傳空間限制。 | 收到範圍後,依剩餘範圍與可接收長度安排查詢,不能假設一次回覆必定涵蓋全部。 |
| NLSD/CMPC/DSLBA/NLB/LBARS | 數量決定有效描述子,完成條件決定是否還需查詢,描述子指出範圍狀態。 | 先看 CMPC 再判斷查詢是否完整;有一筆描述子不代表其餘 LBA 都無問題。 |
| LBASIN/RLCCN/LSIPI/LSIRI/LSGC | 事件設定、產生或回報間隔與 generation 各司其職。 | 更新設定不代表立刻產生一份完整新 log;讀取時仍要辨認版本與有效範圍。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.1, Figure 90, 文件頁 62, PDF 頁 62
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.5, Figure 99, 文件頁 67, PDF 頁 67
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.6, Figure 100, 文件頁 68, PDF 頁 68
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.1, Figure 110, 文件頁 76, PDF 頁 76
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.3, Figure 111, 文件頁 76, PDF 頁 76
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.4, Figure 112, 文件頁 77, PDF 頁 77
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.5, Figure 113, 文件頁 77-78, PDF 頁 77-78
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.5, Figure 114, 文件頁 78, PDF 頁 78
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.5, Figure 115, 文件頁 78, PDF 頁 78
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.7, Figure 116, 文件頁 79, PDF 頁 79
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.2.1, Figure 135, 文件頁 114, PDF 頁 114
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.2.1, Figure 136, 文件頁 114, PDF 頁 114
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.2.1, Figure 137, 文件頁 114, PDF 頁 114
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.2.1, Figure 138, 文件頁 114-115, PDF 頁 114-115
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.2.1, Figure 139, 文件頁 116-117, PDF 頁 116-117
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.2.1, Figure 140, 文件頁 117-118, PDF 頁 117-118
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.1, Figure 142, 文件頁 121, PDF 頁 121
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.1, Figure 143, 文件頁 121, PDF 頁 121
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.1, Figure 144, 文件頁 121-122, PDF 頁 121-122
NVM90-1非同步通知告知狀態已變,詳細內容還需讀對應資料。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.1, Figure 90, 文件頁 62, PDF 頁 62
NVM90-2收到 LBA Status Information 相關通知後,再讀相應 log;通知本身不包含所有受影響的 LBA 清單。
NVM99-1事件設定 bits 決定主機希望收到哪些 NVM 通知。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.5, Figure 99, 文件頁 67, PDF 頁 67
NVM99-2只啟用 LBA Status Information 通知,不表示 Rate Limiting 變更通知也自動啟用;每種通知各看自己的 bit。
NVM109-1NVM Log 清單把 LID 與命令集及作用範圍連起來。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4, Figure 109, 文件頁 75-76, PDF 頁 75-76
NVM109-2查某個 LID 時,同時確認 CSI 與目標 scope,避免把另一種命令集的同號紀錄當成這一份。
NVM110-1Error Information 中的 LBA 是發生問題的資料位置。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.1, Figure 110, 文件頁 76, PDF 頁 76
NVM110-2若回覆指向 LBA 32,先依該 namespace 的 block 大小換算位置;不能把 32 當成主機 buffer 的 byte offset。
NVM111-1Self-test 的 FLBA 只有在有效性標記成立時才是有效故障位置。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.3, Figure 111, 文件頁 76, PDF 頁 76
NVM111-2紀錄中即使保留一個非零 FLBA,若對應有效 bit 沒有設定,就不能據此指認那個 LBA 壞掉。
NVM112-1Namespace 變更事件可記錄格式與資料保護設定的變化。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.4, Figure 112, 文件頁 77, PDF 頁 77
NVM112-2原本不帶 PI 的 namespace 改成帶 PI 時,閱讀 FLBAS 與 DPS 的新值才能重新準備正確 buffer。
38.46.查詢圖先解讀 SLBA、RL 與 MNDW,再用 NLSD 決定有效描述子數,用 CMPC 判斷完成原因。讀 log 時沿 LSGC、RAE 的流程追蹤同一版本,避免把沒有完整掃描當成沒有需處理的 LBA。
回到本節的解釋與範例NVM100-1LBA Status Information 的屬性設定控制相關回報行為。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.6, Figure 100, 文件頁 68, PDF 頁 68
NVM100-2主機希望調整資訊產生或回報的節奏時,應分別理解 LSIPI 與 LSIRI,不把兩個 interval 當成同一計時器。
NVM113-1LBA Status Information 的 header 描述清單長度與 namespace 項目。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.5, Figure 113, 文件頁 77-78, PDF 頁 77-78
NVM113-2一份 log 含多個 namespace 時,先讀 NLSLNE 與總長度,再逐個走訪,不能把整個 buffer 都當成同一個範圍清單。
NVM114-1每個 namespace element 指出後面有多少範圍描述子。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.5, Figure 114, 文件頁 78, PDF 頁 78
NVM114-2NEID 指向某個 namespace、NLRD 指示後續項目數;換到下一個 namespace 前先消耗這一組的描述子。
NVM115-1LBA Range Descriptor 用起點與數量表示一段範圍。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.5, Figure 115, 文件頁 78, PDF 頁 78
NVM115-2把 RSLBA 與依定義解釋後的 RNLB 畫在 LBA 軸上,可以直接看出它與鄰近範圍是否相接。
NVM135-1Get LBA Status 的 DPTR 是狀態描述子的接收 buffer。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.2.1, Figure 135, 文件頁 114, PDF 頁 114
NVM135-2主機想知道一段 LBA 的狀態,回來的是描述清單,不是該段的使用者資料。
NVM136-1Get LBA Status 的 SLBA 決定從哪裡開始查詢。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.2.1, Figure 136, 文件頁 114, PDF 頁 114
NVM136-2從 LBA 500 開始查詢,不代表回覆一定涵蓋後面全部 namespace;實際返回範圍還取決於命令限制與完成資訊。
NVM137-1MNDW 限制這次 Get LBA Status 能回傳多少資料。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.2.1, Figure 137, 文件頁 114, PDF 頁 114
NVM137-2接收 buffer 較小時,要把要求長度設在可容納範圍內,再依結果判斷是否需要繼續查詢。
NVM138-1ATYPE 與 RL 指定要執行的狀態查詢方式及範圍限制。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.2.1, Figure 138, 文件頁 114-115, PDF 頁 114-115
NVM138-2查詢方式改變後,控制器需要檢查或回報的內容可能不同;先說明想解決的問題,再選 ATYPE。
NVM139-1狀態清單 header 說明項目數以及查詢是否完整。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.2.1, Figure 139, 文件頁 116-117, PDF 頁 116-117
NVM139-2即使有成功回傳描述子,也應看 CMPC,確認是否已完成所需查詢,不能只以 buffer 非空判定完整。
NVM140-1每個狀態描述子將一段 LBA 範圍與其狀態連在一起。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.2.1, Figure 140, 文件頁 117-118, PDF 頁 117-118
NVM140-2一段可讀、一段有不同狀態時,兩段可分成不同項目;不能只用第一個 LBARS 代表整份回覆。
NVM142-1Log 先告訴主機哪些 namespace 範圍值得進一步查詢。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.1, Figure 142, 文件頁 121, PDF 頁 121
NVM142-2讀到一個 namespace 的兩段範圍後,把每段分別帶到 Get LBA Status;不要把 log 中的粗範圍當成最終逐段狀態。
NVM143-1第一個範圍的 Get LBA Status 回覆展示較細的狀態切分。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.1, Figure 143, 文件頁 121, PDF 頁 121
NVM143-2沿 Figure 142 的第一段範圍,逐個對照這張圖的 DSLBA 與 NLB,看控制器如何把同一查詢範圍分成多個項目。
NVM144-1第二個範圍的回覆要獨立閱讀完成資訊與描述子。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.1, Figure 144, 文件頁 121-122, PDF 頁 121-122
NVM144-2不能沿用前一次查詢的 NLSD 或 CMPC;每次回覆都有自己的項目數與完整性資訊。
38.47.把 Sanitize 命令、LID 81h 狀態,以及 Media Verification Read 的欄位分開閱讀。先確認作業階段,再套用該階段允許的命令與 PI 檢查規則;狀態圖中的轉移不是一般 Read 自動觸發的保證。
回到本節的解釋與範例NVM200-1Sanitize 期間仍可執行哪些 Admin 命令,要按作業情境查表。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.12, Figure 200, 文件頁 173, PDF 頁 173
NVM200-2清除進行中想讀 Get Log Page,需看這張表及該 log 的條件;不能以「正在清除」推論所有管理命令都停止。
38.48.先確認清除方法及操作完成,再依是否解除配置、資料格式與命令選项解釋後續讀取。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| Block Erase/Crypto Erase/Overwrite | 各方法對 user data 的處理不同,完成保證及後續讀值按相應列判斷。 | Overwrite 的樣式與 Block Erase 的讀值不可直接交換解釋。 |
| Data/Metadata/PI/解除配置 | 資料與保護資訊可能有不同處理條件;解除配置也會影響讀取行為。 | 讀到零值只是一次讀取結果,還需要狀態紀錄證明清除作業已完成。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.12, Figure 201, 文件頁 174, PDF 頁 174
NVM201-1清除方法不同,清除後可觀察到的使用者資料值也不同。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.12, Figure 201, 文件頁 174, PDF 頁 174
NVM201-2Overwrite 的內容與 pattern 及輪數有關;Crypto Erase 不應被口頭簡化成「全部 bytes 寫零」。
38.49.先決定作用範圍,再選 SANACT 及適用參數;成功 CQE 之後,仍要沿 LID 81h 與狀態圖確認作業及後續處理。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| SANACT/NSID/作用範圍表 | 整個 subsystem 與指定 namespace 的命令有不同目標;不同資料類別也需依範圍表判斷。 | 不能把 Sanitize Namespace 的完成結果直接當成所有 Boot、CMB、PMR 資料均已清除的證明。 |
| OVRPAT/OWPASS/OIPBP | 在 Overwrite 方法下配合決定樣式、pass 數及 pass 間反相;OWPASS=0 有特別定義。 | 先列出每個 pass 的樣式,再解釋資料與 PI 的處理,不用泛用的數量加 1 規則。 |
| AUSE/PREQ/NDAS/NODRM/EMVS | 分別影響失敗後限制、相關要求、解除配置及進入驗證等行為;需依動作與支援條件讀。 | EMVS 是要求後續驗證的選項,不是目前已在驗證的狀態旗標。 |
| SSTAT/SPROG/SCDW10/估計時間 | 先查結果狀態,再使用適用的進度及時間欄位;SCDW10 協助對回操作設定。 | 進度值不能脫離狀態使用;命令被接受與清除已完成要分別確認。 |
| SSI/MNSOIP/STNSID | SSI 補充狀態;MNSOIP 是允許同時執行的作業數上限;STNSID 確認查詢目標。 | MNSOIP=4 不表示目前有 4 個作業;STNSID=0 表示查詢 subsystem。 |
| A1–I2/MVCNCLD/FAILS | 狀態表用箭頭代號連回起點、事件、條件及終點;驗證後是否解除配置也有條件。 | 沿 Media Verification 離開時,先確認觸發事件及 MVCNCLD,再決定下一站,而非只看箭頭方向。 |
| Reservation Notification/Log Page Count/Notification Type | 必要引用用來解釋相關操作造成的 reservation 變動通知;其 log 與 Sanitize Status 不同。 | 應由通知類型判斷要更新的存取狀態,不把通知計數當成清除完成百分比。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.38, Figure 312, 文件頁 314-319, PDF 頁 340-345
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.26, Figure 451, 文件頁 450-451, PDF 頁 476-477
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.26, Figure 452, 文件頁 451, PDF 頁 477
Base312-1Sanitize Status 將進度、狀態與啟動命令資訊放在同一份紀錄。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.38, Figure 312, 文件頁 314-319, PDF 頁 340-345
Base312-2SPROG 看起來很接近完成時,仍須讀 SSTAT 判斷成功、失敗或其他狀態;不能只以百分比作完成證明。
Base451-1Sanitize 的 SANACT 決定方法,其他參數依方法才有意義。
來源: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 參數。
Base452-1OVRPAT 指定 Overwrite 使用的 32-bit pattern。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.26, Figure 452, 文件頁 451, PDF 頁 477
Base452-2OVRPAT=A5A5A5A5h 時,還要配合 OIPBP 與輪數判斷各輪是否反相;它不是進度或清除後資料量。
38.50.在同一條 LBA 軸上畫出建議邊界及操作範圍,分別檢查起點與長度。欄位表先讀 OPTPERF/OPTRPERF,確認哪組欄位有效,再依各欄位定義處理加 1 或直接值。
回到本節的解釋與範例NVM145-1NOIOB 邊界用來比較操作是否跨越最佳化邊界。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 145, 文件頁 124, PDF 頁 124
NVM145-2教學例:邊界每 8 blocks 一次,從 LBA 6 讀 4 blocks 會跨界,從 LBA 8 讀 4 blocks 則不跨界。
NVM146-1NABO 與 NABSN 一起決定原子邊界的位置。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 146, 文件頁 124, PDF 頁 124
NVM146-2若只知道邊界間距而忽略第一個偏移,畫出的所有邊界都可能錯位;先標起始偏移,再按間距往後標。
NVM147-1NPWA 與 NPWG 分別描述寫入起點及長度的偏好。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 147, 文件頁 125, PDF 頁 125
NVM147-2一筆長 8 blocks 的寫入可符合粒度,卻因從 LBA 1 開始而不符合對齊;兩個建議需要同時看。
NVM148-1NPRA 與 NPRG 對讀取提供相應的對齊與粒度資訊。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 148, 文件頁 126, PDF 頁 126
NVM148-2讀取長度從 4 blocks 增為 8 blocks,不一定解決起點未對齊的問題;要把兩個變因分開調整。
NVM149-1未符合建議的局部更新可能需要保留前後舊資料。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 149, 文件頁 127, PDF 頁 127
NVM149-2只更新一個較大單位中間的部分時,前綴與後綴仍要保持原值;圖用這些額外處理說明可能的寫入成本。
NVM150-1符合起點對齊與完整粒度的寫入可減少局部更新情境。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 150, 文件頁 127, PDF 頁 127
NVM150-2先對照寫入起點是否落在 NPWA 建議位置,再看長度是否涵蓋完整 NPWG 單位,兩者都成立才對應這張圖。
NVM151-1長度符合粒度,仍可能因起點偏移而影響多個單位。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 151, 文件頁 128, PDF 頁 128
NVM151-2把 Figure 150 的寫入整體向右移 1 block,長度沒有變,但頭尾可能都需要處理未更新的舊資料。
38.51.先用屬性種類選擇格式,再按 R4KARL 對照延遲區間表。廠商資料先讀 PAID,再以 ATTRL 限定有效長度;清單的總容量、剩餘容量與實際項目需要分開閱讀。
回到本節的解釋與範例38.52.先選 PAID 或屬性查詢,再依標準或廠商格式解釋資料。支援清單與實際效能值使用不同結構。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| ATTRI/RVSPA/PAID/ATTRTYP | 選想讀的屬性,並辨認它屬標準或廠商種類。 | PAID 是識別碼,不是延遲數值;先選中屬性才能知道回覆的單位。 |
| MSVSPA/USVSPA/ATTRL/VS | 清單支援與資料長度決定可讀範圍;廠商 payload 需要相應格式。 | ATTRL 限定屬性資料大小,不代表其中每個 byte 都有標準定義。 |
| R4KARL | 標準屬性以指定的存取條件描述延遲。 | 比較兩個結果前先確認都是相同 4 KiB 隨機讀條件,不能直接套用到任意 workload。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.8, Figure 102, 文件頁 69, PDF 頁 69
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.8, Figure 103, 文件頁 71, PDF 頁 71
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.8, Figure 104, 文件頁 72, PDF 頁 72
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.8, Figure 105, 文件頁 73, PDF 頁 73
NVM102-1Performance Characteristics 先選屬性,再解釋其值。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.8, Figure 102, 文件頁 69, PDF 頁 69
NVM102-2讀取標準延遲屬性與讀取廠商屬性時,ATTRI 指向的格式不同;不能拿同一個數字直接比較。
NVM103-1標準效能屬性提供規定情境下的特性值。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.8, Figure 103, 文件頁 71, PDF 頁 71
NVM103-2看到 4 KiB 平均讀取延遲時,要連同其定義的工作負載理解;它不是任何佇列深度下每筆 Read 的固定耗時。
NVM104-1屬性識別碼清單用來尋找裝置支援哪些效能描述。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.8, Figure 104, 文件頁 72, PDF 頁 72
NVM104-2先從清單找到可用 PAID,再讀該屬性的內容;不能因為支援查詢清單就推論每個廠商屬性都存在。
NVM105-1廠商效能屬性需要自己的識別碼及資料長度。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.8, Figure 105, 文件頁 73, PDF 頁 73
NVM105-2兩個屬性可能回傳不同長度;先看 ATTRL 再理解 payload,不能把上一個屬性的排列套到下一個。
38.53.設定結構先讀 TGT/TID 與 RLE/RLM,再配對 BWSF 和各頻寬值。把寫入與總量分開列出,最後解讀 WRBWR、WRIOPSR 的分子與分母,避免只看一個 byte。
回到本節的解釋與範例38.54.先沿 port、controller、儲存媒體存取描述子的關係找到受限對象,再用模式與比例把欄位換成可比較的速率。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| TGT/TID/RLE/RLM | 前兩者選目標,後兩者選啟用與模式;不同模式下的數值可能表示限制或相對權重。 | 權重 2 不等於 2 MiB/s;必須先確認 RLM 再做解釋。 |
| BWSF/MBSF/ABWSF;TBWV/WBWV/TIOPS/WIOPS | 頻寬值先搭配比例,IOPS 則是操作數速率;總量與寫入量分別限制。 | 4 KiB 的 1000 IOPS 對應 4,096,000 bytes/s;換成 128 KiB I/O 後,相同 IOPS 需要不同頻寬。 |
| NP/NC/NNSMAD/LPL/offsets/GC | 數量、長度與位移描述變長資料結構,GC 協助辨認版本。 | offset 以 Dwords 表示時先乘 4,再與 LPL 換成相同單位做範圍檢查。 |
| PORTID/CNTLID/SC/SI/RLMA | 識別 port、控制器及存取範圍,並連到最大可用量描述。 | 兩個 port 指向同一 Endurance Group 時,不能將共享的最大容量或速率重複當成兩份獨立資源。 |
| Token supply/消耗/等待 | 權杖累積與每筆命令消耗決定何時可執行;內部資源仍可能造成額外等待。 | 有足夠權杖表示通過速率限制,不代表其他資源也立即可用。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.9, Figure 106, 文件頁 73, PDF 頁 73
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.9, Figure 107, 文件頁 74-75, PDF 頁 74-75
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.9, Figure 108, 文件頁 75, PDF 頁 75
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.8, Figure 117, 文件頁 80, PDF 頁 80
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.8, Figure 118, 文件頁 80-81, PDF 頁 80-81
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.8, Figure 119, 文件頁 81, PDF 頁 81
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.8, Figure 120, 文件頁 81-82, PDF 頁 81-82
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.8, Figure 121, 文件頁 82-83, PDF 頁 82-83
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.10.3, Figure 195, 文件頁 169, PDF 頁 169
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.10.3, Figure 196, 文件頁 169-170, PDF 頁 169-170
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.10.3, Figure 197, 文件頁 171, PDF 頁 171
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.10.3, Figure 198, 文件頁 171-172, PDF 頁 171-172
來源:NVME-NVM-CS-1.3, Rev. 1.3, §Appendix A, Figure 202, 文件頁 176, PDF 頁 176
NVM106-1Rate Limits 的 TGT 與 TID 共同指定限制施加在哪裡。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.9, Figure 106, 文件頁 73, PDF 頁 73
NVM106-2同樣 TID=1,若 TGT 選的物件類型不同,就可能是完全不同的資源;必須成對記錄。
NVM107-1Rate Limiting buffer 分別設定頻寬、IOPS 與模式。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.9, Figure 107, 文件頁 74-75, PDF 頁 74-75
NVM107-2大量 4 KiB I/O 可能先碰到 IOPS 上限;大區塊 I/O 則可能先碰到頻寬上限,因此兩種限制都要看。
NVM108-1頻寬欄位的數值必須乘上對應 scale factor 才有實際單位。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.3.9, Figure 108, 文件頁 75, PDF 頁 75
NVM108-2同樣 raw 值 100,在不同 BWSF 下代表不同頻寬;比較兩個設定前先換成相同單位。
38.55.算例按 total bandwidth、write bandwidth、total IOPS、write IOPS 四欄閱讀。4 KiB Write 搭配頻寬權重 2、IOPS 權重 3,消耗依序為 8 KiB、4 KiB、3、1;Read 不消耗寫入專用額度。
回到本節的解釋與範例NVM202-1Token Bucket 用代幣供給與消耗說明速率限制。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §Appendix A, Figure 202, 文件頁 176, PDF 頁 176
NVM202-2教學例:每秒補充 100 個代幣、每筆操作消耗 1 個,平均供給限制長期速率;桶內累積的代幣仍可能容許短時間突發。這是說明性模型。
38.56.先以 LPL 確定長度,再把 Dword offsets 乘 4 找到描述子。依 SC 解讀 SI 所辨認的物件,沿父子引用建立資源關係;同一資源被多次引用時,不重複累加其能力。
回到本節的解釋與範例NVM117-1Rate Limiting Log 是有長度和連結位置的多層資料。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.8, Figure 117, 文件頁 80, PDF 頁 80
NVM117-2先讀 LPL 與 port 數,再沿 offset 找各層描述子;不要假設每種裝置都使用固定數量和固定順序。
NVM118-1Port Descriptor 描述單一 port 的限制與控制器關係。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.8, Figure 118, 文件頁 80-81, PDF 頁 80-81
NVM118-2雙 port 裝置中,Port 0 的可用頻寬不必等於 Port 1;先各自讀 PORTID 與限制,再追所連控制器。
NVM119-1Controller Descriptor 連到該控制器能使用的儲存媒體資源。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.8, Figure 119, 文件頁 81, PDF 頁 81
NVM119-2同一 port 下有兩個控制器時,分別沿各自 offset 找存取描述子,不把 port 的上限當成每個控制器各有一份。
NVM120-1媒體存取描述子用 SC 與 SI 指出限制所屬的物件。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.8, Figure 120, 文件頁 81-82, PDF 頁 81-82
NVM120-2此處 SC 是 Scope,並非 CQE 的 Status Code;先選定範圍類型,才能知道 SI=1 指的是哪個實體。
NVM121-1Maximum Access Descriptor 說明資源的最大存取能力。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.8, Figure 121, 文件頁 82-83, PDF 頁 82-83
NVM121-2比較主機設定的限制值與資源最大值前,先把頻寬 scale 換成同一單位;設定值和硬體最大值來源不同。
NVM195-1Port Graph 用連線表達 port、controller 與共享儲存資源。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.10.3, Figure 195, 文件頁 169, PDF 頁 169
NVM195-2兩個控制器連到同一 Endurance Group 時,圖中只有一份共享資源;不能把它的頻寬上限算成兩份相加。
NVM196-1Rate Limiting Log 範例把關係圖轉成帶 offset 的實際資料。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.10.3, Figure 196, 文件頁 169-170, PDF 頁 169-170
NVM196-2若描述子 offset 以 Dword 為單位,數值 16 對應 64 bytes;先換算再定位,不能直接跳到第 16 byte。
NVM197-1雙 port PCIe 裝置可以經不同入口共用同一儲存資源。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.10.3, Figure 197, 文件頁 171, PDF 頁 171
NVM197-2Port 0 和 Port 1 都在傳輸時,總吞吐量可能受共同 Endurance Group 限制;入口數增加不代表媒體能力倍增。
NVM198-1雙 port 的 log 範例展示兩條路徑如何引用共同描述子。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.10.3, Figure 198, 文件頁 171-172, PDF 頁 171-172
NVM198-2沿兩個 port 的 offset 走到底,若都指向同一存取描述子,就只計算一份共享限制,不複製成兩個獨立資源。
38.57.先辨認 namespace 的 handle 如何對應 RUH,再閱讀狀態與統計。EARUTR 是秒數估計,RUAMW 是區塊數;事件中的 LBA 只有在 LBAV 指示有效時才可使用。
回到本節的解釋與範例38.58.先由主機使用的 Placement Identifier 找到 Reclaim Unit Handle,再解釋該 handle 的狀態與可用資訊。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| PID/RUHID | 前者選資料放置,後者識別相應回收資源;需要查映射才能互相連接。 | PID 的數字不一定等於 RUHID,不能以相同數值直接配對。 |
| EARUTR/RUAMW | 分別提供該 handle 的時間與可寫量資訊,按來源單位解讀。 | 可寫量不能換成剩餘時間,除非另外有已知的寫入速率與適用假設。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.2.1.1, Figure 21, 文件頁 26, PDF 頁 26
NVM21-1FDP 回覆把放置識別碼連到可寫入資源及其剩餘量。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.2.1.1, Figure 21, 文件頁 26, PDF 頁 26
NVM21-2比較兩個回覆項目時,先確認 PID 指向哪個放置位置,再比較 RUAMW;數值較小代表剩餘可寫 blocks 較少,不是固定 RU 容量較小。
NVM116-1Media Reallocated 事件先用有效標記決定是否能解讀 LBA。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.7, Figure 116, 文件頁 79, PDF 頁 79
NVM116-2事件回報重新配置數量,但 LBAV 未成立時,不能把後面的 LBA 欄位當成精確位置。
38.59.先標示 SWS 的區塊單位,再計算 SGS×SWS。把寫入大小與解除配置範圍放到這兩個尺度下比較,不要把 SGS 直接當成區塊數。
回到本節的解釋與範例NVM152-1不同 Streams 可以由不同的寫入與配置粒度描述。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.2.2, Figure 152, 文件頁 128, PDF 頁 128
NVM152-2比較兩個 stream 時,把各自 SWS 和 SGS 標在其資料排列上,不能把其中一個 stream 的建議套給另一個。
38.60.Streams 參數提供主機安排寫入的提示,需與 namespace 格式及串流的識別使用方式一起讀。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| SWS/SGS | 分別描述串流寫入大小與群組大小,按來源規定單位換算。 | 先把提示換成 logical blocks 或 bytes,再比較一批實際寫入的範圍,不能把兩個數字當成串流數量。 |
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.9.3.1.1, Figure 712, 文件頁 624-625, PDF 頁 650-651
Base712-1Streams 參數分別描述寫入大小與配置粒度。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.9.3.1.1, Figure 712, 文件頁 624-625, PDF 頁 650-651
Base712-2使用 SWS 規劃一次寫入長度後,仍要看 SGS 的配置關係;兩者不同單位或作用不能混成一個「建議大小」。
38.61.ANA 表用來判斷路徑狀態及某些回報欄位的特殊值;Reservation 矩陣則以保留類型、holder/registrant 身分與命令類別交叉查讀。NUSE 回零的狀態例外,不代表媒體內容已清空。
回到本節的解釋與範例NVM141-1ANA 狀態對不同 NVM 命令有不同影響。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.1, Figure 141, 文件頁 119, PDF 頁 119
NVM141-2同一 namespace 的資料 I/O 與管理資訊讀取不一定同受限制;依命令列和目前 ANA 狀態交叉查表。
NVM199-1Reservation 對命令的限制取決於保留類型及主機身分。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.11, Figure 199, 文件頁 173, PDF 頁 173
NVM199-2同一 Read 或 Write,對 holder、已註冊但非 holder、未註冊主機可能有不同結果;先固定命令,再逐欄比較身分。
38.62.先用 LBACIR 決定這筆記錄是範圍、整個 namespace 或沒有 range,再看 ESA 狀態。CDQP 用來識別新 entry,DLBA 描述解除配置相關資訊;不能只讀 LBA 欄位就忽略有效性與狀態。
回到本節的解釋與範例38.63.先讀 entry 類型,再用 NSID、SLBA 與 NLB 找到受影響範圍;其他欄位依此類型指出資料或儲存位置關係。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| NSID/SLBA/NLB | 命名 namespace 與 logical block 範圍;數量依 entry 定義解讀。 | 同一個 SLBA 放在不同 NSID 下,是不同資料範圍。 |
| LBACIR/DLBA/ESA/CDQP | 提供內容或目的位置等資訊,哪些欄位有效由 entry 類型及旗標決定。 | 沒有對應有效條件時,不能把殘留的 DLBA 直接當成這次資料的新位置。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.7, Figure 194, 文件頁 163-164, PDF 頁 163-164
NVM194-1LBA Migration Queue Entry 同時指出搬移來源、目的與完成相關資訊。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.7, Figure 194, 文件頁 163-164, PDF 頁 163-164
NVM194-2同一筆項目中,SLBA 是來源位置、DLBA 是目的位置;兩者都是 LBA,卻不能因單位相同就互換。
38.64.Track Send 的管理操作選擇、操作專屬參數與目標資料佇列共同決定追蹤如何啟動或停止。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| MO/MOS/LACT | 先由 MO 選管理操作,再解讀 MOS 及其中的啟停選擇。 | 要求開始記錄與要求停止記錄是兩個事件,不能用同一個 LACT 值解釋。 |
| CDQID | 選已建立的控制器資料佇列;追蹤結果會依該佇列格式回報。 | Track Send 的成功 CQE 與資料佇列中後續產生的紀錄分別觀察。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.32, Figure 561, 文件頁 523, PDF 頁 549
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.32.1.1, Figure 562, 文件頁 523, PDF 頁 549
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.32.1.1, Figure 563, 文件頁 523, PDF 頁 549
Base561-1Track Send 的管理操作由 MO 與操作專屬參數一起決定。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.32, Figure 561, 文件頁 523, PDF 頁 549
Base561-2選擇 Log User Data Changes 操作後,MOS 才按其動作欄位解釋,不能將另一種管理操作的參數直接套用。
Base562-1LACT 選擇使用者資料變更紀錄的動作。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.32.1.1, Figure 562, 文件頁 523, PDF 頁 549
Base562-2要開始或停止某種紀錄行為時,依 LACT 選項處理;它不是變更了多少個 LBA 的計數。
Base563-1CDQID 把變更追蹤操作連到指定的 Controller Data Queue。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.32.1.1, Figure 563, 文件頁 523, PDF 頁 549
Base563-2先建立並辨識目標 queue,再在命令指定其 ID;CDQID 不表示此次要搬移的 namespace。
38.65.先區分範本固定值與受底層上限限制的值,再逐項比對版本、佇列數與 namespace 格式。對外 Format Index 可以重新對應,但對應後的格式仍須符合範本指定的相容條件。
回到本節的解釋與範例38.66.這組圖是規格定義的參考組態及狀態資料。區分固定模型值、可配置值與目前狀態,才能知道哪些值應帶入後續命令解讀。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| CSS/TO/CQR/MQES;MJR/MNR/TER | 能力與版本值限定參考模型所描述的行為。 | MQES 的編碼需要按佇列大小規則解讀,不能當成實際已建立的 queue 數量。 |
| NSZE/NCAP/LBAF/AWUN/NAWUN/NGUID/UUID | 分別描述容量、格式、原子性與物件識別,保留控制器與 namespace 層級差異。 | 複製一個 namespace 的格式設定,不會讓新物件自動取得相同身分。 |
| NCQS/NSQS/Feature values/CSATTR.CP | 佇列與 Feature 狀態描述目前或參考設定,需與支援能力分開。 | 支援的 queue 上限與當前設定的 queue 數量不是同一個欄位。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 183, 文件頁 153, PDF 頁 153
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 184, 文件頁 153, PDF 頁 153
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 185, 文件頁 153, PDF 頁 153
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 186, 文件頁 154, PDF 頁 154
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 187, 文件頁 155, PDF 頁 155
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 188, 文件頁 156, PDF 頁 156
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 189, 文件頁 157-158, PDF 頁 157-158
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 190, 文件頁 158-159, PDF 頁 158-159
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 191, 文件頁 159-160, PDF 頁 159-160
NVM183-1參考配置狀態把控制器與 namespace 的設定分成不同部分。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 183, 文件頁 153, PDF 頁 153
NVM183-2閱讀本機記憶體介面範本時,先分開 RECCS 與 RENSCS,再看各自包含哪些設定;不要把整份範本當成單一 namespace 的資料。
NVM184-1範本中的 CAP 值是該參考配置的能力設定。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 184, 文件頁 153, PDF 頁 153
NVM184-2範本列出特定 MQES 時,它描述這個範本的佇列能力,不能推論所有實體 NVMe 裝置都具有相同值。
NVM185-1範本版本值說明參考配置使用的版本編碼。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 185, 文件頁 153, PDF 頁 153
NVM185-2先辨識 MJR、MNR、TER,再與實際裝置回報版本分開;範本中的版本不是裝置查詢結果。
NVM186-1範本 Firmware Slot 紀錄展示固定參考配置的韌體資訊。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 186, 文件頁 154, PDF 頁 154
NVM186-2用 AFI 找啟用 slot,再讀相應 FRS;這是示範欄位如何對應,不是建議把同一版本字串寫入所有裝置。
NVM187-1Feature 預設值屬於參考配置的初始狀態。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 187, 文件頁 155, PDF 頁 155
NVM187-2若後續改變中斷或佇列設定,不能仍把表中的預設值當成目前值;先分清 default 與 current。
NVM188-1範本 Identify 結構把容量、格式與識別資訊放到相应欄位。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 188, 文件頁 156, PDF 頁 156
NVM188-2建立一份參考 namespace 狀態時,同時核對 NSZE/NCAP、格式及識別碼,避免只改容量卻沿用不相符的其他欄位。
NVM189-1控制器配置狀態記錄佇列與命令能力等控制器層資訊。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 189, 文件頁 157-158, PDF 頁 157-158
NVM189-2NCQS、NSQS 與 MQES 分別涉及佇列數量及每個佇列的容量;三個數字不能互相代用。
NVM190-1Namespace 配置狀態記錄格式、原子性與識別資訊。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 190, 文件頁 158-159, PDF 頁 158-159
NVM190-2同一控制器下的兩個 namespace 可以有不同 LBA 格式或原子性參數,應分別保存各自的描述。
38.67.布局圖先把固定 header 與可變內容分開,使用 64+4×NVMECSS 計算總長度。內層版本決定內容格式,CSATTR.CP 決定可以推論的暫停條件;這三種資訊各回答不同問題。
回到本節的解釋與範例NVM191-1整體參考狀態由設定值與狀態資料共同組成。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.4, Figure 191, 文件頁 159-160, PDF 頁 159-160
NVM191-2只有一份 Identify 範本,仍不足以代表完整狀態;還要依圖中關係理解 Feature 值與各狀態結構的角色。
39.01.NSZE 描述可定址的範圍,LBA 從 0 到 999;NCAP 描述最多可配置 800 個 logical blocks;NUSE 描述目前已配置 600 個。這些都是 logical block 數,換成 bytes 還需要 data size。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.1; 4.1.5.1, 文件頁 13-14,85-93, PDF 頁 13-14,85-93
39.02.不能只靠相鄰位置。要使用支援的 fused operation,依規則設定第 1 與第 2 個命令,並滿足相同範圍等配對條件;一般命令的提交順序不提供這種保證。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.2-2.1.3, 文件頁 14-15, PDF 頁 14-15
39.03.Atomicity 關注規定情境下是否可能讀到部分更新;persistence 關注資料是否已保存到非揮發性媒體。仍要分別考慮 normal/power-fail atomicity、對齊邊界、volatile write cache 與 FUA/Flush 規則。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.4; 4.1.3.4; 5.9, 文件頁 15-21,66-67,165, PDF 頁 15-21,66-67,165
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.4; 3.3.6, 文件頁 48-51,53-56, PDF 頁 48-51,53-56
39.04.Compare 會使用 host 提供的比較資料。Verify 用來確認指定範圍的可讀性及適用的完整性檢查,不會把資料傳回 host,也不以一份 host 預期內容作逐項比較。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.1; 3.3.5, 文件頁 27-30,51-53, PDF 頁 27-30,51-53
39.05.不能。已寫入的零資料與 deallocated block 的零值讀取行為都可能產生相同結果。要結合配置狀態、DRB,以及 DULBE 是否支援且啟用,才能解釋這次讀取。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3.2.1; 4.1.3.3, 文件頁 47-48,66, PDF 頁 47-48,66
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.7-3.3.8, 文件頁 56-61, PDF 頁 56-61
39.06.還不夠。需要確認使用中的 Format Index、metadata 大小、PI 格式與 metadata 傳輸方式;separate buffer 與 extended LBA 的記憶體排列不同。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §1.1-1.6; 4.1.3.9; 4.1.4.8; 4.1.5, 文件頁 9-12,73-75,79-83, PDF 頁 9-12,73-75,79-83
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.1; 4.1.5.3; 5.6, 文件頁 85-94,96-102,160-162, PDF 頁 85-94,96-102,160-162
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.6; 5.2.3; 5.3, 文件頁 22,129-131, PDF 頁 22,129-131
39.07.PRACT 控制 PI 如何在傳輸中處理,並非總檢查開關。Guard、Application Tag、Reference Tag 的要求由 PRCHK 指定,Storage Tag 另由 STC 指定;實際傳輸內容還取決於 metadata 與 PI 大小。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.5; 5.3.2-5.3.3, 文件頁 21-22,141-152, PDF 頁 21-22,141-152
39.08.Soft Limit 允許利用尚未被其他工作使用的頻寬或 IOPS;當資源不足時才依設定比例分配。Hard Limit 則提供上限。Appendix A 的 token buckets 是說明性實作,不能視為所有 controller 的內部結構。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.10.1-5.10.2; Appendix A, 文件頁 166-168,176-177, PDF 頁 166-168,176-177