教學 1 · Status 是分類,不是完整根因
Invalid Field 告訴你要求中有不合法欄位,但不一定直接指出是哪一個。保存原始 SQE 後,再使用 Error Information 的 Parameter Error Location 等欄位縮小範圍。若該位置無效或沒有額外資訊,就應承認還無法定位,不要只靠 Status 名稱猜一個欄位。
- SQE
- Submission Queue Entry,佇列中的命令項目
NVMe · Q1–328
Q93–Q106
本冊從一筆失敗命令出發,先判斷錯誤類型,再找補充記錄與恢復依據。重點是把原命令、完成狀態及歷史資料對回同一件事。
每個問題都接著完整解說,依內容帶讀欄位、比較機制或追蹤流程。先看本冊總覽,再沿問題閱讀;必要條件與正常路徑直接顯示。所有數字案例均為教學假設;Status 以 SCT/SC 表示,代碼後的 h 代表十六進位。
先確認命令身分,再比較錯誤;名稱相似的紀錄不一定描述相同事件。
| 證據 | 能回答什麼 | 不能直接推論什麼 |
|---|---|---|
| CQE | 該命令的完成結果 | 所有媒體效果已撤銷 |
| Error Information | 錯誤補充欄位及參數位置 | 每個失敗都必有一筆 |
| PEL | 支援的持續事件 | 完整命令執行歷史 |
舉例看懂:一筆命令同時有非法 NSID 與壞的 PRP,可能先檢出任一條件。若要驗證 Invalid Namespace,就應先修正指標,只保留一個錯誤原因。
來源:Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.13.1.14–5.2.13.1.14.2.5 (exclude PCIe link/packet decoding)
Invalid Field 告訴你要求中有不合法欄位,但不一定直接指出是哪一個。保存原始 SQE 後,再使用 Error Information 的 Parameter Error Location 等欄位縮小範圍。若該位置無效或沒有額外資訊,就應承認還無法定位,不要只靠 Status 名稱猜一個欄位。
DNR=0 表示重試可能成功,不保證立刻原樣重送一定有效。如果原因是 namespace 還沒 ready,就需等狀態改變;如果是參數不合法,則需先修正參數。先問「哪個條件已經不同」,再決定重試,才能避免無意義的重複命令。
錯誤紀錄的有效 entries 與累計 Error Count 不同。舊 entry 可能因容量或 reset 消失,但計數仍可保留。看到計數大於目前可讀筆數是合理情況;查不到原 entry 只能說證據不完整,不能反推那次錯誤沒發生。
先判斷錯誤發生在哪一層,才知道要修改命令內容,還是修正 Host 的命令管理。例如 Opcode 不受支援,與同一條 SQ 重複使用尚未完成的 CID,是兩種不同問題。
Status 描述指定 SQID/CID 的完成;除非另外發現 queue 或 controller 故障,不應把單一命令的參數錯誤擴大成整個裝置失效。
SCT=0:SC=01h 是 Invalid Command Opcode;02h 是 Invalid Field in Command;03h 是 Command ID Conflict;0Ch 是 Command Sequence Error。CID 的唯一性以同一條 SQ 的未完成命令為範圍。
先以 Identify 與 Commands Supported and Effects 確認 Opcode,再查該命令的欄位與順序要求。CID 是否重複,則要查看 Host 的 outstanding 清單。
保留原始 SQE,確認命令集與支援能力,逐一檢查指定欄位,再重建命令先後順序。一次只改一個已確認的問題,才能知道哪項修正有效。
合法且成功執行的命令回成功 CQE;如果測試故意製造錯誤,正確結果則是符合該條件的錯誤完成,不能要求所有測試都回成功。
Invalid Field 應在沒有更明確指定 Status 時使用。若同時存在多個錯誤,除非另有優先規則,controller 可選擇其中一個;CID Conflict 的搜尋深度也是實作相關。
將支援宣告、SQE 與 CQE 對在一起。若用一筆同時有非法 Opcode、非法 NSID 的命令驗證精確 Status,測試本身就無法隔離原因。
來源:Base 2.4 §4.2.3 · Base 2.4 §4.1.1 · Base 2.4 §3.4.1–3.4.5 · Base 2.4 §3.7.1–3.7.4 · 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)
這些錯誤都與識別或範圍有關,但所指的物件不同。先知道命令要查或建立哪個物件,才能判斷數值是否存在、是否有效,以及是否允許在這裡使用。
NSID 指 namespace,LID 指 Log 類型,QID 指 queue;QSIZE 是深度的編碼,IV 是中斷向量。它們不能因為都是數字,就共用同一套有效範圍。
常見對照為 Invalid Namespace or Format 0/0Bh、Invalid Log Page 1/09h、Invalid Queue Identifier 1/01h、Invalid Queue Size 1/02h、Invalid Interrupt Vector 1/08h;Create SQ 的無效 CQID 則有 Completion Queue Invalid 1/00h。
使用 Active/Allocated Namespace List、Supported Log Pages、CAP.MQES、Number of Queues 與可用中斷資源,建立測試前的配置快照。
先建立合法基準命令,再只替換目標欄位。例如測 QSIZE 超限時,應保留合法 QID、位址及 IV,避免另一個錯誤先被回報。
合法建立成功後,Host 才能將 queue 視為存在。錯誤測試完成後,還要確認沒有留下可使用的半完成 queue 配置。
上述代碼只適用於對應命令及條件。對 Get Log 使用錯誤 NSID,可能依該 Log 的 scope 規則回 Invalid Field;不能一律要求 Invalid Namespace。
把命令專屬完成表與當時配置共同驗證,而不是只用通用 Status 名稱比對。
來源:Base 2.4 §4.2.3 · Base 2.4 §5.3.1–5.3.2 · Base 2.4 §5.3.3–5.3.4 · Base 2.4 §5.2.13–5.2.13.1.1 · Base 2.4 §3.2.1 · Base 2.4 §3.7.1–3.7.4 · 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)
目的在區分映像、格式與資源問題,避免將不同命令回傳的「容量不足」混成同一件事。修正 slot 選擇,不會解決 namespace 配置容量不足。
Firmware Commit 影響韌體映像與啟用安排;Format 改變目標 namespace 的格式;Namespace Management 與 Capacity Management 分別管理不同層級的容量。
Invalid Firmware Slot=1/06h,Invalid Firmware Image=1/07h,Invalid Format=1/0Ah。Namespace Insufficient Capacity=1/15h;Capacity Management 的 Insufficient Capacity=1/26h;一般 Capacity Exceeded=0/81h。
檢查 FRMW/Firmware Slot Information、支援的 LBA formats、總容量與未配置容量,以及命令的操作範圍。
先確認 Opcode,再讀它的錯誤條件;重算要求的 bytes、logical blocks 或配置單位。只有單位一致,要求量與可用量才有比較意義。
正向測試應得到該操作的完成結果;負向測試則確認錯誤被拒絕,且原先有效的配置仍符合該命令的失敗處理規則。
不要把 1/15h 與 0/81h 視為可任意替換。也不要將 Firmware Activation Requires Reset 類型的狀態直接當成映像損壞,它可能是啟用還需要另一個步驟。
比較配置前後 Identify 與 Log,並保留完整 SCT/SC;只儲存 SC 會遺失類別資訊。
來源:Base 2.4 §4.2.3 · Base 2.4 §5.2.14.2.1 · Base 2.4 §5.2.24–5.2.25, 8.1.17 · Base 2.4 §3.7.1–3.7.4 · 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 內部處理及 namespace 可存取狀態。區分原因,才能選擇修正記憶體映射、處理裝置錯誤,或等待狀態改變。
Data Transfer Error 與 Internal Error 通常針對該命令;Namespace Not Ready 針對所選 namespace 的可用性。任何一項都不能單憑名稱推論全部 namespace 已毀損。
Data Transfer Error=0/04h;Internal Error=0/06h;Namespace Not Ready=0/82h。Admin Command Media Not Ready=0/24h 另有 CRIME 與時間限制,不能和 namespace 狀態互換。
保存資料指標、Host 記憶體配置、CSTS 與 namespace 狀態,必要時讀 Error Information。Ready Mode 與 CFS 用來補足判斷,但不是同一欄位。
先保存 CQE,再檢查資料位址與 buffer 使用期間;若位址正確,結合 Error Log、CSTS 及 namespace 狀態定位。失敗的 Read buffer 不應當成有效讀取結果。
恢復後的成功命令才提供有效結果;看到 RDY=1,只表示對應 controller ready 條件成立,不保證每個 namespace 可立即存取。
Namespace Not Ready 不用來取代已定義的 ANA 狀態錯誤。Internal Error 也不必然要求 CFS=1;只有更嚴重的 controller 情況才另行判定。
確認錯誤種類與證據一致:合法資料指標不排除裝置內部錯誤;namespace 暫時不可用也不表示 Opcode 不受支援。
Internal Error 的細節建議透過對應錯誤 AER 回報;Data Transfer Error 或 Namespace Not Ready 則不能一律要求同樣的事件。仍需區分事件發生、回報條件與是否有 AER 可用。
來源:Base 2.4 §4.2.3 · Base 2.4 §9.1–9.6.1 · Base 2.4 §3.5.3–3.5.4 · Base 2.4 §3.7.1–3.7.4 · 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)
中止原因決定 Status,也決定 Host 能否期待 CQE。尤其突然斷電或 Reset 可能讓完成通道消失,不能要求裝置在無法通訊後仍逐筆回報。
Abort 指向一筆命令,SQ Deletion 涵蓋該 SQ 的未完成命令,Fused 失敗涉及配對操作;電源及 Reset 的範圍則可能更大。
Power Loss Notification=0/05h;Command Abort Requested=0/07h;SQ Deletion=0/08h;Failed Fused Command=0/09h;Missing Fused Command=0/0Ah。這些是目標命令的 Status。
Power Loss Notification Status 不表示每次拔電都能留下 CQE。Fused missing 與另一筆已執行失敗也不同;應依配對、相鄰及順序條件判斷。
保存目標 SQID/CID、Delete 或 Abort 完成、CC/CSTS 及 FUSE 設定,才能重建真正的中止原因。
先判斷 queue 是否仍有效,再讀目標完成;若已 Reset,依新生命週期重建 queue 與追蹤資料。Abort 本身的 CQE 與目標命令 CQE 要各自處理。
成功處理中止,並不等於目標命令回 Success。測試應驗證目標只完成一次,或在 Reset 規則下不再等待舊 queue 的完成。
將目標 CQE、管理命令 CQE 與 queue/電源事件按時間比對,不要只用最後讀到的一個 Status 代表整段流程。
先確認是否真的收到 Power Loss Notification,或其實是突然失去電源;這會改變對完成回報的期待。
來源:Base 2.4 §4.2.3 · Base 2.4 §5.2.1 · Base 2.4 §5.3.3–5.3.4 · Base 2.4 §3.4.1–3.4.5 · Base 2.4 §3.7.1–3.7.4 · 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)
復原要先找出失敗原因,再決定重試是否合理。DNR=0 只是相同命令可能成功,不代表可以忽略資料是否已部分執行,或無限立即重送。
這些欄位屬於單一命令完成;Abort、刪 queue 或 Reset 則會擴大處理範圍,應以失敗影響與通道可用性決定。
用 CQE 的 SCT/SC、M、DNR、CRD,搭配 Host Behavior Support.ACRE 與 Identify.CRDT1~3。M=1 時另讀 Error Information。
ACRE=1 且 DNR=0 時,CRD=1、2、3 分別選 CRDT1、2、3;CRD=0 不要求額外延遲。DNR=1 或 ACRE=0 時,CRD 為保留欄位。
先檢查測試是否把 DNR=0 誤寫成「必須立即重試成功」。
先解析錯誤與補充資訊,修正非法參數或等待必要狀態,再判斷命令是否適合重試。若 queue 失效,才進入 queue 復原;Admin 通道失效則考慮 controller 復原。
成功的復原包含有效的新結果,以及不再受舊命令後續動作影響;單純重試回 Success,仍不足以證明先前命令未重複寫入。
Command Interrupted=0/21h 只能在 ACRE=1 時回傳,且 DNR 必須為 0。Format In Progress 也要求 DNR=0;其他錯誤不能只憑名稱自行指定 DNR。
將 Host 的重試時間與 CRD/CRDT 比較;規範建議至少等待該時間,但提早重試本身不算錯誤。
來源:Base 2.4 §4.2.3 · Base 2.4 §5.2.30.1.15 · Base 2.4 §5.2.14.2.1 · Base 2.4 §9.1–9.6.1 · Base 2.4 §3.7.1–3.7.4 · 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)
Error Information 補充 CQE 無法容納的錯誤資訊,也能記錄不屬於特定命令的錯誤。它不是全部命令失敗的逐筆交易明細。
LID 01h 的範圍是 controller;entry 是否能對應命令,要看 SQID、CID 及其有效條件。
讀 Get Log Page LID=01h,保留 ECNT、SQID、CID、STS、Parameter Error Location、NSID 與 LPVER。
ELPE 決定最多 entry 數,CQE.M 表示該命令有補充資訊,Error 類型 AER 也可能引導 Host 查這份 Log。
收到 M=1 的錯誤完成後儘快保存 Log,並讀取足夠多 entry,避免只看最新一筆卻漏掉較早發生的目標錯誤。
找到可關聯的 entry,並能以補充欄位解釋原始錯誤。若是非命令錯誤,SQID/CID=FFFFh 本身可以是正確回覆。
M=0 表示這筆命令沒有額外狀態資訊,不能強制每次 Invalid Field 都新增 entry。若 M=1 卻缺少資訊,仍先排除覆寫、Reset 清除及查錯 controller。
將 M、Error AER 與 entry 的關聯條件一起驗證;不要只比較「失敗 CQE 數」與「entry 數」。
成功 CQE 不會單憑成功這件事,就要求新增 Error Information entry。 完整條件見本冊說明
來源:Base 2.4 §5.2.13.1.2 · Base 2.4 §4.2.3 · Base 2.4 §5.2.2 (PCIe-applicable events) · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)
關聯紀錄可把「哪個欄位錯了」轉成可驗證的原始 bytes。只看自然語言 Status,通常不足以找到 Host 真正送出的錯誤參數。
SQID+CID 對應同一個 queue 使用期間的命令;因為 CID 會重用,還必須搭配 ECNT、時間與當時的命令快照。
確認 LPVER,Base 2.4 的 entry 設為 1;CSI/OPC 在 LPVER≥1 才有效。
Parameter Error Location 的 bits 7:0 是 SQE byte offset,10:8 是該 byte 的 bit;多 byte/bit 欄位指向最低有效位置。此 PEL 縮寫不要與 Persistent Event Log 混淆。
先對回 queue 使用期間,再比 SQID/CID/OPC/NSID;最後依 byte、bit 位置解碼原 SQE。例如位置指向 CDW10,就檢查那個命令對 CDW10 的定義。
成功關聯後,可指出實際送出的值與違反條件,並用只修正該欄位的重測驗證。
非命令錯誤的 SQID、CID、Parameter Error Location 應為 FFFFh;不能把 FFFFh 當成合法命令的資料偏移去讀記憶體。
比對 namespace 與命令集後再解讀 LBA/CSINFO,因為這些欄位的意義取決於命令,而不是每個錯誤都一定有 failing LBA。
來源:Base 2.4 §5.2.13.1.2 · Base 2.4 §4.1.1 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)
需要區分命令狀態與 Phase。若把包含 Phase 的整個 word 直接比較,可能將合法紀錄判成不一致。
只對同一筆命令的 entry 與 CQE 做比較;非命令錯誤並沒有原始 CQE 可逐 bit 對照。
Error STS bits15:1 保存該命令的 Status;bit0 是 Phase,可表示原 CQE 的 P。CQE 中 Status 與 P 的位置不同,需先正規化再比較。
依 Figure 212 的 STS 與 Figure 101 的 Status 解碼,不要套用作業系統已移位或移除 Phase 的數值格式。
保存原始 CQE 與 entry,先抽出 SCT/SC/DNR/M/CRD,再獨立處理 Phase;並確認 ECNT、SQID 與 CID。
同一命令的 Status 應一致;Phase 依其「可回報」的定義處理,不要求所有記錄格式的完整 word 一樣。
非命令錯誤使用最適合的 Status,不是缺少 CQE 就代表錯誤。多個錯誤條件時,也要以實際選定的完成 Status 比對。
同時檢查解析程式是否把 SC、SCT 或 Phase 錯移一位;錯誤的 decoder 會讓所有 entry 都看似不符。
來源:Base 2.4 §5.2.13.1.2 · Base 2.4 §4.2.1, 4.2.3–4.2.4 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)
Error Count 用來辨識錯誤紀錄,而 Log 容量決定目前看得到多少歷史。兩者不同,所以有限的 Log 可以包含很大的累計序號。
容量與 entry 排序以 controller 的 Error Information 為範圍,不是每個 namespace 各自建立相同數量的 entry。
ECNT 是 64-bit 計數,從 1 開始;0 表示無效 entry。最大值再增加時必須回到 1,不經過 0。
Identify.ELPE 為零起算,ELPE=3 表示最多 4 筆,每筆 64 bytes。
依發生時間由新到舊讀取。Log 滿時,controller 建議插入新 entry 並丟棄最舊 entry;取樣前後要保留 ECNT,才知道是否已有更新。
假設容量 4、最近序號為 9,正常可見 9、8、7、6;看不到 1~5 不表示它們沒有發生。
ECNT=0 的空 entry 不能當成第零次錯誤;也不要因序號有間隔,就直接判定 Log 壞掉,應先考慮取樣期間新增及被移除的紀錄。
比較 SMART Error Information Log Entries 時,要分清累計值與目前 entry 數;它們的數值不需要相同。
來源:Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.14.2.1 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)
這題練習判斷證據是否足夠。命令失敗與必須提供額外錯誤資訊不是同一項要求,不能只看非零 Status 就宣告韌體違規。
判斷限於這筆命令與其對應的記錄條件,不能用另一筆命令的新 entry 填補這筆命令的證據。
關鍵欄位是 More;M=1 表示有這筆命令的補充資訊。Error AER 或個別命令規則也可能建立額外的記錄要求。
保存 CQE.M、SCT/SC、錯誤前後 ECNT、ELPE 與 Reset 時間。
先找出要求記錄的規範條件,再排除讀錯 controller、讀取太短、較新錯誤覆寫及 Reset 清除。最後才評估是否缺少必要 entry。
合理結果可能是「這次不要求新增」;也可能是「要求的資訊仍可找到」。合規判斷不應預設每次都要讓 Error Count 增加。
如果在排除其他原因後,M=1 仍沒有可關聯資訊,就有具體不一致可追查;M=0 且沒有額外條件時,不能用同一標準定罪。
測試報告應附上規範條件、原 CQE 與 Log 快照,而不是只有「沒有看到 entry」一句結論。
成功 CQE 不會單憑成功這件事,就要求新增 Error Information entry。 完整條件見本冊說明
來源:Base 2.4 §5.2.13.1.2 · Base 2.4 §4.2.3 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)
多數命令錯誤不會破壞 queue,因此復原可以限制在失敗命令。這能避免為了單一非法參數,無故中止其他正常工作。
先區分命令、queue 與 controller 三層。只有發現更廣泛的故障證據,才擴大復原範圍。
Base 9.1 說明大多數命令錯誤仍應繼續處理命令;嚴重 queue 錯誤則建議刪除並重建相關 SQ/CQ。
檢查 CQE、CSTS.CFS、queue 指標及其他命令是否仍正常完成;Error Information 用來補充原因。
保存失敗命令,確認 queue 沒有損壞後繼續合法命令;若 queue 受損,停止使用並依 SQ→CQ 的相依關係復原。
後續合法命令可以成功完成,同時先前失敗仍保留為一次独立結果。不能因後續成功,就抹去原本的錯誤。
若 Admin 命令遇到嚴重通道錯誤,或 Delete Queue 沒有完成,規範建議 Controller Level Reset;這與普通 Invalid Field 不同。
驗證錯誤隔離能力時,分別觀察同 SQ、共享 CQ 與其他 CQ 的命令,避免將資源壅塞誤認為全部停止。
來源:Base 2.4 §9.1–9.6.1 · Base 2.4 §4.2.3 · Base 2.4 §5.3.3–5.3.4 · Base 2.4 §3.7.1–3.7.4 · 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)
CFS 提供 Host 在正常完成通道可能失效時仍可查看的嚴重狀態。它不是每筆失敗命令都必須設定的錯誤總旗標。
CFS 屬於 controller。共享 subsystem 的其他 controller 是否受影響,必須另外觀察,不能只靠一個 CFS 位元推論。
直接讀 CSTS.CFS,保存 CC、CAP、Ready 狀態及時間;若是 Secondary Controller,也先查 Online/Offline 狀態。
Base 9.5 允許在嚴重錯誤導致無法透過 Admin 或 I/O CQE 通訊時設定 CFS。Offline Secondary Controller 的 CFS 則有虛擬化定義。
先確認這是不是 Offline 的 Secondary Controller,避免把預期的管理狀態誤判成硬體損壞。
遇到 timeout 或重複錯誤時讀 CFS;確認是需復原的 fatal 狀態後,先做該 controller 的 Reset 與重新初始化,仍無法清除才評估支援且平台適用的 Subsystem Reset。
復原後應恢復可用狀態與正常命令處理。僅 CFS 清為 0,仍不足以省略 Admin Queue、Ready 與 I/O queue 的重新建立。
CFS 本身不是 CQE,也不以中斷表示此狀態。若 controller 已無法回 CQE,就不能再要求每筆未完成命令都有 Internal Error CQE。
比對 controller 角色、虛擬化狀態、實際通訊能力與 Reset 結果,才可區分預期 Offline 與真正 fatal 問題。
讀取 CFS 沒有 CQE,因此 DNR/More 不適用於這個 Register 讀取。只有另外收到命令 CQE 時,才解讀該 CQE 的位元。
來源:Base 2.4 §9.1–9.6.1 · Base 2.4 §3.1.4 (CC, CSTS, NSSR) · Base 2.4 §8.2.7 · 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)
三份證據的粒度不同:CQE 是單一命令結果,Error Information 是補充錯誤,PEL 是重要事件歷史。交叉比對能補足資訊,但不應要求一對一出現。
先標明 controller、namespace、queue 使用期間與事件範圍;不同範圍的紀錄可以有關聯,卻不一定代表同一筆命令。
確認 Error Log 的 ELPE、PEL 支援與 Supported Events Bitmap,以及 Timestamp 的來源與同步狀態。
CQE 用 SQID/CID/Status;Error entry 加 ECNT、NSID、OPC;PEL 用事件類型、controller 身分、時間及事件資料。Parameter Error Location 不是 Persistent Event Log 的位置。
先確認三份紀錄的取樣時間與 controller 身分一致,再分析看似矛盾的值。
先對回命令與 Error entry,再找同一操作或時段的 PEL;若 Timestamp 曾變更,先重建時間關係,再下事件順序的結論。
成功的判讀會說明哪份證據支持哪個結論,以及哪些部分仍無法確認。例如有 Format Start,不代表已有 Format Completion。
缺少 PEL entry 不一定違規,先檢查該事件是否受支援及應記錄。另一方面,不能以「Log 選配」否定已宣告支援後的必要行為。
將能力、事件條件、CQE 與各自保留規則放在同一條時間線;Reset 後 entry 消失與計數保留可以同時成立。
來源:Base 2.4 §4.2.1, 4.2.3–4.2.4 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events) · Base 2.4 §5.2.30.1.8 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.2
這些規則在本冊只完整說明一次。返回剛才的題目可用瀏覽器「上一頁」;特定命令或 Feature 的明文例外優先。
成功 CQE 不會單憑成功這件事,就要求新增 Error Information entry。若錯誤 CQE 的 More=1,則讀取 LID01h,並以 SQID、CID 及 Error Count 關聯紀錄。其他非成功 CQE 是否需要新增 entry,仍須依記錄規則判斷,不能直接以失敗次數推算。至於操作造成的狀態變化,則用本題列出的查詢介面重新確認。
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