教學 1 · 先從CQ找答案
中斷只是提醒 Host 查看 CQ,命令真正結果仍在 CQE。若沒有通知,先看正確 CQ 位置及 Phase;有新完成就往 IEN、IV、mask 與 coalescing 查,沒有新完成才繼續往提交與執行追。這個順序能把兩種完全不同的問題分開。
NVMe · Q1–328
Q286–Q296
先確認 CQE 真的存在,再查通知如何送到 Host。本冊把 CQ 關聯、合併、mask 與 Host 處理分開,避免把沒有中斷當成沒有完成。
每個問題都接著完整解說,依內容帶讀欄位、比較機制或追蹤流程。先看本冊總覽,再沿問題閱讀;必要條件與正常路徑直接顯示。所有數字案例均為教學假設;Status 以 SCT/SC 表示,代碼後的 h 代表十六進位。
FID09h.CD 停用的是 coalescing,不是 interrupt。
| 控制 | 欄位/介面 | 決定什麼 |
|---|---|---|
| CQ 通知路徑 | Create CQ.IV/IEN | 用哪個 vector、是否通知 |
| 合併 | FID08h.TIME/THR | 建議合併時間與數量 |
| 單 vector 例外 | FID09h.CD | 是否停用該 vector 合併 |
| 遮蔽 | INTMS/INTMC 或 MSI-X masks | 是否允許送出中斷 |
舉例看懂:兩條 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
中斷只是提醒 Host 查看 CQ,命令真正結果仍在 CQE。若沒有通知,先看正確 CQ 位置及 Phase;有新完成就往 IEN、IV、mask 與 coalescing 查,沒有新完成才繼續往提交與執行追。這個順序能把兩種完全不同的問題分開。
CD=1 表示不套用合併,反而可能更快通知;mask=1 則阻止通知送出。Pin/MSI 用 INTMS 寫 1 設定、INTMC 寫 1 清除,MSI-X 則用自己的 mask。不能在 MSI-X 模式存取 INTMS/INTMC,也不能用 Get FID09h 的值證明真正 mask 已解除。
TIME 與 THR 是 Host 給 controller 的建議,PCIe 允許實作選擇如何使用,甚至不做合併。測試可以描述觀察到的延遲與中斷量,但不能僅因沒有精準等到門檻就判違規。Host 持續更新 CQ Head 也可能讓聚合計時重新開始,必須把處理中的活動一起記錄。
CQ 決定完成結果放在哪裡,IV 決定透過哪個中斷通知 Host,兩個編號不必相同。
關聯建立在 I/O CQ 上,SQ 透過 CQID 間接使用該通知路徑。
先確認 PCIe 中斷模式及已配置的 vector 數,再建立 CQ。
Create CQ.CDW11 的 IV[31:16] 選 vector,IEN[1] 啟用該 CQ 中斷;PC[0] 控制記憶體配置。
配置中斷資源、建立 CQ、建立關聯 SQ,之後才送 I/O 驗證通知。
例如 CQ5 使用 IV2;來自 SQ7 的完成寫入 CQ5,Host 收 IV2 後查 CQ5,再由 CQE.SQID/CID 找命令。
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)
來源: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)
共用 vector 節省中斷資源,但 Host 收到通知後可能需要查多條 CQ;獨立 vector 較容易分散處理。
合併門檻以 vector 為單位,同 vector 的多條 CQ 可能共同參與通知判斷。
CQE 仍以 SQID、CID 識別命令,中斷訊息不攜帶每筆命令的完整身分。
查目前模式的 vector 能力與已建立 CQ 的 IV/IEN。
建立 vector→CQ 清單,收到通知後檢查相關 CQ,處理有效 Phase 的 entries,再更新各自 Head Doorbell。
兩條 CQ 共用 IV3 時,一次中斷可引導 Host 處理兩邊多筆完成;不能期待每條 CQ 各一個通知。
沒有一個通用「中斷數必須等於 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)
來源: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)
合併多筆完成通知可減少 Host 中斷開銷,但可能增加通知延遲;CQE 本身仍可先寫入。
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。
先讀 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 套用。
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)
來源: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)
停用合併讓通知不再套用聚合延遲,並不是關閉中斷。
FID08h 影響 controller 的 I/O 中斷設定;FID09h.CD 可只停用指定 vector 的合併。
讀 FID08h、FID09h 及 CQ.IEN,確認目前設定與通知路徑。
TIME=0 或 THR=0 任一成立就隱含停用合併;CD=1 則禁止對該 vector 套用合併設定。
需要全部停用時設定 FID08h;只停一條 vector 時,先有關聯 I/O CQ,再設定 FID09h。
設定後 Get 讀回正確;有可通知的完成時,依模式與 mask 判斷中斷,而非仍等待原聚合門檻。
即使 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)
來源: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)
FID09h 的 Interrupt Vector Configuration 不負責遮蔽中斷。它的 CD 位元控制該 vector 是否使用 Interrupt Coalescing;真正的 mask 必須從使用中的中斷機制確認。
Mask 阻止中斷送出,影響所有使用該 vector 的 CQ 通知。
先確認目前是 pin-based、MSI 還是 MSI-X,才能選正確的 mask 介面。
Pin/MSI 用 INTMS 寫 1 設 mask、INTMC 寫 1 清 mask;MSI-X 用 Function Mask 與 Table 的 Vector Mask。
先保留原設定,再遮蔽、處理 CQ、更新 Head,最後解除遮蔽並檢查是否仍有待處理完成。
INTMC 對目標 bit 寫 1 才解除,寫 0 沒有作用;這和一般「寫 0 就是清除」的 Register 不同。
MSI-X 模式下 Host 不得存取 INTMS/INTMC,若違反,其結果未定義,不能編造必定的 NVMe Status。
Get FID09h.CD 只能證明合併設定,不能證明 MSI-X table 已解除 mask。
Mask Register 讀寫沒有 NVMe CQE,DNR/More 不適用;如果同時用 Get/Set FID09h 查合併,只有那些命令才有 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)
來源: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)
Mask 控制通知,並不暫停命令執行或凍結 CQ。
所有使用該 vector 的 CQ 都可能繼續累積完成,直到各自空間不足。
Controller 仍依正常規則寫 CQE;MSI-X 因 mask 不能送出的中斷會以對應 pending bit 表示。
看見新 Phase 的 CQE 卻沒有通知,在 mask 尚未解除時可能完全正常。
讀實際 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)
來源: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)
一個 pending 中斷可以代表多筆完成,Host 仍必須從 CQ 逐筆取得真正結果。
共享 vector 時,要處理所有關聯且可能有新完成的 CQ。
核對 MSI-X 的 Function/Vector Mask、PBA,或 pin/MSI 的 INTM 及對應 CQ。
MSI-X 兩層 mask 都清除後,待送中斷才可送出;只清其中一層仍可能不通知。
解除遮蔽後讀 CQ、依 Phase 處理,再更新各 Head;處理與重新掛通知間要避免漏掉剛到的新 CQE。
累積 10 筆完成可能由一次通知引導 Host 全部處理,不要求補送 10 次歷史中斷。
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)
來源: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)
需先分清修改合併、修改 mask,還是改變 CQ 的 vector 關聯,這不是同一件事。
FID09h 改指定 vector 的合併設定,會影響目前共用該 vector 的所有 CQ。
設定 FID09h 前,該 IV 必須已關聯一條存在的 I/O CQ。
CD=1 停用合併,CD=0 使用全域合併;它沒有修改 Create CQ.IV 的功能。
保留 CQ 關聯,Set FID09h 後 Get 相同 IV;若需要換 CQ 的 IV,依合法 queue 生命週期重建該關聯。
已存在 CQ 正是設定 FID09h 的前提,不是禁止修改的理由。
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)
來源: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)
Queue 與 vector 的關聯會隨 queue 生命週期結束;PCIe 模式與 mask 是否保留則依 reset 來源不同。
只重設一個 controller 與更大範圍 reset 不同,不能重配未受影響的另一台 controller。
先查 CC/CSTS 與 PCIe interrupt mode,再讀需要的 Feature Current。
FID08h 的 TIME/THR reset 值 0;FID09h 預設允許合併,但當全域合併停用時,不會因此自動啟用延遲。
恢復 Admin 通道、配置 vectors、重建 CQ/SQ,再設定 FID09h 與需要的 FID08h。
新的合法 CQE 可以經正確 vector 被 Host 找到,舊 CQE 不應混進新 queue 的完成追蹤。
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)
來源: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)
刪除 CQ 結束一個完成目的地,不代表 Host 配置的 PCIe vector 自動從整個 function 消失。
同一 vector 可能仍被其他 CQ 使用,因此要按關聯計數回收。
保存 SQ→CQ→IV 關係與尚未完成命令,不能只列 SQ 編號。
先刪依賴的 SQ 並等待完成,再刪 CQ;成功後解除 Host 對該 CQ 的處理資料。
最後檢查同 IV 是否還有其他 CQ,才決定移除 handler 或釋放 Host 中斷資源。
CQ1、CQ2 共用 IV3,刪 CQ1 後 IV3 仍需服務 CQ2;不應把 CQ2 的通知一起關掉。
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)
來源: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)
將命令完成與通知分開,才能定位是 controller 沒完成,還是 Host 沒被通知或沒處理。
追蹤一條完整路徑:SQ 的命令、關聯 CQ、使用的 vector 與 Host 處理程序。
讀 CQ.IEN/IV、FID08h、FID09h、真實 mask 與 CQ Phase。
保存提交時間、CQE 出現時間、通知時間與 Head 更新時間,四者不是同一時點。
先從該命令的 CQ 位置與 Phase 查起。
先確認新 CQE,再查是否應通知;最後核對 Host 是否處理並釋放空間。
完成已存在、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)
來源: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、封包內容。
以下連結可開啟對應的圖表教學,查閱欄位及判讀方式。每張圖保留固定的教學位置,方便之後反覆查詢。
NVM-Express-Base-Specification-Revision-2.4-Ratified-2026.07.31.pdfNVM-Express-NVM-Command-Set-Specification-Revision-1.3-Ratified-2026.07.31.pdfNVM-Express-NVMe-over-PCIe-Transport-Specification-Revision-1.4-Ratified-2026.07.31.pdf