asc-comm 设备侧 AIV URMA 批量通信接口(WriteNbi / ReadNbi / WriteWithNotifyNbi)是上层通信原语在 kernel 内下发点对点读写的基础热路径。
WriteNbi
ReadNbi
WriteWithNotifyNbi
当前实现中,每次下发的处理路径上存在若干可削减的软件开销:每 op 一对同步原语加解锁、SQE 填充过程中 load 与 store 交错、单 SGE 场景经由 BufDesc 数组加循环的间接层、环形队列索引取模运算等。
本需求希望对上述热路径做针对性优化,降低单次下发的软件开销。
asc-comm AIV直驱团队
HCOMM_DEBUG_TRAP_IF
总体思路:只动设备侧热路径,公开 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 模式拒绝)。
hcomm.h
关联PR已合入,本issue关闭
Background(背景信息)
asc-comm 设备侧 AIV URMA 批量通信接口(
WriteNbi/ReadNbi/WriteWithNotifyNbi)是上层通信原语在 kernel 内下发点对点读写的基础热路径。当前实现中,每次下发的处理路径上存在若干可削减的软件开销:每 op 一对同步原语加解锁、SQE 填充过程中 load 与 store 交错、单 SGE 场景经由 BufDesc 数组加循环的间接层、环形队列索引取模运算等。
本需求希望对上述热路径做针对性优化,降低单次下发的软件开销。
Origin(信息来源)
asc-comm AIV直驱团队
Benefit / Necessity (价值/作用)
HCOMM_DEBUG_TRAP_IF:debug 下打印并 Trap,release 下编译为空),release 热路径零开销,同时保留调试能力。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 模式拒绝)。