Controller 初始化與停用
先理解 controller 如何從停用轉為就緒,再開始處理命令。讀到能力,不表示 controller 已啟用;Host 設定 EN,也還要等待 RDY。即使 RDY=1,仍可能需要依 Ready Mode 確認媒體是否可用。本冊將狀態、等待時間及允許執行的動作放在一起,說明每個階段應如何判斷。
NVMe · Q1–328
本題庫收錄第 1~328 題,依主題分成 27 冊。先理解 controller 啟用、queue 及 command 的運作,再學習如何查詢能力與設定功能。每題除了說明機制,也練習將實際觀察結果與規範要求互相比對。
先理解 controller 如何從停用轉為就緒,再開始處理命令。讀到能力,不表示 controller 已啟用;Host 設定 EN,也還要等待 RDY。即使 RDY=1,仍可能需要依 Ready Mode 確認媒體是否可用。本冊將狀態、等待時間及允許執行的動作放在一起,說明每個階段應如何判斷。
Host 準備的 queue 記憶體、controller 分配的 queue 配額,以及已成功建立的 queue,是三種不同資訊。本冊先說明 SQ 與 CQ 的依賴關係,再討論大小、識別碼、刪除及重設,讓你能判斷何時可以使用 queue,以及何時能安全回收記憶體。
Doorbell 告訴 controller,Host 的指標已前進到哪個位置;Phase 則讓 Host 分辨 CQ 中的是新完成結果,還是上一圈留下的資料。本冊將位置與有效性一起說明,幫助你正確處理繞回及空間釋放,避免將正常繞回誤判成倒退,或把舊 CQE 處理兩次。
從 Host 提交命令,到 controller 取得、處理並回報完成,再到 Host 回收資源,各階段能證明的事情不同。本冊沿著這條流程解讀 Command 與 CQE,並說明順序、仲裁及中斷各自控制什麼。只有完成順序,還不足以推論 controller 內部的全部行為。
Identify 提供多種查詢結構。先確定要查哪個物件、需要哪一種資訊,再選擇 CNS、CSI、NSID 及其他欄位。本冊分別說明能力、目前配置與清單變更,讓你知道不同回覆如何互相補充,以及哪些差異才可能構成矛盾。
設定 Feature 前,先確認它影響哪個物件、是否可變更,以及是否可保存。設定後,再分別確認命令成功、Current 讀回值、實際行為與重設後的恢復結果。本冊依這些步驟說明如何驗證設定,避免只看成功 CQE 就跳到功能一定正確的結論。
Log 回答狀態、歷史或支援能力,但不是每份 Log 都保存歷史,也不是讀取後一定不變。本冊先選對資料與範圍,再處理長度、分段、事件確認與一致性。
AER 讓 Host 先留下等待通知的請求,controller 有事件時才完成它。先理解請求、事件、Log 與確認的關係,再處理多事件、遮蔽與重新掛入。
本冊從一筆失敗命令出發,先判斷錯誤類型,再找補充記錄與恢復依據。重點是把原命令、完成狀態及歷史資料對回同一件事。
Timeout 是 Host 的觀察,未必能說明命令停在哪裡。本冊沿提交、取得、執行、完成與處理的路徑找證據,再決定 Abort 或較大範圍 reset。
Format 改變 namespace 格式;Sanitize 處理資料清除。兩者的範圍、完成點與 reset 行為不同,本冊以一次操作的前、中、後狀態逐步區分。
先分清下載、提交與啟用,再把 Boot Partition 的讀取和切換放在旁邊比較。資料已傳入 controller,不代表新韌體或新開機映像已開始使用。
Self-test 將裝置內部診斷結果回報給 Host。先確認能啟動哪種測試,再分清進度、最終結果與失敗欄位有效性。
建立 namespace、讓 controller 能存取它,以及限制寫入,是三組獨立狀態。本冊用同一物件從建立到刪除的流程,把三者接起來。
Reset 結束操作環境,Shutdown 準備安全停止;兩者的目的和完成證據不同。先看影響範圍,再分辨哪些狀態需要重建,哪些操作仍持續。
先看裝置目前處於哪個功耗狀態,再追蹤溫度控制的轉換與累計時間,最後接到健康警告及工作量。這個順序能把目前狀態與過去累積的統計接在一起。
PEL 保存重要事件,Timestamp 協助解釋事件時間。本冊先教一致地取回完整 Log,再說明可變長度、事件類型與時鐘變更。
Keep Alive 用來偵測 Host 是否仍維持連線活動,在 PCIe 上屬選配。本冊分開命令模式與流量模式,說明何時開始計時及到期後的結果。
先看記憶體位於哪裡、由誰提供與何時可回收,再看持久性。HMB、CMB、PMR 不能因都含 Memory 就套同一組 reset 規則。
Security Send/Receive 承載協定資料;Lockdown 限制命令或 Feature。先分清資料交換結果與禁止範圍,再討論 reset 及斷電持續性。
多路徑、shared namespace 與虛擬化是不同關係。本冊先畫 controller 拓樸,再加入 attachment、ANA 及可分配 queue/interrupt 資源。
容量欄位分布於不同管理層級,健康計數也有自己的範圍。本冊先理解歸屬,再計算 Create/Delete 實際改變哪一層的容量。
管理歸屬與 FDP 放置關係要用不同視角閱讀。本冊先辨認各種 ID 的範圍,再追蹤一筆 Write 如何選到 RU,最後解讀媒體資訊的限制。
資料指標描述的是記憶體配置。本冊先算 PRP 跨頁,再讀 SGL 的 descriptor 關係,最後把格式錯誤與傳輸失敗分開。
先確認 CQE 真的存在,再查通知如何送到 Host。本冊把 CQ 關聯、合併、mask 與 Host 處理分開,避免把沒有中斷當成沒有完成。
本冊把前面機制放進具體矛盾情境:先確認比較的是同一對象與同一時點,再判斷證據是否足夠。相關機制使用固定連結,不重複整段教學。
本冊補充原題庫尚未展開的資料 I/O 判讀:命令能不能接受、完成後保證什麼、資料內容如何驗證,以及失敗後可能留下哪些結果。先把四個問題分開,再用具體欄位值推導;既有 Feature、queue 與指標規則則連回原題。
所有算例皆為教學假設,不是實體裝置量測。範圍是 PCIe SSD 使用的三份規格;不含 NVMe over Fabrics、PCIe Link 與封包細節。必要的 PCIe 設定、中斷、Register 及 Doorbell 仍包含在內。