Kernel-Bypass I/O
AdvancedAdvanced

Kernel-Bypass I/O

Keywords

kernel bypassSPDKuser-space driverpolling modethread-to-queue affinityDPDKlockless designAsk ChatGPT

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 提供的安全隔離、多租戶保護和通用性,適用於高效能資料庫與分散式儲存等特定場景

Recommended Resources

Test Your Understanding