教學 1 · 先算第一頁還剩多少
頁面大小 P=4096、起點 offset=1024,代表第一頁只能放 3072bytes。長度 4096 雖然剛好是一頁大小,仍需要第二頁。這就是為什麼 PRP 判斷一定要包含 offset。把資料畫成第一段 3072 加剩餘段,比死背某個長度門檻更不容易出錯。
NVMe · Q1–328
Q276–Q285
資料指標描述的是記憶體配置。本冊先算 PRP 跨頁,再讀 SGL 的 descriptor 關係,最後把格式錯誤與傳輸失敗分開。
每個問題都接著完整解說,依內容帶讀欄位、比較機制或追蹤流程。先看本冊總覽,再沿問題閱讀;必要條件與正常路徑直接顯示。所有數字案例均為教學假設;Status 以 SCT/SC 表示,代碼後的 h 代表十六進位。
PRP2 類型由跨頁數決定;不能只用資料總長是否大於一頁判斷。
| 資料長度 | 第一頁之後剩餘 | PRP2 用途 |
|---|---|---|
| 2048bytes | 0 | 保留不用 |
| 4096bytes | 1024 bytes | 直接指第二頁 |
| 8192bytes | 5120 bytes | 指 PRP List |
舉例看懂:SGL Last Segment.LEN=32 描述 2 筆 16-byte descriptors;實際 payload 多長,要讀這兩筆 Data Block.LEN。不要把 descriptor 清單大小當成資料大小。
來源:Base 2.4 §4.2.1, 4.3.1–4.3.2 (PCIe-applicable layouts) · Base 2.4 §5.2.14.2.1 (SGLS) · PCIe Transport 1.4 §3.4 (Command Related Resource Retirement)
頁面大小 P=4096、起點 offset=1024,代表第一頁只能放 3072bytes。長度 4096 雖然剛好是一頁大小,仍需要第二頁。這就是為什麼 PRP 判斷一定要包含 offset。把資料畫成第一段 3072 加剩餘段,比死背某個長度門檻更不容易出錯。
PRP List 每筆 8bytes,4KiB 清單頁從頁首開始可放 512 筆。如果還要下一頁清單,最後一筆是鏈結,就只剩 511 筆描述資料。SGL 則每筆 16bytes,而且 Segment.LEN 描述下一段清單,不是 payload。把清單空間與資料空間分色或分欄,能避免兩種長度混用。
PRP offset 不合法可從欄位直接看出;位址格式合法但記憶體已被 Host 回收,則是另一種存取問題。保存原 SQE、清單與 buffer 生命週期,才能定位。SGL 也可能先傳合法部分,之後才檢出另一筆錯誤,所以失敗 CQE 不證明整個 buffer 完全未變。
PRP 將連續的命令資料分配到記憶體頁面;第一筆指標也描述資料在第一頁從哪個位置開始。
這裡的頁面是 CC.MPS 決定的記憶體頁面,不是 SSD 的 NAND page,也不是 namespace 的 LBA。
先讀 CAP.MPSMIN/MPSMAX 與已設定的 CC.MPS,頁面大小是 2^(12+MPS) bytes。
一般資料傳輸的 PRP1 分成頁基底與頁內 offset,offset 最低兩位須為 0;特殊命令可另定義 PRP1 為清單指標。
先算第一頁剩餘容量 P−offset,再與命令資料長度比較,決定是否需要 PRP2。
假設 P=4096、offset=1024、資料 2048 bytes,第一頁可容納 3072 bytes,因此 PRP1 已足夠,PRP2 保留不用。
Create Queue 對 PRP1 有 page-aligned 要求,不能套一般資料第一頁可帶 offset 的規則。
用資料長度、offset 與頁面大小一起驗證;只看長度小於一頁仍可能跨頁。
來源:Base 2.4 §4.2.1, 4.3.1–4.3.2 (PCIe-applicable layouts) · Base 2.4 §5.2.14.2.1 (SGLS) · PCIe Transport 1.4 §3.4 (Command Related Resource Retirement) · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.3.1–5.3.2 · 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)
來源:Base 2.4 §4.2.1, 4.3.1–4.3.2 (PCIe-applicable layouts) · Base 2.4 §5.2.14.2.1 (SGLS) · PCIe Transport 1.4 §3.4 (Command Related Resource Retirement) · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.3.1–5.3.2 · 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)
PRP2 的意義由跨越的記憶體頁面邊界數決定,沒有另外一個「這是清單」旗標。
適用於採一般 PRP 資料配置的命令;命令專用定義優先。
從 CC.MPS、PRP1 offset 與完整資料長度算需要幾頁。
先算第一頁可放多少資料:頁面大小 P 減去 PRP1 的頁內 offset。剩餘長度 R 就是總長度扣掉已由第一頁描述的資料。
PRP2 為保留欄位,不需要另一個資料頁。
PRP2 直接指向第二個資料頁。
PRP2 指向 PRP List,由清單列出後續資料頁位址。
三列是互斥分支。教學假設 P=4096、offset=1024,第一頁容量為 3072 bytes:傳輸 4096 bytes 時 R=1024,PRP2 指資料頁;傳輸 8192 bytes 時 R=5120,PRP2 指清單。PRP2 沒有獨立的類型旗標,不能只看它非零就猜用途。
類型選錯可能使 controller 把資料 bytes 當成位址;不能期待一定在所有錯誤傳輸前檢出。
檢查 PRP2 指向內容與推導的類型一致,而非只檢查它是不是非零。
來源:Base 2.4 §4.2.1, 4.3.1–4.3.2 (PCIe-applicable layouts) · Base 2.4 §5.2.14.2.1 (SGLS) · PCIe Transport 1.4 §3.4 (Command Related Resource Retirement) · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.3.1–5.3.2 · 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)
來源:Base 2.4 §4.2.1, 4.3.1–4.3.2 (PCIe-applicable layouts) · Base 2.4 §5.2.14.2.1 (SGLS) · PCIe Transport 1.4 §3.4 (Command Related Resource Retirement) · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.3.1–5.3.2 · 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)
清單頁存放資料頁位址;資料多到清單本身也放不下時,才需要串接下一個清單頁。
清單描述尚未由命令內 PRP 描述的資料,不得重複第一頁。
以 CC.MPS 與每個 PRP entry 的 8-byte 大小,算清單可放幾筆。
若仍需下一個清單頁,目前頁的最後一筆改放下一頁清單位址;後續清單頁必須 page-aligned。
逐頁填滿必要 entries,只有還有資料需要描述時才使用鏈結;不能保留無意義的空洞。
【模擬資料】4 KiB 清單從頁首開始有 512 格;非最後頁最多 511 個資料頁位址加 1 個鏈結,最後頁可全放資料頁位址。第一個 PRP List 指標也可以有 Qword 對齊的頁內 offset:若 offset 是 64 bytes,該頁剩餘 (4096−64)÷8=504 格;還需要下一頁時,最後一格放鏈結,最多留下 503 格描述資料頁。鏈結指向的下一個清單頁必須從頁首開始。先用 Figure 93 判斷 PRP2 是否為清單指標,再讀 §4.3.1 和 Figures 111–113 檢查 offset、清單內容與鏈結。
最後一格是不是鏈結由剩餘資料量決定;不能把每頁最後一格一律當資料,或一律當鏈結。
Host 要保留清單直到命令完成;描述 queue 的清單則需保留到 queue 刪除成功或 controller reset。
來源:Base 2.4 §4.2.1, 4.3.1–4.3.2 (PCIe-applicable layouts) · Base 2.4 §5.2.14.2.1 (SGLS) · PCIe Transport 1.4 §3.4 (Command Related Resource Retirement) · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.3.1–5.3.2 · 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)
來源:Base 2.4 §4.2.1, 4.3.1–4.3.2 (PCIe-applicable layouts) · Base 2.4 §5.2.14.2.1 (SGLS) · PCIe Transport 1.4 §3.4 (Command Related Resource Retirement) · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.3.1–5.3.2 · 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)
資料起點與清單起點的對齊要求不同,不能只使用一個「所有指標皆 4KiB 對齊」規則。
對齊依目前 CC.MPS 及指標角色判斷,不依作業系統恰好使用的頁面大小。
確認第一筆資料、命令內第一個清單指標、清單內資料位址或後續清單鏈結是哪一種。
一般 PRP1 可帶 Dword-aligned offset;第一個 PRP List 指標需 Qword 對齊且可有頁內 offset;後續資料頁與鏈結頁需 page-aligned。
先檢查對齊,再算第一個清單頁從起點到頁尾還容納多少 entries。
4KiB 頁內清單起點 offset=4080,可放 2 筆;若仍需串接,其中最後 1 筆必須作鏈結。
資料 PRP 最低兩位非零時可回 PRP Offset Invalid;若未回錯,須視為兩位清零。後續頁 offset 非零則規範建議回此錯誤,不能把 should 升成必然。
Host 仍必須送合法對齊;controller 可以容錯不代表 Host 的要求就消失。
來源:Base 2.4 §4.2.1, 4.3.1–4.3.2 (PCIe-applicable layouts) · Base 2.4 §5.2.14.2.1 (SGLS) · PCIe Transport 1.4 §3.4 (Command Related Resource Retirement) · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.3.1–5.3.2 · 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)
來源:Base 2.4 §4.2.1, 4.3.1–4.3.2 (PCIe-applicable layouts) · Base 2.4 §5.2.14.2.1 (SGLS) · PCIe Transport 1.4 §3.4 (Command Related Resource Retirement) · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.3.1–5.3.2 · 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)
0 是位址數值,不是 NVMe 為所有 PRP 定義的通用空指標;是否能存取還取決於實際記憶體映射。
先區分欄位格式錯誤、描述長度錯誤與實際資料搬移失敗。
非法 offset 可對應 PRP Offset Invalid;格式合法但 DMA 存取失敗可能對應 Data Transfer Error,不能只憑位址 0 判定。
規範沒有替每種循環鏈結或不可存取位址規定唯一可預測 CQE;若命令通道受破壞,也不能保證取得 CQE。
核對 CC.MPS、PRP 角色、需要的頁數與 Host 提供的有效記憶體範圍。
建立一個合法基準,再只改一處;先查清單是否指向預期頁,再檢查整個傳輸所需範圍。
合法且可存取的配置可正常完成;保留的 PRP2 即使為 0,也不構成缺少資料頁。
保存原 SQE、清單快照與位址配置,避免出錯後 Host 改寫清單,導致證據已不同。
先確認指標真的被命令使用,而非保留欄位或未走到的清單部分。
來源:Base 2.4 §4.2.1, 4.3.1–4.3.2 (PCIe-applicable layouts) · Base 2.4 §5.2.14.2.1 (SGLS) · PCIe Transport 1.4 §3.4 (Command Related Resource Retirement) · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.3.1–5.3.2 · 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)
來源:Base 2.4 §4.2.1, 4.3.1–4.3.2 (PCIe-applicable layouts) · Base 2.4 §5.2.14.2.1 (SGLS) · PCIe Transport 1.4 §3.4 (Command Related Resource Retirement) · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.3.1–5.3.2 · 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)
Data Block 描述資料位址與長度;Segment 類型描述下一段 descriptor 清單,而不是資料本身。
SGL 用於支援它的 PCIe I/O 命令;PCIe Admin 命令不得使用 SGL。
每個 descriptor16 bytes;Data Block 類型 0h,Segment2h,Last Segment3h。Segment 的 LEN 是下一段清單的 bytes。
先確認 Identify.SGLS,再看 CDW0.PSDT 的 data/metadata 配置。
只有一個資料區塊時,可直接放在命令 SGL1;多區塊時,SGL1 指向清單,再逐筆讀 Data Block。
例如 Last Segment.LEN=32,代表下一段有 2 個 descriptors,不代表命令只傳 32 bytes;實際資料量看那兩筆 Data Block.LEN。
鏈結 descriptor 只能在目前段最後一筆;Last Segment 指向的最後段不得再含任何鏈結 descriptor。
分開計算 descriptor bytes 與 payload bytes,才能核對清單完整性及命令長度。
來源:Base 2.4 §4.2.1, 4.3.1–4.3.2 (PCIe-applicable layouts) · Base 2.4 §5.2.14.2.1 (SGLS) · PCIe Transport 1.4 §3.4 (Command Related Resource Retirement) · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.3.1–5.3.2 · 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)
來源:Base 2.4 §4.2.1, 4.3.1–4.3.2 (PCIe-applicable layouts) · Base 2.4 §5.2.14.2.1 (SGLS) · PCIe Transport 1.4 §3.4 (Command Related Resource Retirement) · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.3.1–5.3.2 · 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)
不同 SGL 錯誤指出不同的壞掉環節,不能全部簡化成 Invalid Field。
分開 data SGL 與 metadata SGL,兩者長度錯誤有不同 Status。
Segment 位址需 Qword 對齊,LEN 非零且為 16 倍數;Data Block.LEN=0 合法,代表不傳資料。
鏈結不在最後一筆須 0/0Eh;最後段再鏈結須 0/0Dh;不支援類型須 0/11h;資料/metadata 過短分別須 0/0Fh、0/10h。
查 SGLS 的對齊、LLDTS 及支援 descriptor 類型,再核對命令要求長度。
沿鏈逐段核對邊界、最後一筆位置、type/subtype,以及全部有效資料長度。
SGL 至少要涵蓋要求的資料量;LLDTS=1 允許較長,仍只按命令要求傳輸。
LLDTS=0 的過長清單建議不要因此中止;若因此中止,建議用對應長度錯誤。對齊錯誤還須保留各欄定義的 may/should 強度。
先找第一個能以結構證明的違規,不憑最終資料不對就猜 descriptor 類型錯誤。
來源:Base 2.4 §4.2.1, 4.3.1–4.3.2 (PCIe-applicable layouts) · Base 2.4 §5.2.14.2.1 (SGLS) · PCIe Transport 1.4 §3.4 (Command Related Resource Retirement) · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.3.1–5.3.2 · 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)
來源:Base 2.4 §4.2.1, 4.3.1–4.3.2 (PCIe-applicable layouts) · Base 2.4 §5.2.14.2.1 (SGLS) · PCIe Transport 1.4 §3.4 (Command Related Resource Retirement) · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.3.1–5.3.2 · 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)
SGL 支援不是只有一個 yes/no;資料對齊、額外類型、metadata 與較長清單都有各自能力。
能力還須配合傳輸與命令種類;Base 表列某個類型,不等於所有 PCIe 命令都可使用。
SGLS[1:0]=00 不支援、01 支援且 Data Block 無對齊粒度限制、10 要求 Dword 對齊與粒度。
LLDTS 控制較長清單,SBBDS 控制 Bit Bucket,MSDS 與 MBA 控制 metadata 配置;SDT 是建議 descriptor 數。
先選合法 PSDT,再只使用已宣告且 PCIe 允許的 type/subtype;Offset subtype 不能因看到其他傳輸定義就套用。
SGLS=10b 時,Data Block 位址與長度須是 4-byte 倍數;這不表示每個資料區塊都要 page-aligned。
【模擬資料】假設 PCIe Controller 支援 Bit Bucket,SDT=2,且一筆讀取命令的目的 SGL 含兩個 Length 非零的 Data Block 與一個 Length 非零的 Bit Bucket。依 §4.3.2,計入 SDT 的數量是 3,超過建議值,效能可能降低;這不代表命令因此必須失敗。Segment descriptor 與 Length 為零的 Data Block 不列入這項計數。Figure 338 的 SDT=0 表示沒有回報建議上限;MSDBD 則是 capsule 內的限制,不能當成 PCIe 記憶體清單的通用上限。
支援宣告與合法描述資料必須一致;Admin 命令的 SGL 禁用規則仍優先。
先完整解碼 SGLS,而不是只看整個欄位非零。
來源:Base 2.4 §4.2.1, 4.3.1–4.3.2 (PCIe-applicable layouts) · Base 2.4 §5.2.14.2.1 (SGLS) · PCIe Transport 1.4 §3.4 (Command Related Resource Retirement) · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.3.1–5.3.2 · 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)
來源:Base 2.4 §4.2.1, 4.3.1–4.3.2 (PCIe-applicable layouts) · Base 2.4 §5.2.14.2.1 (SGLS) · PCIe Transport 1.4 §3.4 (Command Related Resource Retirement) · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.3.1–5.3.2 · 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)
Pointer 錯誤表示描述方法不合法;Transfer Error 表示資料或 metadata 搬移失敗,兩者不能用同一個原因解釋。
錯誤可能在清單檢查或實際存取時才被發現,時間不同。
記錄 PSDT、指標、長度、SCT/SC、SQID、CID;Error Information 的 PEL 是 Parameter Error Location,不是 Persistent Event Log。
先檢查 PRP/SGL 規則與完整範圍,再核對當時記憶體是否仍有效。
先排除 Host 提早回收 buffer,再檢查合法位址是否能被 controller 存取。
格式合法、範圍完整且搬移成功,仍需命令本身完成才有 Success;指標合法不代表媒體操作一定成功。
Data Transfer Error 為 0/04h;PRP Offset 與各 SGL 結構錯誤則用各自 Status,不能把所有傳輸錯誤一律定為 Host 格式錯誤。
SGL 可以先傳輸合法部分,之後才發現另一筆錯誤;失敗 CQE 不證明 buffer 完全未修改。
來源:Base 2.4 §4.2.1, 4.3.1–4.3.2 (PCIe-applicable layouts) · Base 2.4 §5.2.14.2.1 (SGLS) · PCIe Transport 1.4 §3.4 (Command Related Resource Retirement) · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.3.1–5.3.2 · 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)
來源:Base 2.4 §4.2.1, 4.3.1–4.3.2 (PCIe-applicable layouts) · Base 2.4 §5.2.14.2.1 (SGLS) · PCIe Transport 1.4 §3.4 (Command Related Resource Retirement) · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.3.1–5.3.2 · 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)
把錯誤對回原命令,才能知道哪個指標或資料範圍需要修正。
使用同一 controller、同一 queue 使用期間及相同 SQID/CID;CID 可能重用,單看數字不夠。
保存 CQE 的 SCT、SC、DNR、More,再依適用規則讀 Error Information。
Error Count、SQID、CID、Status 與 Parameter Error Location 可協助比對;無法指出欄位時,需保留其無效/未指定表示。
先保存原命令與清單,避免重試時覆寫唯一能定位問題的內容。
先對命令身分與狀態,再判讀 byte/bit 位置;清單內容在 Host memory 時,不能硬把每個錯誤都映成 SQE 某一 bit。
找到相符紀錄後,可將原始欄位、違規條件與實際 Status 放在一起驗證。
More=0 不證明一定沒有 Error entry;也不是每個失敗命令都要求新增 entry。DNR=0 更不代表可用同一個壞清單直接重試。
若記錄已被覆蓋或重設後清除,說明證據不足;不能將缺少歷史紀錄當成原命令合法。
只有收到 CQE,才有 DNR 與 More 可供判讀。 完整條件見本冊說明
成功 CQE 不會單憑成功這件事,就要求新增 Error Information entry。 完整條件見本冊說明
來源:Base 2.4 §4.2.1, 4.3.1–4.3.2 (PCIe-applicable layouts) · Base 2.4 §5.2.14.2.1 (SGLS) · PCIe Transport 1.4 §3.4 (Command Related Resource Retirement) · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.3.1–5.3.2 · 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)
來源:Base 2.4 §4.2.1, 4.3.1–4.3.2 (PCIe-applicable layouts) · Base 2.4 §5.2.14.2.1 (SGLS) · PCIe Transport 1.4 §3.4 (Command Related Resource Retirement) · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.3.1–5.3.2 · 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)
這些規則在本冊只完整說明一次。返回剛才的題目可用瀏覽器「上一頁」;特定命令或 Feature 的明文例外優先。
只有收到 CQE,才有 DNR 與 More 可供判讀。DNR=1 表示相同命令即使重送到此 NVM subsystem 的任一 controller,仍預期會失敗;DNR=0 則只表示可能成功。除非個別錯誤條件另有明定,不能只看 Status 名稱就要求 DNR=1。More=1 表示 Error Information Log 有這筆命令的補充資訊。SCT=SC=0 時,DNR 應為 0。
成功 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