高性能存储 SIG(Special Interest Group)目标:存储领域的发展历程,本质上是存储介质与软件栈相互促进发展的过程。高性能存储 SIG 致力于存储栈性能挖掘,当前主要聚焦内核 io_uring 技术优化异步 IO 性能,使用持久化内存提升业务单成本性能,容器场景存储技术优化等课题。高性能存储 SIG 期望通过社区合作,打造标准的高性能存储技术软件栈,推动软硬件协同发展。
01 SIG 整体进展
1.本月合入 Anolis 主线 PR 共计 30 个,包含多个重要组件的特性支持,性能优化和 bugfix 等。
2.增强 fuse 特性,如支持 close-to-open 缓存一致性,支持 daemon failover,增强统计和 debug 等,以更好地用于后端分布式文件系统的接入。
3.io_uring nvme passthrough 特性正式合入 ANCK 5.10 主线,将持续跟踪优化。
4.DSMS 完成 Anolis OS 23 构建打包并发布预览版,用户可在 Anolis OS 23 中通过 yum 安装体验。
02 项目具体进展
1)Anolis OS
CVE:CVE-2022-33742(PR1676),CVE-2023-2985(PR1776/PR1777),CVE-2023-26607(PR1778/PR1779)
erofs:支持 erofs + virtiofs + dax 模式(PR1747)
io_uring:支持 cqe32(PR1684),支持 nvme passthrough(PR1681), fio 配套支持 nvme passthrough(PR8/PR9),liburing 配套支持(PR10/PR11)
ext4:回退 ext4: fix bad checksum after online resize(PR1704),修复 ext4 bigalloc 多个问题(PR1669)
xfs:修复 xfs/512 失败问题(PR1822),修复 generic/571 失败问题(PR1824)
fuse:特性增强,如支持 cto 语义,支持 failover,增强统计和 debug 等(PR1570/PR1670),修复 fuse_update_stats() 引入的 array-index-out-of-bounds 问题(PR1788/PR1790)
overlayfs:修复 overlay/077 失败问题(PR1774),修复特定场景 copy up 报权限不足的问题(PR1801/PR1802),修复 generic/591 失败问题(PR1823)
block:优化 iops 限流特性(PR1696),支持细粒度的 PR 权限(PR1743),修复 virtio-blk discard 问题(PR1794/PR1798)
nfs:修复 nfs-server crash 问题(PR1591),修复 __nfs42_ssc_open() UAF 问题(PR1780)
2)fuse 增强
在 sysfs 下增加调试接口,输出打印特定 fuse 文件系统下所有已经发送给用户态 daemon 等待处理的请求。
在 sysfs 下增加数据统计接口,统计输出特定 fuse 文件系统下各类型请求的数量以及处理耗时。
增强 cache(cache=always|auto)模式下的缓存一致性,以适用于依赖强一致性的分布式文件系统后端,例如 nfs:
- 用户态 daemon 可以通知 fuse client 使一个目录下的所有目录项无效(invalidate all direct dentry)。
- 实现 cto (close-to-open)缓存一致性模型,包括数据和元数据的 flush-on-close 和 invalidate-on-open 语义。
- 增强 fuse 故障恢复(failover)模式下的缓存一致性模型。
3)容器镜像
重构 erofs xattr 实现,以支持后续的增强特性,目前已经合入社区上游,计划在 Linux v6.5 中发布。
开发 erofs xattr name bloom filter 特性,以加速 negative xattr lookup 的性能,shared xattr 镜像执行“ls -lR”负载下可优化 ~20% 性能,目前仍在迭代中。
4)io_uring
通过 io_uring 支持 cqe32 和 generic per-namespace char device(ngXnY)的引入,ANCK 已合入 nvme passthrough 的支持。新增的 io_uring_cmd 包括:
- NVME_URING_CMD_ADMIN
- NVME_URING_CMD_ADMIN_VEC
- NVME_URING_CMD_IO
- NVME_URING_CMD_IO_VEC
对应的返回值存放在 cqe32 扩展的域中。该特性的优势在于,用户态可借助 ioctl 和 io_uring_cmd,直接与 nvme 驱动打交道,绕过 block 层的处理逻辑,从而提升性能。目前用户态 fio 工具和 liburing 库已同步配套支持。
在业务环境验证过程中,我们发现了几个问题:
- 下发大于设备支持的最大 IO 时会返回失败,与上游社区沟通确认,由于是直接与设备驱动打交道,需要应用做好处理,属于设计约束。
- iostat 统计不到相关数据,待进一步跟踪分析。
5)DSMS
截止目前,dsms 的一期开发工作全部完成,并完成 Anolis OS 23 的构建打包和包引入申请,已随 Anolis OS 23 发布预览版。
欢迎用户安装体验,相关问题可以通过 gitee 仓库(https://gitee.com/anolis/dsms)或 bugzilla 反馈。
dsms-storage 子仓库目前遗留一些社区提出的 cve 漏洞待修复。
03 下一步计划
1.erofs xattr name bloom filter 及 deflate 压缩特性合入社区主线,预计在 Linux v6.6 发布。
2.开发 erofs-utils 的 tarfs merge 功能,以支持 erofs 通过 tarfs 模式直接挂载 OCI 容器镜像。
3.跟踪解决 nvme passthrough 模式下 iostat 失效问题,以及引入 fixed buffer 等优化。
4.dsms-storage cve 漏洞修复和用户反馈问题跟踪。
相关链接:
高性能存储 SIG 主页:https://openanolis.cn/sig/high-perf-storage
注:更多龙蜥 SIG 月度动态可点击这里查看。
—— 完 ——
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。