本文为达坦科技DatenLord新系列文章【开源周报】的第三篇。
设立这一系列的初衷,是为了更透明地分享达坦科技开源项目的成长轨迹。在这里,我们不仅会同步项目近期的核心开发进展与技术突破,更将通过路线图为您揭示未来的演进方向。
📍 项目地址与参与
GitHub 仓库:https://github.com/open-rdma/...
我们诚挚邀请所有对高性能网络、Rust系统编程或RDMA技术感兴趣的朋友点击链接关注、支持我们的项目。开源的力量源于社区。您的每一次关注、讨论或代码贡献,都是项目前进的重要动力。期待与您携手,共建更完善的高性能基础设施生态。
01、本周进展
本周核心目标:完善RCCL仿真模式测试框架,修复发现的bug,推进高压测试稳定性
本周主要围绕RCCL仿真模式测试展开工作,建立了完善的测试框架,发现并修复了多个关键bug,但在高压测试中遇到了仿真器稳定性问题。
- 建立基础测试框架 (commit: 0c3e32a)
实现:
- 创建统一测试脚本,支持基本的一键运行
- 实现test_common.sh,包含信号处理、仿真器管理、日志收集
- 为RCCL和基础测试创建专用脚本
当前状态:
- 框架初步可用,但功能有限
- 需要进一步完善错误处理和测试验证
- 修复基础测试中的状态机问题 (commit: ca025d5)
问题描述:
- 回环测试(loopback)中的RDMA连接状态机实现不正确
- 缺少从INIT到RTR再到RTS的完整状态转换
- 静态缓冲区分配无法适应不同大小的传输需求
修复内容:
- 在loopback.c中实现了完整的RC连接状态机:
- 正确实现了INIT→RTR→RTS的状态转换
- 添加了状态检查和错误处理
- 支持动态缓冲区分配,根据传输大小申请适当内存
- 优化了send_recv.c中的缓冲区管理
效果:
- 基础测试现在能正确建立RC连接
- 支持更大规模的数据传输测试
- 为发现仿真器高压问题提供了测试基础
- 修复虚拟地址到物理地址转换问题 (commit: d75e3b4)
问题:仿真模式下virt_to_phys_range函数无法正确翻译地址
解决:测试程序需要sudo权限读取/proc/self/pagemap
状态:已修复
- 实现匿名大页检测功能 (commit: 7590fc1)
背景:
- 驱动要求注册的MR必须使用2MB大页内存
- 需要验证RCCL通过hack_libc分配的内存确实是大页
实现内容:
- 在rdma_utils/pagemaps.rs中实现了check_addr_is_anon_hugepage函数
- 通过读取/proc/self/pagemap检查指定地址是否为匿名大页
- 在内存注册时增加大页验证,非大页内存拒绝注册
意义:
- 确保RCCL测试使用的内存满足驱动要求
- 提前发现内存分配问题,避免后续运行错误
02、发现的关键问题
- 仿真器高压稳定性问题
现象: 在高压运行普通sim测试(传输2MB数据)时,仿真器出现断言失败:
INFO cocotb: ImmAssert failed in mkBsvTopWithoutHardIpInstance.topLevelDmaChannelMux @time=18331000: "/home/peng/projects/rdma_all/open-rdma-rtl/src/FullyPipelineChecker.bsv", line 118, column 25
INFO cocotb: -- DataStream checkFullyPipeline Failed:
name = mkTopLevelDmaChannelMux muxInst write, lastBeatCnt=9140, curBeatCnt=9163, delta=23分析:
- checkFullyPipeline检查失败,DMA通道的数据流出现了23个beat的差异
- 可能是流水线控制逻辑在高负载下出现竞争条件
- 暂时关闭fullcheck检查后,测试可以运行但1小时未完成
后续计划:
- 调研cocotb仿真器行为,确认是否是仿真器代码问题
- 调试硬件RTL代码,检查流水线控制逻辑
- 分析高压场景下的时序和竞争条件
- NCCL重复注册MR问题
问题:
- NCCL会注册两个映射到同一个物理页的MR
- 这会导致同一个物理页面被重复pin/unpin
- 可能影响硬件的MTT和PGT管理逻辑
当前状态:
- 已初步修改代码避免重复pin/unpin同一物理页面
- 可能需要调整向硬件注册MTT和PGT的逻辑
- 修改后的代码还需要进一步验证正确性
- Post Recv WR时找不到QP问题
现象:
- 在post接收WR时系统提示找不到对应的QP
- 但QP明明在前面已经成功注册过
- 可能是QP查找逻辑或状态管理存在问题
后续计划:
- 深入调试QP管理代码
- 检查QP生命周期管理和查找逻辑
03、下周规划
短期任务(最高优先级)
- 解决仿真器高压稳定性问题
- 深入分析checkFullyPipeline失败的根因
- 测试cocotb仿真器行为
- 完成RCCL sim模式测试
- 修复NCCL重复注册MR问题
- 验证当前修改的正确性
- 完善MTT/PGT注册逻辑
- 解决post recv时找不到QP问题
- 定位找不到QP的根本原因
- 修复QP状态管理或查找逻辑
中期任务
- 完善测试框架
- 增加更多测试用例和场景
- 实现测试结果自动验证
- 添加性能基准测试
- 推进RCCL完整功能支持
- 在所有bug修复完成后,验证RCCL完整功能
- 支持更多collective操作测试
长期任务
- Driver 重构
- 优化代码架构,提升可维护性
- 重构核心模块,使得模块对外接口更为简洁同时正确处理错误
- GPU 内存注册支持
- 调研 dma-buf 内核接口的实现细节
- 设计内核模块中的 GPU 内存映射机制
- 实现 ibv_reg_dmabuf_mr verbs 支持
04、本周总结
本周继续推进在RCCL在驱动的仿真模式下的测试:
成果:
- 建立了基础测试框架,支持简单的一键运行
- 修复了基础测试中的状态机问题
- 实现了匿名大页检测
- 发现了仿真器高压稳定性问题
挑战:
- 仿真器在高压测试下出现流水线检查失败,需要深入调试
- NCCL重复注册和QP查找问题需要进一步分析
达坦科技始终致力于打造高性能AI+Cloud基础设施平台,积极推动AI应用的落地。达坦科技通过软硬件深度融合的方式,提供AI推理引擎和高性能网络,为AI应用提供弹性、便利、经济的基础设施服务,以此满足不同行业客户对AI+Cloud的需求。
公众号:达坦科技DatenLord
DatenLord官网:
https://datenlord.github.io/z...
知乎账号:
https://www.zhihu.com/org/da-...
B站:
https://space.bilibili.com/20...
如果您有兴趣加入达坦科技Rust前沿技术交流群、硬件敏捷开发和验证方法学讨论群或AI Infra 交流群,请添加小助手微信:DatenLord_Tech