啟動與能力
01-01從識別控制器,到設定必要 properties 與確認可處理命令。
NVMe · 規格與原理
00.01.控制器開始處理 I/O 之前,需要先建立可用的介面、佇列與狀態。本篇沿著控制器的運作生命週期,連起能力查詢、初始化、命令處理、記憶體資源,以及關機、重設與韌體啟用。
01-01從識別控制器,到設定必要 properties 與確認可處理命令。
02-01理解佇列位置、Doorbell 更新與仲裁分工。
03-01區分容量、控制器記憶體與各種狀態改變的影響範圍。
00.02.提交佇列保存主機送出的命令,完成佇列保存控制器回報的結果。主機要先建立這些共同機制,再使用讀寫等命令;以下從這個先後關係展開。
00.03.控制器從被發現到可接受命令,會經過能力辨識、記憶體及佇列配置、啟用與就緒確認。開始運作後,還要安排不同佇列的工作,管理 namespace 與控制器記憶體,最後處理關機或重設。
00.04.這條生命週期把各組 properties 連在一起:有些回報能力,有些接受主機設定,有些回報當前狀態。學完應能說明每個階段由誰採取動作、依什麼資訊前進,以及停止或重設後哪些資源需要重新確認。
01.01.控制器類型先決定它負責哪些工作。I/O controller 能處理使用者資料 I/O;Administrative controller 負責管理用途。兩者都可能有 Admin Queue,所以不能因為找到管理佇列,就推論這個控制器也能接受資料讀寫。
01.02.同一類型內,選用功能仍可能不同。規格表中的支援標示,必須連同它所在的列、欄與註腳閱讀,才能知道是一定要支援、可以選擇支援,或在某種條件下才適用。控制器識別碼用來辨認對象,也不會單獨證明它具有哪種能力。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.1, 文件頁 38, PDF 頁 64
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3-3.1.3.2, 文件頁 39-43, PDF 頁 65-69
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3, 文件頁 40, PDF 頁 66
01.03.memory-based controller 必須(shall)只支援 static controller model。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.1, 文件頁 38, PDF 頁 64
01.04.本輪只使用 I/O controller 與 Administrative controller:前者可執行使用者資料的 I/O,後者以管理為目的且不支援資料 I/O command。兩者都具有一組 Admin Submission/Completion Queue。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3-3.1.3.2, 文件頁 39-43, PDF 頁 65-69
01.05.除 fused operation 外,controller 取走的命令與完成沒有一般性的先後保證;若有順序需求,強制該順序是 host 的責任。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3, 文件頁 40, PDF 頁 66
| 控制器類型或標示 | 可以處理的工作 | 支援能力如何確認 |
|---|---|---|
| I/O controller | 可執行使用者資料 I/O | 仍需逐項查 optional capability |
| Administrative controller | 管理用途、無資料 I/O command | 不能因有 Admin Queue 就當成 I/O controller |
| 支援標示 | 針對 row 與上下文描述強度 | 不能脫離 column/footnote 解讀 |
02.01.主機讀 CAP 的 page-size 範圍及佇列限制,選定符合要求的 CC.MPS,再準備 Admin SQ、CQ。ASQ、ACQ 是起點,AQA 是深度編碼;只有位址沒有足夠的記憶體範圍,仍不是完整配置。
02.02.主機設定必要欄位後寫 CC.EN=1,接著等待 CSTS.RDY=1。這兩個位元分屬要求與回覆,不能把寫入 EN 的瞬間當成控制器已可處理全部命令。
02.03.Admin 路徑就緒後才能查詢 Identify、建立 I/O CQ 與 SQ。建立 SQ 時指定它使用的 CQ,所以要先讓被引用的 CQ 存在。初始化的順序來自資源依賴,不是單純按照暫存器 offset 遞增寫入。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4, 文件頁 52-54, PDF 頁 78-80
來源:NVME-BASE-2.4, Rev. 2.4, §3.5.1, 3.5.3-3.5.4, 文件頁 105-113, PDF 頁 131-139
02.05.host 必須(shall)以 property 指定的寬度,從 property 起始 offset 存取;memory-based controller 的實際存取規則由 PCIe Transport 補充。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4, 文件頁 52-54, PDF 頁 78-80
02.06.PCIe 初始化以 CAP 判斷能力與 timeout,設定 AQA/ASQ/ACQ 與 CC,接著等待 CSTS.RDY。ready mode 與 CRTO 會影響 host 等待與錯誤處理。
來源:NVME-BASE-2.4, Rev. 2.4, §3.5.1, 3.5.3-3.5.4, 文件頁 105-113, PDF 頁 131-139
| Property 或設定 | 主機與控制器各自提供什麼 | 初始化時的先後關係 |
|---|---|---|
| CAP | 能力與界限 | 在寫設定前讀 |
| AQA/ASQ/ACQ | Admin queue 大小與位址 | 需符合 page/alignment 能力 |
| CC | host 選擇與 enable | 寫入值要與 CAP 相容 |
| CSTS | controller 回報狀態 | RDY/CFS/SHST 不可互相替代 |
03.01.假設 SQ1 與 SQ2 都指向 CQ1。SQ 決定命令從哪裡來,CQ 決定完成項目往哪裡放;這不代表兩個 SQ 的命令會合併成單一 FIFO 執行順序。
03.02.Arbitration 規則在有多個待處理 SQ 時選取工作,priority 或 weight 影響服務分配。它不會把任意兩筆命令建立成資料相依關係,也不保證完成順序與提交順序完全相同。
03.03.主機讀 CQE 的 SQID 與 CID,分別找到來源 SQ 與其中的命令。只保留 CID 而忽略 SQID,在不同 SQ 使用相同 CID 時就無法唯一辨認。
來源:NVME-BASE-2.4, Rev. 2.4, §3.3.1, 文件頁 88-91, PDF 頁 114-117
來源:NVME-BASE-2.4, Rev. 2.4, §3.4.1-3.4.5, 文件頁 101-105, PDF 頁 127-131
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3, 文件頁 40, PDF 頁 66
03.05.PCIe queue 由 host-addressable memory 中的環形 buffer、head 與 tail pointer 構成。host 建立 I/O Completion Queue 後再建立對應 Submission Queue,並以 doorbell 推進 pointer。
來源:NVME-BASE-2.4, Rev. 2.4, §3.3.1, 文件頁 88-91, PDF 頁 114-117
03.06.command processing 要分開看 ordering、fused/atomic semantics、arbitration 與 outstanding command 上限;priority 屬於 Submission Queue,不是每一筆 command 的獨立欄位。
來源:NVME-BASE-2.4, Rev. 2.4, §3.4.1-3.4.5, 文件頁 101-105, PDF 頁 127-131
| 佇列狀態或選取方式 | 它決定什麼 | 不能由此推論什麼 |
|---|---|---|
| empty | head == tail 且 phase/ownership 符合 empty 定義 | 沒有可取走 entry |
| full | 下一個 tail 會追上尚未釋放 head | host 不得覆寫 entry |
| Round Robin | 候選 SQ 輪流取得服務 | 不代表 command completion 依提交順序 |
| Weighted RR + Urgent | priority class 與 weight 影響選擇 | 仍需依適用設定解讀 |
04.01.主機配置接收 Read 資料的 buffer,透過 DPTR 告訴控制器可使用的地址。這份記憶體是本次資料傳輸的目的地,不是 namespace 容量。
04.02.CMB 位於控制器,支援哪些佇列或資料用途要讀各能力位元;PMR 另有持久性與啟用規則。它們能由主機定址,不代表任何資料放進去都自動具有相同保留保證。
04.03.對每個記憶體區域列出 base、size、enabled 與可用用途,再檢查地址範圍是否符合規則。地址落在某區間內,只有該映射有效時才能按那種記憶體解讀。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4, 文件頁 52-54, PDF 頁 78-80
來源:NVME-BASE-2.4, Rev. 2.4, §3.8, 文件頁 125-129, PDF 頁 151-155
來源:NVME-BASE-2.4, Rev. 2.4, §3.2.2-3.2.4, 文件頁 80-85, PDF 頁 106-111
04.05.capacity model 分開追蹤 NVM subsystem、Endurance Group、NVM Set 與 namespace 的可用或配置容量;同一數值不可跨層級直接比較。
來源:NVME-BASE-2.4, Rev. 2.4, §3.8, 文件頁 125-129, PDF 頁 151-155
04.06.NVM Set、Endurance Group、Reclaim Group 與 Reclaim Unit 分別描述容量集合、耐久度管理與回收粒度。是否支援及其 identifier 由 Identify/log page 能力判定。
來源:NVME-BASE-2.4, Rev. 2.4, §3.2.2-3.2.4, 文件頁 80-85, PDF 頁 106-111
| 記憶體或容量層級 | 提供哪種資源 | 使用或比較前的確認 |
|---|---|---|
| CMB | controller-provided working memory | 是否能放 SQ/CQ/list/data 由能力 bit 決定 |
| PMR | 具有持久性語意的 region | enable、ready、error 與 address control 要一起看 |
| capacity model | subsystem/group/set/namespace 的容量 | 不同層級欄位不可直接相減 |
05.01.正常關機、控制器重設與 subsystem 重設,影響範圍和目的不同。正常關機提供受控的停止流程;重設則改變指定範圍的狀態。當一個 subsystem 有多個控制器時,範圍的差別尤其重要,不能把只針對一個控制器的動作當成整體重設。
05.02.狀態保留也要逐項閱讀。某個設定跨 controller reset 保留,不代表它跨 power cycle 也保留;佇列能否繼續使用同樣要看事件定義。主機提出 shutdown 要求後,還需查看控制器回報的階段,才能確認停止流程走到哪裡。
來源:NVME-BASE-2.4, Rev. 2.4, §3.6.1, 3.6.3, 文件頁 113-120, PDF 頁 139-146
來源:NVME-BASE-2.4, Rev. 2.4, §3.7, 文件頁 120-125, PDF 頁 146-151
來源:NVME-BASE-2.4, Rev. 2.4, §3.9, 文件頁 129-135, PDF 頁 155-161
來源:NVME-BASE-2.4, Rev. 2.4, §3.10-3.11, 文件頁 135-138, PDF 頁 161-164
05.03.正常 shutdown 由 host 設定 CC.SHN,controller 透過 CSTS.SHST 回報進度;NVM subsystem shutdown 是更大範圍的處理,不能與單一 controller shutdown 混為一談。
來源:NVME-BASE-2.4, Rev. 2.4, §3.6.1, 3.6.3, 文件頁 113-120, PDF 頁 139-146
05.04.NVM Subsystem Reset、Controller Level Reset 與 Queue Level Reset 的影響範圍不同;設計 recovery flow 前先確認哪一層狀態會被清除、queue 是否仍存在。
來源:NVME-BASE-2.4, Rev. 2.4, §3.7, 文件頁 120-125, PDF 頁 146-151
05.05.Keep Alive 以 KATO/KATT 建立 host 與 controller 的存活監測;本報告只保留 controller 共通與 PCIe 可用的 timer、command 與 timeout 行為。
來源:NVME-BASE-2.4, Rev. 2.4, §3.9, 文件頁 129-135, PDF 頁 155-161
05.06.privileged action 會影響其他 host 或 controller;firmware update 分成 image download、commit/activate 與可能的 reset,host 依回報的 activation action 安排流程。
來源:NVME-BASE-2.4, Rev. 2.4, §3.10-3.11, 文件頁 135-138, PDF 頁 161-164
| 停止或重設事件 | 影響的對象與目的 | 判斷完成或保留狀態的資訊 |
|---|---|---|
| normal shutdown | 保護性停止與狀態回報 | 看 SHN/SHST |
| controller reset | controller 層級狀態 | queue 是否保留要依 reset 類型 |
| NVM subsystem reset | 更大 subsystem scope | 可能影響多個 controllers |
| Keep Alive timeout | liveness failure | 不能直接等同 media failure |
06.01.以下依概念整理規格中的圖表。每組先說明讀取順序與要判斷的問題,接著列出各圖的欄位或行為說明。可以由正文的連結跳到對應組別,也可以用這一節檢查自己能否把欄位連回完整操作。
06.02.先按 controller type 選表格欄,再看每項命令或功能的支援標示。識別碼表回答「是哪一個」,能力表回答「能做什麼」;兩者要在同一控制器的上下文中連接。
回到本節的解釋與範例06.03.同一個 namespace 可以經不同控制器存取。控制器識別碼、namespace 識別碼、PCIe Function 與 port 各指不同對象,應沿圖上的連接關係逐層追蹤。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| NSID/Controller Identifier | NSID 選資料物件,控制器識別碼選控制器;是否可存取還要看附加關係。 | A、B 都能看到 NSID=7 時,Detach A 只改變 A 的存取關係。 |
| I/O/Administrative Controller | 控制器類型決定適用的命令與資源要求。 | 先辨認类型,再查命令支援表;不能假定每種控制器都提供一般資料 I/O。 |
| Domain/Port/PCIe Function | 分別描述資源域、連接位置與 PCIe 裝置功能;多控制器不等於多份 namespace 資料。 | 兩個控制器共享一個 Boot Partition 時,保護狀態的影響會跨過單一控制器。 |
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3, Figure 23, 文件頁 39, PDF 頁 65
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.1, Figure 24, 文件頁 41, PDF 頁 67
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.2, Figure 25, 文件頁 42, PDF 頁 68
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.2, Figure 26, 文件頁 42, PDF 頁 68
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.3, Figure 27, 文件頁 44, PDF 頁 70
來源:NVME-BASE-2.4, Rev. 2.4, §3.2.1, Figure 65, 文件頁 78-79, PDF 頁 104-105
來源:NVME-BASE-2.4, Rev. 2.4, §3.2.1.5, Figure 66, 文件頁 79, PDF 頁 105
來源:NVME-BASE-2.4, Rev. 2.4, §3.2.5.1, Figure 71, 文件頁 86, PDF 頁 112
Base23-1控制器類型決定它以資料 I/O 或管理為主要角色。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3, Figure 23, 文件頁 39, PDF 頁 65
Base23-2I/O controller 可以處理 namespace 資料命令;Administrative controller 有管理用途,但不能因此推論也可執行一般 Read。
Base24-1多個 I/O controllers 讓同一 subsystem 提供多個資料介面。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.1, Figure 24, 文件頁 41, PDF 頁 67
Base24-2對圖中的某個 namespace,分別追查每個控制器是否附加它;控制器都屬於同一 subsystem,仍可能有不同可存取範圍。
Base25-1管理控制器與 I/O controllers 可以分工共存。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.2, Figure 25, 文件頁 42, PDF 頁 68
Base25-2管理程式使用 Administrative controller 取得管理資訊,資料路徑則使用 I/O controller;先說明角色,再介紹各自命令。
Base26-1只有 Administrative controller 的配置仍是管理介面。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.2, Figure 26, 文件頁 42, PDF 頁 68
Base26-2即使主機能送出 Admin command,也不能推論這個介面已提供一般 namespace Read/Write 路徑。
Base27-1部分 Controller ID 值有特殊用途,不能視為普通控制器編號。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.3, Figure 27, 文件頁 44, PDF 頁 70
Base27-2在控制器清單看到接近 FFFFh 的值時,先依這張表查用途;不要直接把它當成裝置上真的有第 65535 個控制器。
06.04.表格先以命令、log 或 Feature 選一列,再以控制器類型或目前狀態選一欄。M/O 等標記及數字註腳說明支援要求與條件,不能將抽出的 O8、M3 當成另一個 NVMe 欄位。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| 命令/LID/FID 的列 | 三者是不同識別空間;選列前先確認目前使用哪一類操作。 | Get Log Page 的 LID 與 Set Features 的 FID 即使同為 0Bh,也要查各自的表。 |
| 控制器類型/處理狀態的欄 | 控制器類型決定支援要求;清除期間的狀態欄則限制當時接受的操作。 | 裝置平常支援某命令,並不表示 Restricted Processing 中仍允許執行。 |
| 條件註腳 | 說明支援位元、所需能力或例外,需與對應儲存格合讀。 | 一列標示 optional 時,先查控制器宣告的能力,再決定能否使用。 |
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.3.3, Figure 28, 文件頁 45-47, PDF 頁 71-73
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.4, Figure 30, 文件頁 47-48, PDF 頁 73-74
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.4, Figure 31, 文件頁 48-50, PDF 頁 74-76
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.5, Figure 32, 文件頁 50-52, PDF 頁 76-78
來源:NVME-BASE-2.4, Rev. 2.4, §3.5.3, Figure 84, 文件頁 110-111, PDF 頁 136-137
來源:NVME-BASE-2.4, Rev. 2.4, §3.10, Figure 91, 文件頁 135, PDF 頁 161
Base28-1Admin 命令支援要求需要連同表格註腳閱讀。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.3.3, Figure 28, 文件頁 45-47, PDF 頁 71-73
Base28-2某列為 optional 且帶條件註記時,先確認條件是否成立,再查 Identify 能力;表內列出命令並不表示裝置已實作。
Base30-1共通 I/O 命令的要求與個別命令集能力一起決定可用操作。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.4, Figure 30, 文件頁 47-48, PDF 頁 73-74
Base30-2使用與資料放置有關的操作前,先看支援要求,再查相應功能是否存在,不以操作碼表取代能力判斷。
Base31-1Log Page 支援表描述哪些紀錄在何種條件下需要提供。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.4, Figure 31, 文件頁 48-50, PDF 頁 74-76
Base31-2一個健康狀態 log 與一個選用功能 log,可能有不同支援要求;先看列與註腳,再選要讀的 LID。
Base32-1Feature 支援表區分功能存在、控制器類型與附加條件。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3.5, Figure 32, 文件頁 50-52, PDF 頁 76-78
Base32-2某 Feature 在 I/O controller 有條件支援,並不代表在管理控制器也有相同作用範圍。
06.05.沿能力→佇列配置→啟用→就緒的順序連接 CAP、AQA/ASQ/ACQ、CC、CSTS。寄存器布局圖中的 offset 是定位欄位,狀態圖中的箭頭才描述條件成立後的轉移。
回到本節的解釋與範例06.06.主機先讀 CAP 選合法設定,建立 Admin 佇列,再寫 CC 啟用;控制器以 CSTS 回報結果。CAP 是可選範圍,CC 是要求值,CSTS 是實際狀態,三者不能互相代替。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| CAP.MPSMIN/MPSMAX → CC.MPS | 能力給可支援的記憶體 page 範圍,主機選其中一個 page 大小。 | 後續 ASQ、ACQ 與資料指標的對齊都要使用選定的 page 大小。 |
| AQA.ASQS/ACQS → ASQ.ASQB/ACQ.ACQB | AQA 設定兩個 Admin 佇列的大小;ASQ、ACQ 給它們在主機記憶體的位置。 | 大小編碼與基底位址分別設定,不能只配置 buffer 就認為控制器已知道位置。 |
| CC.EN/CSS/AMS → CSTS.RDY/CFS | 主機選命令集、仲裁方式並要求啟用,控制器回報就緒或致命狀態。 | CC.EN=1 是要求,仍需等待符合規則的 RDY,才能進入下一階段。 |
| CRMS/CRIME/CRTO;SHN/SHST | 前一組連接就緒模式與逾時;後一組連接關機要求與進度。 | 寫入關機要求後依 SHST 確認處理,不能把要求值当作完成結果。 |
| CAP.BPS/DSTRD/CMBS/PMRS;NSSR/NSSD | 分別用於 Boot 支援、doorbell 間距、記憶體能力與 subsystem 層級控制。 | Doorbell 間距由 DSTRD 推算;不使用 doorbell 的教學步驟無須把它當成前提。 |
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4, Figure 33, 文件頁 52-53, PDF 頁 78-79
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4, Figure 34, 文件頁 54, PDF 頁 80
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.1, Figure 36, 文件頁 55-58, PDF 頁 81-84
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.5, Figure 41, 文件頁 60-63, PDF 頁 86-89
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.5, Figure 42, 文件頁 63-65, PDF 頁 89-91
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.6, Figure 43, 文件頁 66, PDF 頁 92
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.6, Figure 44, 文件頁 66, PDF 頁 92
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.6, Figure 45, 文件頁 66, PDF 頁 92
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.9, Figure 46, 文件頁 67, PDF 頁 93
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.19, Figure 56, 文件頁 72, PDF 頁 98
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.21, Figure 57, 文件頁 73, PDF 頁 99
Base33-1Property 總表提供各暫存器的位置與存取概要。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4, Figure 33, 文件頁 52-53, PDF 頁 78-79
Base33-2要讀 CSTS,先在總表找到 offset,再到 CSTS 欄位表解釋 RDY;總表與欄位表回答不同層次的問題。
Base34-1記憶體介面的 property 空間也包含依 stride 排列的 doorbells。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4, Figure 34, 文件頁 54, PDF 頁 80
Base34-2QID 改變時,doorbell offset 依 CAP.DSTRD 推進;不能把所有佇列都寫入同一個固定暫存器位置。
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.07.版本欄位由 MJR、MNR、TER 組成,分別表示主版本、次版本與修訂部分。查支援規則時應使用完整版本,不把其中一段當成十進位小數。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| MJR/MNR/TER | 每段是独立整數欄位;重設值表說明對應規格版本應回報的組合。 | 2、4、0 表示版本 2.4.0,不能把三個欄位相加來比較。 |
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.1, Figure 37, 文件頁 58, PDF 頁 84
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.1, Figure 38, 文件頁 58-59, PDF 頁 84-85
Base37-1版本描述子由主版、次版與修訂版組成。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.1, Figure 37, 文件頁 58, PDF 頁 84
Base37-2MJR=2、MNR=4、TER=0 組成版本 2.4.0;三個欄位不應當成單一十進位流水號。
Base38-1版本 property 的 reset 值對應規格版本的編碼方式。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.1, Figure 38, 文件頁 58-59, PDF 頁 84-85
Base38-2對照 Version property 與版本描述表時,先拆開各欄位再比較,不能只比字串長度。
Base41-1CC 是主機選擇控制器運作設定的地方。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.5, Figure 41, 文件頁 60-63, PDF 頁 86-89
Base41-2完成佇列與格式設定後設 EN=1;是否已能正常使用,還要到 CSTS 看 RDY,不能只讀回 EN。
Base42-1CSTS 回報控制器目前狀態,不是主機的設定要求。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.5, Figure 42, 文件頁 63-65, PDF 頁 89-91
Base42-2CC.EN 已是 1、CSTS.RDY 仍是 0,表示主機已要求啟用但控制器尚未回報 ready;兩者並不矛盾。
Base44-1AQA 分別設定 Admin SQ 與 CQ 的項目數。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.6, Figure 44, 文件頁 66, PDF 頁 92
Base44-2ASQS=63 表示 64 個 SQ entries;ACQS 有自己的欄位,不能直接以 SQ 長度取代 CQ 長度。
Base45-1ASQ 保存 Admin Submission Queue 的主機記憶體基底位址。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.6, Figure 45, 文件頁 66, PDF 頁 92
Base45-2命令從這個位址開始按 entry 大小排列;ASQ 不是下一筆命令的 CID,也不會隨每次提交而改成 tail 值。
Base46-1ACQ 保存 Admin Completion Queue 的主機記憶體基底位址。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.9, Figure 46, 文件頁 67, PDF 頁 93
Base46-2主機讀完成項目時,在 ACQ 所指環形空間依 head 前進;更新 head 不等於修改 ACQ 基底。
Base57-1CRTO 為不同 ready 模式提供等待時間資訊。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.21, Figure 57, 文件頁 73, PDF 頁 99
Base57-2若選擇不同 CC.CRIME 模式,主機需配合對應 timeout;不能永遠只用一個固定等待時間。
06.08.INTMS 與 INTMC 都對應中斷遮罩,但寫入 1 的效果相反;主機寫的是要修改哪些位元,不是完整的新遮罩值。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| IVMS/IVMC | INTMS 寫 1 設定遮罩,INTMC 寫 1 清除遮罩;寫 0 保留相應位元。 | 只想解除 vector 2 的遮罩時,向清除介面寫對應 bit,不必改掉其他 vectors。 |
| 中斷模式 | 哪些遮罩機制適用需依目前使用的中斷模式判斷。 | 先確認 MSI/MSI-X 等模式,再解讀相關遮罩來源。 |
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.2, Figure 39, 文件頁 59, PDF 頁 85
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.2, Figure 40, 文件頁 59, PDF 頁 85
Base39-1INTMS 以寫入位元來設定中斷遮罩。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.2, Figure 39, 文件頁 59, PDF 頁 85
Base39-2要遮罩某個向量,寫入它對應的 bit;讀寫這種 set 寄存器的語意,不等同把整個遮罩暫存器覆寫成相同數值。
Base40-1INTMC 用來清除對應中斷遮罩位元。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.2, Figure 40, 文件頁 59, PDF 頁 85
Base40-2解除上一張圖所設定的遮罩時,使用 clear 語意的位元;不能因名稱相近就將 INTMS 的寫入當成解除操作。
06.09.Properties 路徑與 LID 15h 路徑都讀 Boot Partition,但要求與完成證據不同;兩條路徑的位移起點也應分別標示。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| ABPID/BPSZ/BRS | 分別給 active partition、以 128 KiB 為單位的分割區大小及 Properties 讀取狀態;ABPID 不等於本次目標 BPID。 | 目前 active 是 BP0 時,主機仍可能指定讀取 BP1。 |
| BPID/BPROF/BPRSZ | BPID 選目標分割區;BPROF 與 BPRSZ 分別以 4 KiB 為單位指定起點與讀取量。 | 先用起點加長度檢查未超出 BPSZ,再提供主機接收位置。 |
| BMBBA | 指向接收開機資料的主機記憶體;與 HMB Feature 借給控制器的記憶體用途不同。 | 圖上標為 Host Memory Buffer 的接收區,不代表必須先啟用 Host Memory Buffer Feature。 |
| LID 15h 的 BPID/BPINFO/BPD | log 先有表頭,再有 Boot Partition Data;Get Log Page 的 offset 從 log 起點計算。 | 讀映像 offset 0 的資料時,需考慮它在 log 內位於表頭之後,不能直接把兩種 offset 畫在同一起點。 |
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.12, Figure 49, 文件頁 69, PDF 頁 95
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.12, Figure 50, 文件頁 69-70, PDF 頁 95-96
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.14, Figure 51, 文件頁 70, PDF 頁 96
Base49-1BPINFO 把啟用分割區、讀取狀態與大小放在一起回報。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.12, Figure 49, 文件頁 69, PDF 頁 95
Base49-2主機要求讀 Partition 1 後,BRS 用來觀察讀取狀態;ABPID 仍是啟用分割區資訊,不能拿它替代此次讀取選擇。
Base50-1BPRSEL 指定 Boot Partition 讀取的目標、起点與長度。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.12, Figure 50, 文件頁 69-70, PDF 頁 95-96
Base50-2要讀 Partition 1 的一段資料,BPID 選 1,BPROF 與 BPRSZ 按欄位單位設定;三者合起來才是一個完整讀取範圍。
Base51-1BPMBL 提供接收 Boot Partition 資料的主機記憶體位置。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.14, Figure 51, 文件頁 70, PDF 頁 96
Base51-2BPRSEL 選的是裝置上的來源區段,BPMBL 選的是主機目的 buffer;相同的數字在兩處代表不同位址空間。
06.10.先用環形圖追蹤 head/tail 移動及位置釋放,再閱讀 Round Robin 或權重選擇流程。佇列位置圖與仲裁圖回答不同問題,不用其中一張推論完成順序。
回到本節的解釋與範例06.11.SQ 保存待處理命令,CQ 保存完成項目。Head 與 Tail 描述位置,CID 描述命令身分;多個 SQ 可以把完成結果送到同一 CQ,因此結果還需要 SQID。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| SQ Head/SQ Tail | 比較已取走與已提交的位置以辨認空、滿及可用空間;位置到達佇列末端會回繞。 | 深度為 8 時,index 7 的下一個位置是 0;不能用普通整數大小判斷新舊。 |
| CQ Head/Phase Tag/SQID+CID | 主機交回已讀取的 CQ 位置;Phase Tag 協助辨認新完成項目,SQID 與 CID 找回原要求。 | 兩個 SQ 可以都使用 CID=3;回覆必須同時保留 SQID 才不會配錯。 |
來源:NVME-BASE-2.4, Rev. 2.4, §3.3.1.4, Figure 73, 文件頁 91, PDF 頁 117
來源:NVME-BASE-2.4, Rev. 2.4, §3.3.1.4, Figure 74, 文件頁 91, PDF 頁 117
Base73-1環形佇列的空狀態由 head 與 tail 的關係判斷。
來源:NVME-BASE-2.4, Rev. 2.4, §3.3.1.4, Figure 73, 文件頁 91, PDF 頁 117
Base73-2主機尚未提交新命令時 head 與 tail 相等;相等代表沒有待處理項目,不是表示 buffer 的所有 bytes 都是零。
Base74-1環形佇列的滿狀態需要保留可辨識空、滿的配置。
來源:NVME-BASE-2.4, Rev. 2.4, §3.3.1.4, Figure 74, 文件頁 91, PDF 頁 117
Base74-2在只能容納下一筆之前檢查 tail 再前進是否追上 head;不能因實體 buffer 還有某些舊資料就認為仍有空位。
06.12.仲裁圖上的箭頭表示控制器選取 Submission Queue 的順序或資格,不表示每筆命令執行所需的時間,也不保證不同 queue 的完成順序。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| Round Robin/Priority Class | 先辨認 queue 所屬類別,再看同類 queue 如何輪流取用。 | 高優先級的取用機會與單筆命令花費的 media 時間是不同量。 |
| Arbitration Burst/權重 | Burst 限制一次取用量,權重影響各類別相對機會。 | 權重比例不能直接當成固定的 IOPS 保證,還需考慮 queue 是否有待處理命令。 |
來源:NVME-BASE-2.4, Rev. 2.4, §3.4.4, Figure 80, 文件頁 103, PDF 頁 129
來源:NVME-BASE-2.4, Rev. 2.4, §3.4.4.2, Figure 81, 文件頁 104, PDF 頁 130
Base80-1Round Robin 仲裁輪流給各 SQ 取得服務的機會。
來源:NVME-BASE-2.4, Rev. 2.4, §3.4.4, Figure 80, 文件頁 103, PDF 頁 129
Base80-2SQ1 持續有命令、SQ2 只有少量命令時,按圖追每次輪到哪個 queue;仲裁選擇與命令完成先後仍是不同事情。
Base81-1Weighted Round Robin 依優先類別與權重分配服務機會。
來源:NVME-BASE-2.4, Rev. 2.4, §3.4.4.2, Figure 81, 文件頁 104, PDF 頁 130
Base81-2提高某類 queue 權重會影響仲裁分配,但不能把它解釋成每一筆命令都有獨立 priority 欄位。
06.13.資源關係圖先區分工作記憶體和區塊儲存容量,再沿 subsystem 到各群組及 namespace 的關係閱讀。CMB/PMR 欄位則配對位置、大小、允許用途、啟用及就緒狀態。
回到本節的解釋與範例06.14.CMB 與 PMR 的閱讀順序是支援能力、位址與大小、允許用途、啟用、就緒。主機能映射一段位址,不代表這段位址已能承載任何種類的佇列或資料。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| BIR/CBA/CMSE/CRE | BAR 選擇與基底位址決定映射位置,控制位元決定是否啟用對應功能。 | 先拼好高低位址並檢查對齊,再依規則啟用,最後讀回狀態。 |
| SZ/SZU;WDS/RDS/LISTS/CQS/SQS | 大小要搭配單位;用途位元分別描述資料、指標清單與佇列可否放在此區。 | 支援放讀取資料不會自動表示也支援放 CQ。 |
| CBAI/NRDY/ERR/HSTS | 狀態指出位址有效性、是否就緒及其他狀況;與控制位元不同。 | EN 已設為 1 時,仍需以 NRDY 等狀態確認可用。 |
| EBS/SWTP 的數值與單位 | 彈性緩衝容量及持續寫入吞吐量各有數值和縮放單位,不能混成一個速度。 | 先換算 buffer bytes 與 bytes/s,再分別討論短暫突發與持續傳輸。 |
| PMRWBM/PMRTO/PMRTU | 持久化寫入行為與就緒時間各由自己的能力欄位定義。 | 寫入已送到映射區域後,還要依 PMR 的可見性與持久化規則判斷完成保證。 |
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.9, Figure 47, 文件頁 67-68, PDF 頁 93-94
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.11, Figure 48, 文件頁 68-69, PDF 頁 94-95
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.14, Figure 52, 文件頁 70-71, PDF 頁 96-97
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.16, Figure 53, 文件頁 71, PDF 頁 97
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.16, Figure 54, 文件頁 71, PDF 頁 97
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.19, Figure 55, 文件頁 72, PDF 頁 98
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.21, Figure 58, 文件頁 73-74, PDF 頁 99-100
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.22, Figure 59, 文件頁 74, PDF 頁 100
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.23, Figure 60, 文件頁 75, PDF 頁 101
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.24, Figure 61, 文件頁 76, PDF 頁 102
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.24, Figure 62, 文件頁 76, PDF 頁 102
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.26, Figure 63, 文件頁 77, PDF 頁 103
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.26, Figure 64, 文件頁 77, PDF 頁 103
Base47-1CMBLOC 說明控制器記憶體 buffer 映射到哪個 BAR 及位置。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.9, Figure 47, 文件頁 67-68, PDF 頁 93-94
Base47-2主機必須先找到該 BAR 的實際位址,再按 CMBLOC 定位;欄位中的 BAR 編號不是主機可直接讀寫的實體位址。
Base48-1CMBSZ 同時描述 CMB 大小與允許用途。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.11, Figure 48, 文件頁 68-69, PDF 頁 94-95
Base48-2看到 CMB 有足夠容量,仍要查 SQS、CQS 等用途 bits;大小足夠不代表可以任意把 SQ、CQ 或資料都放進去。
Base52-1CMBMSC 控制 CMB 記憶體空間的映射與啟用。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.14, Figure 52, 文件頁 70-71, PDF 頁 96-97
Base52-2選好 CBA 後,仍要依 CRE、CMSE 的規則啟用;提供一個非零位址不等於控制器已接受映射。
Base53-1CMBSTS 回報 CMB 位址設定是否被判為無效。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.16, Figure 53, 文件頁 71, PDF 頁 97
Base53-2設定 CMBMSC 後若 CBAI 表示位址不合法,就不能只因 CBA 已寫入而認定這塊記憶體可用。
Base54-1CMBEBS 用大小與單位描述彈性緩衝能力。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.16, Figure 54, 文件頁 71, PDF 頁 97
Base54-2兩個裝置報同樣數值、卻使用不同 CMBSZU 時,實際 bytes 不同;先換算再比較可吸收的資料量。
Base55-1CMBSWTP 描述 CMB 可持續接收寫入的能力。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.19, Figure 55, 文件頁 72, PDF 頁 98
Base55-2短時間寫入能被 buffer 吸收,不代表長時間速率也相同;將這張表的 sustained throughput 與前一張 buffer 大小分開理解。
Base58-1PMRCAP 描述 Persistent Memory Region 的支援、映射與時間參數。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.21, Figure 58, 文件頁 73-74, PDF 頁 99-100
Base58-2打算使用 PMR 前,先確認支援的讀寫與記憶體映射方式,再解 timeout 單位,不從暫存器存在推論所有能力皆可用。
Base59-1PMRCTL 的 EN 是啟用 PMR 的要求。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.22, Figure 59, 文件頁 74, PDF 頁 100
Base59-2設 EN=1 後,仍需觀察 PMRSTS.NRDY;與控制器啟用相同,提出要求與可用狀態分別由不同欄位表達。
Base60-1PMRSTS 回報 PMR 是否 ready 及是否有錯誤。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.23, Figure 60, 文件頁 75, PDF 頁 101
Base60-2NRDY 尚未清除時,主機不能把已設定 EN 當成可正常使用的唯一依據。
Base61-1PMREBS 描述 PMR 彈性緩衝大小。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.24, Figure 61, 文件頁 76, PDF 頁 102
Base61-2換算 PMRSZU 與大小值後得到可緩衝 bytes,再與預計的突發資料量比較;它不是持續頻寬數值。
Base62-1PMRSWTP 描述 PMR 持續寫入吞吐量。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.24, Figure 62, 文件頁 76, PDF 頁 102
Base62-2相同 buffer 大小的兩個 PMR,若持續吞吐量不同,在長時間寫入下仍會有不同表現。
Base63-1PMRMSCL 保存 PMR 映射位址的低部與控制欄位。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.26, Figure 63, 文件頁 77, PDF 頁 103
Base63-2組合 CBA 時要把控制 bits 與位址 bits 分開;不能把整個暫存器原值直接當成完整實體位址。
Base64-1PMRMSCU 補齊 PMR 映射位址的高部。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.26, Figure 64, 文件頁 77, PDF 頁 103
Base64-2主機位址超過低 32-bit 可表示範圍時,必須連同高部合併;只讀低部會指向另一個位置。
06.15.Namespace 提供主機可定址的資料空間;NVM Set、Endurance Group 與 Reclaim Group 描述不同的儲存組織關係。圖上的包含關係需沿父子層次閱讀,不能由圖形大小推論容量。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| TNVMCAP/UNVMCAP | 分別描述 subsystem 的總容量與尚未配置容量;讀值時保留來源指定的容量單位。 | 先由總量扣除已配置量理解可用空間,不能把 UNVMCAP 當成某個 namespace 的剩餘 LBA。 |
| TEGCAP/UEGCAP/MEGCAP | 描述 Endurance Group 相關容量;需要知道欄位屬於哪個 group 才能比較。 | 兩個 group 的未配置容量不能直接當成可任意互換的同一份空間。 |
| NVM Set/Reclaim Group/Namespace | NVM Set 與回收組織是不同維度;namespace 的歸屬決定要查哪組能力與容量。 | 沿圖找出 namespace 所屬的 Endurance Group,再解釋其配置限制。 |
來源:NVME-BASE-2.4, Rev. 2.4, §3.2.2, Figure 67, 文件頁 81, PDF 頁 107
來源:NVME-BASE-2.4, Rev. 2.4, §3.2.2, Figure 68, 文件頁 81, PDF 頁 107
來源:NVME-BASE-2.4, Rev. 2.4, §3.2.3, Figure 69, 文件頁 83, PDF 頁 109
來源:NVME-BASE-2.4, Rev. 2.4, §3.2.4, Figure 70, 文件頁 85, PDF 頁 111
來源:NVME-BASE-2.4, Rev. 2.4, §3.8.2, Figure 86, 文件頁 126, PDF 頁 152
來源:NVME-BASE-2.4, Rev. 2.4, §3.8.2.2, Figure 87, 文件頁 127, PDF 頁 153
來源:NVME-BASE-2.4, Rev. 2.4, §3.8.2.3, Figure 88, 文件頁 128, PDF 頁 154
來源:NVME-BASE-2.4, Rev. 2.4, §3.8.3, Figure 89, 文件頁 129, PDF 頁 155
Base86-1簡單 subsystem 範例提供容量模型的起始配置。
來源:NVME-BASE-2.4, Rev. 2.4, §3.8.2, Figure 86, 文件頁 126, PDF 頁 152
Base86-2先固定只有圖中這些元件,再閱讀容量數字;後面更複雜的配置會增加層級,不能沿用一個總量代表每層。
Base87-1垂直組織的範例強調沿層級追蹤容量。
來源:NVME-BASE-2.4, Rev. 2.4, §3.8.2.2, Figure 87, 文件頁 127, PDF 頁 153
Base87-2從 namespace 向上追到集合和 subsystem,逐層確認數值代表配置量還是可用量,不直接把不同層的欄位相減。
Base88-1雙 NAND 配置展示不同儲存資源如何組成 subsystem。
來源:NVME-BASE-2.4, Rev. 2.4, §3.8.2.3, Figure 88, 文件頁 128, PDF 頁 154
Base88-2圖中有兩組 NAND,不代表對主機一定呈現兩個相同大小的 namespace;先追實際對應關係。
Base89-1容量欄位的意義取決於 subsystem 或 Endurance Group 層級。
來源:NVME-BASE-2.4, Rev. 2.4, §3.8.3, Figure 89, 文件頁 129, PDF 頁 155
Base89-2TNVMCAP 與 UNVMCAP 描述整體容量及未配置量;要比較某個 Endurance Group,則使用相應群組欄位。
Base65-1有效 NSID 還要區分是否已配置及是否附加到控制器。
來源:NVME-BASE-2.4, Rev. 2.4, §3.2.1, Figure 65, 文件頁 78-79, PDF 頁 104-105
Base65-2NSID 3 在有效範圍內卻尚未建立 namespace 時屬 unallocated;已建立但未附加到控制器 A 時,對 A 仍是 inactive。
Base66-1NSID 分類圖把數值範圍、配置狀態與附加關係分成不同層。
來源:NVME-BASE-2.4, Rev. 2.4, §3.2.1.5, Figure 66, 文件頁 79, PDF 頁 105
Base66-2若 NN=8,NSID 9 屬 invalid;NSID 3 可能 valid 但 inactive。兩者都不能直接作正常資料存取,原因卻不同。
Base67-1namespace 與 NVM Set 的對應說明容量集合的歸屬。
來源:NVME-BASE-2.4, Rev. 2.4, §3.2.2, Figure 67, 文件頁 81, PDF 頁 107
Base67-2選一個 namespace 沿圖找到 NVM Set,再看相鄰 namespace 是否同屬該集合,不能只用 NSID 相近推論關係。
Base68-1NVM Set aware 命令需要理解其集合層級作用範圍。
來源:NVME-BASE-2.4, Rev. 2.4, §3.2.2, Figure 68, 文件頁 81, PDF 頁 107
Base68-2命令作用於某個 NVM Set 時,先辨識該集合包含的 namespace;不要以單一 NSID 的效果代表全部集合。
Base69-1另一種 NVM Set 配置用來比較 namespace 如何分布。
來源:NVME-BASE-2.4, Rev. 2.4, §3.2.3, Figure 69, 文件頁 83, PDF 頁 109
Base69-2把 Figure 67 與這張圖的 namespace 歸屬並排看,重點是關係改變,而不是方塊畫得比較大就有較多容量。
Base70-1FDP 邏輯視圖把資料放置與回收資源分開表達。
來源:NVME-BASE-2.4, Rev. 2.4, §3.2.4, Figure 70, 文件頁 85, PDF 頁 111
Base70-2主機選擇放置識別碼後,沿圖追到對應回收群組和資源;namespace 的 LBA 不會因此直接變成 NAND 實體位址。
Base71-1Domain 圖說明 subsystem 內可分開考慮的範圍。
來源:NVME-BASE-2.4, Rev. 2.4, §3.2.5.1, Figure 71, 文件頁 86, PDF 頁 112
Base71-2某個 domain 的事件或資源資訊,不能直接當成其他 domain 同步發生;先沿圖確認物件所屬。
06.16.先選事件類型與範圍,再以保留表逐項看設定及資源的結果。關機狀態圖配對 SHN 的要求和 SHST 的回報;不要把重設後某個初始值當成上次關機成功的證明。
回到本節的解釋與範例Base43-1NSSR 觸發的是 subsystem 層級重設。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.6, Figure 43, 文件頁 66, PDF 頁 92
Base43-2若多個控制器屬於同一 subsystem,評估 NSSR 時要考慮整體影響,不能把它當成單一 I/O queue 的重設。
Base56-1NSSD 用於要求 NVM subsystem shutdown。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.19, Figure 56, 文件頁 72, PDF 頁 98
Base56-2單一控制器的 CC.SHN 與 subsystem 的 NSSD 影響對象不同;先決定要關閉哪一層,再使用相應機制。
Base84-1部分 Admin 命令在媒體尚未 ready 時有特定回覆規則。
來源:NVME-BASE-2.4, Rev. 2.4, §3.5.3, Figure 84, 文件頁 110-111, PDF 頁 136-137
Base84-2控制器介面 ready 與媒體能處理某種命令可能是不同階段;先看 ready 模式,再查這張表對該命令的規定。
06.17.Reset、shutdown、power cycle 與逾時偵測是不同事件。圖中的前後狀態要配合受影響的控制器或 subsystem 範圍閱讀。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| Current/Saved/Default | 目前生效值、保存值與預設值有不同用途;事件發生後以適用的恢復規則決定 current。 | 保存過某個值,仍需確認此次 reset 的範圍及功能規則,才能知道它是否成為目前值。 |
| KATT/偵測時間 | Keep Alive 的計時與檢查時點共同決定何時察覺逾時。 | 在兩次檢查之間錯過一次更新,實際偵測時間可能超過單一 KATT。 |
來源:NVME-BASE-2.4, Rev. 2.4, §3.6, Figure 85, 文件頁 113, PDF 頁 139
來源:NVME-BASE-2.4, Rev. 2.4, §3.9.4.1, Figure 90, 文件頁 133, PDF 頁 159
Base85-1Shutdown 圖把主機要求與控制器處理的互動串起來。
來源:NVME-BASE-2.4, Rev. 2.4, §3.6, Figure 85, 文件頁 113, PDF 頁 139
Base85-2主機提出 shutdown 後,沿狀態回報等待完成,不能把「已送出要求」當成「可以立刻切斷電源」。
Base90-1Keep Alive timeout 的偵測延遲受計時觀察時點影響。
來源:NVME-BASE-2.4, Rev. 2.4, §3.9.4.1, Figure 90, 文件頁 133, PDF 頁 159
Base90-2一次更新剛好落在計時檢查前後,可能造成不同的偵測時刻;圖說明為何不能把 KATT 直接當成精確偵測時間。
Base91-1Privileged action 可能影響其他控制器或主機使用的狀態。
來源:NVME-BASE-2.4, Rev. 2.4, §3.10, Figure 91, 文件頁 135, PDF 頁 161
Base91-2韌體切換或 namespace 配置變更不一定只影響送出命令的程序;先確認作用範圍,再談協調需求。
06.18.NSID 0h 無效,FFFFFFFFh 是 broadcast 值;其餘 NSID 還要區分 allocated/unallocated 與 active/inactive,不能只看數字是否落在範圍內。
來源:NVME-BASE-2.4, Rev. 2.4, §3.2.1, 文件頁 78-80, PDF 頁 104-106
06.19.domain 是 NVM subsystem 內的故障/通訊邊界。多 domain subsystem 的 identifier 必須(shall)在該 subsystem 內唯一。
來源:NVME-BASE-2.4, Rev. 2.4, §3.2.5, 文件頁 85-88, PDF 頁 111-114
07.01.Capability 描述能做什麼;初始化與 ready state 描述目前能否開始操作。仍須完成 queue 設定、啟用與 readiness 確認,再依適用條件使用該功能。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4, 文件頁 52-54, PDF 頁 78-80
來源:NVME-BASE-2.4, Rev. 2.4, §3.5.1, 3.5.3-3.5.4, 文件頁 105-113, PDF 頁 131-139
07.02.Queue 提交順序、controller 選取工作及完成順序是不同概念。一般不能只靠 SQ 位置推論完成順序;有相依性時應使用規格定義的同步或命令機制。
來源:NVME-BASE-2.4, Rev. 2.4, §3.3.1, 文件頁 88-91, PDF 頁 114-117
來源:NVME-BASE-2.4, Rev. 2.4, §3.4.1-3.4.5, 文件頁 101-105, PDF 頁 127-131
07.03.Shutdown 包含 host 的通知及 controller 的完成狀態,讓關機前的處理有明確交接;reset 依其層級改變 controller 或 subsystem 狀態。它們的觸發、範圍和保留狀態不同。
來源:NVME-BASE-2.4, Rev. 2.4, §3.6.1, 3.6.3, 文件頁 113-120, PDF 頁 139-146
來源:NVME-BASE-2.4, Rev. 2.4, §3.7, 文件頁 120-125, PDF 頁 146-151
07.04.Namespace 提供以 logical blocks 存取的儲存空間;CMB、PMR 等區域有各自用途、存取方式及持久性規則。位於同一裝置不代表它們使用相同的容量與資料模型。
來源:NVME-BASE-2.4, Rev. 2.4, §3.2.2-3.2.4, 文件頁 80-85, PDF 頁 106-111
來源:NVME-BASE-2.4, Rev. 2.4, §3.8, 文件頁 125-129, PDF 頁 151-155