已合并
[fix] 新增GetSingleLocBufferUniqueId,区分本地与远端buffer的uniqueId生成 #4622
zhengjinwei_y创建于 6 天前
[fix] 新增GetSingleLocBufferUniqueId,区分本地与远端buffer的uniqueId生成 #4622
已合并
zhengjinwei_y创建于 6 天前
6 天前

描述

简要描述

  1. 新增GetSingleLocBufferUniqueId方法,区分本地与远端buffer的uniqueId生成逻辑
  2. 修复LaunchCcuTasks中taskInfo.timeout的u32到u16截断问题

问题描述

  1. GetLocBufferUniqueIds原先复用GetSingleRmtBufferUniqueId生成本地buffer的uniqueId,通过传入UINT32_MAX作为notifyId哨兵值区分。该做法语义不清晰:本地buffer实际不含notifyId,却混入远端buffer的序列化字段,可能导致远端匹配时因多余字段产生歧义,且复用远端方法增加维护成本。
  2. LaunchCcuTasks函数中,taskInfo.timeout(uint16_t)直接赋值execTimeOutSec/GetNotifyWaitTime()(uint32_t),存在截断风险。当值超过65535时,高16位被丢弃,导致超时时间不正确。涉及ccu_launch.cc和ins_rules.cc两处。

解决方案

  1. 新增GetSingleLocBufferUniqueId(addr, size, tokenId, tokenValue)方法,仅序列化本地buffer所需的4个字段(不含notifyId),UbMemTransport与AicpuTsUboeUbgChannelHelper两处均新增
  2. GetLocBufferUniqueIds中本地buffer改用GetSingleLocBufferUniqueId,空buffer用GetSingleLocBufferUniqueId(0,0,0,0)
  3. 同步更新stub(llt_next_orion_stub.cc)新增GetSingleLocBufferUniqueId桩实现
  4. 参考hccl_communicator_host.cc中AicpuKernelLaunch的修改方式,对LaunchCcuTasks中taskInfo.timeout赋值增加溢出保护:当值 >= std::numeric_limits::max()时钳位为u16最大值,否则安全转换为u16。涉及ccu_launch.cc(execTimeOutSec)和ins_rules.cc(GetNotifyWaitTime())两处

影响范围

  1. 新增:UbMemTransport::GetSingleLocBufferUniqueId、AicpuTsUboeUbgChannelHelper::GetSingleLocBufferUniqueId
  2. 修改:GetLocBufferUniqueIds本地buffer uniqueId生成逻辑,由复用远端方法改为独立本地方法
  3. 修改:ccu_launch.cc和ins_rules.cc中LaunchCcuTasks函数,taskInfo.timeout赋值增加溢出保护
  4. 兼容性:本地与远端buffer uniqueId字段数不同,匹配逻辑不受影响;timeout溢出保护不影响正常值(<65535)的行为

新增用例

  • 更新stub:llt_next_orion_stub.cc同步新增GetSingleLocBufferUniqueId桩实现

变更类型

请选择本次引入的变更类型:

  • 🐛 Bug修复
  • ✨ 新特性
  • 🚀 性能优化
  • 📝 文档更新
  • 📋 其他,请描述:

关联的Issue

NA

测试

已完成的测试用例和场景:

  1. 更新 llt_next_orion_stub.cc:新增 GetSingleLocBufferUniqueId 桩实现,保证 UT 编译通过
  2. GetLocBufferUniqueIds 改用 GetSingleLocBufferUniqueId,验证本地 buffer uniqueId 序列化字段与远端区分
  3. pre-commit(clang-format + OAT)通过

补充的UT用例:

  • 后续可补充 GetSingleLocBufferUniqueId 输出字段顺序与内容校验用例

文档更新

合入检查

  • 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定
  • 🔍 邀请 committer评论/lgtm前的必要检查
    • 🏷️ 标题中使用了合适的类型标签([fix]
    • 📄 代码修改内容已简要描述,相关文档已更新
    • 📝 代码注释已更新,代码遵循项目整体代码风格
    • 🧪 代码UT测试已更新(stub已同步)
    • 🔬 验证方法已更新到"测试"部分
    • 🛠️ 代码已通过静态分析工具检查,无错误
    • 👥 代码检视/code review/同行评议和必要的代码串讲
    • ✅ 代码检视意见已处理或答复
  • 🚀 预约 前冒烟 用例前的必要检查
  • 🎯 预约 approver评论/approve,正式合入前的必要检查
likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 zhengjinwei_y 的贡献)
Zzhengjinwei_y
6 天前 创建了 pull request,commit 67a29a8c
atomgit-bot
atomgit-bot
6 天前 评论:

变更摘要

本 PR 主要修复本地 buffer 与远端 buffer 复用同一 uniqueId 生成逻辑导致的语义不清问题。此前 GetLocBufferUniqueIds 通过复用 GetSingleRmtBufferUniqueId 并传入 UINT32_MAX 作为 notifyId 哨兵值来生成本地 buffer 的 uniqueId,混入了本地 buffer 并不存在的远端字段。此次改动新增独立的 GetSingleLocBufferUniqueId(addr, size, tokenId, tokenValue) 方法,仅序列化本地 buffer 所需的 4 个字段(不含 notifyId),并在 UbMemTransportAicpuTsUboeUbgChannelHelper 两处落地,使本地与远端 buffer 的 uniqueId 生成逻辑相互独立。

主要改动

  • 新增 GetSingleLocBufferUniqueId 方法: 在 UbMemTransportAicpuTsUboeUbgChannelHelper 中分别新增该方法,使用 BinaryStream 依次序列化 addrsizetokenIdtokenValue 四个字段,不再包含 notifyId
  • 修改 GetLocBufferUniqueIds 的本地 buffer 生成逻辑: 将本地 buffer 的 uniqueId 由复用 GetSingleRmtBufferUniqueId(..., UINT32_MAX) 改为调用新增的 GetSingleLocBufferUniqueId,空 buffer 由 GetSingleLocBufferUniqueId(0, 0, 0, 0) 填充。
  • 同步更新头文件声明: 在 ub_mem_transport.haicpu_ts_uboe_ubg_channel_helper.h 中新增 GetSingleLocBufferUniqueId 的声明。
  • 更新 UT stub: 在 llt_next_orion_stub.cc 中新增 UbMemTransport::GetSingleLocBufferUniqueId 的桩实现,返回空的 std::vector<char>,保证 UT 编译通过。
likedislike
atomgit-bot
atomgit-bot
6 天前 评论:

代码审查

✅ 未发现问题

likedislike
zhengjinwei_y
6 天前 评论:

/compile

likedislike
Zzhengjinwei_y
6 天前 update merge request[project id: 7874083, iid: 4622, commit_id: 551f8961768369976a5574a2130afb9995ff49a0] virtual merging success
此处折叠了181条消息 查看更多
hulk1997成员
3 天前 评论:

/lgtm

likedislike
temper7620成员
3 天前 评论:

/approve

likedislike
57_Viking
57_Viking成员
3 天前 评论:

/approve

likedislike
CANN-robotCANN-robot成员
3 天前 添加了label:lgtmapproved
CANN-robotCANN-robot成员
3 天前 合入了pull request