NVMe Read Recovery Level:讀取復原、作用範圍與設定

9 minute read

English

00.01.讀取遇到難以復原的資料時,控制器應該再多試一些,還是少做一些復原、讓主機早點取得結果?Read Recovery Level 提供這項取捨。本文從等級與影響範圍開始,再把支援位元、設定命令、讀回格式和重設後的行為接起來,讓每個欄位都對應到一個具體問題。

這篇的主軸

01

先理解取捨

01-01等級調整的是讀取錯誤復原的程度。比較最多、預設與最少復原,並分清策略、實際延遲與成功結果。

02

找到共用設定的對象

02-01先看是否有儲存集合,再找哪些 namespace 在同一集合內。這決定一次設定影響誰,以及哪些空間無法各自選不同等級。

namespace
主機透過控制器存取的一份邏輯儲存空間。
03

把能力、要求與結果接起來

03-01先查哪些等級受支援,再指定目標與新值,最後以正確的查詢格式讀回。支援清單、目前值與保存能力分別回答不同問題。

04

沿著時間追蹤設定

04-01以設定成功區分先前與後續命令;再判斷重設覆蓋範圍、目前值與已保存值。這樣才能解釋何時用新值、何時可能回到另一個值。

00.02.讀者已學過 OS、Computer Organization,並了解 SSD 的基本概念。本文的 Set 7/9、namespace A/B/C 與位元數值均為說明性範例;使用前須以實際裝置回報的集合與能力為準。

00.03.先用一個 Set 的設定情境串起觀念,再比較容易混淆的值與範圍;讀完應能解釋哪些空間共用設定,以及每次查詢究竟回答什麼。

把主軸連起來

00.04.可以用同一個問題貫穿全文:想讓 Set 7 內的讀取採用最少復原,需要查哪些能力、送出什麼參數,又要怎樣知道目前真的在用這個設定?先理解這條流程,再看每個欄位的位置。

00.05.後半部會刻意比較相同數值在不同格式下的意思,以及相同設定在不同重設範圍下的結果。這些對比能避免只背等級名稱,卻把查詢或持續性判斷用錯。

開著 Spec 的順向報告路徑

R-1先用本文建立全貌,再開 Base PDF:499 → 715~716,只往後翻一次。以下採 PDF 檢視器頁碼;共用頁從指定標題開始,在下一節標題前停止。必要引用的欄位已在中文教學整理,不必為每一個引用反覆跳頁。

翻頁順序主範圍講解重點與停止位置
R1 · Base PDF 499§5.2.30.1.12從 Read Recovery Level Config 標題起,先解釋 Set/subsystem 範圍,再用 Set 7、Level 15 連看 Figures 484/485,最後指出 Get 回覆位置與 SEL=3 例外。 在 §5.2.30.1.13 前停下。
R2 · Base PDF 715–716§8.1.23從 Read Recovery Level 標題起,把設定連回復原取捨、namespace 繼承與 LR 限制;Figure 755 收束方向、必備與選用等級。 在 §8.1.24 前停下。
SEL
Select;Get Features 要求回傳目前值、預設值、已保存值或能力的選擇欄位。
LR
Limited Retry;I/O 命令中與限制復原相關的控制資訊,和 RRL 的互動由實作決定。

01 讀取遇到困難時,要花多少力氣復原?

01.01.Read Recovery Level(RRL)在讀取完成時間與錯誤復原投入之間提供取捨。支援此功能時,Level 4 是必備的預設等級,Level 15 是必備的 Fast Fail;Level 0 若有支援,提供最多復原。等級越高,復原量越少;與 I/O 命令 LR 的互動由實作決定。

Fast Fail
RRL Level 15 的正式名稱,表示最少復原量;沒有在此定義固定完成時間。
I/O
Input/Output,對 namespace 執行資料輸入與輸出的操作類別。
RRL
Read Recovery Level;讀取錯誤復原等級,用來選擇讀取遇到困難時投入的復原程度。
來源:Base 2.4 §8.1.23

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.23, 文件頁 689-690, PDF 頁 715-716

02 一個設定,會影響哪些儲存空間?

同一 Set 內共用等級說明性範例:設定目標是 Set 7,A、B 一起使用 15;C 沿用 Set 9 的 4。若無 NVM Sets,則所有 namespace 共用 subsystem 的一份 RRL。來源:Base §8.1.23、§5.2.30.1.12、Figure 67。NVM subsystemNVM Set 7RRL: 4 → 15NVM Set 9RRL: 4namespace A + BRRL = 15namespace CRRL = 4
說明性範例:設定目標是 Set 7,A、B 一起使用 15;C 沿用 Set 9 的 4。若無 NVM Sets,則所有 namespace 共用 subsystem 的一份 RRL。來源:Base §8.1.23、§5.2.30.1.12、Figure 67。
NVM subsystem
NVMe 儲存子系統,可包含多個控制器及 namespace。
NVM Set
一組在邏輯上與其他集合分開的非揮發性儲存,可包含多個 namespace;本篇用它界定共用 RRL 的範圍。
NVM
Non-Volatile Memory,斷電後仍能保存資料的記憶體。

02.01.有 NVM Sets 時,FID 12h 以 NVM Set 為範圍,選中的集合共用一份 RRL。沒有 NVM Sets 時,範圍改為整個 NVM subsystem,所有 namespace 使用同一等級。改變 RRL 不會改變 namespace 中已有的資料。

FID
Feature Identifier;指定要讀取或設定哪一項 Feature 的編號。
來源:Base 2.4 §5.2.30.1.12

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.12, 文件頁 473, PDF 頁 499

03 讀懂支援位元,才知道哪些值能選

從支援清單走到一個設定值
想選的等級檢查 RRLS=8011h 的哪個 bit送進 RRL 的值
0bit 0 = 1,支援0h
4bit 4 = 1,支援4h
8bit 8 = 0,不支援不選此值
15bit 15 = 1,支援Fh
RRLS 的 bit 位置選一個是/否答案;RRL 則直接保存等級代碼。兩者不能互換。來源:Base Figures 338、485。
RRLS
Read Recovery Levels Supported;每個 bit 對應一個等級是否受支援。

03.01.Identify Controller 的 CTRATT.RRLVLS 表示是否支援功能,RRLS 的 16 個 bits 分別表示各等級是否支援。CTRATT.NSETS 決定使用 Set 或 subsystem 範圍;ONCS.SSFS 則決定能否使用非零 SEL 與 SV。這些能力不能互相替代。

CTRATT
Controller Attributes;Identify Controller 中的控制器屬性位元欄位。
RRLVLS
Read Recovery Levels;CTRATT 中表示是否支援 RRL 功能的 bit。
NSETS
NVM Sets;CTRATT 中的 NVM Set 支援 bit。
ONCS
Optional NVM Command Support;Identify Controller 中的能力欄位,本篇只使用其中 SSFS。
SSFS
Save and Select Feature Support;表示是否支援 Set 的非零 SV 與 Get 的非零 SEL。
SV
Save;Set Features 中提出保存設定要求的 bit。
來源:Base 2.4 §5.2.14.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, 文件頁 344-347,371-372, PDF 頁 370-373,397-398

04 把「哪個集合、哪個等級」組成設定命令

04.01.Set Features 用 FID 12h 選 Read Recovery Level Config,CDW11 的低 16 bits 放 NVMSETID,CDW12 的低 4 bits 放 RRL。這個 Feature 不使用資料 buffer;NVM Set 或 subsystem 範圍的 NSID 應為 0。

NVMSETID
NVM Set Identifier;16-bit 集合識別碼,與 namespace 的 NSID 分開。
buffer
資料緩衝區;本 Feature 的參數與回覆不需要額外的資料緩衝區。
NSID
Namespace Identifier,controller 用來指向 namespace 的數值 handle;identifier 不等於 namespace 物件本身。
CDW
CDW(Command Dword);命令中的 32-bit 欄位單位,例如 CDW10 的 10 是欄位 index,不是 byte offset。
來源:Base 2.4 §5.2.30.1.12

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.12, 文件頁 473, PDF 頁 499

05 讀回時先看 SEL,才知道 DW0 在回答什麼

同一個 DW0=4,先確認查詢問題假設 SSFS=1,兩次都成功。SEL=0 的回覆採 RRL 格式;SEL=3 的回覆採能力格式。能力查詢不會改變目前等級。來源:Base Figures 198、201、485。Get Features · FID 12h · CQE DW0 = 00000004hSEL = 0問目前值SEL = 3問能力DW0[3:0] = 4RRL = 4CHANG = 1NSSPEC = 0 · SVBL = 0
假設 SSFS=1,兩次都成功。SEL=0 的回覆採 RRL 格式;SEL=3 的回覆採能力格式。能力查詢不會改變目前等級。來源:Base Figures 198、201、485。
NSSPEC
NS Specific;1 表示 namespace scope,0 本身不指定其他範圍。
CHANG
Changeable;回報該 Feature 是否有可變更的設定值。
SVBL
Saveable;回報該 Feature 的值是否可保存。
CQE
Completion Queue Entry;完成佇列中回報命令執行結果的項目。

05.01.成功的 Get Features 在 SEL≠3 時,以 CQE DW0 回傳 Figure 485 格式的 RRL。SEL=3 則改回 Supported Capabilities:CHANG、NSSPEC、SVBL。相同 DW0 數值可能有完全不同的意思;RRLS 等級清單仍應從 Identify Controller 取得。

來源:Base 2.4 §5.2.30.1.12

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.12, 文件頁 473, PDF 頁 499

06 以成功完成為界,區分舊命令與新命令

設定成功是後續提交的保證界線時間由上往下。A 在界線前提交,不能保證採用新設定;B 在成功後才提交,必須採用新設定。這張圖沒有替 RRL 指定固定完成時間。來源:Base §5.2.30.1。提交 Read A;A 仍可能在執行新設定是否套用到 A:不保證提交 Set Features:RRL = 15Set 成功完成此後才提交 Read BB 必須使用新設定
時間由上往下。A 在界線前提交,不能保證採用新設定;B 在成功後才提交,必須採用新設定。這張圖沒有替 RRL 指定固定完成時間。來源:Base §5.2.30.1。

06.01.已提交而尚在執行的命令,可能套用或不套用剛改好的 Feature。Set Features 成功完成後才提交的命令,必須使用新設定。若希望明確區隔兩批讀取,主機宜先讓原有命令完成,再改設定。

來源:Base 2.4 §5.2.30.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1, 文件頁 459, PDF 頁 485

07 重設後保留什麼,要分可保存性與重設範圍

相同 current=15,重設後為何不同?
Feature 能力與原值這次事件的判斷條件之後的 current
不可保存;current=15Power cycle 或 reset:FID12h 具持續性15
可保存;current=15、saved=4Figure126 的全體範圍重設4:取 saved
可保存;current=15、沒有 savedFigure126 的全體範圍重設4:取 default
可保存;current=15、saved=4Figure127 的局部範圍重設;Set/subsystem scope15:維持目前值
先查可保存性,再確認配置與重設範圍。表內都是說明性原值;兩種重設表的完整適用條件在相鄰段落說明。來源:Base §4.4、Figures 126/127/466。
current
目前值;控制器現在使用的 Feature 設定。
default
預設值;本篇 RRL 預設為 Level 4,與目前值分開。
saved
已保存值;成功要求保存的 Feature 設定,用於適用的恢復情境。
scope
作用範圍;一份設定由哪些物件共用,例如同一 NVM Set 或整個 subsystem。

07.01.Figure 466 把 FID 12h 的持續性列為 Yes,但該欄只適用於不可保存的 Feature。若本 Feature 可保存,應依 current/saved 與重設範圍判斷:整個 subsystem 範圍的重設按 Figure 126,局部範圍按 Figure 127。例如多控制器的 subsystem 只重設一個控制器,Set/subsystem 的共用目前值維持不變;符合全體條件的重設則回到 saved,沒有 saved 才回 default。

來源:Base 2.4 §4.4

來源:NVME-BASE-2.4, Rev. 2.4, §4.4, 文件頁 167-169, PDF 頁 193-195

接著打開 Spec 看什麼

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

要說明的觀念Spec 閱讀位置
讀取遇到困難時,要花多少力氣復原?Base 2.4 §8.1.23
一個設定,會影響哪些儲存空間?Base 2.4 §5.2.30.1.12 · Base 2.4 §8.1.23 · Base 2.4 §3.2.2
讀懂支援位元,才知道哪些值能選Base 2.4 §5.2.14.2.1
把「哪個集合、哪個等級」組成設定命令Base 2.4 §5.2.30.1.12 · Base 2.4 §4.4 · Base 2.4 §5.2.30
讀回時先看 SEL,才知道 DW0 在回答什麼Base 2.4 §5.2.30.1.12 · Base 2.4 §5.2.12
以成功完成為界,區分舊命令與新命令Base 2.4 §5.2.30.1 · Base 2.4 §4.4
重設後保留什麼,要分可保存性與重設範圍Base 2.4 §4.4 · Base 2.4 §5.2.30
開啟完整中文教學與逐圖解釋 →

學完後想一想

1. RRLS=8011h,能選 Level 8 嗎?Level 15 應填 8000h 嗎?

09.01.不能選 8,因為 bit 8 是 0。要選 15,先用 RRLS bit 15 確認支援,再在 4-bit RRL 欄填 Fh;8000h 是支援位元的遮罩,不是等級代碼。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, 文件頁 344-347,371-372, PDF 頁 370-373,397-398

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.12, 文件頁 473, PDF 頁 499

2. A、B 在同一 Set,能靠填 A 的 NSID 只讓 A 用 Level 15 嗎?

09.02.不能。RRL 依 Set 共用,命令的 NVMSETID 選該集合;這種 scope 的 NSID 應為 0,非零不會縮小作用範圍,而會使命令被中止。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.12, 文件頁 473, PDF 頁 499

來源:NVME-BASE-2.4, Rev. 2.4, §4.4, 文件頁 169, PDF 頁 195

3. 成功 Get 的 DW0=4,為什麼還不能立即說目前是 Level 4?

09.03.還要看 SEL。SEL=0 才回 current;SEL=3 的 4 是 CHANG=1、NSSPEC=0、SVBL=0 的能力組合。若 SEL=1,4 說的是預設值。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.12, 文件頁 473, PDF 頁 499

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12, 文件頁 209-212, PDF 頁 235-238

4. Set Level 15 成功後,仍在途的 Read A 與之後才提交的 Read B 都保證用 15 嗎?

09.04.B 必須使用新設定;A 已先提交,可能套用或不套用新值。Level 15 本身也沒有固定毫秒上限。需要清楚區分兩批時,宜先完成 A,再修改設定。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1, 文件頁 459, PDF 頁 485

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.23, 文件頁 689-690, PDF 頁 715-716

5. SV=0 成功設成 15,是否一重設就回到 4?

09.05.不一定。不可保存的 FID 12h 本身具持續性;可保存者還要看重設範圍。Figure 126 的全體情況回 saved 或 default,Figure 127 的局部情況對 Set/subsystem scope 維持 current。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §4.4, 文件頁 167-169, PDF 頁 193-195

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30, 文件頁 458-459, PDF 頁 484-485

採用的規格版本

NVM Express Base Specification, Revision 2.4

Jia-Chang

Jia-Chang

Human

Comments

  Write a comment ...