NVMe Base 2.4:Namespace Management:容量、建立與附加

9 minute read

English

00.01.Namespace Management 管理主機可使用的儲存空間。建立 namespace 決定容量與格式;附加 namespace 才把它連到指定控制器。因此,存在一份儲存空間,與主機能經由某個控制器使用它,是兩個不同狀態。

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

這篇的主軸

01

規劃要建立的儲存空間

01-01先分清容量、格式與配置粒度:需要多少可定址空間、每個區塊多大,以及控制器建議如何配置。

02

從建立走到可存取

02-01Create 建立 namespace 並回傳識別碼;Attach 讓指定控制器能存取它。用這個流程理解兩種命令各自完成什麼。

03

分清移除連接與刪除資料空間

03-01Detach 移除控制器的存取關係,Delete 刪除 namespace;還原預設配置又有不同的前提與結果。

04

讓主機得知配置變動

04-01建立、附加或刪除後,其他控制器與主機看到的資訊可能改變;透過通知及重新識別更新認識。

把主軸連起來

00.02.先理解容量與識別碼,再準備建立資料;Create 成功後取得 NSID,接著以 Attachment 建立存取關係。需要調整配置時,分別考慮 Detach、Delete 或還原預設配置,並處理受影響控制器收到的變更通知。

NSID
Namespace Identifier,controller 用來指向 namespace 的數值 handle;identifier 不等於 namespace 物件本身。

01 容量數值與配置粒度

01.01.先分清各種容量數值的單位,再比較必要的容量關係與建議配置粒度。前者決定是否符合規格要求,後者用來減少配置空間的浪費。

可定址、可配置、已配置是 3 個不同的量教學例:NSZE=1000、NCAP=800、NUSE=600。LBA 編號的範圍與目前配置量要分開理解。NSZE = 1000LBA 0 … 999NCAP = 800NUSE = 600
教學例:NSZE=1000、NCAP=800、NUSE=600。LBA 編號的範圍與目前配置量要分開理解。
NCAP
Namespace Capacity,任一時點最多可配置給 namespace 的 logical blocks。
NSZE
Namespace Size,namespace 的總 logical block 數,LBA 範圍為 0 到 NSZE−1。
NUSE
Namespace Utilization,目前已配置給 namespace 的 logical blocks。

01.02.Namespace Size(NSZE)是 LBA 0 到 n−1 的總 logical blocks;Namespace Capacity(NCAP)是任一時點最多可配置的 blocks;Namespace Utilization(NUSE)是目前已配置 blocks。永遠遵守 NSZE ≥ NCAP ≥ NUSE。

來源:NVM Command Set 1.3 §2.1.1

來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.1, 文件頁 13-14, PDF 頁 13-14

容量數值與配置粒度
容量欄位使用的單位這個數值描述什麼
NSZElogical blocksLBA 0..NSZE−1
NCAPlogical blocks最大可配置容量
NUSElogical blocksTHINP=1 時需追蹤
NSG/NCGbytes建議配置粒度;未符合這項建議,不能單獨成為拒絕命令的理由
THINP
Thin Provisioning,NSFEAT 中決定 NCAP 是否可小於 NSZE,以及 controller 是否必須追蹤 NUSE 的 bit。
NCG
Namespace Capacity Granularity,以 bytes 表示 controller 偏好的 NCAP allocation granularity。
NSG
Namespace Size Granularity,以 bytes 表示 controller 偏好的 NSZE allocation granularity。

02 建立 Namespace 所需的資料

02.01.Base Figure 448 定義 4096-byte envelope,NVM Command Set Figure 134 只定義前 768 bytes 中的 NVM 欄位與 Placement Handle List。Host 先以 SEL/CSI 決定 operation 與 command set,再填 NSZE、NCAP、format、protection、sharing 與 group IDs。Reserved areas 要清零,Protection Information 與 FDP 又各有獨立 功能支援條件。

Protection Information
資料保護資訊,縮寫 PI;包含 Guard 與 tags,用來檢查資料及其關聯資訊。
Host
主機;執行作業系統並送出 NVMe 命令的一端。
CSI
I/O Command Set Identifier;選擇 I/O 命令集,NVM Command Set 使用 00h。
FDP
Flexible Data Placement,把資料放置提示與媒體回收管理連結的能力。
NVM
Non-Volatile Memory,斷電後仍能保存資料的記憶體。
SEL
Select;Namespace Management 的 create/delete/restore selector,與 Get Features 的 SEL 不同。

02.02.Create 使用 NSID=0、SEL=0h 與 CSI=00h(NVM Command Set)。DPTR 指向 4096-byte data structure:bytes 0:511 是 I/O Command Set specific、512:1023 reserved、1024:4095 vendor specific。reserved bytes 由 host 清為 0。

DPTR
Data Pointer,SQE 中指出 command data buffer 的欄位。
I/O
Input/Output,對 namespace 執行資料輸入與輸出的操作類別。
來源:Base 2.4 §5.2.25

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, 文件頁 446-448, PDF 頁 472-474

建立 Namespace 所需的資料
資料區域與解讀格式該區域的用途欄位有效的條件
Base 0:511SIOCSNVM-specific create data
Base 512:1023Reservedhost 清 0
Base 1024:4095Vendor Specific沒有來源定義就不猜
NVM 512:767Placement Handle List只在 FDP enable 時驗證
SIOCS
Specified I/O Command Set,Base create buffer bytes 0:511 中放置所選 I/O Command Set specific fields 的區域。

03 建立、連接與使用 Namespace

03.01.Create、Attach、Detach、Delete 分別改變兩個狀態維度:namespace 是否 allocated,以及某 controller 是否 attached。Create CQE.DW0 回 NSID 後,object 已 allocated 但所有 controller 都未 attached;Attach 的 Controller List 才建立 access。Detach 不刪容量,Delete 才使 NSID unallocated。

controller
controller,實作 NVMe 介面、取走 command 並回報 completion 的控制實體。
CQE
Completion Queue Entry,CQ 中的一筆完成結果資料結構。
Namespace 從建立到可存取
  1. 建立 namespace,取得 NSID。
  2. 將 namespace 附加至指定 controller。
  3. 由該 controller 的 Identify 結果確認 namespace 與格式。
  4. I/O 命令使用 NSID 指定要存取的 namespace。
建立儲存物件與讓 controller 可以存取它,是分開的動作。

03.02.完整 Namespace Management capability 由 Namespace Management command 與 Namespace Attachment command 組成。支援時 controller 必須支援兩者、設 OACS.NMS=1、支援 Attached Namespace Attribute Changed event;Allocated event 為 should,Namespace Granularity 與 Restore Default 為 may。

OACS.NMS
Optional Admin Command Support 的 Namespace Management Supported bit;設為 1 才宣告完整 Manage 加 Attach capability。
來源:Base 2.4 §8.1.17

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17, 文件頁 660, PDF 頁 686

建立、連接與使用 Namespace
管理動作改變哪個物件或關係操作後仍保留什麼
Createobject/capacity不自動 attach
Attachaccess relationshipController List 可含多個 CNTLID
Detach對指定控制器的可存取狀態namespace 仍 allocated
Deletesubsystem inventoryNSID 變 unallocated

04 刪除與恢復預設配置

04.01.Delete all 與 Restore Default 是兩個不同 operation。NSID=FFFFFFFFh 的 Delete All 在零個 namespaces 時也成功;Restore Default 則要求 RDNCS capability、SEL=2h,以及 subsystem 中已不存在任何 namespace。成功前 controller 套用 current active firmware image defaults 並設 DNCS=1。

RDNCS
Restore Default Namespace Configuration Supported,宣告 Restore Default operation 是否支援的 capability bit。
DNCS
Default Namespace Configuration Status,表示目前 namespace configuration 是否等於 active firmware image defaults 的 status bit。

04.02.Delete 的 NSID 指定已建立 namespace;FFFFFFFFh 表示 delete all,即使目前零個 namespaces 也成功。delete 會使 namespace 從 subsystem 消失並具有 detach side effect;host 應先 detach 所有 controllers,讓 event 與 outstanding-I/O 行為更可控。

來源:Base 2.4 §5.2.25, 8.1.17.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, 8.1.17.1, 文件頁 446, 448, 662, PDF 頁 472, 474, 688

刪除與恢復預設配置
刪除或恢復動作命令如何選對象完成後如何確認配置
Delete oneNSID=target成功後 object 消失
Delete allNSID=FFFFFFFFhzero namespace 仍成功
RestoreSEL=2h、NSID ignored剩餘 namespace→Sequence Error
Post-conditionDNCS=1仍要重新 Identify actual defaults

05 Namespace 變更通知與重新辨識

05.01.Attached 與 Allocated Namespace Attribute Changed notices 對應不同 inventory。Create 通常改 Allocated list;Attach/Detach 改 Active list;Delete 可能同時改兩者。event code 不是新清單本身,因此 host 收到 AEN 後要依 CNS 重新 Identify。Delete reporting 還要分辨 processing controller 與其他 controllers。

AEN
Asynchronous Event Notification,controller 透過已提交 Asynchronous Event Request 回報事件的通知。
CNS
Controller or Namespace Structure;Identify 命令用來選擇回傳資料結構的欄位。

05.02.create 改變 Allocated Namespace ID list;attach/detach 改變 Active Namespace ID list;delete 可能同時改變兩者。啟用對應 notice 時,host 收到 asynchronous event 後應重新 Identify,而不是只用 event code 猜新 inventory。§8.1.17.2 對處理 delete 的 controller 與其他 controllers 規定不同 event reporting。

來源:Base 2.4 §8.1.17.1-8.1.17.2

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17.1-8.1.17.2, 文件頁 662-663, PDF 頁 688-689

Namespace 變更通知與重新辨識
通知或清單描述哪種配置變化應重新查詢什麼
CNS 02hActive Namespace ID listAttached notice
CNS 10hAllocated Namespace ID listAllocated notice
CreateAllocated change新 NSID 尚未 active
DeleteAllocated+可能 Activeprocessing controller 規則不同

接著打開 Spec 看什麼

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

要說明的觀念Spec 閱讀位置
容量數值與配置粒度NVM 1.3 §2.1.1 · Base 2.4 §8.1.17 · NVM 1.3 §5.8
建立 Namespace 所需的資料Base 2.4 §5.2.25 · NVM 1.3 §4.1.6.4 · NVM 1.3 §4.1.6.2 · NVM 1.3 §4.1.6.3 · Base 2.4 §8.1.17
建立、連接與使用 NamespaceBase 2.4 §8.1.17 · Base 2.4 §5.2.24 · Base 2.4 §5.2.25, 8.1.17.1
刪除與恢復預設配置Base 2.4 §5.2.25, 8.1.17.1 · Base 2.4 §5.2.25.1 · Base 2.4 §8.1.17.1-8.1.17.2
Namespace 變更通知與重新辨識Base 2.4 §8.1.17 · Base 2.4 §8.1.17.1-8.1.17.2 · Base 2.4 §5.2.25, 8.1.17.1 · Base 2.4 §5.2.24-5.2.25
開啟完整中文教學與逐圖解釋 →

學完後想一想

1. Namespace Create 成功並回傳 NSID,為何還不能直接假設某 controller 可以對它做 I/O?

07.01.Create 建立 namespace;Attachment 決定哪些 controllers 可以存取。還要確認 attachment 與 Identify 所回報的可見性、格式及可用狀態。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, 8.1.17.1, 文件頁 446-448, 662, PDF 頁 472-474, 688

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.24, 文件頁 444-445, PDF 頁 470-471

2. Namespace granularity hint 與實際媒體配置的 rounding,為何不能混為一談?

07.02.Hint 協助 host 選擇合適的 size 或 capacity;rounding 描述實際配置可能耗用的資源。Hint 不是任意加上的命令合法性限制,容量規劃也不能只看 host 要求的數值。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17, 文件頁 661, PDF 頁 687

來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.8, 文件頁 165, PDF 頁 165

3. Restore Default Namespace 是否表示恢復已刪除 namespace 的原有資料?

07.03.它處理預設 namespace 配置,不是資料復原命令。Namespace 的建立、刪除與預設配置流程,不能被當成保留或找回舊資料的保證。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25.1, 文件頁 447-448, PDF 頁 473-474

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, 8.1.17.1, 文件頁 446, 448, 662, PDF 頁 472, 474, 688

採用的規格版本

NVM Express NVM Command Set Specification, Revision 1.3

NVM Express Base Specification, Revision 2.4

Jia-Chang

Jia-Chang

Human

Comments

  Write a comment ...