NVMe Protocol
Keywords
Prerequisites
Related Papers
- SSD-iq: Uncovering the Hidden Side of SSD Performance(PVLDB 2025)
- ZNS: Avoiding the Block Interface Tax for Flash-based SSDs(USENIX ATC 2021)
- Co-design of B+-Tree Index with Emerging Zone Interfaces(ACM TACO 2025)
- What Modern NVMe Storage Can Do, And How To Exploit It(PVLDB 2023)
- DuckDB on xNVMe(arXiv 2025)
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 用來劃分與管理裝置儲存空間的邏輯單元