NVMe 自問自答題庫:Interrupt 設定與完成通知

NVMe · Q1–328

NVM Express Base 2.4NVM Command Set 1.3NVMe over PCIe Transport 1.4

Q286–Q296

Interrupt 設定與完成通知

先確認 CQE 真的存在,再查通知如何送到 Host。本冊把 CQ 關聯、合併、mask 與 Host 處理分開,避免把沒有中斷當成沒有完成。

CQE
Completion Queue Entry,佇列中的完成項目
CQ
Completion Queue,完成佇列

每個問題都接著完整解說,依內容帶讀欄位、比較機制或追蹤流程。先看本冊總覽,再沿問題閱讀;必要條件與正常路徑直接顯示。所有數字案例均為教學假設;Status 以 SCT/SC 表示,代碼後的 h 代表十六進位。

SCT
Status Code Type,完成狀態代碼類型

四個控制,四個不同問題

FID09h.CD 停用的是 coalescing,不是 interrupt。

控制欄位/介面決定什麼
CQ 通知路徑Create CQ.IV/IEN用哪個 vector、是否通知
合併FID08h.TIME/THR建議合併時間與數量
單 vector 例外FID09h.CD是否停用該 vector 合併
遮蔽INTMS/INTMC 或 MSI-X masks是否允許送出中斷
CQ
Completion Queue,完成佇列
MSI-X
Message Signaled Interrupts Extension,表格式訊息中斷

舉例看懂:兩條 CQ 共用 IV3,mask=1 時仍可能寫入 CQE。解除 mask 後,一次通知可讓 Host 處理多筆完成,不要求每筆補送一次中斷。

來源:Base 2.4 §5.2.30.2.1–5.2.30.2.2 · Base 2.4 §3.1.4 (INTMS, INTMC) · PCIe Transport 1.4 §3.5–3.5.2 (interrupt delivery and masks), 3.8.4 · Base 2.4 §5.3.1–5.3.2

需要時回顧本篇名詞
Controller / namespace
controller 接收命令並管理存取;namespace 是命令可指定的一份邏輯儲存空間。NVM subsystem 則包含 controller 與非揮發儲存資源,同一 subsystem 可以有多個 controller。
SQ / CQ / SQE / CQE
Submission Queue(SQ)是提交佇列,Completion Queue(CQ)是完成佇列;SQE 與 CQE 分別是其中的一筆命令及完成項目。QID 識別 queue,CID 區分同一 SQ 中尚未完成的命令,NSID 則識別 namespace。
Register / Identify / Feature / Log
Register 提供可存取的控制或狀態資訊;Identify 查詢物件的能力與屬性;Feature 用來讀取或變更工作設定;Log Page 回報特定種類的狀態或紀錄。FID、LID、CNS、CSI 則分別用來選擇 Feature、Log Page、Identify 資料結構及命令集。
index / offset / zero-based
index 指出清單中的第幾筆,通常從 0 起算;offset 表示與起點相隔多遠,解讀時必須確認單位。若數量欄位採 zero-based 編碼,實際數量等於欄位值加 1;但不是所有欄位看到 0 都要加 1。Dword 是 4 bytes,1 byte 是 8 bits。
Scope / reset / retention
scope 表示操作影響哪些物件;retention 表示狀態是否保留。清除 CC.EN 所觸發的 Controller Reset,是 Controller Level Reset(CLR)的一種。同屬 CLR 的不同觸發方式,仍可能採用不同的 Register 保留規則。

本冊題目

  1. Q286 · CQ 如何指定 Interrupt Vector?
  2. Q287 · 多條 CQ 共用 Vector 與獨立 Vector 有何不同?
  3. Q288 · Interrupt Coalescing 的 Threshold 與 Time 如何作用?
  4. Q289 · 如何停用 Interrupt Coalescing?
  5. Q290 · FID09h 是遮蔽中斷嗎?真正的 Mask 要如何設定?
  6. Q291 · Vector 被遮蔽時,Controller 還能寫 CQE 嗎?
  7. Q292 · 解除 Mask 後如何處理累積完成?
  8. Q293 · 已被 CQ 使用的 Vector 可以修改設定嗎?
  9. Q294 · Reset 後中斷設定要如何恢復?
  10. Q295 · Queue 刪除後如何回收中斷資源?
  11. Q296 · 如何比對 Interrupt、CQ 與實際完成行為?

Q286 CQ 如何指定 Interrupt Vector?

跟著解說理解

CQ 決定完成結果放在哪裡,IV 決定透過哪個中斷通知 Host,兩個編號不必相同。

1. 操作前先準備什麼

關聯建立在 I/O CQ 上,SQ 透過 CQID 間接使用該通知路徑。

SQ
Submission Queue,提交佇列
CQID
Completion Queue Identifier,完成佇列識別碼

先確認 PCIe 中斷模式及已配置的 vector 數,再建立 CQ。

Create CQ.CDW11 的 IV[31:16] 選 vector,IEN[1] 啟用該 CQ 中斷;PC[0] 控制記憶體配置。

2. 先後順序與完成條件

配置中斷資源、建立 CQ、建立關聯 SQ,之後才送 I/O 驗證通知。

SQ
Submission Queue,提交佇列

例如 CQ5 使用 IV2;來自 SQ7 的完成寫入 CQ5,Host 收 IV2 後查 CQ5,再由 CQE.SQID/CID 找命令。

SQID
Submission Queue Identifier,提交佇列識別碼
CID
Command Identifier,同一提交佇列內的命令識別碼

3. 未符合條件時如何處理

Create CQ 指定不合法 vector 時對應 Invalid Interrupt Vector(SCT1、SC08h);不能以 QID 是否有效代替 IV 檢查。

核對 CQ 建立成功、IV、IEN 與 Host 處理程序的 CQ 清單。

來源:PCIe Transport 1.4 §3.5–3.5.2 (interrupt delivery and masks), 3.8.4 · Base 2.4 §3.1.4 (INTMS, INTMC) · Base 2.4 §5.2.30.2.1–5.2.30.2.2 · Base 2.4 §5.3.1–5.3.2 · Base 2.4 §5.3.3–5.3.4 · Base 2.4 §4.2.1, 4.2.3–4.2.4 · Base 2.4 §4.4 · Base 2.4 §5.2.30.1 (common fields, scope and persistence) · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q287 多條 CQ 共用 Vector 與獨立 Vector 有何不同?

跟著解說理解

共用 vector 節省中斷資源,但 Host 收到通知後可能需要查多條 CQ;獨立 vector 較容易分散處理。

1. 差別在哪裡

合併門檻以 vector 為單位,同 vector 的多條 CQ 可能共同參與通知判斷。

CQE 仍以 SQID、CID 識別命令,中斷訊息不攜帶每筆命令的完整身分。

SQID
Submission Queue Identifier,提交佇列識別碼
CID
Command Identifier,同一提交佇列內的命令識別碼

2. 如何選擇與確認

查目前模式的 vector 能力與已建立 CQ 的 IV/IEN。

建立 vector→CQ 清單,收到通知後檢查相關 CQ,處理有效 Phase 的 entries,再更新各自 Head Doorbell。

兩條 CQ 共用 IV3 時,一次中斷可引導 Host 處理兩邊多筆完成;不能期待每條 CQ 各一個通知。

3. 比較時要保留的條件

沒有一個通用「中斷數必須等於 CQE 數」規則;共用加上合併會讓兩者自然不同。

比較延遲與公平性時,分別統計每條 CQ 的寫入及 Host 處理時間,避免只看共用 vector 次數。

來源:PCIe Transport 1.4 §3.5–3.5.2 (interrupt delivery and masks), 3.8.4 · Base 2.4 §3.1.4 (INTMS, INTMC) · Base 2.4 §5.2.30.2.1–5.2.30.2.2 · Base 2.4 §5.3.1–5.3.2 · Base 2.4 §5.3.3–5.3.4 · Base 2.4 §4.2.1, 4.2.3–4.2.4 · Base 2.4 §4.4 · Base 2.4 §5.2.30.1 (common fields, scope and persistence) · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q288 Interrupt Coalescing 的 Threshold 與 Time 如何作用?

跟著解說理解

合併多筆完成通知可減少 Host 中斷開銷,但可能增加通知延遲;CQE 本身仍可先寫入。

1. 先確認資料的來源與範圍

FID08h 僅適用 I/O queues,不適用 Admin CQ。THR 的門檻以 vector 為單位;TIME 則可由 controller 實作為個別 vector 計時,或跨所有 vectors 套用。

用 Get/Set FID08h 取得或設定 TIME 與 THR;Get 的 SEL=011b 回覆的是 Supported Capabilities,不是這兩個值。再查各 vector 的 FID09h.CD。

2. 欄位、單位與判讀例子

先讀 Base 2.4 Figure 543:TIME[15:8] 的單位是 100 µs;THR[7:0] 是 zero-based 的建議最小完成數。再讀 PCIe Transport 1.4 §3.5,確認這兩個值對實作的約束。

先確保兩欄非零且 CD=0,再以固定 workload 比較通知與 CQE 時間。

【模擬資料】TIME=5、THR=7 分別表示 500 µs 與每個 vector 8 筆 CQE 的建議值。假設兩條 CQ 共用同一 vector,且分別出現 3 筆與 5 筆完成,分析門檻時需一起看該 vector 的完成情況;通知不保證恰好在第 8 筆或 500 µs 發生。另一個 vector 的 TIME 如何計算,則需確認 controller 採每個 vector 計時,還是跨所有 vectors 套用。

3. 判讀時要保留的條件

PCIe Transport 1.4 要求 PCIe controller 支援相關 Get/Set Features 命令,但允許自行選擇合併算法,甚至不實作合併;不能因通知早於或晚於建議值,就單獨判定違規。

Host 更新 CQ Head 可讓計時或門檻重新開始;持續處理某 vector 的 workload 可能持續延後新通知。

來源:PCIe Transport 1.4 §3.5–3.5.2 (interrupt delivery and masks), 3.8.4 · Base 2.4 §3.1.4 (INTMS, INTMC) · Base 2.4 §5.2.30.2.1–5.2.30.2.2 · Base 2.4 §5.3.1–5.3.2 · Base 2.4 §5.3.3–5.3.4 · Base 2.4 §4.2.1, 4.2.3–4.2.4 · Base 2.4 §4.4 · Base 2.4 §5.2.30.1 (common fields, scope and persistence) · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q289 如何停用 Interrupt Coalescing?

跟著解說理解

停用合併讓通知不再套用聚合延遲,並不是關閉中斷。

1. 操作前先準備什麼

FID08h 影響 controller 的 I/O 中斷設定;FID09h.CD 可只停用指定 vector 的合併。

讀 FID08h、FID09h 及 CQ.IEN,確認目前設定與通知路徑。

TIME=0 或 THR=0 任一成立就隱含停用合併;CD=1 則禁止對該 vector 套用合併設定。

2. 先後順序與完成條件

需要全部停用時設定 FID08h;只停一條 vector 時,先有關聯 I/O CQ,再設定 FID09h。

設定後 Get 讀回正確;有可通知的完成時,依模式與 mask 判斷中斷,而非仍等待原聚合門檻。

3. 未符合條件時如何處理

即使 THR=0 的一般數量編碼看似 1,這裡仍有明確的停用規則,不能忽略。

關閉合併不保證每筆 CQE 都對應一次獨立中斷;共用 vector 與 Host 處理中的行為仍存在。

來源:PCIe Transport 1.4 §3.5–3.5.2 (interrupt delivery and masks), 3.8.4 · Base 2.4 §3.1.4 (INTMS, INTMC) · Base 2.4 §5.2.30.2.1–5.2.30.2.2 · Base 2.4 §5.3.1–5.3.2 · Base 2.4 §5.3.3–5.3.4 · Base 2.4 §4.2.1, 4.2.3–4.2.4 · Base 2.4 §4.4 · Base 2.4 §5.2.30.1 (common fields, scope and persistence) · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q290 FID09h 是遮蔽中斷嗎?真正的 Mask 要如何設定?

跟著解說理解

FID09h 的 Interrupt Vector Configuration 不負責遮蔽中斷。它的 CD 位元控制該 vector 是否使用 Interrupt Coalescing;真正的 mask 必須從使用中的中斷機制確認。

1. 操作前先準備什麼

Mask 阻止中斷送出,影響所有使用該 vector 的 CQ 通知。

先確認目前是 pin-based、MSI 還是 MSI-X,才能選正確的 mask 介面。

MSI
Message Signaled Interrupt,訊息中斷

Pin/MSI 用 INTMS 寫 1 設 mask、INTMC 寫 1 清 mask;MSI-X 用 Function Mask 與 Table 的 Vector Mask。

2. 先後順序與完成條件

先保留原設定,再遮蔽、處理 CQ、更新 Head,最後解除遮蔽並檢查是否仍有待處理完成。

INTMC 對目標 bit 寫 1 才解除,寫 0 沒有作用;這和一般「寫 0 就是清除」的 Register 不同。

3. 未符合條件時如何處理

MSI-X 模式下 Host 不得存取 INTMS/INTMC,若違反,其結果未定義,不能編造必定的 NVMe Status。

Get FID09h.CD 只能證明合併設定,不能證明 MSI-X table 已解除 mask。

4. CQE、DNR 與 More 在這裡是否適用

DNR
Do Not Retry,命令重試的狀態提示

Mask Register 讀寫沒有 NVMe CQE,DNR/More 不適用;如果同時用 Get/Set FID09h 查合併,只有那些命令才有 CQE。

DNR
Do Not Retry,命令重試的狀態提示

來源:PCIe Transport 1.4 §3.5–3.5.2 (interrupt delivery and masks), 3.8.4 · Base 2.4 §3.1.4 (INTMS, INTMC) · Base 2.4 §5.2.30.2.1–5.2.30.2.2 · Base 2.4 §5.3.1–5.3.2 · Base 2.4 §5.3.3–5.3.4 · Base 2.4 §4.2.1, 4.2.3–4.2.4 · Base 2.4 §4.4 · Base 2.4 §5.2.30.1 (common fields, scope and persistence) · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q291 Vector 被遮蔽時,Controller 還能寫 CQE 嗎?

跟著解說理解

Mask 控制通知,並不暫停命令執行或凍結 CQ。

1. 遮蔽的是通知,CQ 仍會前進

所有使用該 vector 的 CQ 都可能繼續累積完成,直到各自空間不足。

Controller 仍依正常規則寫 CQE;MSI-X 因 mask 不能送出的中斷會以對應 pending bit 表示。

看見新 Phase 的 CQE 卻沒有通知,在 mask 尚未解除時可能完全正常。

2. 如何觀察完成並避免 CQ 滿

讀實際 mask、CQ.IEN、CQ 位置與 Phase;MSI-X 可另看 PBA。

遮蔽後可用合法的 CQ 輪詢確認完成,處理後仍需更新 Head Doorbell 釋放空間。

CQ Full 是空間問題,與 mask 不同;長期不處理完成會間接讓 CQ 滿,但不是 mask 直接禁止寫入。

來源:PCIe Transport 1.4 §3.5–3.5.2 (interrupt delivery and masks), 3.8.4 · Base 2.4 §3.1.4 (INTMS, INTMC) · Base 2.4 §5.2.30.2.1–5.2.30.2.2 · Base 2.4 §5.3.1–5.3.2 · Base 2.4 §5.3.3–5.3.4 · Base 2.4 §4.2.1, 4.2.3–4.2.4 · Base 2.4 §4.4 · Base 2.4 §5.2.30.1 (common fields, scope and persistence) · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q292 解除 Mask 後如何處理累積完成?

跟著解說理解

一個 pending 中斷可以代表多筆完成,Host 仍必須從 CQ 逐筆取得真正結果。

1. 操作前先準備什麼

共享 vector 時,要處理所有關聯且可能有新完成的 CQ。

核對 MSI-X 的 Function/Vector Mask、PBA,或 pin/MSI 的 INTM 及對應 CQ。

MSI-X 兩層 mask 都清除後,待送中斷才可送出;只清其中一層仍可能不通知。

2. 先後順序與完成條件

解除遮蔽後讀 CQ、依 Phase 處理,再更新各 Head;處理與重新掛通知間要避免漏掉剛到的新 CQE。

累積 10 筆完成可能由一次通知引導 Host 全部處理,不要求補送 10 次歷史中斷。

3. 未符合條件時如何處理

INTM 遮蔽 MSI 時,對應 MSI Capability pending 不會因此設起;不能把 MSI-X PBA 規則原封套用。

以「所有有效 CQE 是否被處理」判斷完整性,不以通知次數等於命令數判斷。

來源:PCIe Transport 1.4 §3.5–3.5.2 (interrupt delivery and masks), 3.8.4 · Base 2.4 §3.1.4 (INTMS, INTMC) · Base 2.4 §5.2.30.2.1–5.2.30.2.2 · Base 2.4 §5.3.1–5.3.2 · Base 2.4 §5.3.3–5.3.4 · Base 2.4 §4.2.1, 4.2.3–4.2.4 · Base 2.4 §4.4 · Base 2.4 §5.2.30.1 (common fields, scope and persistence) · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q293 已被 CQ 使用的 Vector 可以修改設定嗎?

跟著解說理解

需先分清修改合併、修改 mask,還是改變 CQ 的 vector 關聯,這不是同一件事。

1. 操作前先準備什麼

FID09h 改指定 vector 的合併設定,會影響目前共用該 vector 的所有 CQ。

設定 FID09h 前,該 IV 必須已關聯一條存在的 I/O CQ。

CD=1 停用合併,CD=0 使用全域合併;它沒有修改 Create CQ.IV 的功能。

2. 先後順序與完成條件

保留 CQ 關聯,Set FID09h 後 Get 相同 IV;若需要換 CQ 的 IV,依合法 queue 生命週期重建該關聯。

已存在 CQ 正是設定 FID09h 的前提,不是禁止修改的理由。

3. 未符合條件時如何處理

IV 非法或未關聯存在的 I/O CQ 時,controller 應回 Invalid Field;這裡的 should 不等於強制唯一結果。

比較前後結果時,保存其他共用 CQ 與 mask 狀態,避免把外部條件變更誤算成 Feature 行為。

來源:PCIe Transport 1.4 §3.5–3.5.2 (interrupt delivery and masks), 3.8.4 · Base 2.4 §3.1.4 (INTMS, INTMC) · Base 2.4 §5.2.30.2.1–5.2.30.2.2 · Base 2.4 §5.3.1–5.3.2 · Base 2.4 §5.3.3–5.3.4 · Base 2.4 §4.2.1, 4.2.3–4.2.4 · Base 2.4 §4.4 · Base 2.4 §5.2.30.1 (common fields, scope and persistence) · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q294 Reset 後中斷設定要如何恢復?

跟著解說理解

Queue 與 vector 的關聯會隨 queue 生命週期結束;PCIe 模式與 mask 是否保留則依 reset 來源不同。

1. 先界定觸發方式與影響對象

只重設一個 controller 與更大範圍 reset 不同,不能重配未受影響的另一台 controller。

先查 CC/CSTS 與 PCIe interrupt mode,再讀需要的 Feature Current。

2. 哪些狀態改變,恢復後怎麼處理

FID08h 的 TIME/THR reset 值 0;FID09h 預設允許合併,但當全域合併停用時,不會因此自動啟用延遲。

恢復 Admin 通道、配置 vectors、重建 CQ/SQ,再設定 FID09h 與需要的 FID08h。

新的合法 CQE 可以經正確 vector 被 Host 找到,舊 CQE 不應混進新 queue 的完成追蹤。

3. 如何驗證保留或恢復結果

FID09h 在 CQ 尚未重建前就設定,可能觸發未關聯 IV 的錯誤。

模式切換也可能失去合併設定,需重新設定;不能只測 CC.EN reset 就推論 Power Cycle。

先核對 reset 類型及新 CQ 建立成功的時點。

來源:PCIe Transport 1.4 §3.5–3.5.2 (interrupt delivery and masks), 3.8.4 · Base 2.4 §3.1.4 (INTMS, INTMC) · Base 2.4 §5.2.30.2.1–5.2.30.2.2 · Base 2.4 §5.3.1–5.3.2 · Base 2.4 §5.3.3–5.3.4 · Base 2.4 §4.2.1, 4.2.3–4.2.4 · Base 2.4 §4.4 · Base 2.4 §5.2.30.1 (common fields, scope and persistence) · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q295 Queue 刪除後如何回收中斷資源?

跟著解說理解

刪除 CQ 結束一個完成目的地,不代表 Host 配置的 PCIe vector 自動從整個 function 消失。

1. 操作前先準備什麼

同一 vector 可能仍被其他 CQ 使用,因此要按關聯計數回收。

保存 SQ→CQ→IV 關係與尚未完成命令,不能只列 SQ 編號。

先刪依賴的 SQ 並等待完成,再刪 CQ;成功後解除 Host 對該 CQ 的處理資料。

2. 先後順序與完成條件

最後檢查同 IV 是否還有其他 CQ,才決定移除 handler 或釋放 Host 中斷資源。

CQ1、CQ2 共用 IV3,刪 CQ1 後 IV3 仍需服務 CQ2;不應把 CQ2 的通知一起關掉。

3. 未符合條件時如何處理

CQ 仍被 SQ 引用時不能合法刪除;成功刪除前也不能提前回收 CQ 記憶體。

同時比對 queue 刪除 CQE、Host 關聯清單與剩餘 CQ 通知,避免資源洩漏或過早釋放。

來源:PCIe Transport 1.4 §3.5–3.5.2 (interrupt delivery and masks), 3.8.4 · Base 2.4 §3.1.4 (INTMS, INTMC) · Base 2.4 §5.2.30.2.1–5.2.30.2.2 · Base 2.4 §5.3.1–5.3.2 · Base 2.4 §5.3.3–5.3.4 · Base 2.4 §4.2.1, 4.2.3–4.2.4 · Base 2.4 §4.4 · Base 2.4 §5.2.30.1 (common fields, scope and persistence) · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

Q296 如何比對 Interrupt、CQ 與實際完成行為?

跟著解說理解

將命令完成與通知分開,才能定位是 controller 沒完成,還是 Host 沒被通知或沒處理。

1. 先保留哪些證據

追蹤一條完整路徑:SQ 的命令、關聯 CQ、使用的 vector 與 Host 處理程序。

讀 CQ.IEN/IV、FID08h、FID09h、真實 mask 與 CQ Phase。

保存提交時間、CQE 出現時間、通知時間與 Head 更新時間,四者不是同一時點。

2. 依什麼順序排除原因

先從該命令的 CQ 位置與 Phase 查起。

先確認新 CQE,再查是否應通知;最後核對 Host 是否處理並釋放空間。

3. 把觀察結果接回規格條件

完成已存在、mask=1 且 Host 用輪詢處理,是可以成立的正常案例;中斷不是完成有效性的唯一證據。

如果 Phase 不匹配、查錯 CQ 或漏更新 Head,先修正 Host 證據;不能只因未收到 interrupt 就判 SSD 丟命令。

用同一次測試的設定快照與時間線互相比對,避免拿測試後讀值解釋測試中行為。

來源:PCIe Transport 1.4 §3.5–3.5.2 (interrupt delivery and masks), 3.8.4 · Base 2.4 §3.1.4 (INTMS, INTMC) · Base 2.4 §5.2.30.2.1–5.2.30.2.2 · Base 2.4 §5.3.1–5.3.2 · Base 2.4 §5.3.3–5.3.4 · Base 2.4 §4.2.1, 4.2.3–4.2.4 · Base 2.4 §4.4 · Base 2.4 §5.2.30.1 (common fields, scope and persistence) · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)

回本冊題目

原文定位與既有圖表判讀

Base 的文件頁碼等於 PDF 頁碼減 26;NVM 與 PCIe 兩份規格的文件頁碼則與 PDF 頁碼相同。以下依提供的 PDF 本文列出章節、頁碼及 Figure 編號。若同一頁包含其他主題,只引用本題需要的定義,不納入 Fabrics 或 PCIe Link、封包內容。

  • Base 2.4 · §3.1.4 (INTMS, INTMC)
    文件頁 59 · PDF 85 · Figure 39–40
  • Base 2.4 · §3.7.1–3.7.4
    文件頁 120–124 · PDF 146–150
  • Base 2.4 · §4.2.1, 4.2.3–4.2.4
    文件頁 144–157 · PDF 170–183 · Figure 97–105, 109
  • Base 2.4 · §4.2.3
    文件頁 145–155 · PDF 171–181 · Figure 101–105
  • Base 2.4 · §4.4
    文件頁 166–169 · PDF 192–195 · Figure 126–127
  • Base 2.4 · §5.2.2
    文件頁 183–190 · PDF 209–216 · Figure 150–156
  • Base 2.4 · §5.2.13.1.2
    文件頁 218–220 · PDF 244–246 · Figure 212
  • Base 2.4 · §5.2.13.1.14 (header, reset, hardware, Set Feature events)
    文件頁 244–256, 258, 262–264 · PDF 270–282, 284, 288–290 · Figure 232–244, 246, 252–253
  • Base 2.4 · §5.2.30.1 (common fields, scope and persistence)
    文件頁 456–460 · PDF 482–486 · Figure 463–466
  • Base 2.4 · §5.2.30.2.1–5.2.30.2.2
    文件頁 514–515 · PDF 540–541 · Figure 543–544
  • Base 2.4 · §5.3.1–5.3.2
    文件頁 527–531 · PDF 553–557 · Figure 571–579
  • Base 2.4 · §5.3.3–5.3.4
    文件頁 531–532 · PDF 557–558 · Figure 580–583
  • PCIe Transport 1.4 · §3.5–3.5.2 (interrupt delivery and masks), 3.8.4
    文件頁 13–16, 24–26 · PDF 13–16, 24–26 · Figure 9, 42–48

需要看欄位圖時

以下連結可開啟對應的圖表教學,查閱欄位及判讀方式。每張圖保留固定的教學位置,方便之後反覆查詢。

使用的原始文件
  • NVM Express Base Specification · Revision 2.4 · 2026-07-31
    NVM-Express-Base-Specification-Revision-2.4-Ratified-2026.07.31.pdf
  • NVM Express NVM Command Set Specification · Revision 1.3 · 2026-07-31
    NVM-Express-NVM-Command-Set-Specification-Revision-1.3-Ratified-2026.07.31.pdf
  • NVM Express NVMe over PCIe Transport Specification · Revision 1.4 · 2026-07-31
    NVM-Express-NVMe-over-PCIe-Transport-Specification-Revision-1.4-Ratified-2026.07.31.pdf
Jia-Chang

Jia-Chang

Human

Comments

  Write a comment ...