NVMe Protocol
BasicBasic

NVMe Protocol

Keywords

NVMePCIesubmission queuecompletion queuedoorbell registerqueue pairnamespaceAHCIcommand setAsk ChatGPT

Progress

Sign in to track your progress.

傳統的 AHCI 介面是為旋轉式硬碟設計的,只有單一 command queue 且深度有限,無法充分發揮 SSD 的平行處理能力。NVMe(Non-Volatile Memory Express)是專為 flash storage 設計的協定,直接運行在 PCIe bus 上,大幅降低了協定層的延遲。NVMe 的核心設計是多對 submission queue 與 completion queue,軟體將 I/O command 放入 submission queue 後,透過寫入 doorbell register 通知裝置處理,裝置完成後再將結果放入對應的 completion queue。這種多 queue 架構讓我們可以為每個 CPU core 各配一組 queue pair,避免多核心之間的鎖競爭。NVMe 也引入了 namespace 的概念來劃分裝置上的儲存空間,以及豐富的 command set 支援各種操作。這些設計使 NVMe 成為現代高效能儲存系統的標準介面,也是我們後續討論 io_uring 和 SPDK 等進階 I/O 框架的基礎。

Key Concepts

我理解為什麼 NVMe 取代了 AHCI:AHCI 只有單一 command queue 且是為 HDD 設計的,無法發揮 SSD 的平行處理能力,而 NVMe 直接運行在 PCIe 上,大幅降低協定延遲

我理解 NVMe 的多 queue 架構,知道它支援多對 submission queue (SQ) 與 completion queue (CQ),軟體將 command 放入 SQ 並寫入 doorbell register 通知裝置,裝置完成後將結果放入 CQ

我理解 per-core queue pair 的設計如何避免多核心之間的 lock contention,每個 CPU core 擁有獨立的 SQ/CQ pair,不需要與其他 core 競爭鎖

我了解 NVMe namespace 的概念,知道它是 NVMe 用來劃分與管理裝置儲存空間的邏輯單元

Recommended Resources

Test Your Understanding