NVMe Base 2.4:Device Self-test:執行、進度與結果

5 minute read

English

00.01.Device Self-test 讓控制器在背景執行內部測試。讀懂這項功能,必須分清「接受測試要求」、「正在測試」與「留下測試結果」三件事;主機收到命令成功完成,並不表示裝置已通過測試。

這篇的主軸

01

決定測試對象

01-01先確認支援能力,再選擇測試種類及要納入的 namespace;控制器接受要求後,才開始背景測試。

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

追蹤正在進行的作業

02-01用目前作業與完成百分比回答「是否還在測試、做到哪裡」;新的命令、重設或中止要求可能影響進行中的作業。

03

判讀留下的結果

03-01測試停止後,再看結果紀錄。先確認哪些欄位有效,才能解釋失敗位置與相關資訊。

把主軸連起來

00.02.先確認控制器支援哪些測試,再選擇測試種類與 namespace,送出命令後觀察目前作業及進度,最後閱讀歷史結果與有效性標記。相同的 Get Log Page 可以在不同時間回答「做到哪裡」和「最後結果如何」,但兩者使用不同欄位。

01 Device Self-test 的啟動與執行

01.01.Self-test 不是同步 diagnostic RPC。Host 先用 OACS.DSTS、DSTO.SDSO 與 EDSTT 決定支援、concurrency scope 與時間預期,再用 NSID 與 STC 建構 command。Admin CQE 回來時,背景 operation 才剛進入可由 LID 06h 觀察的生命週期。

OACS.DSTS
Optional Admin Command Support 的 Device Self-test Supported bit,判斷 command 是否可用。
LID 06h
Device Self-test Log Page 的 identifier 06h;同時包含 current operation 與 20 筆歷史結果。
Admin
Administrative,建立、設定、查詢或管理 controller 與 queue 的控制路徑。
EDSTT
Extended Device Self-test Time,在 power state 0 下的 extended test 名目完成分鐘數。
DSTO
Device Self-test Options,Identify Controller 中回報 refresh 與 concurrency 選項的欄位。
Host
主機;執行作業系統並送出 NVMe 命令的一端。
NSID
Namespace Identifier,controller 用來指向 namespace 的數值 handle;identifier 不等於 namespace 物件本身。
SDSO
Single Device Self-test Operation,選擇 subsystem-wide 單一 operation 或 per-controller operation 的 bit。
CQE
Completion Queue Entry,CQ 中的一筆完成結果資料結構。
LID
Log Page Identifier;指定要讀取哪一種 log page 的編號。
STC
Self-test Code 是 Device Self-test CDW10 的動作 nibble;result entry 的 STC 則是 Status Code,須依 SCVLD 判斷有效。

01.02.啟動 Device Self-test 前,先讀 Identify Controller:OACS.DSTS 判斷 command 是否支援;EDSTT 是 extended operation 在 power state 0 的名目分鐘數;DSTO.SDSO 決定同時只能有一個 subsystem-wide operation,或每個 controller 各一個。這三個欄位回答不同問題。

controller
controller,實作 NVMe 介面、取走 command 並回報 completion 的控制實體。
來源:Base 2.4 §5.2.14.2.1, 8.1.8

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, 8.1.8, 文件頁 352-358, 614, PDF 頁 378-384, 640

Device Self-test 的啟動與執行
測試對象或控制值涵蓋的範圍或動作執行與結果的規則
NSID=0只包含 controller不測 namespace media
目前可存取的 NSID指定 namespaceinvalid 與 inactive status 不同
NSID=FFFFFFFFh所有 attached/accessible namespaces集合以 start 時點為準
STC=Fhabort current operation成功不代表曾有 operation

02 LID 06h 的目前進度與歷史結果

02.01.log header 的 DSTOS/DSTCS 回答『現在跑到哪裡』;RDS1~RDS20 回答『之前怎麼結束』。result entry 又分成 operation code、result reason、segment、validity bitmap 與 diagnostic payload。NVM Command Set 只在 FVLD=1 時賦予 FLBA 明確的 LBA 語意。

DSTCS
Device Self-test Completion Status,LID 06h 中的 0 到 100 完成百分比。
DSTOS
Device Self-test Operation Status,LID 06h 中表示目前 operation 類型的 nibble。
FLBA
Failing LBA,NVM Command Set 定義為造成 self-test failure 的其中一個 logical block address。
FVLD
Failing LBA Valid,決定 FLBA 欄位是否可解讀的 validity bit。
NVM
Non-Volatile Memory,斷電後仍能保存資料的記憶體。

02.02.讀取 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。

0's-based
0's-based encoding,以 0 表示實際數量 1;依欄位換算公式通常是欄位值加 1。
LPOL
Log Page Offset Lower,Get Log Page byte offset 的低 32 bits。
LPOU
Log Page Offset Upper,Get Log Page byte offset 的高 32 bits。
NUMD
Number of Dwords,0's-based transfer dword count;實際 bytes = (NUMD + 1) × 4。
UIDX
UUID Index,指向 UUID List 位置的 index;0 表示未指定 UUID。
CSI
I/O Command Set Identifier;選擇 I/O 命令集,NVM Command Set 使用 00h。
LSP
Log Specific Field,意義由所選 log page 定義的 command selector。
RAE
Retain Asynchronous Event,Get Log Page 是否保留相關 asynchronous event 的 selector。
來源:Base 2.4 §5.2.13

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, 文件頁 213-216, PDF 頁 239-242

LID 06h 的目前進度與歷史結果
進度或歷史欄位描述什麼資訊何時可以使用這個欄位
DSTOS/DSTCScurrent state/progressDSTOS=0 時忽略 percentage
DSTR=7h + SEGN已知第一個 failed segment其他 DSTR 忽略 SEGN
FVLD + FLBA其中一個 failing LBA不是所有失敗 LBA 清單
POH + STCT/STCfailure context仍需 validity bits
DSTR
Device Self-test Result,結果 entry 中表示成功、abort 或 segment failure 的 nibble。
SEGN
Segment Number,只有 DSTR=7h 時指出第一個失敗 diagnostic segment。
POH
Power On Hours,self-test result 建立時累積的 power-on hours,不含指定 low-power 時間。

接著打開 Spec 看什麼

03.01.以下按概念列出閱讀位置。報告時先用上面的流程說明問題,再打開對應章節看欄位與完整條件。中文教學 HTML 另有本篇全部圖表的逐圖重點、案例與細節。

要說明的觀念Spec 閱讀位置
Device Self-test 的啟動與執行Base 2.4 §5.2.14.2.1, 8.1.8 · Base 2.4 §5.2.6
LID 06h 的目前進度與歷史結果Base 2.4 §5.2.13 · Base 2.4 §5.2.13.1.7 · NVM 1.3 §4.1.4.3
開啟完整中文教學與逐圖解釋 →

學完後想一想

1. Device Self-test 啟動命令成功後,如何知道測試是否還在執行?

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

2. Self-test result 中 FLBA 看起來是合理地址,就一定可以當作失敗位置嗎?

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

採用的規格版本

NVM Express Base Specification, Revision 2.4

NVM Express NVM Command Set Specification, Revision 1.3

Jia-Chang

Jia-Chang

Human

Comments

  Write a comment ...