NVMe Namespace Write Protection:狀態、控制與命令行為

6 minute read

English

00.01.一份已寫好的資料要繼續提供讀取,又要避免後續命令改動它,可以對所在的 namespace 設定寫入保護。Namespace Write Protection 不只是一個開關:它有可解除、直到斷電、永久等不同狀態,並把裝置支援、進入許可與實際保護分開。本篇把這些關係接到 FID 84h,最後說明保護如何改變命令處理。

Namespace Write Protection
namespace寫入保護;控制一份namespace能否接受受限制的修改操作。
namespace
namespace,主機透過 controller 存取的一份已格式化非揮發性容量。
FID
Feature Identifier;指定要讀取或設定哪一項 Feature 的編號。

這篇的主軸

01

保護的對象與邊界

01-01設定跟著 namespace,所有附接它的控制器都要遵守。先分清資料對象與傳送命令的控制器,再看會影響多個 namespace 的操作。

02

用事件追蹤狀態

02-01四種狀態各有允許的進入與離開路徑。Set Features、控制器重設與 power cycle 造成的結果不同,圖上的箭頭必須帶著事件讀。

power cycle
電源循環,即斷電後重新上電;不等同於所有形式的控制器重設。
03

從能力走到成功設定

03-01NWPC 回答能不能支援,WPC 決定特定進入要求是否獲准,WPS 回報目前狀態。設定成功還包含將既有寫入快取提交到媒體。

NWPC
Namespace Write Protection Capabilities,控制器支援哪些保護狀態的位元欄位。
WPC
Write Protection Control,決定是否接受進入特定保護狀態之要求的控制欄位。
WPS
Write Protection State,namespace目前的寫入保護狀態代碼。
04

保護後如何使用與觀察

04-01Read、Flush、管理命令各有處理規則;跨 namespace 的操作也受影響。用目前 WPS、完成狀態與健康警告回答各自的問題。

00.02.讀者已學過 OS 與 Computer Organization,並了解 SSD 基本概念。本文使用 namespace 7/8 與控制器 A/B 作為說明性範例;數值不代表裝置一定具備這些配置。

00.03.先掌握四種狀態,再讀支援與控制位,接著完成一個設定案例;最後把狀態套回實際命令。欄位說明按相關概念分組,可從正文直接連到對應圖表。

把主軸連起來

00.04.全文以 namespace 7 的資料集為例:先決定需要哪種保護與解除方式,再確認裝置能否接受該轉換,等待設定成功,最後解釋哪些操作還能執行。每個欄位都有一個具體要回答的問題。

00.05.最容易混淆的三組關係是:支援能力與進入許可、不可保存與跨斷電保留、namespace 保護狀態與全體媒體健康警告。後面的對比會分別處理它們。

01 先看保護誰,再看四種狀態

設定經由控制器送出,保護跟著 namespaceA、B 的箭頭都指向同一份namespace7;它們必須遵守相同保護。下方namespace8是另一個設定對象。此圖說明附接關係,不表示命令執行順序。來源:Base §8.1.18。Controller A送出 Set FID84hController B同樣遵守 WPSNamespace 7 · WPS=1所有附接的控制器共同遵守Namespace 8 · WPS=0獨立的 namespace 設定
A、B 的箭頭都指向同一份namespace7;它們必須遵守相同保護。下方namespace8是另一個設定對象。此圖說明附接關係,不表示命令執行順序。來源:Base §8.1.18。

01.01.Namespace Write Protection 讓主機控制單一 namespace 的寫入保護狀態。支援這項能力時,No Write Protect 與 Write Protect 必備;Until Power Cycle 與 Permanent 兩種狀態選用。namespace 建立時從 No Write Protect 開始;同一 namespace 的狀態須由所有附接它的控制器共同遵守。

來源:Base 2.4 §8.1.18

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.18, 文件頁 664-666, PDF 頁 690-692

02 沿著狀態圖理解解除與重設

四種狀態:先看起點,再看事件普通箭頭為Set Features;通往2、3的箭頭另須能力、WPC及相關配置條件成立。圖中2回到0的箭頭由power cycle觸發,3沒有解除箭頭。為了讓線條清楚,兩條垂直分支分別標明可從0或1出發。來源:Base Figures735/736、§5.2.30.1.38。0 · No Write Protect建立時的狀態1 · Write Protect可由 Set 解除從 0 或 1;要求 WPS2從 0 或 1;要求 WPS32 · Until Power CycleSet 不能改變此狀態3 · Permanent沒有解除路徑Power cycle → WPS0power cycle 後仍為 3
普通箭頭為Set Features;通往2、3的箭頭另須能力、WPC及相關配置條件成立。圖中2回到0的箭頭由power cycle觸發,3沒有解除箭頭。為了讓線條清楚,兩條垂直分支分別標明可從0或1出發。來源:Base Figures735/736、§5.2.30.1.38。

02.01.Set Features 可在 0 與 1 之間切換,也可從 0 或 1 進入受支援且獲准的 2 或 3。處於 2 或 3 時,用 Set Features 要求改變狀態會得到 Feature Not Changeable。一般狀態機中,2 經 power cycle 回到 0;沒有 power cycle 的 Controller Level Reset 不解除它。

Controller Level Reset
控制器層級重設;狀態2是否解除仍要辨認有沒有發生power cycle。
來源:Base 2.4 §8.1.18; 5.2.30.1.38

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.18; 5.2.30.1.38, 文件頁 512-513,664-665, PDF 頁 538-539,690-691

03 能力、進入許可與目前狀態是三件事

相同的數字,放在不同欄位意思不同
觀察到的值它回答的問題不能推出的結論
NWPC=03h支援0/1及2,不支援3目前已永久保護
WPC=03h允許處理進入2與3的要求所有namespace已保護
WPS=3這個namespace已永久保護這是一份支援bitmap
MDS=1多domain;禁止進入2禁止所有寫入保護
每列獨立示範欄位意義,不是同一台裝置的完整配置。Source:Base Figures338/756/541。
domain
subsystem內用來界定通訊與故障影響的範圍;本篇用它判斷是否允許直到斷電的保護。
MDS
Multi-Domain Subsystem,Identify Controller中表示支援多domain的位元。

03.01.NWPC 宣告控制器支援哪些狀態;RPMB 的 WPC 控制是否允許命令進入狀態 2 或 3;FID 84h 的 WPS 才是 namespace 目前的狀態。WPUPCC=0 或 PWPC=0 會阻止對應的進入要求。MDS=1 的多 domain subsystem 禁止使用狀態 2,即使相關能力與控制位已設為 1。

WPUPCC
Write Protect Until Power Cycle Control,WPC內允許進入狀態2的控制位。
PWPC
Permanent Write Protect Control,WPC內允許進入永久保護的控制位。
RPMB
Replay Protected Memory Block,使用認證與防重播機制存取的記憶區;本篇只取其WPC控制欄位。
來源:Base 2.4 §8.1.18; 5.2.30.1.38

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.18; 5.2.30.1.38, 文件頁 512-513,664-665, PDF 頁 538-539,690-691

04 把查詢、設定與成功完成接起來

成功切入保護,包含先把既有快取提交到媒體範例採WPS0 → 1、NSID7。主機宜先等舊命令完成;控制器在轉換時提交該namespace的快取資料與metadata。完成後才提交的命令必須用新設定;較早在途的命令不能一概推定。來源:Base §§5.2.30.1、5.2.30.1.38、5.2.30.4。主機:先等待前一批命令完成Set · NSID7 · FID84h · SV0CDW11 = 00000001h控制器:將此 namespace 的快取提交到媒體包含 data 與 metadata完成設定後,回覆成功 CQEGet · SEL0 → CQE DW0 = 1確認目前保護狀態
範例採WPS0 → 1、NSID7。主機宜先等舊命令完成;控制器在轉換時提交該namespace的快取資料與metadata。完成後才提交的命令必須用新設定;較早在途的命令不能一概推定。來源:Base §§5.2.30.1、5.2.30.1.38、5.2.30.4。
metadata
隨 logical block 儲存的附加資料,可包含資料保護資訊,也可有其他用途。
CDW
CDW(Command Dword);命令中的 32-bit 欄位單位,例如 CDW10 的 10 是欄位 index,不是 byte offset。
CQE
Completion Queue Entry,CQ 中的一筆完成結果資料結構。

04.01.以有效且 active 的 NSID 選 namespace;Get FID 84h、SEL=0 讀目前 WPS,Set 在 CDW11 bits 2:0 放新 WPS。設定不可使用 SV=1;SEL=1 沒有 default 可讀,回 Invalid Field in Command。成功進入寫入保護時,控制器必須把該 namespace 的所有揮發性寫入快取資料及 metadata 寫入非揮發媒體。

active
已附接於處理命令之控制器的namespace狀態。
NSID
Namespace Identifier,controller 用來指向 namespace 的數值 handle;identifier 不等於 namespace 物件本身。
SEL
Select,Get Features中選擇目前值、預設值、已保存值或能力的欄位。
SV
Save,Set Features中要求保存屬性值的位元。
來源:Base 2.4 §5.2.30.1.38

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.38, 文件頁 512-513, PDF 頁 538-539

05 保護後,哪些命令仍能做什麼

命令名稱只是起點,實際動作決定判斷
命令或情境是否被寫入保護阻擋原因
Read/Compare/Verify正常處理;仍可能有其他錯誤保護不封鎖這些操作
Dataset Management修改受保護媒體必須失敗表內命令仍受註腳1約束
受保護NSID的Flush成功且無作用進入保護時已提交快取
Format指向8但也修改受保護的7Namespace is Write Protected實際影響包含受保護namespace
Sanitize會修改受保護namespaceNamespace is Write Protected沒有指定NSID也須遵守保護
每列示範不同判斷,不構成執行順序。完整允許清單與三項註腳在圖表閱讀區逐組說明。來源:Base Figure737及其後條文。

05.01.Figure 737 列出對受保護 NSID 正常處理的命令,但註腳仍限制會修改非揮發媒體的動作。Flush 成功且不產生作用;Directive Receive 若要求配置 Streams 資源則回 Namespace is Write Protected。未列出的命令只要符合本節列出的受保護目標或跨 namespace 修改條件,就會被拒絕。

來源:Base 2.4 §8.1.18.2

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.18.2, 文件頁 665-666, PDF 頁 691-692

06 用正確的狀態與錯誤解釋結果

先問正在觀察什麼,再選資料來源
想回答的問題查看哪裡代表性判讀
namespace7目前是哪種保護?Get FID84h、SEL0的WPS1是一般Write Protect
裝置是否支援永久保護?Identify的NWPC bit21是支援,不是已進入
為何要求改變狀態失敗?完成狀態+原狀態/控制條件WPS2要求0:Feature Not Changeable
是否回報全體媒體唯讀警告?SMART的AMRO不能只因WPS變化而設1
這些資料可同時存在;它們分別描述設定、能力、一次命令的結果與健康狀況。來源:Base §8.1.18與Figures338/541/554/213。
AMRO
All Media Read-Only,SMART健康資訊中表示全體媒體唯讀的警告位。

06.01.主機應以 Get FID 84h 查 namespace 寫入保護狀態。控制器不得只因本狀態機造成的唯讀條件,就把 SMART Critical Warning 的 All Media Read-Only 設為 1;AMRO=0 也不能證明 namespace 沒有設保護。外部寫入保護系統與本機制組合的結果不在此規格定義內。

來源:Base 2.4 §8.1.18.1

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.18.1, 文件頁 665, PDF 頁 691

開著 Spec 的順向報告路徑

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

頁碼順序章節起點重點與停止位置
R1 · Base PDF 538–539§5.2.30.1.38從 Namespace Write Protection Config 開始,用 Figure541 讀WPS編碼,再說不可保存、沒有default、拒絕轉換的條件,以及下一頁的快取提交。 在 §5.2.30.1.39 前停止。
R2 · Base PDF 690–692§8.1.18從 Namespace Write Protection 標題開始。Figure735比較四種狀態,Figure736沿箭頭解釋事件,Theory of Operation接能力與共享保護,Figure737連同下一頁三項註腳說明命令。 在 §8.1.19 前停止。
R3 · Base PDF 718§8.1.24 · Figure756 byte2最後只補看Device Configuration Block的WPC byte2,對照PWPC、WPUPCC與重設清零。不要從此展開其餘RPMB訊息表。 在 Figure757 前停止。
Device Configuration Block
RPMB target0的裝置設定資料結構,WPC位於其中byte2。
開啟完整中文教學與逐圖解釋 →

學完後想一想

1. WPS=2,沒有斷電的控制器重設後,能用 Set WPS=0 解除嗎?

08.01.不能。這種重設維持狀態2,Set不能改變它;power cycle才沿著圖上的特殊箭頭回到0。WPUPCC清零只是關閉之後的進入許可,不是解除現有保護。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.18; 5.2.30.1.38, 文件頁 512-513,664-665, PDF 頁 538-539,690-691

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24, 文件頁 691-692, PDF 頁 717-718

2. NWPC=07h、PWPC=1,是否代表任何 namespace 現在都能進入永久保護?

08.02.還要看目前狀態。0或1才有進入3的Set路徑;原本在2時,改成3仍會被拒絕。NWPC是支援,PWPC是許可,兩者都不取代狀態機。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.18; 5.2.30.1.38, 文件頁 512-513,664-665, PDF 頁 538-539,690-691

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.18; 5.2.30.1.38, 文件頁 512-513,664-665, PDF 頁 538-539,690-691

3. 成功的能力查詢回 DW0=6,能否說目前 WPS=6,而且可解除永久保護?

08.03.兩個結論都不對。SEL3的6解成CHANG1、NSSPEC1、SVBL0;CHANG表示此Feature有可變更的值,不保證目前值可改。查WPS要另用SEL0。

來源

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

4. 保護後 Flush 為什麼成功卻不寫回資料?

08.04.轉入保護時已要求提交該namespace全部揮發性寫入快取資料與metadata。因此這裡的成功不代表還有一次額外寫入,也不能反推其他未受保護namespace的Flush同樣無作用。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.38, 文件頁 512-513, PDF 頁 538-539

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.18.2, 文件頁 665-666, PDF 頁 691-692

5. 7受保護、8未受保護,把 Format NVM 的 NSID 填8就一定能執行嗎?

08.05.不一定。還要判斷這次format真正涵蓋哪些namespace;若也會修改7,就必須因保護而拒絕。保護依實際影響判斷,不只看命令上的目標編號。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.18.2, 文件頁 665-666, PDF 頁 691-692

採用的規格版本

NVM Express Base Specification, Revision 2.4

Jia-Chang

Jia-Chang

Human

Comments

  Write a comment ...