Solidigm研究揭示Linux内核文件系统缓冲区IO对kworker的依赖
2024 年 6 月,在 Linux 内核文件系统和内存管理峰会上,讨论了一个耐人寻味的话题:使用缓冲 I/O 写入时,Linux 内核的限制为 7GB/s。确定的根本原因是依赖单个kworker线程来处理缓冲区 I/O 任务。随着高带宽 PCIe Gen5 NVMe 驱动器的日益普及,这一限制变得更加显著。在 Linux Weekly News 论坛上讨论之后,我们进行了实验来测量和改进缓冲 I/O 性能。(关于“测量和改进缓冲I/O”主题讨论链接详见:https://lwn.net/Articles/976856/)
Solidigm测试实验结果与分析
测试配置
存储服务器 – Intel Gen5 BNC
测试结果摘要
根据表中显示的结果,我们观察到:使用PCIe Gen5 NVMe RAID 0和内核 6.8,kworker的7GB/s瓶颈仅发生在Ext4文件系统中。XFS 文件系统性能良好,kworker CPU 使用率仅为 20%。有关详细的可视化分析,请参见图1和图2。
图2. XFS文件系统在 flush kworker 线程上显示 20%的CPU占用率
火焰 图表分析
图3显示了iomap_do_writepage上的XFS热点,它利用最新的Linux内核内存框架(folio)实现更好的多页内存管理。
图3.XFS 热点 iomap_do_writepage
图4显示Ext4在kworker上受CPU限制,最终调用了folio_start_writeback。这表明 XFS(第一个实现iomap和folio的文件系统)可能更高效,而Ext4可能会从进一步的改进中受益。
LWN文章的结论是:即便使用内核6.8,每个卷的每个文件系统目前也只有一个kworker线程。不同的文件系统以不同的效率利用这个单一的kworker线程,从而影响带宽性能。对于高端 NVMe 配置,例如具有RAID 0 或RAID 5的Gen5 PCIe SSD,使用直接 I/O 可以提供更好的带宽利用率,这反过来又会提高应用程序带宽并为其他云原生任务节省 DRAM。
结论
新的 AI 时代需要更高的存储带宽。这已经通过我们与中国顶级云服务供应商的内核存储团队负责人的讨论得到了验证。这使其成为 Linux 内核存储堆栈的有效测试用例。我们为客户提供以下建议以获得最佳带宽:
- 如果使用高性能 PCIe Gen5 D7-PS1010 SSD,则绕过缓冲 I/O。
- XFS 似乎是一种具有缓冲 I/O 的更高效的文件系统。
Solidigm 的解决方案开发团队将继续与内核文件系统开发人员讨论,以获得进一步的见解和更新。
引用:
https://www.solidigm.com/products/technology/xinnor-xiraid-and-high-density-solidigm-qlc.html
https://www.solidigmtechnology.cn/products/data-center/d7/ps1010.html