Closed
[Requirement|需求建议]: AIV直驱URMA接口性能优化 #127
YeZZzzz1Add on  9 days agoClosed at  3 days ago
YeZZzzz1Collaborators
9 days ago Create

Background(背景信息)

asc-comm 设备侧 AIV URMA 批量通信接口(WriteNbi / ReadNbi / WriteWithNotifyNbi)是上层通信原语在 kernel 内下发点对点读写的基础热路径。

当前实现中,每次下发的处理路径上存在若干可削减的软件开销:每 op 一对同步原语加解锁、SQE 填充过程中 load 与 store 交错、单 SGE 场景经由 BufDesc 数组加循环的间接层、环形队列索引取模运算等。

本需求希望对上述热路径做针对性优化,降低单次下发的软件开销。

Origin(信息来源)

asc-comm AIV直驱团队

Benefit / Necessity (价值/作用)

  • 降低批量通信接口单次下发的软件时延;小消息场景软件开销占比高,收益更明显。
  • 热路径指令数精简:无循环、无乘除、同步原语替换为硬件事件。
  • 入参检查移入 debug 模式(HCOMM_DEBUG_TRAP_IF:debug 下打印并 Trap,release 下编译为空),release 热路径零开销,同时保留调试能力。
  • 单 SGE 与多 SGE 编译期分离,多 SGE 保持原逻辑,并补充多 SGE 单元测试。

Design(设计方案)

总体思路:只动设备侧热路径,公开 API 签名不变,WQE 位级语义不变。手段均为编译期化与同步原语轻量化,无运行时逻辑分叉:

// 1. 单 SGE / 多 SGE 编译期分离(重载决议)
// 新增标量参数版本:无循环、无 desc 解引用、wqebbCount 为编译期常量
BatchPostSend(handle, remoteAddr, GM_ADDR localAddr, uint32_t len, ...);
// 多 SGE desc 数组版本签名与逻辑不变

// 2. SQE 填充改为先快照全部字段、再连续写出,消除 load/store 交错

// 3. 同步原语轻量化
// 每 op 的 Mutex::Lock/Unlock 移除;commit 路径 Mutex 替换为硬件事件:
SyncAction<PIPE_S, PIPE_MTE3>(EVENT_ID7);   // set_flag + wait_flag

// 4. 环形队列索引取模改为位与(depth 为 2 的幂)
startSlot = sqHead & (sqDepth - 1U);

// 5. 入参检查 debug 化
HCOMM_DEBUG_TRAP_IF(len < HCOMM_URMA_TMP_BUF_SIZE, "Hcomm Init failed: len = %u\n", len);

验证:既有 URMA UT 全部通过;新增多 SGE UT 覆盖单/多 SGE 混用场景;对齐契约变更已在 hcomm.h 接口注释中声明(Init 要求传入 32 字节对齐的 buffer,错配由 debug 模式拒绝)。

likedislike
YYeZZzzz1Collaborators
9 days ago Added label: requirement
YYeZZzzz1Collaborators
9 days ago Assign YeZZzzz1 as responsible person
YeZZzzz1Collaborators
3 days ago Comments:

关联PR已合入,本issue关闭

likedislike
YYeZZzzz1Collaborators
3 days ago changed custom state from 待办的 to 已解决
YYeZZzzz1Collaborators
3 days ago Close issue
CANN-robotCANN-robotCollaborators
3 days ago Added label: resolved