Kernel-Bypass I/O
Keywords
Prerequisites
Related Papers
- 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.
即使有了 io_uring,I/O 路徑仍然要經過 kernel 的 block layer 和 file system,這些軟體層在 NVMe SSD 延遲降到微秒等級後,已經成為不可忽視的瓶頸。Kernel-bypass I/O 的核心思路是把 NVMe 裝置的控制權完全交給 user space,由應用程式直接操作裝置的 submission/completion queue,省去所有 syscall 和 context switch 的開銷。我們將以 SPDK(Storage Performance Development Kit)為例,介紹它的 polling-mode NVMe driver 如何在 user space 完成完整的 I/O 流程,以及如何利用我們之前學過的 DMA 機制讓裝置直接存取應用程式的 memory buffer。課程中也會討論 thread-to-queue affinity 的設計——每個 thread 專屬一組 NVMe queue pair,不需要任何鎖就能並行發送 I/O。這種架構雖然犧牲了 kernel 提供的安全性和多租戶隔離,但在需要極致效能的場景(如高效能資料庫、分散式儲存系統)中被廣泛採用。
Key Concepts
我理解為什麼要繞過 kernel:即使有 io_uring,I/O 路徑仍經過 kernel 的 block layer 和 file system,在微秒級延遲的 NVMe SSD 上這些軟體層已成為顯著瓶頸
我理解 SPDK 的 polling-mode driver 如何在 user space 直接操作 NVMe 裝置的 submission/completion queue,完成完整的 I/O 流程而不需要任何 syscall 或 context switch
我理解 thread-to-queue affinity 的 lockless 設計,知道每個 thread 專屬一組 NVMe queue pair,不需要任何鎖就能並行發送 I/O,避免多執行緒之間的競爭
我了解 kernel-bypass I/O 的取捨:雖然達到極致效能,但犧牲了 kernel 提供的安全隔離、多租戶保護和通用性,適用於高效能資料庫與分散式儲存等特定場景