龙蜥SIG月度动态:ublk完成POC dsms-storage在Anolis OS成功适配 原创
高性能存储技术 SIG(Special Interest Group)目标:高性能存储技术兴趣组致力于存储栈性能挖掘,当前主要聚焦内核 io_uring 技术优化异步 IO 性能,使用持久化内存提升业务单成本性能,容器场景存储技术优化等课题。期望通过社区平台,打造标准的高性能存储技术软件栈,推动软硬件协同发展。
01 本月 SIG 整体进展
尽管 SIG 成员在 1 月都经历了新冠感染,但在本月仍然合入 anolis 主线 PR 23 个,包含多个主要组件的特性增强,性能优化,以及 bugfix 等。感谢所有 SIG 成员的辛勤付出,祝大家新年快乐!
ANCK 5.10 支持 ublk 代码已基本完成适配,同步测试中;另外在分布式存储项目中完成 POC,从 POC 数据来看,效果很不错,比之前的 tcmu 方案有很大程度的优化。该特性支持预计将在 ANCK 5.10-14 版本正式发布。
erofs 容器镜像 page cache 共享特性代码已发送到社区,需要进一步跟进并根据社区的 review 意见修改,并最终合入社区主线。
ANCK 4.19/5.10 fuse 回合 killpriv_v2 特性,极大地提升了 small write 性能(70% ~ 120%)。
DSMS 第一阶段适配工作已基本完成,dsms-storage 已可以在 Anolis OS 上正常运行。
浪潮信息 cuishiwei 同学在测试多个 nvme 盘并发创建和删除分区时发现可能导致宕机,报告到社区并在社区主线修复后,积极提交 PR 在 ANCK 4.19/5.10 两个版本完成修复。感谢 cuishiwei 同学的贡献。
02 项目具体进展
1、Anolis OS
erofs:fix potential NULL in error path(PR1022)
ext4:fix bug_on ext4_mb_use_inode_pa(PR1055),fix check to prevent false positive report of incorrect used inodes(PR1056),fix bug for rename with RENAME_WHITEOUT(PR1064),stable fixes(PR1091)
xfs:Speed up file fsyncs by reducing iolock cycling(PR1024),validate inode fork size against fork format(PR1067)
block:unhash blkdev part inode when the part is deleted(PR1081/PR1082)
fuse:support FUSE_HANDLE_KILLPRIV_V2(PR1084/PR1085),simply use flags instead for fuse passthrough(PR1088)
dax:fsdax COW bug fixes(PR1033),mark the iomap argument to dax_iomap_sector as const(PR1086)
io_uring:Improve IOCB_NOWAIT O_DIRECT reads(PR1034),fix referencing uninitialized io_uring_ctx(PR1040),fix CQ waiting timeout handling(PR1070),add IO_WQ_WORK_MM for uring_cmd(PR1077)
liburing:add IORING_SETUP_SQE128 and uring-cmd support(PR3),Add missing fields for uring_cmd in struct io_uring_sqe(PR4)
miscs:fix documentation for unprivileged_userns_clone sysctl(PR1073/PR1074),stable fixes (dm/md/nfs)(PR1089)
2、容器镜像加速
容器镜像 page cache sharing 特性在社区持续迭代,增加对 readahead 的支持。以 tensorflow 镜像为例,在创建同一镜像的多个实例时,该特性能节省 ~97% 的(容器镜像)内存占用;tensorflow 小版本之间能节省 ~20% 的(容器镜像)内存占用。
ANCK fscache daemonless 特性已实现 RFC 版本,支持 fscache daemon 的退出和重新拉起,持续迭代中。
3、用户态存储
ANCK 5.10 支持 ublk 代码已基本完成适配,40+ 补丁,待提交 PR review。
分布式存储项目的 POC 进展顺利,POC 基于 6.1 内核 ublk 适配,单个 IO 时延明显低于 tcmu 版本,IOPS 也有大幅度提升。
ebpf + io_uring 零拷贝特性原计划春节前发出 RFC,但因存在一些未解决的问题有些延迟;预计 2 月上旬发出 RFC 系列补丁到社区。
4、io_uring
优化 nowait O_DIRECT 读性能。
回合 uring-cmd 特性后结合 ublk 进行测试,过程中发现一些 io hang 等问题,确认为 uring-cmd 回合引入的问题,目前已经修复。
开始分析 asio 中 io_uring 的代码流程,目前已讨论出一些优化点,预计 2 月底会有一个阶段性的进展。
5、DSMS
在解决包缺失问题后,适配工作进展比较顺利,目前第一阶段的适配已基本完成,dsms-storage 已经可以在 Anolis OS 上正常跑起来;下一步将进行可视化相关开发工作。
当前选定 ceph 版本为 15.2.15。
相关工作计划:
https://gitee.com/anolis/dsms/issues/I62HO3
03 SIG 下一步计划
1、推动容器镜像 page cache 共享特性合入上游主线并回合到 ANCK。
2、erofs-utils 支持多线程解压,优化 ISO 镜像安装性能。
3、ANCK 5.10 支持 ublk 测试和分布式存储场景适配。
4、ebpf + io_uring 零拷贝方案社区 RFC 和讨论推进。
5、io_uring + async_simple 协程优化。
6、dsms 可视化管理平台开发。
附录:SIG 项目一览
- io_uring
- virtiofs
- 容器镜像加速
- 数据库优化
- 用户态存储
- DSMS
详情内容见高性能存储技术 SIG,欢迎各位感兴趣的开发者加入共建。
高性能存储技术 SIG 主页链接地址:
https://openanolis.cn/sig/high-perf-storage
—— 完 ——
加入龙蜥社群
加入微信群:添加社区助理-龙蜥社区小龙(微信:openanolis_assis),备注【龙蜥】与你同在;加入钉钉群(龙蜥交流群:13600003427或高性能存储SIG群:34264214)。