NVMe Endurance Group:健康資訊、事件清單與通知設定

9 minute read

English

00.01.同一個儲存裝置裡,不同儲存群組的耐用度與健康狀態可能不同。Endurance Group Information 讓主機查一組的警告、讀寫量與容量;Event Aggregate 則把需要注意的群組列出來。本篇把 FID 18h 的逐組設定接到這兩份 log,說明主機如何從一則通知走到具體資料,又如何確認事件而不誤以為問題已經修復。

Endurance Group
耐用度群組;一起管理儲存耐用度的一組容量,可分給零個或多個 NVM Set。
FID
Feature Identifier;Get/Set Features 用來選擇查詢或設定功能的代碼。

這篇的主軸

01

觀察對象與健康狀態

01-01先分清 Group、Set、namespace 的歸屬,再讀警告與壽命估計;避免把一組的資訊當作整台裝置的結論。

namespace
主機可用 NSID 指定的邏輯儲存空間。
02

數值的單位與限制

02-01資料量、命令次數、容量各有自己的單位。用實際數字看懂向上取整與「0 表示未回報」,才不會算出不存在的精確值。

03

設定如何變成待處理清單

03-01逐組選擇警告,再理解清單如何排序、如何編碼長度;識別值、項目序號與 byte 位置各不相同。

04

通知與確認的先後關係

04-01從 AER 完成結果找到清單,再找到單組資料;比較清除通知、移除項目與警告解除,掌握持續警告的處理方式。

AER
Asynchronous Event Request;主機先送出並等待控制器用完成結果回報事件的命令。

00.02.預備知識:OS、Computer Organization 與基本 SSD 概念。Group 7/9、警告值與流量數字皆是說明性範例,並非任何特定裝置的量測結果。

00.03.先學會看懂資料,再走完整的通知流程;必要的 Get Log Page、Get/Set Features 與 AER 欄位會在本文就近說明。

把主軸連起來

00.04.用同一個問題串起全篇:Group 7 的可用備用容量降到 8%,門檻為 10%,而且可靠度下降。主機要能說出:哪些 bit 描述狀態、哪些 bit 選擇通知、清單如何找到 7,以及哪次讀取才算確認這一組的事件。

00.05.健康資料提供現在的狀態與累積統計;事件機制協助主機及時查看。前者不能完整重建通知當時的狀態,後者也不會因為主機已確認事件就修復媒體。

01 先確認正在觀察哪一組儲存空間

一個設定,兩種查詢:從條件走到資料沿箭頭讀:符合已啟用的警告,Group 識別值才列入清單;主機取出 ID,再查該組健康資料。通知主機還有 FID0Bh 與 AER 的條件,後文再接上。來源:Base §§5.2.13.1.10、5.2.13.1.15、5.2.30.1.17。FID18h · ENDGID7 · mask05h選擇備用容量與可靠度警告LID0Fh · [7]清單只指出要查看哪一組LID09h · LSI=7 · 512 bytes讀警告、壽命估計、流量與容量
沿箭頭讀:符合已啟用的警告,Group 識別值才列入清單;主機取出 ID,再查該組健康資料。通知主機還有 FID0Bh 與 AER 的條件,後文再接上。來源:Base §§5.2.13.1.10、5.2.13.1.15、5.2.30.1.17。
LSI
Log Specific Identifier;依 log 種類指定對象,LID09h 用它指定 ENDGID。

01.01.LID 09h 提供指定 Endurance Group 的 512-byte 資料;LID 0Fh 彙整有待處理事件的 Group 識別值;FID 18h 則逐組選擇要回報的警告。三者分別回答「現在如何」、「哪些組需要查看」與「哪些情況需要列入清單」。

LID
Log Page Identifier;Get Log Page 用來選擇回覆資料種類的代碼。
來源:Base 2.4 §5.2.13.1.10, 5.2.13.1.15, 5.2.30.1.17

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.10, 5.2.13.1.15, 5.2.30.1.17, 文件頁 237-239,270,478, PDF 頁 263-265,296,504

02 讀懂當下警告,不把估計壽命當作故障宣判

EGCW=05h 時,哪些結論有依據?
觀察項目本例判讀不能代替的判斷
bit0=1;AVSP8 < AVSPT10備用容量低於門檻壽命只剩8%
bit2=1Group 可靠度下降所有其他 Group 都相同
bit3=0此欄未回報整組唯讀警告所有 namespace 都一定可以寫
PUSED=103已超過估計耐用度的100%媒體已故障,或剩餘容量為負
狀態 bit 與百分比要一起看,但各自回答不同問題。bit3=0 並未排除 namespace 自己的寫入保護設定。來源:Base Figure 225。
PUSED
Percentage Used;Group 已使用壽命的廠商估計百分比。
EGCW
Endurance Group Critical Warning(s);在 log 中是警告狀態,在 FID18h 中是選擇哪些警告觸發事件的遮罩。

02.01.LID 09h 的 EGCW 是處理 Get Log Page 當時的警告狀態,可能已不同於通知發生時。bit 0 表示備用容量低於門檻,bit 2 表示可靠度下降,bit 3 表示整組 namespace 因非寫入保護設定的原因進入唯讀;bit 1 與 bits 7:4 保留。PUSED=100 表示估計耐用度已用完,並不直接表示媒體故障。

來源:Base 2.4 §5.2.13.1.10

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.10, 文件頁 238, PDF 頁 264

03 把累積量、命令次數與容量分開換算

同樣是數字 3,單位決定它的意思
欄位數值3代表什麼若是0
DUR/DUW/MUW2,000,000,001~3,000,000,000 bytes未回報這項數值
HRC/HWC3 筆已完成的對應類別命令計數為0
TEGCAP/UEGCAP3 bytes(僅示範單位)未回報容量
NUMENT(LID0Fh)清單有3筆清單沒有項目
TEGCAP=3 只用來比較單位,不暗示裝置真的採3-byte容量。資料量是十億 bytes 向上取整;容量和命令次數沒有這個倍率。來源:Base Figures 225/261。
NUMENT
Number of Entries;清單實際項目數,直接計數。
TEGCAP
Total Endurance Group Capacity;Group 的總 NVM 容量。
UEGCAP
Unallocated Endurance Group Capacity;Group 尚未配置給 Set 的容量。
DUR
Data Units Read;Group 累積讀取量,不含控制器內部讀取。
DUW
Data Units Written;Group 累積寫入量,不含控制器內部寫入。
HRC
Host Read Commands;按所用 I/O Command Set 分類的已完成讀取類命令筆數。
HWC
Host Write Commands;已完成的 User Data Out 類命令筆數。
MUW
Media Units Written;包含主機與控制器內部寫入的 Group 累積量。

03.01.LID 09h 的 EE、DUR、DUW、MUW 以 1,000,000,000 bytes 為單位並向上取整,0 表示不回報該值。DUR/DUW 不包含控制器內部作業的讀寫,MUW 包含主機與控制器的寫入。HRC/HWC 是已完成命令數;TEGCAP/UEGCAP 是以 bytes 表示的容量,0 同樣表示不回報,不能當作測得的零容量。

EE
Endurance Estimate;假設寫入放大為 1 時,Group 全生命週期可寫入量的估計。
來源:Base 2.4 §5.2.13.1.10

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.10, 文件頁 238-239, PDF 頁 264-265

04 選擇哪些警告要列入事件清單

先選每組的警告,再開控制器通知兩個設定的範圍不同。上層決定是否新增 Group 項目,下層決定是否把新增動作通知主機;底下的 AER 才承接通知結果。來源:Base Figures 493/474、§5.2.2。FID18h · Group7CDW11 = 00050007h;警告 bit0 + bit2已啟用的警告成立 → 0Fh 新增 Group7FID0Bh · controllerEGEALCN bit14=1;允許通知AER → CQE DW0 = 000F0602h通知含 log 與事件類型;Group ID 在清單裡
兩個設定的範圍不同。上層決定是否新增 Group 項目,下層決定是否把新增動作通知主機;底下的 AER 才承接通知結果。來源:Base Figures 493/474、§5.2.2。
controller
controller,實作 NVMe 介面、取走 command 並回報 completion 的控制實體。
EGEALCN
Endurance Group Event Aggregate Log Change Notices;FID0Bh 中啟用清單變更通知的位元。
CDW11
Command Dword 11;命令中的第 11 個 dword 欄位,其內容依命令而定。
CDW
CDW(Command Dword);命令中的 32-bit 欄位單位,例如 CDW10 的 10 是欄位 index,不是 byte offset。
CQE
Completion Queue Entry;控制器寫入完成佇列的一筆命令結果。
DW0
Dword 0;此處指完成項目的第 0 個 dword,內容要配合命令種類與 SEL 解讀。

04.01.FID 18h 的 CDW11 低 16 bits 指定 ENDGID,bits 23:16 是 EGCW 通知選擇遮罩,逐 bit 對應 LID 09h 的警告。啟用時若條件已成立,也會產生事件。設定保留警告 bit 或指定不存在的 Group,必須以 Invalid Field in Command 中止;ENDGID=0 不表示全體 Group,這時 EGCW 不使用。

來源:Base 2.4 §5.2.30.1.17

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.17, 文件頁 478, PDF 頁 504

05 從清單找到 Group,而不是從序號猜 Group

把 16-byte 回覆拆開,只有3筆ID
byte位置資料內容讀者應取得的值
0~703 00 00 00 00 00 00 00NUMENT=3
8~901 00Entry1:ENDGID1
10~1102 00Entry2:ENDGID2
12~1307 00Entry3:ENDGID7
14~1500 00尾端補零;不是Entry4
說明性範例:14 bytes 有效內容,4個dword傳輸,NUMD=3。Group7 所在 offset12 是位置,不是識別值。來源:Base Figures 261/204。
Dword
Dword(Double word);32 bits,也就是 4 bytes。對比 word=16 bits;例如 zero-based dword count=3 代表 4 個 Dwords,也就是 16 bytes。
NUMD
Number of Dwords;此處為 NUMDU 與 NUMDL 合併的數值,Get Log Page 採傳輸 dword 數減 1。

05.01.LID 0Fh 是依 ENDGID 遞增排列的待處理清單,不是事件時間序列。前 8 bytes 是 NUMENT,之後每筆 2 bytes。NUMENT 直接表示筆數;最大筆數受 ENDGIDMAX 限制。超過這份 log 結尾的傳輸資料必須補零;只有 NUMENT 指定的項目才是有效清單內容。

ENDGIDMAX
Endurance Group Identifier Maximum;合法 ENDGID 的最大值,不是目前 Group 數量。
來源:Base 2.4 §5.2.13.1.15

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.15, 文件頁 270, PDF 頁 296

06 走完通知、讀取與確認的完整流程

逐組確認與清單通知確認,改變的狀態不同先假設過程中沒有新事件,並已處理持續警告的再次通知政策。每個框同時列出動作與結果;RAE1只查看,RAE0成功才確認。來源:Base §§5.2.2、5.2.13.1.15、3.2.3。AER notice → read 0Fh, RAE1取得 [7];保留通知與清單項目read 09h / Group7, RAE1取得當下健康資料;項目仍在read 09h / Group7, RAE0 → success確認 Group7 事件;移除 [7]read 0Fh, RAE0 → success確認清單變更通知;查看最新清單
先假設過程中沒有新事件,並已處理持續警告的再次通知政策。每個框同時列出動作與結果;RAE1只查看,RAE0成功才確認。來源:Base §§5.2.2、5.2.13.1.15、3.2.3。

06.01.成功讀取某 Group 的 LID 09h 且 RAE=0,會清除該 Group 的待處理事件並移除它在 LID 0Fh 的項目。RAE=1 保留事件,讀取失敗也必須保留。讀取 LID 0Fh 且 RAE=0 則清除清單變更通知,不能代替逐組的 LID09h 確認;確認事件不代表造成警告的狀態已消失。

RAE
Retain Asynchronous Event;Get Log Page 的事件保留控制,1 保留、0 在成功完成後確認對應事件。
來源:Base 2.4 §5.2.13.1.15, 3.2.3, 5.2.13, 5.2.2

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.15, 3.2.3, 5.2.13, 5.2.2, 文件頁 84,183-187,213,270, PDF 頁 110,209-213,239,296

開著 Spec 的順向報告路徑

R-1先用本文的全貌與案例說明機制,再按下列 Base PDF 檢視器頁碼往後讀。共用頁從指定標題開始,在停止標題前結束;必要背景已在中文教學說明,不必為每個引用往返翻頁。

頁碼順序章節起點重點與停止位置
R1 · Base PDF 108–110§3.2.3從 Endurance Groups 標題開始,用 Figure 69 說明分組,再講三個操作的關係;不回翻 NVM Set 細節。 在 §3.2.4 前停止。
R2 · Base PDF 209–213§5.2.2只補 AER、RAE 與 Figure 151 的三個通知欄位;Figure 155 只讀 06h 這列,到該列說明結束即停止。 在 §5.2.3 前停止。
R3 · Base PDF 235–241§5.2.12只補 Get Features 的 SEL、能力回覆,再接 Get Log Page 的 LID、LSI、RAE、NUMD 與 offset;Figure 209 只讀 09h/0Fh。 在 §5.2.13.1 前停止。
R4 · Base PDF 263–265§5.2.13.1.10從本節標題開始完整講 Figures 224/225:指定 Group、警告 bit、壽命估計、流量與容量。用 DUW=3 的區間算例。 在 §5.2.13.1.11 前停止。
R5 · Base PDF 296§5.2.13.1.15只讀本節及 Figure 261;用 [1,2,7] 算 14-byte 內容與 16-byte 傳輸,再分清逐組項目的移除。 在 §5.2.13.1.16 前停止。
R6 · Base PDF 369–398§5.2.14.2.1在 Figure 338 向後依序只找 PDF369 的 OAES bit14、372 的 CTRATT bit4、379 的 AERL、388 的 ENDGIDMAX、398 的 ONCS bit4;跳過其餘欄位,不逐頁朗讀。 在 §5.2.14.2.2 前停止。
R7 · Base PDF 483–485§5.2.30只讀 Figure 464 的 FID/SV、Figure 466 的 18h 與 0Bh 列及註腳2;保存能力與目前值不要混在一起。 在 §5.2.30.1.1 前停止。
R8 · Base PDF 492–493§5.2.30.1.6在 Figure 474 只讀 EGEALCN bit14 與支援限制,到該 bit 的敘述結束便停止。 在 §5.2.30.1.7 前停止。
R9 · Base PDF 504§5.2.30.1.17完整講 FID18h 與 Figure 493,以 00050007h 收束設定例子,再用已畫好的流程連回兩種確認,不向前翻頁。 在 §5.2.30.1.18 前停止。
NVM Set
在邏輯上分開的一組非揮發性儲存,可包含數個 namespace。
CTRATT
Controller Attributes;控制器能力與屬性的位元欄位。
offset
偏移量;相對起點的位置。byte offset 以 bytes 計距離,index offset 以項目計位置。
AERL
Asynchronous Event Request Limit;同時未完成的 AER 上限採數量減 1 編碼。
OAES
Optional Asynchronous Events Supported;回報控制器支援哪些選用非同步事件。
ONCS
Optional NVM Command Support;包含本篇需要的 Save/Select 支援位元。
NVM
Non-Volatile Memory,斷電後仍能保存資料的記憶體。
SEL
Select;Get Features 選擇目前值、預設值、保存值或支援能力。
SV
Save;Set Features 要求保存屬性的控制位元,需確認支援與可保存能力。
開啟完整中文教學與逐圖解釋 →

學完後想一想

1. DUW=3、MUW=5,能否精確算出主機寫了 3 GB、寫入放大率為 5/3?

08.01.不能。兩欄均以十億 bytes 向上取整,DUW=3 代表大於二十億且不超過三十億 bytes。MUW 也只有區間資訊,因此比值只能作粗略觀察。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.10, 文件頁 238-239, PDF 頁 264-265

2. 把 Group 7 的 FID18h mask 從 05h 改成 01h,LID09h 的可靠度警告會自動消失嗎?

08.02.不會。改的是可靠度警告是否觸發新增清單項目;實際狀態由控制器回報。若重新啟用時狀態仍成立,事件可再次回報。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.17, 文件頁 478, PDF 頁 504

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.10, 文件頁 238, PDF 頁 264

3. 清單 [1,2,7] 的 index 2 位於 offset 12,查 LID09h 要用哪個 ENDGID?

08.03.用 7。2 是從 0 起算的項目位置,12 是 byte 距離,7 才是讀出的識別值;此 ID 放進 Get Log Page 的 LSI。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.15, 文件頁 270, PDF 頁 296

4. 成功讀取 LID0Fh、RAE=0 後,為何 Group 7 仍在清單?

08.04.這次清除的是清單變更通知。要確認 Group 7 的事件並移除它的項目,須成功讀取 LID09h、ENDGID7、RAE=0;若警告持續,也要考慮再次回報。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.15, 3.2.3, 5.2.13, 5.2.2, 文件頁 84,183-187,213,270, PDF 頁 110,209-213,239,296

5. 收到事件卻讀到 EGCW=0,或看到 PUSED=103,分別可以下什麼結論?

08.05.EGCW=0 只說讀取當時沒有該欄位的警告,不能還原通知當時的狀態;103 表示已超過估計壽命的 100%,不直接表示媒體故障或唯讀。兩者都要按欄位本身的時間與定義解讀。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.10, 文件頁 238, PDF 頁 264

採用的規格版本

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 ...