io_uring自2019年1月初提出后,目前已合入Linux v5.1版本,SPDK也在用户态通用块层(bdev),建立了uring bdev的设备(代码目录:spdk/module/bdev/uring)。像其他存储设备对应的bdev一样,比如HDD, NVMe SSD, Optane SSD等等,可以灵活地将uring bdev配置到对应的应用和服务中。如图1可以将NVMe SSD分别配置成不同的bdev类型,给到SPDK的bdevperf测试工具:
-
SPDK用户态NVMe Bdev (对应通过用户态NVMe驱动来操作NVMe SSD)
-
SPDK Uring Bdev (对应通过io_uring来操作NVMe SSD)
-
SPDK Linux AIO Bdev (对应通过Libaio来操作NVMe SSD)
图1:SPDK支持不同的Bdev
首先,回顾下SPDK (Storage Performance Development Kit) 的出发点,为了充分使用到CPU的能力和发挥出高速NVMe SSD的性能,SPDK (https://spdk.io/) 开发了用户态的NVMe驱动,并引入了异步并发、轮询、无锁、单线程Run-To-Completion等优化。相关的重点优化如图2: