新的存储接口继续在非易失性快速存储器(NVMe)存储上快速出现,但将这些创新融入操作系统的通用I/O堆栈具有挑战性且耗时。虽然NVMe标准不再局限于块I/O,但Linux I/O以块I/O路径为中心。由于缺乏可扩展的操作系统接口,新的存储创新难以被采用。
本文提出了I/O Passthru,一种新的I/O路径,已进入主流Linux内核。这个新路径的关键组成部分是NVMe-char接口和io_uring命令。允许更快地部署任何新的NVMe功能,因为它没有额外的抽象;提供了一个高效且功能丰富的用户界面。
构建了一个新的NVMe直通I/O路径,提供了比块I/O路径更高的灵活性和效率,如灵活的数据放置、计算存储和端到端数据保护。
介绍了io_uring命令,一种在Linux内核中实现异步IOCTL的通用工具。
在Linux内核的上游获得了这条路径,并将其集成到用户空间软件中,包括SPDK、xNVMe、liburing、fio和nvme-cli。
实验结果表明,(1)将其效率与现有的io_uring块路径进行比较,(2)通过将数据放置集成到Cachelib中来展示其灵活性。FIO峰值性能工作负载显示IOPS比块路径高16-40%。
实验环境:
数据集:生产工作负载、
实验对比:IOPs、CPU利用率、提交延迟、写放大因子
实验参数:队列深度、设备数
许多新的存储功能/接口不能很好地适应块层,并且由于Linux中缺乏适当的系统调用接口而面临采用变化。因此,之前只有两种选择:(1)在可能存在的块接口上使用同步NVMe直通,(2)切换到内核旁路解决方案。本文在内核中添加新的直通路径来创建一个新的替代方案。此路径将NVMe字符接口与io_uring相结合。并将此路径集成到各种用户空间库/工具,说明如何简化FDP SSD、端到端数据保护和计算存储的启用。还在io_uring中引入了ioctl的替代方案。io_uring_command基础设施确保io_uring功能不仅限于现有机制(即经典的读/写或其他已建立的系统调用),而且还可以应用于新的原语。