头图

本文为达坦科技DatenLord新系列文章【开源周报】的第19篇。

设立这一系列的初衷,是为了更透明地分享达坦科技开源项目的成长轨迹。在这里,我们不仅会同步项目近期的核心开发进展与技术突破,更将通过路线图为您揭示未来的演进方向。

📍 项目地址与参与

GitHub 仓库:https://github.com/open-rdma/open-rdma-driver

我们诚挚邀请所有对高性能网络、Rust系统编程或RDMA技术感兴趣的朋友点击链接关注、支持我们的项目。开源的力量源于社区。您的每一次关注、讨论或代码贡献,都是项目前进的重要动力。期待与您携手,共建更完善的高性能基础设施生态。

01、本周进展

核心目标:围绕 open-rdma-driver 与 open-rdma-rtl,继续把本周工作重心从测试链路整理,转到驱动侧 ring buffer 抽象收敛与硬件接口语义清理,为后续 ACK/NAK 路径和硬件重构预留更稳定的软件边界。

<u>1. open-rdma-driver:清理 DeviceAdaptor 的伪错误传播,收紧</u> <u>CSR</u> <u>访问语义 (commit: ce6c2ec)</u>

​目标:​去掉当前驱动内部没有实际价值的 io::Result 传播链,明确 CSR 读写失败属于不可恢复错误,避免错误语义与调用路径继续扩散。

变更内容:

  • 将 DeviceAdaptor trait 中的 CSR 读写接口从 io::Result<u32> / io::Result<()> 改为直接返回裸值或直接完成写入
  • 在各后端实现中本地处理不可恢复错误:对仿真/硬件后端直接 expect,对 sysfs 对齐类问题保留断言
  • 同步清理 RingCsr、ProducerRing、ConsumerRing 以及若干 worker 路径上无信息增量的 ? 传播
  • 调整 udmabuf、mock verbs、configurator 和 simple\_nic worker 等调用点,使接口语义一致

结果:

  • 驱动内部对 CSR 访问失败的处理边界更清晰,不再把“无法恢复的硬件异常”伪装成普通 I/O 错误
  • ring buffer 相关代码路径明显收敛,为后续继续重构 producer / consumer 抽象减少了噪音

统计:

  • ce6c2ec:涉及 15 个文件,代码变化为 +127/-169 行

<u>2. open-rdma-driver:将 ring 元素抽象提升到“descriptor sequence”层,并补齐重构设计文档 (commit: 5e597c0)</u>

​目标:​让 producer 与 consumer 对外操作“逻辑元素”,而不是被单个 descriptor 的硬件传输粒度绑死,从而支持一个元素对应多个 descriptor 的 ring 设计。

变更内容:

  • 重构 rust-driver/src/ring/traits.rs,将编码接口从单 descriptor 的 ToRingBytes 扩展为 desc\_count + encode\_to\_slice
  • 为解码侧补充 MAX\_DESC\_COUNT 与 desc\_count 约束,使 consumer 能按 descriptor 序列恢复完整元素
  • 更新 cmd、send、meta\_report、simple\_nic 等 descriptor 实现,统一适配新的 trait 语义
  • 调整 producer.rs 与 consumer.rs,在 ConsumerRing 中引入预分配 scratch buffer 和 cached\_released\_tail 等状态,为后续多 descriptor 元素消费做准备
  • 新增设计文档 docs/zh-CN/design/refactor\_ringbuffer\_plan.md,集中说明 ringbuffer 重构结论、trait 方向和 producer / consumer 的职责边界

结果:

  • ring buffer 抽象从“单 desc 接口”转向“逻辑元素 <-> desc 序列”接口,软件语义与硬件传输粒度的边界更清楚
  • 后续无论是扩展变长元素、继续演进 descriptor 布局,还是配合硬件侧 ring 结构调整,都有了更稳定的抽象基础
  • 这也和当前硬件 ACK 重构里暴露出的“软件语义对象不应过早压扁成底层传输粒度”这一方向保持一致

统计:

  • 5e597c0:涉及 9 个文件,代码变化为 +675/-177 行

02、总结

本周工作主线比较明确:open-rdma-rtl 没有新增代码提交,增量主要集中在 open-rdma-driver。相比上一周继续围绕测试环境和仿真入口做整理,这一周更偏向驱动内部抽象重构。一方面,DeviceAdaptor 的 CSR 访问语义被收紧,去掉了没有实际恢复价值的错误传播;另一方面,ringbuffer 开始正式从“单 descriptor 操作”转向“逻辑元素对应 descriptor 序列”的设计。这两部分工作叠加起来,实际上是在给后续硬件 ACK/NAK 路径、descriptor 组织方式和 ring 读写行为的继续演进打底。

03、下周规划

<u>1. 继续完成 ringbuffer 重构收尾,收敛 producer / consumer 的提交与释放语义</u>

  • 继续梳理 ProducerRing 在多 descriptor 元素写入时的空间检查、编码、提交顺序与 CSR 可见性语义
  • 进一步补全 ConsumerRing 中 scratch buffer、tail 同步和完整元素判定逻辑,把当前预留状态真正收敛为可稳定复用的实现
  • 根据实际调用路径补充必要测试,避免 ring trait 调整后在 send、meta report 等路径引入回归

<u>2. 结合硬件 ACK 重构计划,推进软件侧抽象与状态粒度对齐</u>

  • 继续围绕 docs/zh-CN/design/硬件重构计划.md 中提出的 ACK bitmap / WQE 粒度问题,审视当前 driver 侧发送、接收和完成通知路径中的状态组织方式
  • 评估当前 ring descriptor 组织形式是否足以承接更细粒度的 ACK 跟踪信息,必要时继续调整相关 descriptor 和 worker 接口
  • 为后续 RTL 侧重新展开 ACK/NAK 路径修改预留更清晰的软件协作边界

<u>3. 在现有 RTL 基线上恢复联调,验证 driver 抽象重构没有破坏仿真路径</u>

  • 基于当前 open-rdma-rtl 现有测试环境,回头验证 driver 侧 ringbuffer 重构后的基础仿真链路
  • 优先检查 descriptor 编解码、tail/head 推进与 CSR 同步这几类最容易受本周改动影响的路径
  • 在确认软件抽象收敛后,再继续推进下一轮 RTL 侧功能改动

达坦科技始终致力于打造高性能​AI+Cloud基础设施平台​,积极推动AI应用的落地。达坦科技通过软硬件深度融合的方式,提供​AI推理引擎和高性能网络​,为AI应用提供弹性、便利、经济的基础设施服务,以此满足不同行业客户对AI+Cloud的需求。

公众号​:达坦科技DatenLord

DatenLord官网​:https://datenlord.github.io/zh-cn/

​知乎账号:​https://www.zhihu.com/org/da-tan-ke-ji

B站​:https://space.bilibili.com/2017027518

​邮箱:​info@datenlord.com

如果您有兴趣加入达坦科技Rust前沿技术交流群、硬件敏捷开发和验证方法学讨论群或AI Infra ​交流群,请添加小助手微信:DatenLord\_Tech


Datenlord
14 声望11 粉丝

DatenLord专注打造新一代云原生高性能存储平台,实现跨云、跨数据中心之间数据高速访问,从而极大提升存储系统的可扩展性,满足企业客户海量数据跨地域高速访问需求,在互联网、金融、电信、能源等不同行业均有广...