規劃要建立的儲存空間
01-01先分清容量、格式與配置粒度:需要多少可定址空間、每個區塊多大,以及控制器建議如何配置。
NVMe · 規格與原理
00.01.Namespace Management 管理主機可使用的儲存空間。建立 namespace 決定容量與格式;附加 namespace 才把它連到指定控制器。因此,存在一份儲存空間,與主機能經由某個控制器使用它,是兩個不同狀態。
01-01先分清容量、格式與配置粒度:需要多少可定址空間、每個區塊多大,以及控制器建議如何配置。
02-01Create 建立 namespace 並回傳識別碼;Attach 讓指定控制器能存取它。用這個流程理解兩種命令各自完成什麼。
03-01Detach 移除控制器的存取關係,Delete 刪除 namespace;還原預設配置又有不同的前提與結果。
04-01建立、附加或刪除後,其他控制器與主機看到的資訊可能改變;透過通知及重新識別更新認識。
00.02.先理解容量與識別碼,再準備建立資料;Create 成功後取得 NSID,接著以 Attachment 建立存取關係。需要調整配置時,分別考慮 Detach、Delete 或還原預設配置,並處理受影響控制器收到的變更通知。
01.01.假設建立時選用每個 logical block 有 4096 bytes 資料的格式,NSZE=250 表示 LBA 0 到 249。可定址資料量是 250×4096=1,024,000 bytes,也就是 1000 KiB;最後一個 LBA 是 249,與總數 250 要分開。
01.02.NCAP 表示可配置的 logical blocks 數;NUSE 是建立後查詢到的使用量。主機建立 namespace 時提出 NSZE 與 NCAP,不能把 NUSE 當成另一個要指定的容量要求。若使用精簡配置,再依相關能力理解 NCAP 可以如何小於 NSZE。
01.03.讀 Namespace Granularity List 時,先以 NGA.GDM 決定描述子如何對應到格式,再用 ND 得到有效描述子的數量。選對描述子後,NSG 與 NCG 才是此次 size 與 capacity 要比較的建議粒度;它們的單位是 bytes。
01.04.若本例的 NSG 是 1 MiB,1000 KiB 並不是 1 MiB 的整數倍,可能產生配置後無法由 LBA 定址的剩餘空間。這項比較用於估計配置效率;命令是否有效仍要檢查容量、格式及其他要求,不能只因未符合粒度建議而拒絕原本有效的建立要求。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.1, 文件頁 13-14, PDF 頁 13-14
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.1, 文件頁 13, PDF 頁 13
來源: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
01.06.Namespace Size(NSZE)是 LBA 0 到 n−1 的總 logical blocks;Namespace Capacity(NCAP)是任一時點最多可配置的 blocks;Namespace Utilization(NUSE)是目前已配置 blocks。永遠遵守 NSZE ≥ NCAP ≥ NUSE。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.1, 文件頁 13-14, PDF 頁 13-14
01.07.NSFEAT.THINP=1 時,controller 可(may)回報 NCAP<NSZE,並必須(shall)追蹤 NUSE。THINP=0 時,controller 必須回報 NCAP=NSZE,且可讓 NUSE 永遠等於 NCAP。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §2.1.1, 文件頁 13, PDF 頁 13
01.08.controller 可(may)按內部 內部配置單位 把實際消耗容量向上取整。Spec 範例中,32 blocks×4 KiB=128 KiB 的 namespace,在 1 MiB 內部配置單位 下可消耗 1 MiB;因此 實際消耗容量 不一定等於 logical block size×block count。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17, 文件頁 661, PDF 頁 687
01.09.Namespace Granularity 的 NSG 與 NCG 都是 以 bytes 為單位的配置粒度建議。若 NSZE×LBA size 可整除 NSG、NCAP×LBA size 可整除 NCG 且 NSZE=NCAP,配置為 完整配置 且全部容量可由 LBA 定址;不符合 hint 可能浪費容量,但 符合其他所有要求的建立命令 不得只因違反 hint 被中止。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.8, 文件頁 165, PDF 頁 165
01.10.說明性範例:LBA=4 KiB、NSG=1 MiB(256 LBAs)、NCG=2 MiB(512 LBAs)。NSZE=NCAP=1024 同時滿足兩種 granularity;NSZE=1000、NCAP=1000 不滿足 NSG/NCG 整除,但若其他欄位都合法,controller 不得只因這個 hint violation 中止 create。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §5.8, 文件頁 165, PDF 頁 165
| 容量欄位 | 使用的單位 | 這個數值描述什麼 |
|---|---|---|
| NSZE | logical blocks | LBA 0..NSZE−1 |
| NCAP | logical blocks | 最大可配置容量 |
| NUSE | logical blocks | THINP=1 時需追蹤 |
| NSG/NCG | bytes | 建議配置粒度;未符合這項建議,不能單獨成為拒絕命令的理由 |
02.01.Namespace Management 的 SEL 選 Create,CSI 選 NVM Command Set,DPTR 提供建立資料的位置。Base 的命令與 NVM Command Set 的 Host Specified Fields 要配合閱讀:前者決定操作與資料解讀方式,後者決定新 namespace 的格式及容量。
02.02.NSZE、NCAP 的 byte 容量取決於 FLBAS 選中的格式。DPS 與 LBSTM 又必須符合該格式的保護資訊能力。不能先用一種格式計算容量,再把另一種格式的保護設定填進同一份資料。
02.03.使用需要延伸格式支援的保護配置時,要查 Host Behavior Support 的 LBAFEE;Storage Tag 的遮罩則還要對照 Identify 的允許遮罩及遮罩層級。建立命令中的選擇值與 Identify 的支援值,是一組需要互相核對的資料。
02.04.先以 ENDGID 找到 Endurance Group 及其 FDP 狀態。NPHNDLS 決定主機提供的 Placement Handle List 有多少項,每項再對應一個 Reclaim Unit Handle。數量、識別碼範圍、重複項目及共享 handle 的格式一致性需要一起檢查;NPHNDLS=0 則依規格由控制器選擇,不能當成「沒有任何 handle」。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, 文件頁 446-448, PDF 頁 472-474
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6.4, 文件頁 111-113, PDF 頁 111-113
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6.2, 文件頁 110, PDF 頁 110
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6.3, 文件頁 110-111, PDF 頁 110-111
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17, 文件頁 661, PDF 頁 687
02.06.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。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, 文件頁 446-448, PDF 頁 472-474
02.07.NVM create payload 的主要 host-specified fields 是 NSZE、NCAP、FLBAS、DPS、NMIC、ANAGRPID、NVMSETID、ENDGID、LBSTM、NPHNDLS 與 Placement Handle List。成功 create 後,namespace 依這些屬性格式化;未使用的 reserved fields 應清為 0。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6.4, 文件頁 111-113, PDF 頁 111-113
02.08.End-to-end Data Protection 設定在 create 時套用。LBAFEE 未啟用時,特定 16-bit STS 非零、32-bit 或 64-bit Guard Protection Information 組合必須以 Invalid Namespace or Format 中止;LBSTM 不符合 Figure 127 capability 時則回 Invalid Field in Command。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6.2, 文件頁 110, PDF 頁 110
02.09.只有指定 Endurance Group 已啟用 Flexible Data Placement(FDP)且 SEL=Create 時,NPHNDLS 與 Placement Handle List 才參與驗證。NPHNDLS 不得大於支援的 Reclaim Unit Handles 或 128;重複、越界、格式不相容或無可用 handle 會導向 Invalid Placement Handle List 或 Invalid Format。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6.3, 文件頁 110-111, PDF 頁 110-111
02.10.NVMSETID/ENDGID 的決策矩陣為:兩者 0 由 controller 選兩者;NVMSETID=0、ENDGID≠0 時由指定 Endurance Group 內選 NVM Set;NVMSETID≠0、ENDGID=0 必須 Invalid Field;兩者非 0 時只有該 NVM Set 確實屬於指定 Endurance Group 才可配置。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17, 文件頁 661, PDF 頁 687
| 資料區域與解讀格式 | 該區域的用途 | 欄位有效的條件 |
|---|---|---|
| Base 0:511 | SIOCS | NVM-specific create data |
| Base 512:1023 | Reserved | host 清 0 |
| Base 1024:4095 | Vendor Specific | 沒有來源定義就不猜 |
| NVM 512:767 | Placement Handle List | 只在 FDP enable 時驗證 |
03.01.主機要求建立 namespace,成功 CQE 的 DW0 回傳 NSID=7。此時記錄的是「儲存物件已存在」,還不能推論控制器 A、B 都能對它執行 I/O。
03.02.主機在 Controller List 中列出 A、B 的 Controller Identifier,NUMCIDS 記錄有效項目數,並以 Namespace Attachment 的 SEL 選 Attach。這份清單選控制器;命令的 NSID 選要附加的 namespace。
03.03.若對控制器 A 執行 Detach,NSID=7 在 A 上不再是可存取的 namespace;在 B 上的附加關係仍可保留。namespace 本身沒有因此被刪除,配置給它的容量也不是由這個 Detach 動作釋放。
03.04.Delete 改變的是 namespace 是否存在。主機應先妥善處理各控制器的存取關係與進行中的 I/O,再執行刪除;刪除後,先前取得的 NSID 不能繼續當成原物件的存取憑據。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17, 文件頁 660, PDF 頁 686
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.24, 文件頁 444-445, PDF 頁 470-471
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, 8.1.17.1, 文件頁 446-448, 662, PDF 頁 472-474, 688
03.06.完整 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。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17, 文件頁 660, PDF 頁 686
03.07.create 成功後 namespace 已 allocated 但尚未 attached,因此對 controller 尚非 active。detach 使該 controller 上的 NSID 變 inactive;delete 使 subsystem 中的 NSID 變 unallocated。受影響的 outstanding 或後續 commands 依 inactive NSID 處理。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17, 文件頁 660, PDF 頁 686
03.08.Namespace Attachment 的 DPTR 指向 4096-byte Controller List;SEL=0h attach、SEL=1h detach。以 PRP 指向此 buffer 時不得使用 PRP List,因 buffer 不可跨越超過一個 memory-page boundary。attach/detach 狀態跨所有 reset events 保留。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.24, 文件頁 444-445, PDF 頁 470-471
03.09.attach 前分別核對 Domain aggregate MAXDNA 與每個 I/O controller 的 MAXCNA;非零 limit 被超過時回 Namespace Attachment Limit Exceeded。還要核對 I/O Command Set support/enable state,不能把所有 attach failure 都歸成同一種 status。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.24, 文件頁 444-445, PDF 頁 470-471
03.10.Create 成功時 controller 選擇可用 NSID,CQE.DW0 回傳該 NSID;此刻 namespace 尚未 attached。software 必須先保存 returned NSID,再以 Namespace Attachment 建立 controller access,不能在 create CQE 後直接送 I/O。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, 8.1.17.1, 文件頁 446-448, 662, PDF 頁 472-474, 688
| 管理動作 | 改變哪個物件或關係 | 操作後仍保留什麼 |
|---|---|---|
| Create | object/capacity | 不自動 attach |
| Attach | access relationship | Controller List 可含多個 CNTLID |
| Detach | 對指定控制器的可存取狀態 | namespace 仍 allocated |
| Delete | subsystem inventory | NSID 變 unallocated |
04.01.Delete All 的結果是移除現有 namespace;Restore Default 的結果是套用目前啟用韌體所定義的預設 namespace 配置。兩者即使都在調整配置,完成後的 namespace 數量也不必相同。
04.02.Restore Default 必須有對應支援能力,並符合尚無已配置 namespace 等要求。若仍有 namespace 存在,不能把 Restore 當成順便刪掉它們的捷徑。先處理現有配置,再提出還原要求。
04.03.還原成功後,DNCS 表示配置符合目前韌體的預設設定。實際建立了哪些 namespace、各自容量與格式為何,仍需重新 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.25.1, 文件頁 447-448, PDF 頁 473-474
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17.1-8.1.17.2, 文件頁 662-663, PDF 頁 688-689
04.05.Delete 的 NSID 指定已建立 namespace;FFFFFFFFh 表示 delete all,即使目前零個 namespaces 也成功。delete 會使 namespace 從 subsystem 消失並具有 detach side effect;host 應先 detach 所有 controllers,讓 event 與 outstanding-I/O 行為更可控。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, 8.1.17.1, 文件頁 446, 448, 662, PDF 頁 472, 474, 688
04.06.Restore Default 使用 SEL=2h,NSID 應為 0 且 controller 會忽略它。先讀 RDNCS,刪除 subsystem 中所有 namespaces,再送 restore;若仍有 namespace,回 Command Sequence Error。成功前 controller 必須套用 current active firmware image 的 default configuration 並設 DNCS=1。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25.1, 文件頁 447-448, PDF 頁 473-474
04.07.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。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17.1-8.1.17.2, 文件頁 662-663, PDF 頁 688-689
| 刪除或恢復動作 | 命令如何選對象 | 完成後如何確認配置 |
|---|---|---|
| Delete one | NSID=target | 成功後 object 消失 |
| Delete all | NSID=FFFFFFFFh | zero namespace 仍成功 |
| Restore | SEL=2h、NSID ignored | 剩餘 namespace→Sequence Error |
| Post-condition | DNCS=1 | 仍要重新 Identify actual defaults |
05.01.新增或移除 namespace 會影響已配置清單;改變附加關係則影響特定控制器可存取的清單。Attached 與 Allocated 兩類通知對應不同觀察角度,不能只保留一個「namespace changed」旗標。
05.02.控制器是否發出相應通知,要結合事件啟用設定及操作來源。收到通知後,主機再讀相應的 Identify 清單與資料結構,重建目前狀態;通知本身不提供完整新配置。
05.03.假設 A 收到 Admin 命令並處理刪除,B 也附加了該 namespace。對 B 的通知規則需檢查其啟用設定;處理命令的 A 已透過自己的命令流程知道變動。若變動由管理端點等其他途徑引起,適用的通知對象又要依該分支判斷。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17, 文件頁 660, PDF 頁 686
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17.1-8.1.17.2, 文件頁 662-663, PDF 頁 688-689
來源: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-5.2.25, 文件頁 445, 448, PDF 頁 471, 474
05.05.Namespace Attachment 與 Management 有各自的 command-specific status。Attachment 包括 already attached 18h、private 19h、not attached 1Ah、Controller List invalid 1Ch、ANA attach failed 25h、limit 27h、I/O Command Set 29h/2Ah;Management 包括 Invalid Format 0Ah、insufficient capacity 15h、NSID unavailable 16h、thin provisioning unsupported 1Bh、ANA group invalid 24h。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.24-5.2.25, 文件頁 445, 448, PDF 頁 471, 474
| 通知或清單 | 描述哪種配置變化 | 應重新查詢什麼 |
|---|---|---|
| CNS 02h | Active Namespace ID list | Attached notice |
| CNS 10h | Allocated Namespace ID list | Allocated notice |
| Create | Allocated change | 新 NSID 尚未 active |
| Delete | Allocated+可能 Active | processing controller 規則不同 |
06.01.以下依概念整理規格中的圖表。每組先說明讀取順序與要判斷的問題,接著列出各圖的欄位或行為說明。可以由正文的連結跳到對應組別,也可以用這一節檢查自己能否把欄位連回完整操作。
06.02.容量圖比較 NSZE、NCAP、NUSE 的數量,粒度表則以 bytes 比較。先列出區塊數×區塊大小,再計算對 NSG、NCG 的餘數;不要直接拿區塊數除以 byte 粒度。
回到本節的解釋與範例06.03.NVM Figure 134 列出主機在 Create 時提出的設定;Figure 123 與 Figure 127 提供欄位語意及格式能力。這些結構需要對照閱讀,但不是三份可以相加的建立 buffer。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| NSZE/NCAP/FLBAS/NSFEAT.THINP | FLBAS 選格式,所以容量值必須乘所選格式的資料 bytes;THINP 等能力影響容量要求。NUSE 是查詢到的使用量,不由此 Create payload 指定。 | NSZE=250、4 KiB/block 是 1000 KiB;換成 512-byte 格式後,不能繼續沿用同一 byte 容量結論。 |
| DPS/LBAFEE/LBSTM/Storage Tag Masking Level | DPS 選保護配置,LBAFEE 決定進階格式是否可用;LBSTM 必須符合允許遮罩與層級限制。 | 32b/64b Guard 或帶非零 STS 的 16b Guard 建立要求,若 LBAFEE 未設 1,回 Invalid Namespace or Format;遮罩要求不符則是 Invalid Field in Command。 |
| NMIC/ANAGRPID/NVMSETID/ENDGID | 共享能力與資源歸屬要配合支援條件。後三者填 0 表示由控制器決定,未支援對應功能時忽略。 | ENDGID 還決定要檢查哪個 Endurance Group 的 FDP 狀態;FDP 啟用時不支援 NVM Sets。 |
| NPHNDLS/Placement Handle List | FDP 啟用時,非零 NPHNDLS 不得超過支援 RUH 數或 128;清單值需在範圍內、不得重複。 | 支援 4 個 RUH 時,2 筆清單 [1,3] 數量及範圍符合這兩項要求;[1,1] 重複、[1,4] 超出索引範圍,仍須另檢查資源占用與格式。 |
| NPHNDLS=0/控制器選定的 RUH | 首次此類配置由控制器選未被非零清單 namespace 使用的 RUH;既有 NPHNDLS=0 namespaces 則依規則共享同一個 RUH。 | 0 不是沒有 handle。主機後來提出非零清單時,也不能占用這個由控制器為零清單配置保留的 RUH。 |
| 共享 RUH/Format Index/Reserved | 共享 RUH 的 namespaces 必須使用相同 user-data Format Index;FDP 未啟用時依表註作保留欄位處理,不能把控制器忽略欄位理解成主機可以填任意值。 | RUH 已由 Format Index 2 的 namespace 使用,新 namespace 指定 Format Index 3 卻共用它,會是 Invalid Format。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6.4, Figure 134, 文件頁 112-113, PDF 頁 112-113
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.1, Figure 123, 文件頁 85-87, PDF 頁 85-87
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.3, Figure 127, 文件頁 97-101, PDF 頁 97-101
NVM123-1Identify Namespace 同時描述容量、格式與資料操作能力。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.1, Figure 123, 文件頁 85-87, PDF 頁 85-87
NVM123-2NSZE=1000、NCAP=800、NUSE=600 分別表示可定址、最多可配置與目前已配置;換算 bytes 還要讀使用中的 LBA 格式。
06.04.粒度清單回答特定格式偏好的配置步幅。NGA.GDM 決定格式到描述子的對應,ND 決定有效數量,NSG 與 NCG 才提供 size、capacity 的 byte 粒度。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| NGA.GDM/ND/Format Index | GDM=0 時 descriptor 0 適用全部格式且 ND=0;GDM=1 時,描述子 index 對應同一 Format Index。ND 是數量減 1。 | GDM=1、ND=3 表示 4 個有效描述子;使用 Format Index 2 時讀 descriptor 2,而非挑最大的粒度。 |
| LBAFEE/16 或 64 個描述子 | Host Behavior Support 的延伸格式宣告決定最多回報 16 或 64 個粒度描述子;清單後方未用項目不代表更多有效格式。 | 即使傳輸 buffer 足夠長,也不能越過 ND 所界定的有效項目使用數值。 |
| NSG/NCG/0h | NSG 用於 size、NCG 用於 capacity,單位都是 bytes;0h 表示未回報粒度。 | NSZE=1000、4 KiB/block 得到 4000 KiB,不是 1 MiB 的整數倍;此差異是配置效率提示,不是單獨拒絕有效 Create 的理由。 |
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.8, Figure 132, 文件頁 108, PDF 頁 108
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.8, Figure 133, 文件頁 108, PDF 頁 108
NVM132-1Namespace Granularity List 說明有哪些配置粒度描述子。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.8, Figure 132, 文件頁 108, PDF 頁 108
NVM132-2先看模式與描述子數,再選符合情境的描述子;不能永遠只讀第一個 NSG/NCG。
NVM133-1NSG 與 NCG 分別提供 namespace 大小及容量的粒度提示。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.8, Figure 133, 文件頁 108, PDF 頁 108
NVM133-2若 NSG=1 MiB、每個 block=4 KiB,NSZE=250 對應 1000 KiB,不是 1 MiB 的整數倍;這可能影響配置效率,但不能單憑未遵循提示就否決其他方面合法的 Create。
06.05.Namespace Management 管理物件是否存在,Namespace Attachment 管理控制器能否存取。兩種命令各有 SEL,其編碼必須放在各自命令內解讀。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| Management SEL/CSI/DPTR | SEL 選 Create、Delete 或 Restore;Create 的 CSI 決定建立資料格式,DPTR 給資料位置。 | Management SEL=0h 是 Create,Attachment SEL=0h 是 Attach;數值相同但動作不同。 |
| Create payload → NSZE/NCAP/FLBAS 等欄位 | Base 定義共同傳輸結構,所選命令集補上主機設定;命令集延伸部分須以更具體的定義解讀。 | 使用 NVM Command Set 時,需把 Base Figure 448 與 NVM Figure 134 合讀,包含 Placement Handle List。 |
| CQE DW0/NSID | Create 成功回傳已建立 namespace 的識別碼,後續管理與 I/O 以它選物件。 | 回傳 NSID=7 不能單獨證明任何控制器已附加到它。 |
| Attachment DPTR/Controller List/NUMCIDS | 清單選控制器,NSID 選 namespace;SEL 決定附加或分離。 | NUMCIDS=2、列 A 與 B,表示對兩個控制器建立或移除關係。 |
| DNCS/ANAGRPID/NVMSETID/ENDGID | DNCS 回報預設配置狀態;另外三者說明 namespace 的資源歸屬。 | Restore Default 後仍需重新 Identify 實際配置,不能只拿 DNCS=1 推論 namespace 的容量。 |
| 命令專屬錯誤 | 格式、容量、識別碼及附加限制是不同檢查條件。 | Insufficient Capacity 與 NSID Unavailable 分別指出空間與識別碼資源問題,不應合併成同一種失敗。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.24, Figure 442, 文件頁 445, PDF 頁 471
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.24, Figure 443, 文件頁 445, PDF 頁 471
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.24, Figure 444, 文件頁 445, PDF 頁 471
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, Figure 445, 文件頁 446, PDF 頁 472
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, Figure 446, 文件頁 446-447, PDF 頁 472-473
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, Figure 447, 文件頁 447, PDF 頁 473
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, Figure 448, 文件頁 447, PDF 頁 473
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, Figure 449, 文件頁 448, PDF 頁 474
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, Figure 450, 文件頁 448, PDF 頁 474
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.31, Figure 304, 文件頁 301-302, PDF 頁 327-328
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.3, Figure 346, 文件頁 391-394, PDF 頁 417-420
Base346-1與命令集無關的 Identify Namespace 提供共享、屬性與路徑相關資訊。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.3, Figure 346, 文件頁 391-394, PDF 頁 417-420
Base346-2先知道某 NSID 對應的 namespace 是否共享,再解釋控制器間的存取關係;LBA 資料大小則仍需命令集專屬格式資訊。
06.06.先從 Base 的資料外框進入 NVM 專用解讀,再對照相同 offset 的欄位。容量值按所選格式換算,Placement Handle List 按 FDP 啟用條件讀取;表中的不同列不是互相獨立且可以相加的 buffer。
NVM134-1Create payload 把主機選擇的容量、格式與放置參數交給控制器。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6.4, Figure 134, 文件頁 112-113, PDF 頁 112-113
NVM134-2建立 1000 個 4 KiB blocks 的 namespace,先選對格式,再填 NSZE/NCAP;1000 代表 blocks,不是 1000 bytes。
Base445-1Namespace Create 的 DPTR 指向 4096-byte 建立資料。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, Figure 445, 文件頁 446, PDF 頁 472
Base445-2主機想建立新 namespace,將容量和格式放在 payload,DPTR 只提供 payload 的位置;不是提供未來 namespace 的資料位址。
Base446-1CDW10 的 SEL 選擇建立、刪除或還原預設 namespace 配置。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, Figure 446, 文件頁 446-447, PDF 頁 472-473
Base446-2Create 用 SEL=0h,Delete 用 1h,Restore Default 用 2h;bits 3:0 放選擇值,bits 31:4 保留。Delete 的目標另由 NSID 指定。
Base447-1CDW11 的 CSI 只在 Create 時指定新 namespace 的命令集。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, Figure 447, 文件頁 447, PDF 頁 473
Base447-2建立 NVM namespace 時,SEL=0h 且 CSI=00h;CSI 位於 bits 31:24。Delete 或 Restore 時此欄位保留,不能用來指定 namespace 編號。
Base448-1Create buffer 把命令集專屬資料、保留區與廠商區分開。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, Figure 448, 文件頁 447, PDF 頁 473
Base448-2bytes 0~511 依所選命令集解釋,512~1023 保留,1024~4095 為廠商區;不能把整個 buffer 都當成連續 LBA 資料。
06.07.CAP.CSS 回報控制器支援的命令集選擇方式,CC.CSS 是初始化時的選擇;Namespace Create 的 CSI 則指定這個新 namespace 的命令集。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| CAP.CSS/CC.CSS/Create CSI | 先確認控制器支援與目前選擇,再決定建立資料如何解讀。 | Create 的 CSI=00h 指 NVM Command Set;不能把 CSI 的 00h 當成 CC.CSS 的通用寫值。 |
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.1, Figure 36, 文件頁 55-58, PDF 頁 81-84
Base36-1CAP 描述控制器能力,主機設定必須落在其支援範圍。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.1, Figure 36, 文件頁 55-58, PDF 頁 81-84
Base36-2設定記憶體頁大小前,先比對 MPSMIN 與 MPSMAX;主機偏好的頁大小不一定就是控制器接受的大小。
06.08.CDW0 先選操作與資料指標格式;NSID 選操作對象;DPTR/MPTR 再指向資料。命令專屬 Dwords 的含義由 OPC 與命令集決定。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| OPC/FUSE/CID | OPC 選操作,FUSE 說明融合操作角色,CID 讓完成項目找回原命令。 | 相同的 CDW10 數值放在 Read 與 Set Features 中,可能完全不是同一種意思。 |
| PSDT → DPTR/MPTR | PSDT 決定指標依 PRP 或 SGL 等格式解讀;指標內的數值不可在未選格式時直接當成長度。 | 主機先選指標格式,再按該格式準備 buffer 描述,最後由命令語意判斷資料方向。 |
| NSID/CDW2–CDW15 | NSID 與命令專屬欄位共同決定對象、範圍及選項。 | Create 的 DPTR 指向建立參數;它不是新 namespace 的實體儲存位址。 |
| NDT/NDM/MDPTR | 廠商命令使用共同格式時,資料與 metadata 長度各有自己的欄位及指標。 | 先看廠商命令格式支援宣告,再依長度定義換算,不能把欄位上限直接加 1 後存回同寬整數。 |
來源:NVME-BASE-2.4, Rev. 2.4, §4.1.1, Figure 93, 文件頁 140-142, PDF 頁 166-168
Base93-1共通 SQE 固定各命令共用欄位的位置。
來源:NVME-BASE-2.4, Rev. 2.4, §4.1.1, Figure 93, 文件頁 140-142, PDF 頁 166-168
Base93-2同樣在 CDW10,Read 與管理命令可以有完全不同含義;先依 OPC 選命令,再查專屬欄位表。
NVM127-1命令集專屬 Identify Namespace 補充 PI、格式與效能屬性。
來源:NVME-NVM-CS-1.3, Rev. 1.3, §4.1.5.3, Figure 127, 文件頁 97-101, PDF 頁 97-101
NVM127-2基礎 Identify 已知每個 block 有 4 KiB,仍要到這裡看 ELBAF/PI 能力,才能完成 tag 的配置。
06.09.生命週期圖用實線物件表示 namespace,用連線表示 attachment。Create/Delete 改變物件,Attach/Detach 改變連線;Controller List 指定要改哪些控制器的關係。
回到本節的解釋與範例Base442-1Attachment 的 DPTR 指向要附加或分離的控制器清單。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.24, Figure 442, 文件頁 445, PDF 頁 471
Base442-2NSID=3、清單只有控制器 A,表示改變 namespace 3 與 A 的關係,不是建立新的 namespace 3。
Base443-1Attachment 的 SEL 選擇 Attach 或 Detach。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.24, Figure 443, 文件頁 445, PDF 頁 471
Base443-2SEL=0h 建立附加關係,SEL=1h 移除關係;Detach 不會像 Delete 一樣刪除 namespace 物件。
Base444-1Attachment 狀態描述附加關係、控制器清單與限制是否成立。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.24, Figure 444, 文件頁 445, PDF 頁 471
Base444-2「已經附加」與「清單中的控制器不合法」是不同問題;先看是哪一個關係或輸入不符合要求。
Base450-1Create 成功後 CQE DW0 回傳控制器分配的新 NSID。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, Figure 450, 文件頁 448, PDF 頁 474
Base450-2回傳 NSID=3 表示 namespace 3 已建立,主機還要透過 Attachment 附加到控制器,才能依該控制器的存取路徑使用它。
06.10.Namespace Attachment 的資料指標連到 Controller List。清單中的識別碼與命令 NSID 各選一種對象,不能互換。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| NUMCIDS/Controller Identifier entries | NUMCIDS 是有效控制器項目數;每個 entry 保存一個 Controller Identifier。 | NSID=7、NUMCIDS=2、清單為 3 和 5:對 namespace 7 改變它與控制器 3、5 的關係。 |
| 4096-byte 結構/DPTR/page boundary | 傳輸緩衝區要符合 Attachment 對單頁資料的要求;不能只配置有效識別碼佔用的幾個 bytes 就忽略外框。 | 主機先準備完整清單及其對齊,再把 DPTR 指向它,而不是把第一個控制器編號填進 DPTR。 |
來源:NVME-BASE-2.4, Rev. 2.4, §4.6.1, Figure 139, 文件頁 172, PDF 頁 198
Base139-1Controller List 先列數量,再列要操作的控制器識別碼。
來源:NVME-BASE-2.4, Rev. 2.4, §4.6.1, Figure 139, 文件頁 172, PDF 頁 198
Base139-2Attach 到控制器 A 與 B 時,清單含 2 個 Controller IDs;命令 NSID 指 namespace,清單則指定哪些控制器。
06.11.這裡從 Identify Controller 取出 namespace 管理、預設配置還原及配置上限所需欄位。它們限制不同資源,不能拿一個數值代替全部能力檢查。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| OACS.NMS/RDNCS | 前者回報 Namespace Management/Attachment 支援,後者回報還原預設 namespace 配置的能力。 | 能 Create 不代表任何控制器都能 Restore;還原前要另外確認 RDNCS。 |
| MAXDNA/MAXCNA | MAXDNA 限制 domain 內合計的 namespace 附加數;MAXCNA 限制單一 I/O controller 的附加數。兩個非零上限分別檢查。 | 容量仍有剩餘但已達可附加數量上限時,不能只用剩餘 bytes 推論 Attach 會成功。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, Figure 338, 文件頁 340, 353, 365, 378, PDF 頁 366, 379, 391, 404
Base338-1Identify Controller 先告知能力與限制,主機再決定可使用的操作。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, Figure 338, 文件頁 340, 353, 365, 378, PDF 頁 366, 379, 391, 404
Base338-2規格列出某選用命令時,先查相應支援欄位再發出要求;「命令有定義」與「這台控制器支援」是不同證據。
06.12.先區分單一 Delete、Delete all 與 Restore 的 SEL/NSID 用法,再沿流程核對剩餘 namespace 及支援能力。結果圖把 DNCS 和重新取得的 namespace 清單並列閱讀。
回到本節的解釋與範例Base449-1Create 失敗原因可能是格式、容量或識別碼資源,而非同一種空間不足。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.25, Figure 449, 文件頁 448, PDF 頁 474
Base449-2還有未配置 bytes,卻已用完允許的 namespace 數量時,仍可能無法建立;NSID Unavailable 與 Insufficient Capacity 要分開。
Base304-1DNCS 表示目前 namespace 配置是否仍符合韌體預設配置。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.31, Figure 304, 文件頁 301-302, PDF 頁 327-328
Base304-2還原預設配置成功後 DNCS 設定;後續又建立或刪除 namespace 改變配置時,就不能仍把先前的預設狀態當成現在狀態。
06.13.通知指出哪一類資訊可能已改變;它不取代 Identify。Base Figure 474 選通知類別,Figure 155 說明事件所代表的變動。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| NAN bit 8/Attached Namespace Attribute Changed | 啟用目前控制器的已附加 namespace 屬性變動通知。 | 收到事件後,依變動查 active namespace 清單或相關屬性;不能直接由事件數量推算新 NSID。 |
| ANSAN bit 19/Allocated Namespace Attribute Changed | 啟用已配置 namespace 屬性變動通知,關心的是配置集合。 | Create 與 Attach 改變不同集合:CNS 10h 查 allocated,CNS 02h 查 active,查錯清單可能漏掉剛建立但尚未附加的物件。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 155, 文件頁 186, PDF 頁 212
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.6, Figure 474, 文件頁 466-468, PDF 頁 492-494
Base474-1Asynchronous Event Configuration 各 bit 選擇對應的通知類別。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.6, Figure 474, 文件頁 466-468, PDF 頁 492-494
Base474-2主機啟用本篇需要的通知時,只設定對應的事件 bit;一種通知已啟用,不會自動啟用其他通知。
06.14.事件圖從 Create/Attach/Detach/Delete 出發,分別連到 Allocated 和 Active 清單。CNS 02h 和 CNS 10h 查不同集合;namespace 的獨立屬性查詢則補足清單沒有提供的內容。
回到本節的解釋與範例Base155-1Notice 類事件告知主機有狀態或配置變更。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.2.1, Figure 155, 文件頁 186, PDF 頁 212
Base155-2收到 Firmware Activation Starting 通知,表示切換流程開始;要確認目前韌體仍須讀對應狀態及 log,而非把通知當完成證明。
06.15.create 前先以 NSID=FFFFFFFFh、CNS=00h 讀 common namespace capabilities;若支援,再用 CNS=16h 讀 Namespace Granularity,並確認可用 capacity。這三步完成後才建立 4096-byte create buffer。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.17.1, 文件頁 661-662, PDF 頁 687-688
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
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
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