資料為什麼要一起放
01-01先從有效資料搬移的成本理解目的,再分清 RG、RUH、RU,以及初始與持續隔離。它們決定分組的範圍與搬移後仍須維持的條件。
- RG
- Reclaim Group;回收群組,簡寫 RG;包含多個可輪替使用的回收單位。
NVMe · 規格與原理
00.01.FDP 讓主機把資料何時會一起失效的知識,轉成 SSD 可以使用的放置選擇。本文從回收成本開始,連起配置、namespace 映射、Write、RUH 更新,以及能驗證使用結果的狀態、統計與事件。讀完應能解釋一個 PID 如何選到目前的 RU,也能判斷一次操作究竟改了參照、邏輯資料,還是整個群組設定。
01-01先從有效資料搬移的成本理解目的,再分清 RG、RUH、RU,以及初始與持續隔離。它們決定分組的範圍與搬移後仍須維持的條件。
02-01配置定義資源與 PID 格式;namespace 清單把 PHNDL 對到 RUH;Data Placement Directive 再讓 Write 明確選擇 RG 與 PHNDL。
03-01Status 查當下剩餘量,Update 換空 RU,DSM 描述失效的 LBA。三者分工不同,配合使用才有機會改善回收成本。
04-01Usage 看配置來源,Statistics 看累計量,Events 看原因與位置;先辨識範圍、期間與有效位,才能正確解讀數據。
00.02.適合具備 OS、Computer Organization 與 SSD 基本概念的讀者。以 PCIe 與 NVM Command Set 為情境;所有數量與命令值的例子都是說明性設定,實際能力以裝置回覆為準。本文包含指定主範圍,必要引用只講理解 FDP 所需的欄位與條件。
00.03.可以沿著一批資料走完全文:先按預期失效時間分組,再設定可用資源與映射;寫入時透過 PID 選到目前 RU,寫滿或主動 Update 後使用下一個 RU。舊資料何時失效、何時由主機提供解除配置資訊,是另一條同樣重要的線。
00.04.以下教學先按理解順序串起這條資料路徑,再把各張規格表放回它所解答的問題。資料量、資源數、清單索引與命令的數量減 1 編碼會各自演算,不用背一串縮寫來猜其意義。
01.01.FDP 讓主機依資料使用方式安排寫入,目標是減少媒體回收時搬移仍有效資料的成本。功能以 Endurance Group 為範圍;LBA 決定邏輯位置,Placement Identifier 則透過 namespace 的對照關係選擇目前接收資料的 Reclaim Unit。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.12.1, 文件頁 647-650, PDF 頁 673-676
01.02.檔案系統把某個 LBA 的內容改掉,並不表示 SSD 已經原地覆寫同一塊媒體。裝置可能把新內容放到別處,原位置成為不再需要的舊資料。回收空間時,若同一批媒體仍夾著有效資料,控制器就需要保留或搬移那些資料。這是理解 FDP 的出發點。
01.03.主機較容易知道哪些資料會一起失效,例如同一批可整體刪除的暫存檔。FDP 讓主機把這種關係反映到資料放置上,但不把 NAND 實體位址交給主機管理,也不保證任意分組都能改善寫入量;分錯生命週期,仍可能留下需要搬移的資料。
01.04.Endurance Group 裡有一個或多個 Reclaim Group;每個 Reclaim Group 裡有多個 Reclaim Unit。Reclaim Unit Handle 在每個 Reclaim Group 各持有一個目前可寫入單位的參照。因此只說 RUH 3 還不夠,還需要知道是哪一個 Reclaim Group。
01.05.當目前的 Reclaim Unit 寫滿,控制器把相應參照改到同一 Reclaim Group 的另一個空單位。主機後續仍可使用相同 handle;相同 PID 並不是某塊媒體永久不變的地址。切換也不表示之前寫入的有效資料已刪除。
01.06.每個 namespace 的 Placement Handle List 將 PHNDL 對應到 RUHID。主機寫入時帶 NSID、LBA 和 PID;控制器先從 PID 取 PHNDL 與 RGID,再查 namespace 的表,最後選到目前的 RU。這幾個步驟會在後文使用同一組數值逐步演算。
02.01.一個 RU 同時最多由一個 RUH 參照,因此不同 RUH 的新寫入起初分開。Initially Isolated 允許控制器搬移後在同一 Reclaim Group 合併同類型 RUH 的資料;Persistently Isolated 則要求搬移目的 RU 只包含同一 RUH 寫入的資料。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.12.1, 文件頁 649-650, PDF 頁 675-676
02.02.兩種類型都讓不同 RUH 的新寫入起初放在不同 RU。不能把 Initially Isolated 解讀成完全沒有隔離,也不能把 Persistently Isolated 解讀成控制器不得搬移資料。真正需要比較的是控制器內部搬移之後,哪些資料可以放到同一個目的 RU。
02.03.RUHT=1h。控制器例如為了垃圾回收,把舊資料搬到同一 Reclaim Group 內的另一個 RU;目的 RU 可以混合其他 Initially Isolated RUH 所寫的資料。原本分組仍影響初次放置,但不能據此假設搬移後每一組都維持各自的 RU。
| RUH 類型 | X、Y 的新資料 | 控制器搬移 X、Y 舊資料後 |
|---|---|---|
| Initially Isolated | 不同 RU | 允許進同一個目的 RU |
| Persistently Isolated | 不同 RU | X、Y 必須保留不同目的 RU |
02.04.RUHT=2h。控制器一樣可以在同一 Reclaim Group 內搬移,但目的 RU 只能包含由同一 RUH 寫入的資料。這是資料來源的隔離條件,不是固定實體地址、跨 Reclaim Group 的複製能力,或資料永久保留的承諾。
02.05.不同 namespace 可以在符合格式等條件時共用同一 RUH。此時即使 RUHT=2h,也不能把該 RUH 的持續隔離當成這些 namespace 彼此隔離;規則的識別對象是 RUH。選用共享或獨立 RUH 前,要先確認應用程式想一起管理的是哪些資料。
03.01.LID 20h 回傳 Endurance Group 的配置清單。先讀整份大小與每筆 DSZE,再檢查 FDPCV、NRG、NRUH、RUHT、RUNS 等內容。RGIF 決定 16-bit PID 高位有多少 bits 是 RGID,剩餘低位才是 PHNDL;配置索引不是 byte offset。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.29, 文件頁 293-296, PDF 頁 319-322
03.02.NUMFDPC 在 header bytes 1:0,採數量減 1 的編碼;值 1 表示 2 筆配置。SZE 是整份 log 的 byte 數,第一筆從 byte 16 開始。每筆配置可能因 RUH 數與廠商資料長度不同而有不同 DSZE,所以下一筆位置要加上本筆 DSZE,不能假設固定間距。
03.03.第 0、1、2 筆是清單索引,Set Features 的 FDPCIDX 選這個索引。假設第 0 筆 DSZE=80,則第 1 筆起點是 byte 96;要選它仍填 FDPCIDX=1,不是 96。FDPCV=0 表示該候選目前不可用;建立其他 Endurance Group 或啟用其他配置後,可用性可能改變。
03.04.NRG、NRUH 是直接計數且非零;RUH 清單依 RUHID 遞增,每筆描述器提供 RUHT。RUNS 是每個 RU 的名目 bytes,ERUTL 是估計時間上限秒數,0 表示未回報。MAXPIDS 則是 Update 可接受的 NPID 編碼上限,不能把這幾個值都當成同一種容量。
03.05.RGIF=r 且 r>0 時,RGID=PID>>(16-r),PHNDL=PID & ((1<<(16-r))-1)。NRG=1 且 RGIF=0 時,16 bits 全部是 PHNDL;NRG=1 但 RGIF 非零也合法,此時 RGID 欄位由控制器忽略。不要自行以 log2(NRG) 取代裝置實際回報的 RGIF。
03.06.一筆配置先有 64 bytes 固定部分,再加 NRUH×4 bytes 的 RUH 描述器、VSS bytes 的廠商內容,最後補 0 到 8-byte 邊界。例:NRUH=3、VSS=1,未補齊為 77 bytes,補 3 bytes 後 DSZE=80。VS 是廠商資料;沒有廠商定義時不替其中的值編造意義。
04.01.先查 FDPS 與有效配置,讓目標 Endurance Group 沒有 namespace,再以 FID 1Dh、SV=1 設定 FDPE 與 FDPCIDX。設定值改變後需重新取得資料格式資訊,再建立 namespace;FDP 設定成功改變也會清除該群組的 FDP 事件與統計。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.12.2, 文件頁 651-652, PDF 頁 677-678
04.02.Identify Controller 的 CTRATT.FDPS=1 表示支援 FDP;LID 20h 再回答有哪些配置。即使兩者都符合,也還不能直接對現有 namespace 所屬群組改設定。支援、候選可用性與目前啟用狀態是不同問題,必須依次確認。
04.03.FDP 改變的是群組的配置,後續 namespace 的資料格式與 handle 映射也與該配置有關。只要群組還有 namespace,而要求的 FID 1Dh 值又不同於目前值,控制器就以 Command Sequence Error 拒絕。這項規則要求刪除該群組全部 namespace 後才變更,不能把它畫成隨時可以切換的普通開關。
04.04.CDW11 低 16 bits 是 ENDGID;CDW12 bit 0 是 FDPE、bits 15:8 是 FDPCIDX;Save 在 CDW10 bit 31。此 Feature 可保存、預設 0,值的改變只允許在 SV=1 時進行。支援 SSFS 而 SV=0 的要求會回 Invalid Field in Command。
04.05.Feature 值改變時,控制器可以改變 Identify 所提供的資料格式相關資訊。主機應重新查支持的格式,再建立使用 NVM Command Set(CSI=00h)的 namespace。還要保留舊統計的量測終點,因為成功改值會把 FDP Statistics 清 0,並清掉 FDP Events;前後已不是同一段累計期間。
04.06.本文教的是配置條件與流程。完整順序是確認能力與候選、安排既有資料與 namespace 的處理、在空群組保存新設定、重新查格式、建立 namespace 及其映射,再啟用所需 Directive 與事件。這裡不把「設定成功」當成資料已遷移或已安全保存的證明。
05.01.NPHNDLS 與 Placement Handle List 建立 namespace 私有的 PHNDL→RUHID 對照。主機可明確列出不同 RUH;NPHNDLS=0 則由控制器選一個 RUH 作為 PHNDL 0。共享 RUH 的 namespace 必須使用相同資料格式,且控制器選用與主機明確指定的 RUH 有分配限制。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6.3, 文件頁 110-113, PDF 頁 110-113
05.02.本例 NPHNDLS=2,bytes 512:513 放 1,514:515 放 3。第 0 筆的位置定義 PHNDL 0,內容 1 才是 RUHID。這是「索引」與「值」的典型差別:寫入帶 PHNDL,控制器查出 RUHID;不能把主機清單 [1,3] 解讀成這個 namespace 只有 PHNDL 1 和 PHNDL 3。
05.03.非零 NPHNDLS 不能大於 NRUH 或 128;每個 RUHID 必須小於 NRUH;同一 namespace 的清單不能重複 RUHID。若列到控制器已為 NPHNDLS=0 的 namespace 選用的 RUH,也會被拒絕為 Invalid Placement Handle List。
05.04.NPHNDLS=0 要求控制器替 namespace 建立唯一的 PHNDL 0。若群組已存在這種 namespace,新 namespace 使用相同的控制器選定 RUH;否則控制器需選一個未被主機明確配置的 RUH。沒有可用候選時會回 Invalid Placement Handle List,不能任意借用一個已被明確配置的 RUH。
05.05.兩個 namespace 明確使用同一 RUH 時,Format Index 必須相同;不一致會回 Invalid Format。只看每個 logical block 的 data bytes 相同還不夠,Format Index 代表整份資料格式選擇。FDP 群組中的 namespace 使用 NVM Command Set,且不能把 NVM Set 配置混進同一個 FDP 配置。
05.06.建立命令決定 PHNDL 到 RUH 的關係,但每個 RUH 在各 Reclaim Group 指向的 RU 會隨寫入變化。使用 I/O Management Receive 查目前的 PID、RUHID、剩餘可寫量與時間,才能把建立時的表接到運作中的狀態。Create 與 Attachment 是不同操作;要透過某控制器做 I/O,namespace 還需能由該控制器存取。
06.01.FDP 已啟用的群組內,namespace 還需要啟用 Data Placement Directive 才能明確指定 PID。Enable 使用外層 Identify DTYPE=00h,CDW12 目標 DTYPE=02h;Data Placement 本身沒有 Send/Receive 操作。沒有使用 Directive 的寫入則使用 PHNDL 0,讓控制器選 Reclaim Group。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.9.4, 文件頁 627, PDF 頁 653
06.02.FID 1Dh 是 Endurance Group 的 FDP 設定;Data Placement Directive 則套用到指定 namespace,以及適用的主機身分與共享控制器關係。群組有能力並已啟用,不會自動證明某主機已替 namespace 啟用 Directive。
06.03.Directive Send 外層選 DTYPE=00h、DOPER=01h,再由 CDW12 的 DTYPE=02h、ENDIR=1 指定目標。若 namespace 不在已啟用 FDP 的群組,回 FDP Disabled;若用 NSID=FFFFFFFFh 要一次啟用所有 namespace,回 Invalid Namespace or Format。應逐一對有效 namespace 設定。
| 目的 | 入口與選擇 | 改變或取得什麼 |
|---|---|---|
| 群組啟用 FDP | Set Features / FID1Dh | Endurance Group 的配置 |
| namespace 使用 PID | Directive Send / Identify / Enable target02h | Data Placement 啟用狀態 |
| 查每個 PID 狀態 | I/O Management Receive / MO1 | 映射、剩餘量、估計時間 |
| 改到空 RU | I/O Management Send / MO1 | 所列 PID 的目前 RU 參照 |
06.04.§8.1.9.4 沒有定義 Data Placement 的任何 Directive Operations。因此 Send 或 Receive 若在 CDW11 直接選 DTYPE=02h,回 Invalid Field in Command。查能力使用 Identify Directive 的 Return Parameters;查 RUH 狀態與更新參照則使用 I/O Management 命令,各入口有不同工作。
06.05.I/O 中若沒有任何 I/O Directive 啟用,或 DTYPE=00h,控制器忽略 DTYPE/DSPEC;FDP 群組裡這種寫入使用 PHNDL 0,RG 由控制器選。若 Directive 有效且 DTYPE=02h,才解讀 DSPEC 為 PID。若已有 I/O Directive 啟用,卻選不支援或未啟用的類型,則以 Invalid Field in Command 拒絕。
06.06.Data Placement 的 DPDIRCLR=1 表示其啟用狀態跨 Controller Level Reset 保留;但 RUH 目前指向哪個 RU、剩餘容量與事件仍需重新查。不要因為 Enable 不必照搬 Streams 的 reset 規則,就省略後續 FDP 狀態恢復流程。
07.01.明確放置的 Write 用 DTYPE=02h、DSPEC=PID;LBA 與區塊數仍決定邏輯資料。PID 的 RGID 或 PHNDL 無效時,控制器另選該 namespace 可存取的 RG/RUH 來處理放置,並在所選 RUH 已啟用該事件時記錄 Invalid Placement Identifier;不能把這個規則套到 Update。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.12.3, 文件頁 652, PDF 頁 678
07.02.假設 namespace A 可存取、Data Placement 已啟用,映射 [1,3],NRG=4、RGIF=2。PID=8001h 指 RG 2 與 PHNDL 1,查表得到 RUH 3。控制器把這次資料放到 RUH 3 在 RG 2 目前參照的 RU;LBA 128 是 namespace 的邏輯位置,與 RG 2 不是同一層地址。
07.03.8 blocks 的 NLB 是 7,位於 CDW12 bits 15:0;DTYPE=2 位於 bits 23:20。CETYPE=0 的格式下,PID 放在 CDW13 高 16 bits。不能把 PID 填入 SLBA,不能把 8 直接填成 NLB,也不能把這個 CDW13 例子無條件套到非零 CETYPE。
07.04.若本例 Write 不使用 Directive,PHNDL 自動採 0,因而查到 RUHID 1;Reclaim Group 由控制器選。這不表示離開 FDP 群組,也不表示控制器把非零 DSPEC 自動當作 PID。是否解讀 DSPEC 先取決於 Directive 規則。
07.05.假設改成 PHNDL=2,但 A 只有 PHNDL 0、1。控制器為這次 Write 選擇 A 可存取的 RG/RUH;這個放置錯誤本身不是要求 Write 必須失敗。事件是否出現還取決於實際所選 RUH 是否啟用了 Invalid Placement Identifier;想收到此事件,應在所有 RUH 啟用它。其他命令錯誤仍可能使 Write 失敗。
07.06.FDP 沒有取消 volatile write cache 的差別。有些配置帶 cache,有些 namespace 由 VWCNP=1 明確表示沒有。完成 Write 不應一律解讀成已寫入非揮發媒體;需要持久化時使用原本的 FUA/Flush 規則。FDP 的分組選擇也不額外提供原子寫入保證。
08.01.I/O Management Receive 的 MO=01h 逐一回傳 namespace 每個 PHNDL、每個 RG 的狀態。NVM 描述器含 PID、RUHID、EARUTR 秒數與 RUAMW logical blocks;回覆是處理當下的狀態,未必反映其他未完成命令,且 RUNS 只是名目大小。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.2.1.1, 文件頁 26, PDF 頁 26
08.02.I/O Management Receive 用 NSID 指定可存取的 namespace;MO=01h,這個操作沒有定義 MOS 的額外選擇。NSID=0 或 FFFFFFFFh 會回 Invalid Namespace or Format,FDP 未啟用則回 FDP Disabled。這和 LID 20h~23h 用 ENDGID 選群組不同。
08.03.header 是 16 bytes,NRUHSD 位於 bytes 15:14,直接表示描述器數量。第 i 筆從 16+32×i 開始。NVM 排序先 PHNDL 遞增,再 RGID 遞增:先看 PH0/RG0、PH0/RG1…,才輪到 PH1。這有助於核對相同 PH 在不同 RG 的狀態。
| PID / PH / RG | RUHID | RUAMW (blocks) | EARUTR (s) |
|---|---|---|---|
| 0001h / 1 / 0 | 3 | 8 | 30 |
| 4001h / 1 / 1 | 3 | 4 | 15 |
| 8001h / 1 / 2 | 3 | 6 | 20 |
| C001h / 1 / 3 | 3 | 0 | 0 |
08.04.RUAMW 是當時仍可寫入的 logical block 數;EARUTR 是目前 RU 估計還可維持被參照的秒數,0 表示沒回報時間,不表示立即到期。ERUTL 是配置層的估計上限,EARUTR 是這次狀態中的剩餘估計,不該用相同數值替代。
08.05.RUAMW×格式化 block 大小可以小於 RUNS,例如有缺陷的可寫媒體減少;也可以大於 RUNS,例如有額外預留容量。因此即使看到未寫過的 RU,也不能直接用 RUNS 除 block size 取代裝置回覆。Reset 或 Flush 之後,RUAMW 也可能改變或不變。
08.06.NUMD 採 Dword 數量減 1;短 buffer 只收到前段。此 Status 操作有特別規則:buffer 比完整結構長時,多出的部分填 0。不同描述器不是保證同一時刻的原子快照;若另外有 Write 或 Update 正在處理,不可把剛查到的容量當成已為下一筆 Write 保留。
09.01.I/O Management Send MO=01h 接收 PID 清單,將已寫入的 RU 參照換到空 RU;若原本已空,可換也可不換。非法 PID 或超出限制會拒絕命令,但失敗前可能已有部分更新。與 Update 重疊處理的 Write 可能落在更新前或更新後的 RU。
來源:NVME-BASE-2.4, Rev. 2.4, §7.4.1.1, 文件頁 570-571, PDF 頁 596-597
09.02.同一 PID 經由同一 PHNDL→RUHID 映射,在指定 RG 換到新的空 RU。它不是重新建立 namespace 的 Placement Handle List,不會把 PHNDL 1 改成 PHNDL 2,也不會因為成功就把舊 RU 的有效 LBA 刪掉。
09.03.若目前 RU 已寫有 user data,控制器必須改到另一個空 RU;若目前 RU 完全沒寫過,可保留也可換另一個空 RU。主機提早切走尚未寫滿的 RU,可能犧牲可用寫入量,並在事件已啟用時留下 Not Fully Written To Capacity 紀錄。
09.04.CDW10 的 MO 位於 bits 7:0,MOS 位於 bits 31:16;Update 把 MOS 的 16 bits 定義為 NPID。清單有 K 個 PID 時,NPID=K-1,每個 PID 2 bytes。NPID 不得超過配置 MAXPIDS;MAXPIDS 自身已是數量減 1 的上限,不能再把編碼值多減一次。
09.05.RGID 超出 NRG 或 PHNDL 超出 namespace 的數量時,Update 回 Invalid Field in Command。命令被拒絕也不保證清單完全沒動過,因為規格允許部分 PID 已更新。完成後需要的狀態應重新查詢,不能假設整批更新具備全部成功或全部回復的語意。
09.06.如果某筆 Write 在 Update 處理期間使用同一 PID,資料可進入切換前或切換後的 RU。主機若需要讓「這一批」和「下一批」分開,應先完成並協調相關寫入,執行 Update,確認完成後才送下一批;還要依 cache 情況處理持久化。單靠先後送進不同 queue 不能證明控制器的處理順序。
10.01.LID 21h 按 RUHID 回報 RUHA:0 未被 namespace 使用,1 由主機明確指定,2 由控制器選用。這份清單以 Endurance Group 為範圍,最多一個 RUH 的屬性為 2;它不列每個 RG 的剩餘可寫量,後者需要 I/O Management Receive。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.30, 文件頁 296-297, PDF 頁 322-323
10.02.Get Log Page 的 LSI.ENDGID 選 Endurance Group;FDP 已啟用時,此查詢的 NSID 保留。不能把某個 NSID 放進去期待清單只剩這個 namespace 的 RUH。若該群組 FDP 未啟用,回 FDP Disabled。
10.03.8-byte header 的 NRUH 是直接計數,與目前配置的 NRUH 相同。第 i 個 8-byte 描述器從 8+8×i 開始,它描述 RUHID i;描述器本身 byte 0 是 RUHA,其餘保留。不要把它的 byte offset 當成 RUHID。
10.04.RUHA=0 表示沒被 namespace 使用,1 表示主機在建立時明確指定,2 表示 namespace 請控制器選。控制器自選的 namespace 共用同一個此類 RUH,所以整份清單最多一筆為 2。RUHA=1 的 RUH 可以被符合條件的多個 namespace 共享。
10.05.安排新 namespace 時,Usage 協助看 RUH 的分配來源;準備下一批 Write 時,Status 協助看某 namespace 可用的 PID 及剩餘量。Usage 不會直接告訴你哪個 RU 尚有 24 KiB,也不能由 RUHA=0 推斷某段舊媒體已被擦除。
11.01.LID 22h 的 HBMW 計主機寫入,MBMW 同時包含主機與控制器內部寫入,MBE 計媒體擦除量,皆為含對應 metadata 的相關 byte 計數。比較相同配置期間的增量,才可用 ΔMBMW/ΔHBMW 觀察寫入放大;不能把擦除量加到分子,或跨清零直接相減。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.31, 文件頁 297-298, PDF 頁 323-324
11.02.NVM 的 HBMW/MBMW 計入 User Data Out Commands、Write Zeroes 和 Write Uncorrectable;命令是否有等量主機 payload,不能代替這項統計分類。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.6, 文件頁 79, PDF 頁 79
11.03.Log 以 Endurance Group 為範圍,包含該 FDP 配置期間曾存在的全部 namespace。不能刪掉某 namespace 後,就以為它過去的寫入也會從累計移除。FDP 未啟用時,查詢回 FDP Disabled;啟用時 NSID 在這份查詢中保留。
11.04.HBMW 不含控制器垃圾回收等內部寫入;MBMW 包含相關主機和內部寫入。NVM §4.1.4.6 指明計入 User Data Out Commands,以及 Write Zeroes、Write Uncorrectable。因此不能單純用 PCIe 傳輸的 payload bytes 替代 HBMW,尤其某些命令沒有等量主機 payload。
11.05.三個計數都是 128 bits,讀出後先記錄配置、群組、時間與起點,再計算同一時段差值。例如 host 從 500 增至 600 GiB,media 從 800 增至 950 GiB,差值的比是 150/100=1.5,不是只比結束時的 950/600。工作負載與背景處理也應一併考量。
11.06.成功改變 FID 1Dh 值會把統計清 0,firmware update 不會清零;計數到 2^128-1 後飽和不回繞。跨清零不能直接相減,飽和後差值不再完整,host 增量為 0 時則不計這個比值。這些邊界會決定一個漂亮數字到底有沒有意義。
12.01.FID 1Eh 透過 NSID+PHNDL 選 RUH,為列出的事件類型啟用或停用紀錄。Get 回支持的事件與目前啟用狀態,Set 送事件類型清單;共享 RUH 的 namespace 也共享該 RUH 的設定效果。LID 23h 才是已發生事件的紀錄。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.22, 文件頁 481-483, PDF 頁 507-509
12.02.Get Features FID 1Eh 以指定 namespace 的 PHNDL 找到 RUH。一般的值查詢會在 buffer 回 supported event descriptors,CQE DW0.NOET 回項目數,按事件值遞增排列。SEL=3 則是通用能力查詢,不能用一般值回覆格式解讀。
12.03.CDW11 高位 NOET 表示 buffer 中有幾個 1-byte 事件類型,低位 PHNDL 選對象;CDW12.FDPEE 決定這些類型啟用或停用。Get 忽略輸入的 NOET 與 CDW12 開關,回覆每個類型目前狀態。若 PHNDL 無效,Get/Set 都會回 Invalid Field in Command。
12.04.A 的 PHNDL 1 與 B 的 PHNDL 0 若都映射到 RUH 3,透過 A 改事件設定會影響這個共享 RUH。不能以為 NSID 不同就各有一份獨立開關。FDP 停用時,此 Feature 的 Get/Set 都回 FDP Disabled;Feature 本身可保存,保存行為仍按通用 SV/SEL 規則使用。
12.05.事件必須在發生時已對相關 RUH 啟用才會被記錄。容量達上限後,新增紀錄會丟掉最舊的一筆;若設定值改變也可能清掉整份歷史。因此排程與效能分析應記錄設定及讀取時段,不能只憑空白的 log 宣告整段運作從未發生事件。
13.01.LID 23h 一次選 host 或 controller events,依發生先後回傳 64-byte 紀錄。先看 ETYP,再用 PIV/NSIDV/LV 判斷哪些識別欄位有效。Media Reallocated 的 NVM 擴充還要讀 LBAV、NLBAM 和一個示例 LBA;事件時間戳不保證數值遞增。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.32, 文件頁 298-301, PDF 頁 324-327
13.02.CDW10 bit 8 的 FDPET=1 選 host events,0 選 controller events;單次回覆不混兩類。整份 log 是 4096 bytes,64-byte header 後接 64-byte 記錄,最多容納 63 筆;實際支援上限仍依裝置。NUMFDPE 是實際筆數,最後一筆以外的 bytes 沒有可任意當作新紀錄的意義。
13.03.00h 是主機 Update 時舊 RU 尚未寫滿;01h 是未在估計時間內寫滿而控制器改參照;02h 是 Controller Level Reset 改了一個或多個 RUH,此事件的 NSID 與 PID 保留;03h 是 Write 的 PHNDL 或 RGID 不合法。事件名稱描述原因,不能把全部都翻成「配置失敗」。
| 位元 | 為 1 時可讀 | 為 0 時怎麼處理 |
|---|---|---|
| PIV | PID;03h事件為主機原值 | PID 保留 |
| NSIDV | NSID | NSID 清0並忽略 |
| LV | RGID 與 RUHID | 兩欄清0並忽略 |
| LBAV(80h NVM 擴充) | 其中一個被搬移 LBA | LBA 清0並忽略 |
13.04.80h Media Reallocated 描述 Initially Isolated 資料被搬到別的 RU;81h 描述控制器隱式改了 RUH 的參照。這和主機明確送 Update 不同。廠商事件範圍另有編碼,沒有廠商說明時只保存原值,不套用 80h 的欄位意義。
13.05.PIV 決定 PID 可否使用,NSIDV 決定 NSID,LV 同時控制 RGID 與 RUHID。NSIDV=0 時 NSID 清 0 且忽略;LV=0 時兩個位置欄清 0 且忽略;PIV=0 時 PID 保留。若無法回報具體 RUH,PIV 與 LV 都清 0,不能把這些 0 解讀成真的在 RG0/RUH0。
13.06.NVM 擴充中的 NLBAM=0 表示沒回報數量,FFFFh 表示至少 65535 個;LBA 在 LBAV=1 時有效,代表其中一個被搬移的 LBA,而不是連續範圍起點。因此 NLBAM=8、LBA=100 不能推論恰好搬了 100~107。PIV=1 才能把原始寫入的 handle 與此搬移關聯起來。
13.07.紀錄按發生先後排列,但 reset 或主機重新設 Timestamp 可讓後一筆時間數值較小。ETMSP 的格式含時間、初始化來源與是否可能暫停計時;分析跨 reset 的事件時保留清單順序,不能直接按 timestamp 數字重新排序。
14.01.降低回收成本,需要主機追蹤一整個 RU 內資料的使用週期;資料不再需要時,可用 Dataset Management AD=1 指出其 LBA 範圍。RUH Update 只改未來寫入的參照。Reset 後重新查配置、事件、namespace 的 PID 狀態與 cache,不要將保留啟用狀態誤認為所有 RU 狀態不變。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.12, 文件頁 647-652, PDF 頁 673-678
14.02.同一 PID 在 RU 寫滿或 Update 後會指向新 RU。若要在舊 RU 資料一起失效時通知控制器,主機需知道那一批實際寫了哪些 LBA 範圍。單看目前 PID 並無法重新找回所有舊批次的 LBA;規格介面沒有把 PID 當成可直接刪整批資料的鍵。
14.03.AD=1 表示主機提供解除配置建議;每個 range 有 SLBA 與直接計數的 LLB,命令 NR 則是 range 數減 1。把兩個不連續範圍拆成兩列,才能正確表達哪些邏輯資料不再需要。此命令是 advisory,不能保證提交後立刻擦除媒體,也不能當成 Sanitize。
| 操作 | 主要改變 | 不能由此推論 |
|---|---|---|
| RUH Update | 未來寫入使用的 RU 參照 | 舊資料已失效或已擦除 |
| DSM / AD=1 | 向控制器提供不再需要的 LBA 範圍 | 立即擦除,或改了 PH→RUH 映射 |
| 變更 FID1Dh | 群組 FDP 配置;清事件與統計 | 可在現有 namespace 尚存時任意切換 |
14.04.先確認 NVMDSMSV 與 DSM 限制欄位所表示的命令支援,再以非零 DMRL、DMRSL、DMSL 分別判斷 range 數、單一 range blocks、整命令 blocks。NVMDSMSV=1 時限制欄位 0 表示未回報該限制;NVMDSMSV=0 時欄位 0 表示不支援命令。超出非零限制的部分可能不處理。主機需要分批並在既有資料已不再使用時發出;不能只因為清單完整,就推論一個超大命令必然處理全部內容。
14.05.先 Get FID 1Dh 確認 ENDGID 的 FDPE/FDPCIDX,再查 LID 20h 取得該配置,接著查並設定所需 FDP events;對各 namespace 查 RUH Status 與 CNS08h cache 資訊。Data Placement 的 enable 狀態可保留,但 RUH 參照與 RUAMW 仍可能變動,舊快照不能直接接著使用。
14.06.Update 是單一或多個 PID 的參照更新;DSM 是指定不再需要的邏輯範圍;改 FID 1Dh 是 Endurance Group 配置更動,需先無 namespace,並清事件與統計。把這三種操作分開,才能說清楚誰改了什麼、哪些資料仍可讀,以及哪些累計值還能前後比較。
15.01.以下依概念整理規格中的圖表。每組先說明讀取順序與要判斷的問題,接著列出各圖的欄位或行為說明。可以由正文的連結跳到對應組別,也可以用這一節檢查自己能否把欄位連回完整操作。
15.02.Base 70 看層次與參照,730 再加上 namespace 的映射。兩張圖的用途不同:前者回答資源有哪些,後者回答一筆 Write 如何抵達其中一個資源。
回到本節的解釋與範例15.03.兩張圖沒有規定硬體電路配置;外框表示資源所屬,線表示目前的參照與查表關係。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| Endurance Group → RG → RU | RGID 從 0 到 NRG-1;RG 內有多個可輪替使用的 RU。 | NRG=4 時 RGID=0、1、2、3;不是 1、2、3、4。 |
| RUH 0…NRUH-1 的跨 RG 參照 | 每個 RUH 在每個 RG 選一個 RU;同時一個 RU 最多給一個 RUH 參照。 | RUH 3/RG2 與 RUH 3/RG1 的目前 RU 不同。 |
| NSID → PHNDL → RUHID | PHNDL 是 namespace 清單索引,清單內容才是 RUHID。 | 清單 [1,3] 的 PHNDL 1 對 RUHID 3。 |
| 寫滿後的箭頭改向 | 該 RUH 在同一 RG 參照新的空 RU;PID 數字可保持不變。 | 舊 RU 內仍有效的 LBA 不會因為箭頭改向就消失。 |
來源:NVME-BASE-2.4, Rev. 2.4, §3.2.4, Figure 70, 文件頁 85, PDF 頁 111
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.12.1, Figure 730, 文件頁 649, PDF 頁 675
Base70-1RUH 在每個 Reclaim Group 各參照一個 RU,不是一個 RUH 只有一塊全域媒體。
來源:NVME-BASE-2.4, Rev. 2.4, §3.2.4, Figure 70, 文件頁 85, PDF 頁 111
Base70-2圖中每條 RUH 橫跨所有 RG,往每個 RG 連一個目前 RU。假設 4 個 RG、4 個 RUH,共有 16 個目前參照;這不代表整個群組總共只有 16 個 RU。
Base730-1NSID 選映射表,PID 選 RGID 與 PHNDL,再由 PHNDL 查到 RUH。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.12.1, Figure 730, 文件頁 649, PDF 頁 675
Base730-2圖中 PHNDL 0 對 RUH 1,PHNDL 1 對 RUH NRUH-1。帶 RGID=2、PHNDL=1 的 Write 要沿第二列接到最上方 RUH,再到 RG2;不要沿 PHNDL 1 直接找 RUH 1。
15.04.Base 295 定義 RUHT;731 和 732 要比較搬移箭頭的來源與目的 RU,而不是只比較兩張圖的外框。
回到本節的解釋與範例15.05.圖中 Previous RU 是同一 RUH 先前寫入過的單位;目的 RU α/β/γ 是搬移目的的圖示名稱,不是要填入命令的值。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| RUHT:描述器 byte 0 | 1h 初始隔離;2h 持續隔離;0h、3h~BFh 保留;C0h~FFh 廠商定義。 | 遇到廠商值不擅自套用 1h 或 2h 的搬移限制。 |
| 描述器 bytes 3:1 | 保留;每筆描述器總長 4 bytes。 | 第 i 筆在配置內的 byte offset 是 64+4×i。 |
| 相同 RG 與來源 RUH | 兩種類型皆在同一 RG 內搬移;RUHT=2 的目的 RU 只含同一 RUH 寫入的資料。 | 不同 namespace 共用 RUH 時,不能以 RUHT=2 推論 namespace 彼此隔離。 |
| 目前 RU/Previous RU/搬移目的 | 三者是不同時點或用途;資料搬走不等於主機發了新 Write。 | 右側目的 RU 的內部寫入會影響 MBMW,而不增加對應的主機 HBMW。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.29, Figure 295, 文件頁 295, PDF 頁 321
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.12.1, Figure 731, 文件頁 650, PDF 頁 676
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.12.1, Figure 732, 文件頁 650, PDF 頁 676
Base295-1RUHT 決定內部搬移後的隔離要求,並非決定 PID 的位元格式。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.29, Figure 295, 文件頁 295, PDF 頁 321
Base295-2RUHT=1 是 Initially Isolated、2 是 Persistently Isolated;將 2 誤當成 RGIF=2 會改錯 PID 切割,因為 RGIF 在另一個配置欄位。
Base731-1Initially Isolated 的不同 RUH,搬移後可以在同一 RG 合併資料。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.12.1, Figure 731, 文件頁 650, PDF 頁 676
Base731-2看右側 RU α 的多種來源顏色:X、Y、Z 的舊 RU 資料可以被搬到同一個目的 RU。左側仍各有目前寫入 RU,不能把右側合併誤讀成所有新 Write 都直接混寫。
Base732-1Persistently Isolated 允許搬移,但搬移目的 RU 必須維持 RUH 來源分離。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.12.1, Figure 732, 文件頁 650, PDF 頁 676
Base732-2X 的資料可從多個 Previous RU A′ 搬到 RU α;Y 進 RU β,Z 進 RU γ。重點是不同來源的箭頭沒有在同一目的 RU 合流,不是「不能有垃圾回收」。
15.06.Base 293 看清單索引與總長;294/295 看一筆配置和 RUH 類型;296/297 是 RGIF=0 與非零的兩種 PID 格式。
回到本節的解釋與範例15.07.Header 與描述器的 offset 都以 bytes 計;清單索引與 RUHID 則是項目編號。共同的保留欄不代表可自由塞入額外參數。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| Header NUMFDPC 1:0/VER 2/SZE 7:4 | NUMFDPC+1 是配置數;VER=0;SZE 是整份 byte 數。第一筆從 16 開始,header 3 與 15:8 保留。 | 值 1、有兩筆各 80 bytes,SZE=16+160=176。 |
| DSZE 1:0/FDPA byte 2 | DSZE 是含補齊的本筆長度。FDPA[7] FDPCV;[4] FDPVWC;[3:0] RGIF;[6:5] 保留。 | FDPA=92h 表示有效、帶 volatile cache、RGIF=2。 |
| NRG 7:4/NRUH 9:8 | 直接計數,皆必須非零;前者數 RG,後者數 RUH 描述器。 | NRG=4/NRUH=3 不是共 7 個 RU;每個 RUH 橫跨各 RG。 |
| MAXPIDS 11:10 | Update 的 NPID 編碼最大值,採數量減 1,且小於 NRG×NRUH。 | MAXPIDS=7 容許一次 8 個 PID;不等於只准 7 個。 |
| NNS 15:12 | 這份配置容許建立的 namespace 數。MNAN 非零時 NNS≤MNAN;MNAN=0 時 NNS≤NN。 | NNS 是容量配置的 namespace 上限,不能拿 PID 的 PHNDL 位元數取代。 |
| RUNS 23:16/ERUTL 27:24 | RUNS 為每個 RU 名目 bytes;ERUTL 為估計秒數,0 表示未回報。 | RUNS=1073741824 是 1 GiB;ERUTL=0 不是 0 秒後必須換 RU。 |
| VSS byte 3/RUH list 64 起/VS/PAD | 固定 64 bytes,加 4×NRUH、VSS,再補到 8-byte 邊界;PAD 清 0,28:63 保留。 | NRUH=3、VSS=1:64+12+1=77,再補 3,DSZE=80。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.29, Figure 293, 文件頁 293, PDF 頁 319
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.29, Figure 294, 文件頁 293-295, PDF 頁 319-321
Base293-1配置清單先給整份長度,索引從第 0 筆開始,每筆長度另由 DSZE 決定。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.29, Figure 293, 文件頁 293, PDF 頁 319
Base293-2NUMFDPC=1 表示 2 筆;header 16 bytes、第 0 筆 DSZE=80,則第 1 筆從 byte 96 開始。FDPCIDX 要填 1,不是 96。
Base294-1一筆配置把可用性、PID 格式、資源數量與大小分開提供。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.29, Figure 294, 文件頁 293-295, PDF 頁 319-321
Base294-2FDPCV=1、NRG=4、NRUH=4、RGIF=2:可用候選有 4 個 RG、4 個 RUH,PID 高 2 bits 選 RG。RUNS=1 GiB 則是每 RU 名目大小,不是總群組容量。
15.08.先查已啟用配置的 RGIF,才知道 bits 的意義;不要以數字看起來小就猜它是 RUHID。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| RGIF=0/NRG=1 | PHNDL=PID;沒有 RGID 子欄位。 | PID=3 指 namespace 的 PHNDL 3,不是 RUHID 3。 |
| RGIF=r>0 | RGID=PID>>(16-r);PHNDL=PID & ((1<<(16-r))-1)。 | r=2,8001h>>14=2;8001h & 3FFFh=1。 |
| RGID 的合法性 | 一般要求 RGID<NRG;若 NRG=1,即使分配了 RGID bits 也忽略其值。 | NRG=3、RGIF=2 可編碼 0~3,但 RGID=3 超出實際數量。 |
| PHNDL 的合法性 | PHNDL 必須是指定 namespace 實際建立的 handle;欄位能編碼不代表已配置。 | 13:0 能放 16383,但清單 [1,3] 只有 PHNDL 0、1。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.29, Figure 296, 文件頁 295, PDF 頁 321
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.29, Figure 297, 文件頁 296, PDF 頁 322
Base296-1RGIF=0 且只有一個 RG 時,PID 的 16 bits 全部是 PHNDL。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.29, Figure 296, 文件頁 295, PDF 頁 321
Base296-2NRG=1、RGIF=0、PHNDL=3 → PID=0003h;不要把高位 0 當成另外保留的一段 RGID,這個格式根本沒有切出 RGID。
Base297-1RGIF 指定 PID 高位 RGID 的寬度,低位餘下部分是 PHNDL。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.29, Figure 297, 文件頁 296, PDF 頁 322
Base297-2RGIF=2:RGID 在 bits 15:14,PHNDL 在 13:0;8001h 取出 RGID=2、PHNDL=1。NRG=1 而 RGIF>0 時,高位 RGID 由控制器忽略。
15.09.同樣寫bits15:0,可能是在LSI子欄位內,也可能在整個CDW;必須先看表題。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| CDW10 LID[7:0]/LSP[14:8]/RAE[15]/NUMDL[31:16] | LID選20h~23h;LID23h的LSP最低bit是FDPET;NUMDL是NUMD低16bits。 | 4KiB=1024 Dwords → NUMD=1023,不是4096。 |
| CDW11 LSI[31:16]/NUMDU[15:0] | LSI對FDP logs解讀為ENDGID;NUMDU是傳輸Dword數減1的高16bits。 | NUMD=(NUMDU<<16)|NUMDL。ENDGID=2只影響高16bits的LSI。 |
| CDW12 LPOL/CDW13 LPOU | 合成offset=(LPOU<<32)|LPOL;本篇OT=0以bytes計,須按Dword對齊。 | offset96可用;不是從第96筆開始。 |
| CDW14 OT[23]/CSI[31:24]/UIDX[6:0] | 本篇採OT=0、NVM CSI=0、UIDX=0,其他保留;不在本篇使用index offset。 | 將欄位固定才可直接對照本文完整命令算例。 |
| DPTR/NSID/群組 | DPTR指接收buffer;LID21h~23h在FDP啟用群組中NSID保留。 | 查群組狀態不等於選了某個namespace;Status命令的NSID規則另外看。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 204, 文件頁 213, PDF 頁 239
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 205, 文件頁 214, PDF 頁 240
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 206, 文件頁 214, PDF 頁 240
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 207, 文件頁 214, PDF 頁 240
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 208, 文件頁 214-215, PDF 頁 240-241
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.10, Figure 224, 文件頁 237, PDF 頁 263
Base204-1Get Log Page CDW10 同時選 LID、特定選項與傳輸長度低位。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 204, 文件頁 213, PDF 頁 239
Base204-2完整讀4096-byte FDP host events:NUMDL=1023、FDPET=1、LID=23h,其他選項0,CDW10=03FF0123h。
Base205-1Get Log Page CDW11 的高16 bits 是 LSI,低16 bits 是 NUMDU。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 205, 文件頁 214, PDF 頁 240
Base205-2ENDGID=2、NUMDU=0 → CDW11=00020000h;不是00000002h,後者改的是傳輸長度高位。
Base206-1LPOL 提供 log 起讀 offset 的低32 bits,與配置清單索引不同。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 206, 文件頁 214, PDF 頁 240
Base206-2要從byte96續讀配置資料,在OT=0時LPOL=96;要啟用配置索引1仍填FDPCIDX=1。
Base207-1LPOU 是同一個64-bit offset 的高32 bits,不是另一段長度。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 207, 文件頁 214, PDF 頁 240
Base207-2小型FDP logs從起點或byte96讀取,LPOU=0;不要把NUMD放進這裡。
Base208-1OT 決定 offset 類型;本篇 byte offset 範例固定 OT=0。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 208, 文件頁 214-215, PDF 頁 240-241
Base208-2OT=0、LPOL=96表示第96 byte;不是第96個FDP descriptor。CSI/UIDX仍按所選命令集與識別使用。
Base224-1FDP 四份 log 以 LSI 的 ENDGID 選群組。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.10, Figure 224, 文件頁 237, PDF 頁 263
Base224-2讀群組2的LID21h,ENDGID=2在LSI低16bits,也就是整個CDW11高16bits。表內bit15:0是相對LSI的位置。
15.10.Base 499 選群組,500 選配置與啟用。必要引用中的 Feature 通用欄位解釋 SV、SEL;不要把 Get Features 的能力回覆和目前值回覆混用。
回到本節的解釋與範例15.11.FID 1Dh 的欄位值會保存;不是用 Delete/Create 資料結構直接開啟 FDP。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| CDW11[15:0] ENDGID | Endurance Groups 支援時選目標群組;高 16 bits 保留。 | ENDGID=2 不代表 NSID=2 的 namespace。 |
| CDW12[15:8] FDPCIDX/[0] FDPE | 索引選有效候選;FDPE=1 啟用,0 停用;[31:16]、[7:1] 保留。 | 索引 1 且啟用 → (1<<8)|1=00000101h。 |
| SV 與群組內 namespace | 變更只允許 SV=1;群組已有 namespace 時要求不同值,回 Command Sequence Error。 | 預設值 0;改值前需該群組沒有 namespace。 |
| Get 的 SEL≠3/SEL=3 | 一般值查詢的 CQE DW0 採 Figure 500 格式;SEL=3 是通用支持能力格式。 | 不能把能力回覆 bit 0 的 saveable 當成 FDPE。 |
| 成功改值的效果 | 清 FDP events 和 statistics;資料格式相關 Identify 欄位可能改變。 | 新配置的統計起點 0,不能沿用舊配置累計直接相減。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.21, Figure 499, 文件頁 480, PDF 頁 506
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.21, Figure 500, 文件頁 480-481, PDF 頁 506-507
Base499-1FID 1Dh 的 CDW11 指定 ENDGID,不是 NSID 或配置索引。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.21, Figure 499, 文件頁 480, PDF 頁 506
Base499-2CDW11=2 選群組 2;要選配置 2,應改 CDW12 的 FDPCIDX,不是把两者塞在同一欄。
Base500-1FDPE 與 FDPCIDX 決定要保存的 FDP 狀態,Save 位元另在通用 CDW10。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.21, Figure 500, 文件頁 480-481, PDF 頁 506-507
Base500-2CDW12=00000101h 選配置索引 1 且啟用;相同十六進位值在 Enable Directive 的 CDW12 有不同含義,因為外層命令與 FID 不同。
15.12.僅解釋本篇FID1Dh、1Eh需要的選擇;UIDX未指定UUID時為0,不展開UUID機制。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| Get CDW10 FID[7:0]/SEL[10:8] | SEL=0目前、1預設、2保存、3支援能力;其他值保留。 | FID1Dh/SEL0的DW0採Base500,FID1Eh/SEL0的資料在buffer。 |
| Set CDW10 FID[7:0]/SV[31] | SV=1要求保存;具體Feature可以增加保存要求,1Dh就要求改值時SV=1。 | 8000001Dh選FDP並保存;其餘命令屬性另讀CDW11/12。 |
| SEL3 CQE bits0/1/2 | 分別saveable、namespace-specific、changeable能力;其他bits保留。 | 能力與範圍仍要結合Feature定義,不能把bit1當成NSID數值。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12, Figure 198, 文件頁 209-210, PDF 頁 235-236
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12.2, Figure 201, 文件頁 212, PDF 頁 238
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30, Figure 464, 文件頁 457, PDF 頁 483
Base198-1Get Features 的 SEL 選目前值、預設值、保存值或支援能力。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12, Figure 198, 文件頁 209-210, PDF 頁 235-236
Base198-2查FID1Dh目前配置用SEL=0;SEL=3的CQE是能力位,不是FDPE/FDPCIDX。
Base201-1SEL=3 的 CQE 描述 saveable 等能力,不是某個 Feature 的實際設定值。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12.2, Figure 201, 文件頁 212, PDF 頁 238
Base201-2DW0 bit0=1表示可保存;不能由這個bit說FDP已啟用,後者要用FID1Dh值查詢。
15.13.FDP支援時也必須支援這份log。本篇只取1Dh/1Eh兩項的支持位與範圍;其餘effects不展開。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| 項目位置=4×FID | 每FID固定4bytes;1Dh=29,1Eh=30。 | 29×4=116;30×4=120。 |
| FSUPP bit0/FSP[31:20] | FSUPP回支援;FSP非零時僅1bit為1,0代表未回報。 | 支持不表示當前FDPE或FDPEE=1。 |
| FSP內EGSCPE bit3/RUHS bit7 | 對應整個Dword bits23/27;分別為Endurance Group與RUH範圍。 | 別把局部bit7當成整個Dword bit7。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.18, Figure 270, 文件頁 276, PDF 頁 302
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.18, Figure 271, 文件頁 277-278, PDF 頁 303-304
Base270-1FID Effects log 用 FID×4 找對應項目,支援能力與作用範圍各自回報。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.18, Figure 270, 文件頁 276, PDF 頁 302
Base270-2FID1Dh項目在byte116,1Eh在byte120;不是把這兩個byte offset當成Feature Identifier。
Base271-1Feature 的作用範圍能指向 Endurance Group 或 RUH,而非一律是 namespace。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.18, Figure 271, 文件頁 277-278, PDF 頁 303-304
Base271-2FDP1Dh對Endurance Group;Events1Eh透過namespace的PHNDL改RUH。FSP=0表示沒回報範圍,不表示所有範圍皆適用。
15.14.對照位置分散在指定PDF頁;這里逐項說明讀法,不要求從數十頁的大表自行找結論。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| CTRATT bytes99:96,FDPS bit19 | 1支持FDP;Fixed Capacity Management支援時FDPS必須0。 | FDPS不是FID1Dh的FDPE。 |
| ONCS bytes521:520,NVMDSMSV bit2 | 1表示支持DSM並以限制欄位回報可選限制;0時支持與否由非零DMRL/DMRSL/DMSL判斷。 | 先看支持,再看範圍限制,不能由某欄0直接推論無上限。 |
| ONCS bytes521:520,SSFS bit4 | 支持Set的Save與Get的非零Select;FDP1Dh的改值要求仍是SV=1。 | 不要用支持能力取代目前設定查詢。 |
| VWC byte525,VWCP bit0 | 有配置報FDPVWC=1時,controller的VWCP也為1;某namespace仍可另報沒cache。 | 搭配Base346.NSFEAT.VWCNP判斷特定namespace。 |
| MNAN bytes543:540/NN519:516 | MNAN非零給支持namespace數上限;為0時上限≤NN。NN本身是有效NSID最大值。 | NRUH=4不能推論最多4個namespace。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, Figure 338, 文件頁 342, 345, 370-372, 374, 378, PDF 頁 368, 371, 396-398, 400, 404
Base338-1FDPS、SSFS、VWCP 與 namespace 上限各回答不同能力問題。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, Figure 338, 文件頁 342, 345, 370-372, 374, 378, PDF 頁 368, 371, 396-398, 400, 404
Base338-2FDPS=1表示支持FDP;VWCP=1卻可能有VWCNP=1的namespace;MNAN=8則是namespace數量上限,不是8個RUH。
Base464-1Set Features 的 SV 在 CDW10 bit31,與 FID 的低8 bits 分開。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30, Figure 464, 文件頁 457, PDF 頁 483
Base464-2FID=1Dh且SV=1 → 8000001Dh;將SV錯放在CDW12會改到Feature屬性或保留位。
15.15.NVM 134 只取 ENDGID、NPHNDLS、Placement Handle List 與必要格式關係;Base 730 用圖把同一張映射表接到 Write。
回到本節的解釋與範例15.16.必要引用包含NVM§4.1.6.3的完整映射限制;其他建立namespace能力不在此複製成另一篇。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| ENDGID bytes103:102 | 選FDP所屬群組;CSI需NVM00h。 | 群組設定與namespace的Placement Handle List必須匹配。 |
| NPHNDLS bytes393:392 | 直接計數,非零時≤min(NRUH,128);0請controller選唯一PH0。 | 值2是2個,不是3個;與NUMFDPC的編碼不同。 |
| List bytes512起,每項2bytes | 第i項起點512+2×i,內容RUHID<NRUH,不許同一list重複。 | [1,3]合法候選;[1,1]回Invalid Placement Handle List。 |
| controller-selected與host-selected | NPHNDLS=0的namespace共用一個controller選的RUH,該RUH不能再被host明確列入。 | 無可供controller選用的RUH時,不會偷偷共用host選定的RUH。 |
| 共享格式/NVM Set | 共享RUH需相同Format Index,否則Invalid Format;FDP群組不支持NVM Sets。 | 只看每block的4096 data bytes相同,不足以證明全部格式相同。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6.4, Figure 134, 文件頁 112-113, PDF 頁 112-113
NVM134-1Namespace 的 PHNDL 是清單索引,該位置的2-byte值才是RUHID。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6.4, Figure 134, 文件頁 112-113, PDF 頁 112-113
NVM134-2NPHNDLS=2且清單bytes512~515=01 00 03 00,得到PH0→RUH1、PH1→RUH3;不會建立PH3。
15.17.Base 705 分 supported/enabled/reset persistence,706 看目標 DTYPE;186 看外層 DTYPE,兩個欄位不能互換。
回到本節的解釋與範例15.18.必要背景取 Identify Directive 的通用 Enable 與 Data Placement 位元;不展開 Streams 資源操作。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| CDW11 DSPEC[31:16]/DTYPE[15:8]/DOPER[7:0] | Enable 的 DSPEC 不使用;DTYPE=0選Identify,DOPER=1選Enable。 | 示例CDW11=1;不能直接對Data Placement發Send/Receive。 |
| CDW12 DTYPE[15:8]/ENDIR[0] | 目標DTYPE=2;ENDIR=1啟用、0停用;其他bits保留。 | 啟用值=(2<<8)|1=201h。 |
| 回覆 bytes31:0/63:32/95:64 | 分別支持、啟用、跨Controller Level Reset保留;Data Placement在每個向量bit2。 | byte0 bit2為DPDIRS;byte32 bit2為DPDIRE;byte64 bit2為DPDIRCLR。 |
| NSID/主機關聯 | Data Placement Enable不接受FFFFFFFFh;共享namespace在相同非零Host Identifier的控制器之間共享啟用狀態。 | 選具體namespace,不能從FID1Dh的群組範圍推論Enable也能群組廣播。 |
| 4096-byte回覆的其餘欄 | 本篇只用Data Placement的bit2;其他類型不展開,bytes4095:96保留。 | 讀96 bytes才涵蓋三個向量,不要只讀32就宣稱取得啟用狀態。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.8, Figure 186, 文件頁 202, PDF 頁 228
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.9.2.1.1, Figure 705, 文件頁 618-619, PDF 頁 644-645
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.9.2.2.1, Figure 706, 文件頁 620, PDF 頁 646
Base186-1Directive Send 外層由 DTYPE/DOPER 選管理操作,目標類型另在 CDW12。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.8, Figure 186, 文件頁 202, PDF 頁 228
Base186-2CDW11=00000001h 選 Identify/Enable;CDW12=00000201h 才選 Data Placement。外層 DTYPE=02h 沒有已定義的操作。
Base705-1Data Placement 的支援、啟用、跨 reset 保留分屬三份位元向量。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.9.2.1.1, Figure 705, 文件頁 618-619, PDF 頁 644-645
Base705-2DPDIRS=1、DPDIRE=0 代表支持但尚未啟用;DPDIRCLR=1 表示該啟用狀態跨 Controller Level Reset 保留。這不保證 RUH 參照沒有變化。
Base706-1Enable 的 target DTYPE=02h 配 ENDIR=1,得到 CDW12=00000201h。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.9.2.2.1, Figure 706, 文件頁 620, PDF 頁 646
Base706-200000200h 是停用 Data Placement;00000001h 是企圖改變 Identify 的狀態,不能把它當作通用啟用任何類型。
15.19.NVM 70 看 SLBA,71 看 NLB/DTYPE/CETYPE,72 看 DSPEC。Base 346 的 VWCNP 與 338 的 VWCP 解釋為何群組配置與 namespace 的 cache 要分層讀。
回到本節的解釋與範例15.20.只用CETYPE=0的普通Write帶PID範例;沒有替非零CETYPE推導欄位。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| SLBA:CDW10低32/CDW11高32 | 64-bit namespace邏輯起點;不參與PHNDL→RUH映射。 | 128=00000000_00000080h。 |
| CDW12 NLB[15:0]/CETYPE[19:16]/DTYPE[23:20] | NLB=blocks-1;本例CETYPE0、DTYPE2。 | (2<<20)|7=00200007h。 |
| CDW13 DSPEC[31:16]/DSM[7:0] | CETYPE0時DSPEC放16-bitPID;DSM是另外的資料集提示,[15:8]保留。 | 8001h<<16=80010000h;沒有暗示DSM的值也應8001h。 |
| CDW12 FUA bit30 | FUA控制該Write的非揮發提交要求;FDP沒有改掉這層語意。 | 本篇0值範例沒要求FUA,不能據成功完成就忽略cache狀態。 |
來源: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
NVM70-1Write 的 SLBA 是64-bit邏輯起點,跟PID的RGID無關。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 70, 文件頁 54, PDF 頁 54
NVM70-2LBA128 → CDW10=80h、CDW11=0;即使PID=8001h,不能把CDW11改成2來代表RG2。
NVM71-1Write CDW12分別承載NLB、CETYPE與DTYPE,各有自己的bits。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 71, 文件頁 54, PDF 頁 54
NVM71-28blocks、CETYPE0、DTYPE2,其他選項0 → 00200007h;NLB是7,不是8。
NVM72-1CETYPE=0時,Write CDW13的高16bits才是DSPEC。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.6, Figure 72, 文件頁 54-55, PDF 頁 54-55
NVM72-2PID8001h → CDW13=80010000h,低位DSM提示本例0。不要把8001h放低16bits,那不是DSPEC。
15.21.只取CNS08h中NSFEAT.VWCNP及其與Flush的必要關係;不展開整份Identify Namespace。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| NSFEAT byte0,VWCNP bit5 | 1=此namespace沒有volatile cache,忽略VWCP;0=依controller VWCP。 | VWCP=1、VWCNP=1:此namespace仍沒有cache。 |
| FDPVWC/VWCNP/Flush | 配置是否帶cache、namespace是否不帶cache分層判斷;無cache或未啟用cache時Flush不產生資料提交效果。 | Update成功不是Flush成功,也不是媒體已擦除。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.8, Figure 346, 文件頁 391, PDF 頁 417
Base346-1VWCNP 讓主機知道特定 namespace 沒有 volatile write cache。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.8, Figure 346, 文件頁 391, PDF 頁 417
Base346-2VWCNP=1時忽略controller的VWCP;VWCNP=0時才依VWCP判斷。不是VWCNP=0就必定有cache。
15.22.Base 650~653 說明命令與清單外框,NVM 21 才定義每個 32-byte 描述器。兩份規格是外框加內容的關係。
回到本節的解釋與範例15.23.NVM 排序先 PHNDL 再 RGID;相同 PHNDL 的多筆狀態一起讀,才看得出各 RG 的差異。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| PID bytes 1:0/RUHID 3:2 | PID 依目前 RGIF 分解;RUHID 是 PHNDL 的映射結果。 | PID=8001h 可對 RUHID=3;兩欄不需要數值相等。 |
| EARUTR 7:4 | 當時目前 RU 可維持參照的估計剩餘秒數;0 未回報。 | ERUTL=60、EARUTR=20 是配置上限估計與剩餘估計。 |
| RUAMW 15:8 | 當時可寫入媒體的 logical blocks;換算 bytes 可比 RUNS 大或小。 | 6×4096=24576 bytes;不是 6×RUNS。 |
| 保留 31:16/狀態變動 | 保留不作新欄位;RUAMW 可因 Reset/Flush 改變或不變。 | 不能把回覆中保留 0 bytes 當成額外 0-capacity 描述器。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.2.1.1, Figure 21, 文件頁 26, PDF 頁 26
NVM21-1NVM Status 描述器把 PID 映射、剩餘秒數與可寫 blocks 放在各自欄位。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.2.1.1, Figure 21, 文件頁 26, PDF 頁 26
NVM21-2PID=8001h、RUHID=3、EARUTR=20、RUAMW=6:在本例是 RG2 的 PH1→RUH3,估計還有 20 秒、可寫 6 blocks。20 與 6 不能相加成容量。
15.24.Receive 用於讀取 namespace 可用 PID 的即時狀態;共用規則集中在此,NVM 描述器欄位另有詳細說明。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| DPTR 127:0/CDW10 MO[7:0] | DPTR 按 PRP 或 SGL 指接收記憶體;MO=1 選 Status,0 No action,FFh 廠商;其他保留。 | 本例固定 MO=1,其餘未定義的命令特定欄清 0。 |
| CDW10 MOS[31:16]/[15:8] | Status 沒有定義 MOS,故保留;[15:8] 也保留。 | 不能用 MOS=2 指定只讀 RG2。 |
| CDW11 NUMD[31:0] | 傳輸 bytes=(NUMD+1)×4。短傳前段;Status 特別允許超出結構後以 0 補足。 | 要求 288 bytes 但結構 272 bytes,最後 16 bytes 填 0。 |
| Header bytes 15:14 NRUHSD/13:0 保留 | NRUHSD 直接計數;第 i 筆起點 16+32×i。 | NUMD=3 只讀 16-byte header;不能據此宣稱取得全部描述器。 |
| NSID/FDP 狀態/快照 | NSID 0、FFFFFFFFh 拒絕;FDP 停用拒絕。每筆反映其處理時點,未必含 outstanding I/O。 | 先前查的 RUAMW 不會替下一筆 Write 預留容量。 |
來源:NVME-BASE-2.4, Rev. 2.4, §7.3, Figure 650, 文件頁 568, PDF 頁 594
來源:NVME-BASE-2.4, Rev. 2.4, §7.3, Figure 651, 文件頁 568, PDF 頁 594
來源:NVME-BASE-2.4, Rev. 2.4, §7.3, Figure 652, 文件頁 568, PDF 頁 594
來源:NVME-BASE-2.4, Rev. 2.4, §7.3.1.1, Figure 653, 文件頁 569, PDF 頁 595
Base650-1Receive 的 DPTR 指向主機接收狀態的 buffer。
來源:NVME-BASE-2.4, Rev. 2.4, §7.3, Figure 650, 文件頁 568, PDF 頁 594
Base650-2272-byte Status 結構會回到這個 buffer;PID 清單不是放在 DPTR 的數值本身。
Base651-1Receive 的 MO=01h 要每個 PHNDL 在每個 RG 的狀態。
來源:NVME-BASE-2.4, Rev. 2.4, §7.3, Figure 651, 文件頁 568, PDF 頁 594
Base651-22 PHNDL×4 RG=8 筆;CDW10=00000001h。MO=0 是 No action,不能把 0 當成第一個 PHNDL。
Base652-1Receive 的 NUMD 是 4-byte 傳輸單位數減 1。
來源:NVME-BASE-2.4, Rev. 2.4, §7.3, Figure 652, 文件頁 568, PDF 頁 594
Base652-2272 bytes/4-1=67=43h,所以 CDW11=00000043h;NUMD 不是描述器數 8。
Base653-1RUH Status header 的 NRUHSD 計描述器,每筆內容由 NVM 規格定義。
來源:NVME-BASE-2.4, Rev. 2.4, §7.3.1.1, Figure 653, 文件頁 569, PDF 頁 595
Base653-2NRUHSD=8 → 16-byte header 加 256 bytes 描述器。第 0 筆從 16 開始,第 7 筆從 240 開始,最後 byte 是 271。
15.25.只取本篇所需的 NSID、DPTR、CDW 位置與 PRP/SGL 選擇;不展開完整 SQE 結構。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| NSID bytes7:4/DPTR bytes39:24 | NSID 選 namespace;DPTR 根據 CDW0.PSDT 解讀為 PRP1/2 或 SGL descriptor。 | Receive 的 DPTR 指目的記憶體,Send 指來源記憶體。 |
| CDW k 的 byte offset=4×k | CDW10在40、CDW11在44、CDW12在48、CDW13在52。 | CDW10 bit8是命令 byte41 bit0,不是 buffer byte8。 |
| little-endian 與 bit 範圍 | 多 byte 整數低有效 byte 在前;bit欄仍按規格高低位標示。 | PID=8001h 存成 01 80;不要把位元圖的左右順序當成記憶體 byte 順序。 |
來源:NVME-BASE-2.4, Rev. 2.4, §4.1.1, Figure 93, 文件頁 140-142, PDF 頁 166-168
Base93-1命令欄位與主機 buffer 是兩個位置,DPTR 只是把它們連起來。
來源:NVME-BASE-2.4, Rev. 2.4, §4.1.1, Figure 93, 文件頁 140-142, PDF 頁 166-168
Base93-2NSID 位於命令 bytes7:4;DPTR 位於 bytes39:24;CDW10 從 byte40 開始。把 buffer 的第一個 PID 填在 CDW10,會變成錯誤的 MO/MOS。
15.26.Base 654/655 是 Send 入口;656 把 MOS 解讀為 NPID;657 看每個 2-byte PID。對比 Receive:Send 沒有 NUMD。
回到本節的解釋與範例15.27.先由 NPID 得清單數量,逐個 PID 用 namespace 映射驗證;成功完成才代表此操作完成,但失敗不能保證完全沒有改動。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| CDW10 MO[7:0]/MOS[31:16] | MO=1 Update;MOS 全部 16 bits 是 NPID。MO=0 No action、FFh 廠商;[15:8] 保留。 | CDW10=(NPID<<16)|1。 |
| NPID 與 MAXPIDS | NPID≤min(MAXPIDS,NRG×NRUH);配置另要求 MAXPIDS<NRG×NRUH,因此它已是較小上限。 | NRG=4、NRUH=4、MAXPIDS=7,NPID 最大 7,清單最多 8 筆。 |
| DPTR/清單位址 | K=NPID+1;buffer 大小 2×K;第 i 項在 2×i。Send 沒有 NUMD。 | K=2、NPID=1,讀 4 bytes,不是 (1+1)×4。 |
| 原 RU 有資料/原 RU 為空 | 有資料必須換到另一空 RU;已空可換或保留。 | Update 不是 Deallocate,也不保證舊資料被擦除。 |
| 非法 PID/失敗/重疊 Write | 非法或超上限回 Invalid Field;失敗可能部分更新。重疊 Write 可使用更新前或後的 RU。 | 要求批次邊界時,先協調相關 I/O 並等待完成,再更新及發下一批。 |
來源:NVME-BASE-2.4, Rev. 2.4, §7.4, Figure 654, 文件頁 569, PDF 頁 595
來源:NVME-BASE-2.4, Rev. 2.4, §7.4, Figure 655, 文件頁 569-570, PDF 頁 595-596
來源:NVME-BASE-2.4, Rev. 2.4, §7.4.1.1, Figure 656, 文件頁 570, PDF 頁 596
來源:NVME-BASE-2.4, Rev. 2.4, §7.4.1.1, Figure 657, 文件頁 571, PDF 頁 597
Base654-1Send 的 DPTR 指向主機提供的 PID 清單,資料方向與 Receive 相反。
來源:NVME-BASE-2.4, Rev. 2.4, §7.4, Figure 654, 文件頁 569, PDF 頁 595
Base654-2更新 2 個 PID 的來源 buffer 是 4 bytes;它不是接收 32-byte Status 描述器的空間。
Base655-1Send 的 MO=01h 選 Update,與 Receive 的相同 MO 數值代表不同動作。
來源:NVME-BASE-2.4, Rev. 2.4, §7.4, Figure 655, 文件頁 569-570, PDF 頁 595-596
Base655-2CDW10 低 byte=01h,在 Send 是換空 RU,在 Receive 是讀狀態。辨認命令入口後再讀 MO。
Base656-1Update 的 NPID 是 MOS 內的數量減 1,上限來自目前配置。
來源:NVME-BASE-2.4, Rev. 2.4, §7.4.1.1, Figure 656, 文件頁 570, PDF 頁 596
Base656-22 個 PID → NPID=1,再放入 CDW10 bits 31:16 得 00010000h,與 MO=1 合成 00010001h;MAXPIDS=7 表示最多 8 個。
Base657-1Update buffer 每 2 bytes 是一個 PID,清單內容不含 RUH Status 描述器。
來源:NVME-BASE-2.4, Rev. 2.4, §7.4.1.1, Figure 657, 文件頁 571, PDF 頁 597
Base657-28000h、8001h 用 little-endian 依序放成 00 80 01 80;最後一筆從 2×NPID 開始。不要把 NPID=1 誤讀為清單只有 1 筆。
15.28.Base 298 給清單位置;299 給分類值。與 Base 653/NVM 21 對照時,只比較各自回答的問題,不把欄位名稱相似當成相同資訊。
回到本節的解釋與範例15.29.這份 log 不細分每個 RG 的剩餘量,也不描述 RU 是否已擦除。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| Header NRUH 1:0/7:2 保留 | NRUH=目前配置的 RUH 數,直接計數且非零。 | 4 表示 RUHID 0~3。 |
| 第 i 筆位置 8+8×i | 描述器 byte 0 是 RUHA,bytes 7:1 保留。 | RUH2 起點 24;offset 24 不等於 RUHID 24。 |
| RUHA=0/1/2 | 未用/主機明確選用/控制器選用;其他值保留。 | 主機清單 [1,3] 可讓項目 1、3 分類為 1。 |
| LSI.ENDGID/NSID | 選群組;FDP 啟用時 NSID 保留,停用時回 FDP Disabled。 | 不能用 NSID 篩到只有一個 namespace 的清單。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.30, Figure 298, 文件頁 296, PDF 頁 322
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.30, Figure 299, 文件頁 296-297, PDF 頁 322-323
Base298-1Usage 的項目索引就是 RUHID,每筆 8 bytes。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.30, Figure 298, 文件頁 296, PDF 頁 322
Base298-2NRUH=4 時,header 8 bytes 加 4×8=32 bytes,總共 40 bytes;RUHID 3 的描述器從 byte 32 開始。
Base299-1RUHA 0/1/2 是配置來源分類,不是 namespace 個數。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.30, Figure 299, 文件頁 296-297, PDF 頁 322-323
Base299-2RUHA=2 表示 controller-selected;即使 5 個 namespace 共用該 RUH,值仍是 2。整份清單最多 1 筆分類為 2。
15.30.Base 300 的三列先分開看計數對象,再讀共同的清零與飽和條件。NVM §4.1.4.6 補足哪些命令列入,該節沒有另外一張 log 格式圖。
回到本節的解釋與範例15.31.單位是 bytes,包含規格所定義的 user data 與 metadata;不是 SMART 使用的其他量化單位。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| HBMW bytes 15:0 | 128-bit 主機寫入量,不含 controller internal writes。 | Write Zeroes 沒有等量主機 payload 也不能從統計排除。 |
| MBMW 31:16/MBE 47:32 | MBMW 含主機與控制器相關寫入;MBE 是擦除量。 | 內部搬移增加 MBMW,不是把 MBE 加回主機寫入。 |
| 飽和/清零/保留 63:48 | 到 2^128-1 不回繞;改 FID 1Dh 值清 0;firmware update 不清零。 | 前後跨配置改值時,不作普通差分。 |
| NVM 計入的命令 | User Data Out Commands,加 Write Zeroes、Write Uncorrectable。 | 它是規格定義的邏輯寫入計量,不是只量 PCIe DMA bytes。 |
| 量測期間與比值 | 同一群組、同一配置期間,ΔHBMW>0 且未飽和時才算 ΔMBMW/ΔHBMW。 | 100→150 GiB 的增量是 50 GiB,不是取結束絕對值代替增量。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.31, Figure 300, 文件頁 297, PDF 頁 323
Base300-1FDP Statistics 的三個 128-bit 計數分別記主機寫入、全部媒體寫入與擦除。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.31, Figure 300, 文件頁 297, PDF 頁 323
Base300-2ΔHBMW=100 GiB、ΔMBMW=150 GiB、ΔMBE=200 GiB;寫入比值是 1.5,不是 (150+200)/100=3.5。
15.32.Base 501 是回覆數量,502/503 是請求選擇,504 是 Set 清單,505/506 是 Get 清單與每項開關。
回到本節的解釋與範例15.33.FID 1Eh 以 NSID/PHNDL 間接選 RUH;共用 RUH 的 namespace 共用設定效果。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| CQE DW0.NOET[7:0] | 一般 Get 回支持項目數,直接計數;[31:8] 保留。 | 3 項×2 bytes=6 bytes。 |
| CDW11[23:16] NOET/[15:0] PHNDL | NOET 對 Set 有效,Get 忽略;PHNDL 兩者均用。[31:24] 保留。 | PHNDL 無效,Get 和 Set 都回 Invalid Field。 |
| CDW12[0] FDPEE | 1 啟用所列類型,0 停用;Get 忽略;[31:1] 保留。 | Set 停用一組類型不表示刪除整份歷史 log。 |
| Set 1 byte/Get 2 bytes | Set 只送 event type;Get byte 0 是 FDPET,byte 1 的 bit 0 是 FDPEE,其餘保留。 | Get 的 03 00 是「03h 支持、停用」,不是 03h 和 00h 兩種請求。 |
| 可保存/FDP Disabled/共享 | 可保存;FDP 停用時拒絕 Get/Set。共享 RUH 的事件設定會相互影響。 | A/PH1 與 B/PH0 對 RUH3,透過任一映射設定都指同一 RUH。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.22, Figure 501, 文件頁 481, PDF 頁 507
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.22, Figure 502, 文件頁 481-482, PDF 頁 507-508
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.22, Figure 503, 文件頁 482, PDF 頁 508
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.22, Figure 504, 文件頁 482, PDF 頁 508
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.22, Figure 505, 文件頁 482, PDF 頁 508
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.22, Figure 506, 文件頁 482-483, PDF 頁 508-509
Base501-1Get FDP Events 的 CQE DW0.NOET 是 buffer 回傳項目數。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.22, Figure 501, 文件頁 481, PDF 頁 507
Base501-2NOET=3 表示 3 個 2-byte supported descriptors,共 6 bytes;不是只讀 3 bytes,也不是已發生了 3 件事件。
Base502-1CDW11 用 PHNDL 選 RUH,Set 時 NOET 再告訴控制器有幾個事件類型。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.22, Figure 502, 文件頁 481-482, PDF 頁 507-508
Base502-2PHNDL=1、NOET=3 → 00030001h;Get 忽略 NOET,不能靠把它填 1 只要求第一種事件。
Base503-1FDPEE 是此次 Set 清單的共同開關,不是啟用 FDP 的 FDPE。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.22, Figure 503, 文件頁 482, PDF 頁 508
Base503-2CDW12=1 配清單 [00h,03h],表示啟用這兩種事件;不會因此更換群組的 FDP 配置。
Base504-1Set buffer 每個 byte 只列一個事件類型。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.22, Figure 504, 文件頁 482, PDF 頁 508
Base504-200 03 80 是 3 種事件;不要送成 00 01 03 01 80 01,後者是誤把 Get 描述器格式拿來當 Set 請求。
Base505-1Get buffer 每個支持項目有事件值與屬性,依事件值遞增。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.22, Figure 505, 文件頁 482, PDF 頁 508
Base505-200 01 03 00 80 01:00h 啟用、03h 停用、80h 啟用;此處 00h 出現兩種角色,要按每 2 bytes 分組讀。
Base506-1每個 supported descriptor 的 FDPEE 只回答該事件目前是否啟用。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.22, Figure 506, 文件頁 482-483, PDF 頁 508-509
Base506-2事件 03h 的 descriptor=03 00,表示支持但停用;沒有出現在支持清單的事件,不能只用缺少開關推論成同一種停用狀態。
15.34.Base 301 選事件類別,302 看清單,303 看共同事件欄位,480 看時間格式。NVM 116 只解釋 80h 的 ETSP 16 bytes,不是另一個 log。
15.35.以下相對位置從 ETSP 起點算;Base 事件中的 ETSP 起於 byte 16。Media Reallocated 的外層事件值按 Base 303 為 80h。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| SEF byte 0,LBAV bit 0 | LBAV=1 才可讀 LBA;[7:1] 保留;byte 1 保留。 | 在整筆事件中,LBAV 位於 byte16 bit0。 |
| NLBAM bytes 3:2 | 直接計數;0未回報數量,FFFFh代表65535或更多。 | 整筆事件中的 bytes19:18,不是NUMFDPE。 |
| LBA 11:4 | 其中一個被搬移的LBA;LBAV=0時清0並忽略。PIV=1時外層PID指原始寫入所用handle。 | 整筆事件 bytes27:20;不能從這一個值還原整批不連續範圍。 |
| Reserved 15:12/外層有效位 | 最後4 bytes保留;NSID、PID有效性仍由Base FDPEF判斷。 | LBAV=1也不能讓外層NSIDV=0的NSID突然有效。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.7.1.1, Figure 116, 文件頁 79, PDF 頁 79
NVM116-1Media Reallocated 的 NLBAM 是搬移量,LBA 是其中一個位置而不是範圍起點。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.7.1.1, Figure 116, 文件頁 79, PDF 頁 79
NVM116-2LBAV=1、NLBAM=8、LBA=100 只表示 100 是其中一個被搬的 LBA,不能畫成連續 100~107。NLBAM=FFFFh 表示至少 65535 個。
15.36.一次回覆不混 host/controller;每筆 64 bytes,事件類型決定 ETSP 是否有格式可解釋。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| CDW10[8] FDPET/[14:9] 保留 | 1 host,0 controller;LSI.ENDGID 指群組。 | 讀兩類需各一次 Get Log Page;不能把兩次當成同一個原子快照。 |
| Header NUMFDPE 3:0/63:4 保留 | 直接計數;第 i 筆起點 64+64×i;4096-byte log 物理上最多 63 筆。 | 2 筆從 64、128 開始,之後的 bytes 不作第三筆。 |
| ETYP byte 0 | 00h未寫滿就Update;01h超過時間;02h reset改RUH;03h非法PID;80h搬資料;81h隱式改參照。 | 70h~7Fh、F0h~FFh 為廠商事件;其他保留值不代入標準事件解法。 |
| FDPEF byte 1:PIV[0]/NSIDV[1]/LV[2] | 依序控制 PID、NSID、RGID與RUHID;[7:3] 保留。 | 00h 表示這些位置資訊沒有有效報告,不是所有位置都真的為 0。 |
| PID 3:2/NSID 15:12 | PID 在 PIV=0 時保留;NSIDV=0 時 NSID 清0並忽略。02h 事件這兩欄保留。 | 03h事件的 PID 是主機送出的原值;不是控制器另選的 PID。 |
| ETMSP 11:4/ETSP 31:16 | ETMSP 依 Timestamp 格式;ETSP 只有事件指定使用時才解讀。 | 80h 的 ETSP 接 NVM 116,00h~03h、81h 不使用它。 |
| RGID 33:32/RUHID 35:34 | LV=0 時清0並忽略;03h且有效時回控制器實際另選的位置。 | 主機錯的 PID 與回報的 RUHID 不相等可以是正常結果。 |
| Reserved 39:36/VS 63:40 | VS 可用於任何事件,不限廠商事件;無廠商定義時不能編造欄位含義。 | 標準 80h 仍可能帶 VS;它不是 NVM ETSP 的延伸欄位。 |
| 容量上限/先後順序 | 滿了丟最舊;按發生先後回報,timestamp 可因初始化不同而逆序。 | 看不到事件可能因未啟用、被覆蓋或改配置後清空。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.32, Figure 301, 文件頁 298, PDF 頁 324
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.32, Figure 302, 文件頁 298, PDF 頁 324
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.32, Figure 303, 文件頁 299-300, PDF 頁 325-326
Base301-1Log 請求的 FDPET bit 選 host 或 controller events,與事件記錄的 ETYP 不同。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.32, Figure 301, 文件頁 298, PDF 頁 324
Base301-2CDW10 bit 8=1 看 host 類;bit 8=0 看 controller 類。不能把 ETYP=80h 填入這個 1-bit 選擇欄來篩單一事件。
Base302-1FDP Events 是 64-byte header 加 64-byte 記錄,依發生先後排列。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.32, Figure 302, 文件頁 298, PDF 頁 324
Base302-2NUMFDPE=2 時讀 header 後第 1、2 筆:offset 64、128;兩筆 timestamp 數值逆序也不應交換,因為來源時鐘可能重設。
Base303-1事件識別欄位只有在對應有效位成立時才有報告意義。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.32, Figure 303, 文件頁 299-300, PDF 頁 325-326
Base303-2FDPEF=05h:PIV=1、LV=1、NSIDV=0。可以讀 PID 與 RGID/RUHID,NSID 必須忽略;不能因 NSID=0 就說事件發生在 namespace 0。
15.37.ETMSP在事件bytes11:4,以下位置先以8-byte Timestamp結構起點計算。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| TSTMP bytes5:0 | 48-bit毫秒值;來源0按最近reset,來源1按主機設定值再累加。 | 事件中的TSTMP實際位於bytes9:4。 |
| TSTMPS byte6:TSTMPO[3:1]/SYNC[0] | 來源0=reset初始化,1=主機設定;SYNC=1表示可能停止計時過;[7:4]保留。 | 事件byte10=02h表示origin1且連續計時,不能把02h當事件類型。 |
| byte7保留/清單順序 | 保留byte不作時間高位;事件仍按發生先後列出。 | 保留原始列表次序,可避免跨reset按數字排序顛倒因果。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.8, Figure 480, 文件頁 470-471, PDF 頁 496-497
Base480-1事件的8-byte時間包含時間值和時鐘來源,不能只拿整個值排序。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.8, Figure 480, 文件頁 470-471, PDF 頁 496-497
Base480-2TSTMPO=0、TSTMP=500是reset後約500ms;TSTMPO=1則由主機設定值加計時而來。兩筆數字大小不直接代表跨reset先後。
15.38.NVM 45~47 看 range 個數、AD 與長度;129 只取 DSM 三個處理限制。將它們接到主文資料生命週期,而不是再複製一套完整 DSM 教學。
回到本節的解釋與範例15.39.這些是FDP資料生命週期的必要背景;DSM屬advisory,不能把它畫成收到就必定擦除。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| NR CDW10[7:0]/AD CDW11[2] | NR=range數-1,最多256項;AD=1提供解除配置資訊。 | 2ranges→NR1、AD命令值4。 |
| Range CATTR bytes3:0/LLB7:4/SLBA15:8 | 每筆16bytes;LLB直接計數;CATTR為附加提示,本例0。 | 第一筆SLBA100、LLB8;下一筆獨立從offset16開始。 |
| NVM Identify Controller:DMRL byte3/DMRSL bytes7:4/DMSL bytes15:8 | 非零時分別限制range數、單range blocks、總blocks;超出部分可能不處理。NVMDSMSV=1時0表示未回報該限制;NVMDSMSV=0時0表示不支持命令,不能一律當作無上限。 | 2個ranges共12blocks,DMSL10時不能以「只有2項」推論完整處理。 |
| 解除配置與隔離/擦除 | 提供失效LBA範圍可協助回收;不保證立即回收、不等同Sanitize、也不改PHNDL映射。 | 同一PID已指到新RU時,仍需知道舊批次的LBA範圍。 |
來源: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, §4.1.5.4, Figure 129, 文件頁 104-105, PDF 頁 104-105
NVM45-1DSM 的 NR 計16-byte範圍項目數減1。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 45, 文件頁 44, PDF 頁 44
NVM45-22個不連續範圍 → NR=1,buffer=32bytes;不是2個PID,也不是2blocks。
NVM46-1DSM 的 AD 位表示可解除配置的資料範圍,不是切換RUH。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 46, 文件頁 44-45, PDF 頁 44-45
NVM46-2CDW11=4只設AD,讓controller可解除提供的LBA ranges;它不包含PID,也不保證立即擦除媒體。
NVM47-1DSM 的每個範圍需要自己的SLBA與直接計數長度。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §3.3.3, Figure 47, 文件頁 45, PDF 頁 45
NVM47-2(SLBA100,LLB8)和(SLBA1000,LLB4)是兩筆;Write NLB減1的習慣不能套成LLB7、3。
NVM129-1DSM 三個限制分別管範圍數、單一範圍長度與整個命令長度。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.4, Figure 129, 文件頁 104-105, PDF 頁 104-105
NVM129-2DMRL=2、DMRSL=8、DMSL=10:兩筆8與4blocks雖各自不超8,但總共12超過10,需要分批安排。
16.01.高 2 bits 是 RGID 2,低 14 bits 是 PHNDL 1;查 namespace 的表得到 RUH 3,因此使用 RUH 3 在 RG 2 目前參照的 RU。它不是實體地址,也不是 LBA。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.29, 文件頁 293-296, PDF 頁 319-322
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.12.1, 文件頁 647-650, PDF 頁 673-676
16.02.不同。明確使用 Data Placement 的 Write 由控制器另選可存取的位置,並依事件啟用條件記錄;Update 拒絕非法 PID,而且失敗前可能部分更新。這兩種規則不能互套。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.12.3, 文件頁 652, PDF 頁 678
來源:NVME-BASE-2.4, Rev. 2.4, §7.4.1.1, 文件頁 570-571, PDF 頁 596-597
16.03.依序為 2 筆配置、2 個明確 Placement Handles、2 個 Update PIDs。前後兩者採數量減 1,中間直接計數;名稱都像數量,編碼卻不同。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.29, 文件頁 293-296, PDF 頁 319-322
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6.3, 文件頁 110-113, PDF 頁 110-113
來源:NVME-BASE-2.4, Rev. 2.4, §7.4.1.1, 文件頁 570-571, PDF 頁 596-597
16.04.不能。持續隔離是按 RUH 區分資料來源;兩個 namespace 共用同一個 RUH,正好落在同一個隔離對象之內,還會共享相關事件設定效果。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.12.1, 文件頁 649-650, PDF 頁 675-676
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.22, 文件頁 481-483, PDF 頁 507-509
16.05.不能。先確認 LBAV 有效;100 只是其中一個位置。其餘 7 個可能不連續,也無法由這筆事件的單一 LBA 欄重建完整清單。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.32, 文件頁 298-301, PDF 頁 324-327
16.06.不能直接延續。成功改變 Feature 值會清零統計,應結束舊量測、重新建立起點;也要避免飽和或 ΔHBMW=0 的情況。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.31, 文件頁 297-298, PDF 頁 323-324
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.12.2, 文件頁 651-652, PDF 頁 677-678