決定測試對象
01-01先確認支援能力,再選擇測試種類及要納入的 namespace;控制器接受要求後,才開始背景測試。
- namespace
- namespace,主機透過 controller 存取的一份已格式化非揮發性容量。
NVMe · 規格與原理
00.01.Device Self-test 讓控制器在背景執行內部測試。讀懂這項功能,必須分清「接受測試要求」、「正在測試」與「留下測試結果」三件事;主機收到命令成功完成,並不表示裝置已通過測試。
01-01先確認支援能力,再選擇測試種類及要納入的 namespace;控制器接受要求後,才開始背景測試。
02-01用目前作業與完成百分比回答「是否還在測試、做到哪裡」;新的命令、重設或中止要求可能影響進行中的作業。
03-01測試停止後,再看結果紀錄。先確認哪些欄位有效,才能解釋失敗位置與相關資訊。
00.02.先確認控制器支援哪些測試,再選擇測試種類與 namespace,送出命令後觀察目前作業及進度,最後閱讀歷史結果與有效性標記。相同的 Get Log Page 可以在不同時間回答「做到哪裡」和「最後結果如何」,但兩者使用不同欄位。
01.01.從 Identify 的 OACS.DSTS 確認 Device Self-test 支援,再讀 DSTO 與 EDSTT,理解同時執行作業的限制及延伸測試時間。EDSTT 是預估時間資訊,不能當成到點就宣告測試通過的計時器。
01.02.以測試 NSID=7 為例,STC 選擇測試種類,NSID 選擇納入的 namespace。兩個欄位回答不同問題。先確認 NSID=7 是有效且可透過收到命令的控制器存取的 namespace,才能把後面的結果與預期對象連起來。
01.03.送出命令後,主機先收到這筆命令的 CQE。成功代表要求已被接受;測試本身可能仍在執行。接著讀 LID 06h 的目前作業與進度,才能回答「現在是否正在測試」。
01.04.假設延伸測試尚未完成,主機又送出新的 STC。不能把第二次命令一概當作排隊等待,也不能假定它必定取代前一個作業。應依目前作業種類和新 STC 的組合,查清楚是拒絕、停止原作業,還是建立結果;這正是命令互動表的用途。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, 8.1.8, 文件頁 352-358, 614, PDF 頁 378-384, 640
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, 文件頁 199, PDF 頁 225
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, 文件頁 199-200, PDF 頁 225-226
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, 文件頁 200, PDF 頁 226
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, 文件頁 201, PDF 頁 227
01.06.啟動 Device Self-test 前,先讀 Identify Controller:OACS.DSTS 判斷 command 是否支援;EDSTT 是 extended operation 在 power state 0 的名目分鐘數;DSTO.SDSO 決定同時只能有一個 subsystem-wide operation,或每個 controller 各一個。這三個欄位回答不同問題。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, 8.1.8, 文件頁 352-358, 614, PDF 頁 378-384, 640
01.07.NSID 指定 Device Self-test 要納入的 namespace。0h 表示只測試控制器;FFFFFFFFh 表示納入作業開始時、已附加且可透過該控制器存取的所有 namespace。指定單一 namespace 時,識別碼超出有效範圍會回覆 Invalid Namespace or Format;有效識別碼若尚未配置,或 namespace 未附加到收到命令的控制器,則屬 inactive,回覆 Invalid Field in Command。Host-Initiated Refresh 忽略 NSID。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, 文件頁 199, PDF 頁 225
01.08.CDW10.STC[3:0] 選動作:1h=short、2h=extended、3h=Host-Initiated Refresh、Eh=vendor specific、Fh=abort;其餘 encoding reserved。只有 STC=Eh 時 CDW15.DSTP 才是 vendor specific,其他情況 CDW15 reserved。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, 文件頁 199-200, PDF 頁 225-226
01.09.已有 operation 時,再送 short、extended 或 Host-Initiated Refresh 必須以 Device Self-test in Progress 中止;vendor-specific 新命令的行為仍是 vendor specific。STC=Fh 則依序中止目前 operation、建立最新 result、清除 current status,最後成功完成 command。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, 文件頁 200, PDF 頁 226
01.10.Device Self-test command 的 Admin CQE 只證明『啟動/中止動作已被處理』,不是背景測試已完成。command-specific status 1Dh 表示已有 operation in progress;software 必須把 CQE 與後續 LID 06h 分開記錄。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, 文件頁 201, PDF 頁 227
| 測試對象或控制值 | 涵蓋的範圍或動作 | 執行與結果的規則 |
|---|---|---|
| NSID=0 | 只包含 controller | 不測 namespace media |
| 目前可存取的 NSID | 指定 namespace | invalid 與 inactive status 不同 |
| NSID=FFFFFFFFh | 所有 attached/accessible namespaces | 集合以 start 時點為準 |
| STC=Fh | abort current operation | 成功不代表曾有 operation |
02.01.LID 06h 前面的 DSTOS、DSTCS 描述目前作業及完成百分比;後面的結果項目保存已結束作業。假設目前進度是 50%,第一筆歷史紀錄仍可能是上一次測試結果,不能拿來宣告這次測試已成功或失敗。
02.02.在同一筆結果內,DSTC 說明測試種類,DSTR 說明結束結果,SEGN 在適用時指出發生失敗的測試區段。把種類、結果及區段放在一起,才知道後面的失敗資訊是在描述哪一次作業。
02.03.VDINFO 的有效性旗標決定 NSID、FLBA 及狀態碼能否使用。例如 FLBA 的記憶體內容即使是 123,只要 FLBA Valid 沒有成立,123 就不能用來指出故障位置。有效旗標成立後,才以 namespace 的格式解釋這個 LBA。
02.04.NVM Command Set 說明 FLBA 可以指出造成測試失敗的一個 logical block;遇到多個失敗區塊時,這個欄位只提供其中一個。它不是完整清單,也不能擅自推論一定是所有失敗區塊中編號最小的那個。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, 文件頁 213-216, PDF 頁 239-242
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.7, 文件頁 229-230, PDF 頁 255-256
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.7, 文件頁 231, PDF 頁 257
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.7, 文件頁 231-232, PDF 頁 257-258
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.3, 文件頁 76, PDF 頁 76
02.06.讀取 LID 06h 所需的最小 Get Log Page slice 是:LID=06h、LSP=0、RAE 依事件策略選擇、NUMD 表示 564 bytes、LPOL/LPOU=0、OT=0、CSI=0、UIDX=0。564 bytes=141 dwords,因此 0's-based NUMD=140=008Ch;RAE=0 時 CDW10=008C0006h。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, 文件頁 213-216, PDF 頁 239-242
02.07.LID 06h 的 byte 0 以 DSTOS 表示目前 operation,byte 1 的 DSTCS[6:0] 是完成百分比;DSTOS=0 時 host 應忽略 DSTCS。controller 在 operation 完成或被中止時,必須先建立 result entry,之後才能把 in-progress status 清為 0。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.7, 文件頁 229-230, PDF 頁 255-256
02.08.LID 06h 保留 20 筆、每筆 28 bytes 的結果,RDS1 永遠是最新完成或中止的 operation。未使用 entry 必須讓 DSTR=Fh 且 DSTC=0h,其他欄位由 host 忽略;不能把全零以外的殘值當成歷史結果。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.7, 文件頁 229-230, PDF 頁 255-256
02.09.每筆 DSTS 的高 nibble DSTC 表示原始 self-test code,低 nibble DSTR 表示完成/中止原因。只有 DSTR=7h 時 SEGN 才指出第一個失敗 segment;其他 DSTR 下 SEGN 應忽略。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.7, 文件頁 231, PDF 頁 257
02.10.VDINFO 的 NSIDVLD、FVLD、SCTVLD、SCVLD 是四個獨立 有效性判斷。NSID、FLBA、STCT、STC 只有在對應 bit=1 時才可解讀;先驗證 validity,再讀數值,不能用非零值猜測有效。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.7, 文件頁 231-232, PDF 頁 257-258
02.11.Base 將 Figure 219 的 FLBA 留給 I/O Command Set 定義。NVM Command Set 1.3 規定 bytes 23:16 是造成失敗的 logical block address;若有多個失敗 logical blocks,只回其中一個,且僅 FVLD=1 時有效。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.3, 文件頁 76, PDF 頁 76
| 進度或歷史欄位 | 描述什麼資訊 | 何時可以使用這個欄位 |
|---|---|---|
| DSTOS/DSTCS | current state/progress | DSTOS=0 時忽略 percentage |
| DSTR=7h + SEGN | 已知第一個 failed segment | 其他 DSTR 忽略 SEGN |
| FVLD + FLBA | 其中一個 failing LBA | 不是所有失敗 LBA 清單 |
| POH + STCT/STC | failure context | 仍需 validity bits |
03.01.以下依概念整理規格中的圖表。每組先說明讀取順序與要判斷的問題,接著列出各圖的欄位或行為說明。可以由正文的連結跳到對應組別,也可以用這一節檢查自己能否把欄位連回完整操作。
03.02.命令格式先讀 NSID 與 STC,再沿狀態流程找到 LID 06h。結果布局先拆開測試種類與結果碼,再依 SEGN、FVLD 等有效性條件決定要讀哪些細節。
回到本節的解釋與範例03.03.先用 DSTO.SDSO 決定「已有測試」是看收到命令的控制器,還是看整個 subsystem,再以 STC 選互動表的一列。NSID 與 DSTP 則分別決定對象及適用參數。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| STC bits 3:0/DSTP | STC=1h、2h、3h 分別是 short、extended、Host-Initiated Refresh;Eh 是廠商測試;Fh 是中止。DSTP 只有 Eh 使用廠商定義,其餘為保留。 | 要求 short test 時,不能在 DSTP 填一個自訂「測試次數」;此處並沒有這個標準用途。 |
| 已有作業 + STC=1h/2h/3h | 新命令以 Device Self-test in Progress 結束,不會因新命令而排入下一個標準測試。 | Extended 正在執行,再送 short:第二筆要求被拒絕,不能把它的 status 當成第一筆測試已發現故障。 |
| 已有作業 + STC=Fh | 依序中止作業、建立最新結果紀錄、更新目前狀態,再成功完成中止命令。 | 中止命令成功後,應到歷史結果找被中止作業的紀錄,不能把成功 CQE 解釋成測試通過。 |
| 沒有作業 + STC=1h/2h/3h 或 Fh | 啟動要求先驗證參數並建立目前作業;Fh 則成功完成而不修改 log。Eh 的處理由廠商定義。 | 沒有測試時送 Abort,不會憑空新增一筆測試失敗紀錄。 |
| NSID=0h/單一 NSID/FFFFFFFFh | 0h 只含控制器,單一值選指定 namespace,FFFFFFFFh 選作業開始時經該控制器可存取的所有已附加 namespaces。Refresh 忽略 NSID。 | 識別碼 invalid 回 Invalid Namespace or Format;inactive 回 Invalid Field in Command。兩者要按 Base 的有效性及附加關係區分。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, Figure 176, 文件頁 199, PDF 頁 225
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, Figure 177, 文件頁 199, PDF 頁 225
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, Figure 178, 文件頁 200, PDF 頁 226
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, Figure 179, 文件頁 200, PDF 頁 226
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, Figure 180, 文件頁 201, PDF 頁 227
Base176-1Self-test 的 NSID 選擇測試對象,invalid 與 inactive 分別表示不同問題。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, Figure 176, 文件頁 199, PDF 頁 225
Base176-2假設 NN=8,NSID 9 無效;NSID 3 若尚未配置或未附加到此控制器,則為 inactive。0h 在此命令特別表示只測控制器,Host-Initiated Refresh 忽略 NSID。
Base177-1STC 選擇短測試、延伸測試、Refresh、廠商測試或中止。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, Figure 177, 文件頁 199, PDF 頁 225
Base177-2想執行短測試填 1h,想中止正在執行的測試填 Fh;這個選擇器不是測試目前完成百分比。
Base178-1DSTP 只在廠商自訂 Self-test 情境提供參數。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, Figure 178, 文件頁 200, PDF 頁 226
Base178-2STC=Eh 時依廠商定義解釋 DSTP;短測試時不能把 DSTP 當成主機指定的測試秒數。
Base179-1Self-test 命令處理取決於是否已有測試在執行。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, Figure 179, 文件頁 200, PDF 頁 226
Base179-2沒有測試時送 Abort 可以成功但不新增測試結果;有測試時送 Abort 則會中止並記錄結果,兩種成功有不同效果。
Base180-1Device Self-test in Progress 表示已有測試,新的要求未能開始。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, Figure 180, 文件頁 201, PDF 頁 227
Base180-2收到此狀態後,先讀目前測試資訊;它不是新測試的通過結果,也不是說裝置的資料一定壞掉。
03.04.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 選命令,再查專屬欄位表。
03.05.這份 Identify Controller 結構很長,本篇需要的是測試支援、同時執行限制與延伸測試時間;其他功能欄位不參與這次判讀。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| OACS.DSTS | Device Self-test 支援位元決定能否使用命令。 | DSTS=0 時,不能因 LID 06h 有固定編號就假定能啟動測試。 |
| DSTO.SDSO | 指出 subsystem 的單一 Device Self-test 作業限制。 | 兩個控制器都支援命令,不等於可各自同時啟動一個作業;仍需確認共享的作業限制。 |
| EDSTT | 延伸測試完成時間以分鐘表示,供安排測試使用。 | EDSTT=10 表示時間資訊是 10 分鐘;它不是目前完成百分比,也不能當作第 10 分鐘必定通過的保證。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, Figure 338, 文件頁 340-364, PDF 頁 366-390
Base338-1Identify Controller 先告知能力與限制,主機再決定可使用的操作。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, Figure 338, 文件頁 340-364, PDF 頁 366-390
Base338-2規格列出某選用命令時,先查相應支援欄位再發出要求;「命令有定義」與「這台控制器支援」是不同證據。
03.06.先分開 log 的 current header 與歷史結果描述子。DSTS 中測試種類和結果碼分開讀,再以結果種類及有效位決定 SEGN、FLBA 等欄位是否有效;NUMD 計算則使用整個所需傳輸長度。
回到本節的解釋與範例03.07.NVM Figure 111 補上 Base 結果紀錄中 FLBA 的命令集語意。它不另外建立一份測試結果,必須回到同一筆 Base Figure 219 紀錄內判讀。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| VDINFO 的 FLBA Valid → FLBA bytes 23:16 | 有效旗標成立時,FLBA 才表示造成失敗的一個 logical block。 | FLBA=123、有效旗標=0:不能採用 123。有效旗標=1:才可將它作為其中一個失敗位置。 |
| NSID/LBA format/FLBA | NSID 確定儲存對象,格式決定該 LBA 代表多少資料;多個失敗區塊可能只回報其中之一。 | 每個 block 4096 bytes 時,LBA 123 的資料起點是 503808 bytes。這是 logical address 的換算,不是 NAND 實體頁地址。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.3, Figure 111, 文件頁 76, PDF 頁 76
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 壞掉。
03.08.先由 log header 讀目前作業,再選一筆結果紀錄。紀錄內先看測試種類與結果,再按有效性旗標讀失敗欄位。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| DSTOS/DSTCS;RDS1–RDS20 | 前者是目前作業與進度,後者是結果紀錄序列。 | 目前進度 50% 與最前面的歷史成功結果可以同時存在,兩者未必屬於同一作業。 |
| DSTC/DSTR/SEGN/POH | 分別描述測試種類、結果、適用的失敗區段與作業時間背景。 | 先確認作業如何結束,再決定 SEGN 能否用於解釋失敗位置。 |
| VDINFO → NSID/FLBA/STCT/STC | 有效性旗標決定哪些資訊可信;STCT 與狀態碼需成對解讀。 | FLBA Valid=0 時,FLBA 的非零內容不能用來指出故障 LBA。 |
| VS | 廠商專屬結果需依廠商格式解讀,不沿用其他裝置的定義。 | 未知 VS bytes 保留原值及來源,不能任意翻成錯誤類別。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.7, Figure 218, 文件頁 230, PDF 頁 256
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.7, Figure 219, 文件頁 231-232, PDF 頁 257-258
Base218-1Self-test log 同時保存目前作業狀態與歷史結果。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.7, Figure 218, 文件頁 230, PDF 頁 256
Base218-2目前進度 50% 表示正在執行的測試;最前面的歷史結果可能屬於前一次已結束測試,兩者不要混成同一次結果。
Base219-1Self-test Result 的有效標記決定哪些失敗欄位可以解讀。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.7, Figure 219, 文件頁 231-232, PDF 頁 257-258
Base219-2先看 VDINFO,再決定 NSID、FLBA 或狀態欄位是否有效;欄位有非零內容不代表它在這次結果中有效。
03.09.Figure 700 是測試切分的說明性範例;Figure 701 則是 Format 對測試的中止條件表。前者不要求所有廠商使用相同區段,後者要依 SES 選擇 FNS 或 SENS 分支。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| segment/test performed/failure criteria/SEGN | 區段、測試內容與失敗判準描述一次內部檢查;結果紀錄的 SEGN 在有效時指向失敗區段。 | SEGN=2 不足以直接推論某顆 NAND die 壞掉,仍需廠商對區段的定義。 |
| SES=000b → FNS;SES=001b/010b → SENS | 沒有 secure erase 時看 FNS,有 secure erase 時看 SENS;相應位元為 1 時,表中要求中止,不再以兩筆 NSID 的相同與否作限制。 | 不要同時把 FNS 與 SENS 都當成必要條件,應先由 SES 選對那一欄。 |
| 單一 Format NSID/單一測試 NSID | 相應範圍位元為 0 時,兩個 NSID 相同才落入表中的必須中止條件。 | Format NSID=7、測試 NSID=7,與 Format NSID=8、測試 NSID=7 的判斷不同。 |
| FFFFFFFFh/Optional | Format 全部 namespace 時中止;單一 Format 對上涵蓋所有 namespace 的測試時,表中部分列是 Optional。 | Optional 表示允許中止但不要求中止,不能改寫成一定中止或一定繼續。 |
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.8, Figure 700, 文件頁 615, PDF 頁 641
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.8.1-8.1.8.2, Figure 701, 文件頁 616, PDF 頁 642
Base700-1Self-test 範例示意分段測試與失敗判斷的關係。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.8, Figure 700, 文件頁 615, PDF 頁 641
Base700-2沿某一 segment 看測試內容與失敗條件,再看結果如何記錄;此圖是說明性例子,不要求每家控制器都用相同內部測試順序。
Base701-1Format NVM 是否中止 Self-test 取決於作用範圍與格式化條件。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.8.1-8.1.8.2, Figure 701, 文件頁 616, PDF 頁 642
Base701-2格式化另一個不在測試範圍內的 namespace,不能只憑「有 Format 命令」就推論測試必須中止;按 NSID、SES 等條件交叉查表。
03.10.讀 log 先選 LID 與命令集,再解讀該 log 的 LSP/LSI;NUMD 決定本次量,LPO 決定本次起點,DPTR 決定主機接收位置。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| LID/CSI/LSP/LSI | LID 與 CSI 選紀錄種類,LSP、LSI 的含義由所選 log 定義。 | LSP 在 Boot 中可含 BPID,在 Telemetry 中有建立 capture 的控制位元,不能跨 log 照搬。 |
| NUMDU/NUMDL | 先合成 NUMD=(NUMDU<<16)|NUMDL,再計算 (NUMD+1)×4 bytes。 | 512 bytes 對應 NUMD=127;高低部分不能各自加 1。 |
| LPOU/LPOL/OT | 高低欄位組成 64-bit offset;OT 決定按 byte 位移或項目索引解讀。 | byte-offset 模式下,從 512-byte 表頭後開始讀資料要保留起點差異;index 模式不能直接使用同一個 byte 數。 |
| DPTR/RAE | DPTR 給接收記憶體,RAE 控制相關事件的保留行為。 | 分段讀取先準備每段 buffer,再在恰當時機確認事件,避免中途改變可取得的紀錄。 |
| LSUPP/LID Specific Parameter | Supported Log Pages 回報實際支援及 log 專屬能力。 | 規格列有某個 LID,不代表此裝置一定實作;先查支援再使用進階選項。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 203, 文件頁 213, PDF 頁 239
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 204, 文件頁 213, PDF 頁 239
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 205, 文件頁 214, PDF 頁 240
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 206, 文件頁 214, PDF 頁 240
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 207, 文件頁 214, PDF 頁 240
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 208, 文件頁 214-215, PDF 頁 240-241
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 209, 文件頁 215-216, PDF 頁 241-242
Base203-1Get Log Page 的 DPTR 指向主機接收 log 資料的空間。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 203, 文件頁 213, PDF 頁 239
Base203-2同樣是 512-byte buffer,LID 不同會得到不同結構;DPTR 只提供位置,不會決定 log 類型。
Base204-1Get Log Page 的 CDW10 選擇 log、低位長度及相關控制參數。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 204, 文件頁 213, PDF 頁 239
Base204-2讀取 512 bytes 共 128 Dwords,長度原始值為 127;同時填正確 LID,才能知道回來的是哪一份紀錄。
Base205-1CDW11 提供長度高位與 log 特定識別資訊。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 205, 文件頁 214, PDF 頁 240
Base205-2NUMDU 非零時總長度需與 NUMDL 合併後再加 1;不能把兩個長度欄位各加 1 再相加。
Base206-1LPOL 是 log offset 的低 32 bits,單位還要看 offset 模式。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 206, 文件頁 214, PDF 頁 240
Base206-2byte-offset 模式下讀下一段 512 bytes,LPOL 設 512;index-offset 模式則以項目索引解釋,數字 512 不再表示相同位置。
Base207-1LPOU 補齊較大 log offset 的高 32 bits。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 207, 文件頁 214, PDF 頁 240
Base207-2完整 offset=00000001_00000000h 時,LPOU=1、LPOL=0;只讀 LPOL 會誤以為從開頭開始。
Base208-1CDW14 的 CSI、OT、UIDX 決定命令集、offset 模式與相關選擇。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 208, 文件頁 214-215, PDF 頁 240-241
Base208-2相同 LPOL=4,在 byte-offset 與 index-offset 下表示不同事物;先看 OT 才能正確解讀位置。
Base209-1LID 清單把紀錄編號與其命令集、範圍連在一起。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 209, 文件頁 215-216, PDF 頁 241-242
Base209-2先依本篇所需的紀錄選取清單中的對應列,再看 CSI 與作用範圍;編號只選紀錄種類,完整欄位排列仍到該 log 的結構表閱讀。
03.11.Device Self-test 是由 vendor-specific segments 組成的背景工作。若另一個 command 必須暫停測試才能處理,controller 必須(shall)依序 suspend self-test、處理並完成該 command、再 resume self-test;同時可處理哪些 command 則由 vendor 決定。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.8, 文件頁 614, PDF 頁 640
03.12.short operation 應(should)在兩分鐘內完成,且 Controller Level Reset 會中止;extended operation 應在 EDSTT 內完成,必須跨 Controller Level Reset 與 power restoration 持續並於之後 resume。兩者不能共用同一套 reset 預期。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.8.1-8.1.8.2, 文件頁 615-616, PDF 頁 641-642
03.13.short 與 extended 都會被適用的 Format NVM、sanitize start 或 STC=Fh 中止,namespace 從 inventory 移除時則可能(may)中止。Figure 701 顯示 Format 的 NSID 與 secure-erase 選項會改變是否必須中止,不能只看 opcode。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.8.1-8.1.8.2, 文件頁 615-616, PDF 頁 641-642
04.01.啟動 completion 不包含整個測試的最終結果。Device Self-test log 的 current operation 與 completion percentage 描述目前進度;結果紀錄則用於已結束的測試。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.6, 文件頁 201, PDF 頁 227
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.7, 文件頁 229-230, PDF 頁 255-256
04.02.要先檢查對應的 validity bit;未宣告有效時不能依數值推論。即使有效,也可能只描述多個失敗 logical blocks 中的一個,並非完整範圍。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.7, 文件頁 231-232, PDF 頁 257-258
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.3, 文件頁 76, PDF 頁 76