高性能存储SIG月度动态:ANCK ublk完成POC测试,EROFS优化xattr 原创
高性能存储技术 SIG(Special Interest Group)目标:高性能存储技术兴趣组致力于存储栈性能挖掘,当前主要聚焦内核 io_uring 技术优化异步 IO 性能,使用持久化内存提升业务单成本性能,容器场景存储技术优化等课题。期望通过社区平台,打造标准的高性能存储技术软件栈,推动软硬件协同发展。
01 本月 SIG 整体进展
本月合入 Anolis 主线 PR 26 个,包含多个重要组件的更新。erofs 支持精简的 long xattr name prefixes,优化 overlayfs 场景 xattr 元数据开销。ANCK 5.10 ublk 已完成 POC 测试,相比 tcmu 时延优化 1 倍。io_uring asio 协程优化方案已经确定,预计性能优化 10%。DSMS 管理平台的开发基本完成,dsms-storage 适配 Anolis 23 进行中。感谢中兴的同学提交了多个 bugfix。
02 项目具体进展
1、Anolis OS
ext4:修复 ext4_xattr_delete_inode hang(PR1362)
xfs:xfs_qm 清理(PR1326),修复 xfs_sysfs_init 内存泄露(PR1332/PR1334),移除 xfs_rename 中不正确的 ASSERT(PR1351),修复 force shutdown UAF(PR1376)
fuse:修复 fuse flush/resend 接口 bug(PR1302)nfs:修复 RECLAIM_COMPLETE EACCES 问题(PR1324/PR1325),修复 slot 分配失败的内存泄露(PR1346/PR1347),修复遍历 grace_list 缺少锁保护问题(PR1350),修复参数解析空指针(PR1370),处理 CREATE_SESSION NFS4ERR_NOSPC(PR1368/PR1360)misc:修复 hugetlbfs_parse_param 空指针(PR1352),修复 configfs_create_dir 内存泄露(PR1357),修复 nbd_start_device_ioctl hang(PR1356),修复 rbd_sysfs_init() 内存泄露(PR1372/PR1373),修复 md_cluster unlock_all_bitmaps 野指针(PR1367),修复 nvme_alloc_admin_tags 空指针(PR1405)vfio:Clear the caps->buf to NULL after free(PR1422/1427),修复 drbd_create_device UAF(PR1251)VFS:修复 ltp/openat04(PR1489)
2、容器镜像加速
erofs 文件系统支持精简的 long xattr name prefixes,用于解决存储 overlayfs xattr 元数据(例如 composefs 模式)重复 name 的额外开销, 更多背景可参考: https://lore.kernel.org/r/20230407141710.113882-1-jefflexu@linux.alibaba.com
erofs-utils 支持从 tarball 生成索引直接挂载,最新补丁正在测试中: https://lore.kernel.org/r/20230401072705.99060-1-hsiangkao@linux.alibaba.com
3、用户态存储
截止目前,上游社区一共提出了三种 ublk 零拷贝方案: https://lwn.net/Articles/926118/
我们也在调研一种基于 io_uring register 模式的零拷贝的方案,预计后续将发出 RFC 补丁到上游社区。
ublk 在 ANCK 5.10 上已经完成回合,并在分布式存储项目进行了 POC 测试,结果显示 ublk 的单 I/O 时延能优化到 tcmu 的一半,有很大的优势。
ACNK 5.10 和之前基于 6.1 主线上测试 ublk 的性能数据很接近,表明 ANCK 5.10 的 ublk 已经基本可用,后续将随 5.10.134-014 版本发布。
4、io_uring
对 io_uring echo server 测试框架进行优化,对每个 IO 请求引入工作负载从而模拟真实的业务环境,io_uring 的性能开始稳定的比 epoll 提高 10% 左右,原因是 io_uring 的提交 batch 有一定程度的提高。在进行 IO 请求的工作负载处理时,网络可能继续有请求到来,从而可以在一次 io_uring_enter 中提交多个请求,提高 batch。
我们调整了 io_uring asio 协程的实现方案,通过基于 io_uring 的 mulit-shot recv 和 provid-buffer 机制,采用 completion models 模式来实现异步编程。
此方案的好处是在网络中断中直接触发 io_uring recv 操作,缩短的整个 IO 链路。而传统 Readiness 编程模型需要先等待 IO 事件,然后再发起 IO 操作。目前 POC 代码完成 60% 左右。
5、DSMS
dsms-engine 开发进行中,主要是部署部分功能,B 版本测试同步进行中。由于 Anolis 23 上的 ceph 版本为 17.x,dsms-storage 仓库目前以来 15.x。经过 SIG 例会讨论,决定放到 dsms 子仓库中来维护。
03 SIG 下一步计划
erofs Linux v6.4 合入窗口准备,erofs-utils 支持 tarball 模式合入主线,deflate 压缩算法支持等。
ublk 分布式存储项目业务适配。
io_uring asio 优化方案实现和 POC 测试。
DSMS 继续适配 Anolis 23。
附录:SIG 项目一览
- io_uring
- virtiofs
- 容器镜像加速
- 数据库优化
- 用户态存储
- DSMS
详情内容见高性能存储技术 SIG,欢迎各位感兴趣的开发者加入共建。
—— 完 ——