已合并
ccu kernel map add mutex #3119
zhengjinwei_y创建于 6月26日
ccu kernel map add mutex #3119
已合并
zhengjinwei_y创建于 6月26日
从已删除 :master合入到cann/hcommmaster
zhengjinwei_y
6月26日

简要描述

CcuKernelMgr 为 kernelMap_ 操作增加独立互斥锁,缩小 Translate 函数锁粒度

问题描述

Translate 函数原使用 translateMutex_ 同时保护 kernelMap_ 查找和后续翻译流程,导致:

  1. kernelMap_ 的查找与翻译流程耦合在同一把锁下,并发度低;
  2. GetKernel 函数访问 kernelMap_ 时无锁保护,存在数据竞争风险。

解决方案

  1. 新增 kernelMapMutex_ 专门保护 kernelMap_ 的读写访问;
  2. Translate 中先持有 kernelMapMutex_ 完成查找,查找后立即释放(mapLock.unlock()),再持有 translateMutex_ 执行翻译流程,实现锁粒度拆分;
  3. GetKernel 函数增加 kernelMapMutex_ 加锁保护,消除数据竞争。

影响范围

  • 修改:Translate 函数锁策略从单锁改为双锁分段加锁,降低锁竞争
  • 修改:GetKernel 函数新增互斥锁保护,修复并发访问隐患
  • 兼容性:接口无变更,对外行为不变
  • 性能:kernelMap_ 查找与翻译流程可并行,提升并发性能

新增用例

  • 无新增测试用例

变更类型

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

关联的Issue

https://gitcode.com/cann/hcomm/issues/286

测试

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

  1. hccl_teset
  2. RDV

补充的UT用例:

文档更新

合入检查

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 zhengjinwei_y 的贡献)
CANN-robotCANN-robot成员
6月26日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
6月26日 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here。
You can get sig-info at here


PR Approval Progress

✅ Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
src/base_comm ✅ Innoecho, hulk1997 (2/2) ✅ Innoecho (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

zhengjinwei_y, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
zhengjinwei_y
6月26日 评论:

compile

likedislike
CANN-robotCANN-robot成员
6月26日 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
6月26日 评论:

流水线任务触发成功
任务链接 [ca75f48b7964410f9e9dc50deaff362f][流水线指导]

任务名称状态日志下载链接
SCA ✅ SUCCESS >>>>>
antipoison ✅ SUCCESS >>>>>
Check_Pr ✅ SUCCESS >>>>>
Compile_Ascend_X86 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM ✅ SUCCESS >>>>> >>>>>
pre_comment ✅ SUCCESS >>>>>
Compile_Ascend_X86_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM_ubuntu24 ✅ SUCCESS >>>>> >>>>>
StaticCheck_codespell_check ✅ SUCCESS
StaticCheck_link_validity_check ✅ SUCCESS
StaticCheck_resource_existence_check ✅ SUCCESS
StaticCheck_tag_closed_check ✅ SUCCESS
StaticCheck_markdownlint ✅ SUCCESS
ST_Test ✅ SUCCESS
API_Check ✅ SUCCESS >>>>>
codecheck ✅ SUCCESS >>>>>
codecheck_style ✅ SUCCESS >>>>>
UT_Test ✅ SUCCESS >>>>>
precommit ⚠️ WARNING >>>>> >>>>>
PreSmoke_A900_npupool ✅ SUCCESS >>>>>
PreSmoke_A3_npupool ✅ SUCCESS >>>>>

[2026-06-26 17:44:06]    CI执行结束

likedislike
atomgit-bot
atomgit-bot
6月26日 评论:

变更摘要

本次变更是一个 Bug 修复,针对 CcuKernelMgr 类中 kernelMap_ 的并发访问问题,新增了 std::mutex 成员 kernelMapMutex_,并在所有访问 kernelMap_ 的成员函数中加入 std::unique_lock 保护,以防止多线程竞态条件导致的数据不一致。

主要改动

  • 新增互斥锁成员:在 CcuKernelMgr 类头文件中新增 std::mutex kernelMapMutex_ 成员变量,用于保护 kernelMap_ 的并发安全。
  • Init 与 Deinit 加锁:在 CcuKernelMgr::Init() 和 CcuKernelMgr::Deinit() 中对 kernelMap_ 的清理操作(clear())加上 std::unique_lock 保护。
  • Register 与 UnRegister 加锁:在 CcuKernelMgr::Register() 和 CcuKernelMgr::UnRegister() 中对 kernelMap_ 的插入、删除操作加上互斥锁保护。
  • Translate 与 GetKernel 加锁:在 CcuKernelMgr::Translate() 中遍历 kernelMap_ 查找 kernel 指针、在 CcuKernelMgr::GetKernel() 中查询 kernelMap_ 时均加入锁保护;其中 Translate() 在提取完 kernel 指针后主动 unlock() 以缩小临界区。
likedislike
不准确?
atomgit-bot
atomgit-bot
6月26日 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
CANN-robotCANN-robot成员
6月26日 添加了label:api-check-pass
CANN-robotCANN-robot成员
6月26日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
6月26日 添加了label:ci-pipeline-passed
CANN-robot
CANN-robot成员
6月26日 评论:
流水线 PR-pipeline_cann_hcomm#12973 [ commitID:5c5caa6f ] 已完成
likedislike
zhengjinwei_y
6月29日 评论:

compile

likedislike
CANN-robotCANN-robot成员
6月29日 删除了label:ci-pipeline-passedapi-check-pass
CANN-robotCANN-robot成员
6月29日 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
6月29日 评论:

流水线任务触发成功
任务链接 [732e74aba63d44db84cdd875e954be85][流水线指导]

任务名称状态日志下载链接
SCA ✅ SUCCESS >>>>>
antipoison ✅ SUCCESS >>>>>
Check_Pr ✅ SUCCESS >>>>>
Compile_Ascend_X86 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM ✅ SUCCESS >>>>> >>>>>
pre_comment ✅ SUCCESS >>>>>
Compile_Ascend_X86_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM_ubuntu24 ✅ SUCCESS >>>>> >>>>>
StaticCheck_codespell_check ✅ SUCCESS
StaticCheck_link_validity_check ✅ SUCCESS
StaticCheck_resource_existence_check ✅ SUCCESS
StaticCheck_tag_closed_check ✅ SUCCESS
StaticCheck_markdownlint ✅ SUCCESS
ST_Test ✅ SUCCESS
API_Check ✅ SUCCESS >>>>>
codecheck ✅ SUCCESS >>>>>
codecheck_style ✅ SUCCESS >>>>>
UT_Test ✅ SUCCESS >>>>>
precommit ⚠️ WARNING >>>>> >>>>>
PreSmoke_A900_npupool ✅ SUCCESS >>>>>
PreSmoke_A3_npupool ✅ SUCCESS >>>>>

[2026-06-29 19:29:39]    CI执行结束

likedislike
CANN-robotCANN-robot成员
6月29日 添加了label:api-check-pass
CANN-robotCANN-robot成员
6月29日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
6月29日 添加了label:ci-pipeline-passed
CANN-robot
CANN-robot成员
6月29日 评论:
流水线 PR-pipeline_cann_hcomm#13243 [ commitID:5c5caa6f ] 已完成
likedislike
zhengjinwei_y
7月2日 评论:

compile

likedislike
CANN-robotCANN-robot成员
7月2日 删除了label:ci-pipeline-passedapi-check-pass
CANN-robotCANN-robot成员
7月2日 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
7月2日 评论:

流水线任务触发成功
任务链接 [8a455660ebb04fc99950673d97c41cb7][流水线指导]

任务名称状态日志下载链接
SCA ✅ SUCCESS >>>>>
antipoison ✅ SUCCESS >>>>>
Check_Pr ✅ SUCCESS >>>>>
Compile_Ascend_X86 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM ✅ SUCCESS >>>>> >>>>>
pre_comment ✅ SUCCESS >>>>>
Compile_Ascend_X86_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM_ubuntu24 ✅ SUCCESS >>>>> >>>>>
StaticCheck_codespell_check ✅ SUCCESS
StaticCheck_link_validity_check ✅ SUCCESS
StaticCheck_resource_existence_check ✅ SUCCESS
StaticCheck_tag_closed_check ✅ SUCCESS
StaticCheck_markdownlint ✅ SUCCESS
ST_Test ✅ SUCCESS
API_Check ✅ SUCCESS >>>>>
codecheck ✅ SUCCESS >>>>>
codecheck_style ✅ SUCCESS >>>>>
UT_Test ✅ SUCCESS >>>>>
precommit ⚠️ WARNING >>>>> >>>>>
PreSmoke_A900_npupool ✅ SUCCESS >>>>>
PreSmoke_A3_npupool ✅ SUCCESS >>>>>

[2026-07-02 10:43:36]    CI执行结束

likedislike
Zzhengjinwei_y
7月2日 修改了pull request 的描述
Zzhengjinwei_y
7月2日 修改了pull request 的描述
CANN-robotCANN-robot成员
7月2日 添加了label:api-check-pass
CANN-robotCANN-robot成员
7月2日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
7月2日 添加了label:ci-pipeline-passed
CANN-robot
CANN-robot成员
7月2日 评论:
流水线 PR-pipeline_cann_hcomm#13580 [ commitID:5c5caa6f ] 已完成
likedislike
Zzhengjinwei_y
7月8日 修改了pull request 的描述
zhengjinwei_y
7月8日 评论:

compile

likedislike
CANN-robotCANN-robot成员
7月8日 删除了label:ci-pipeline-passedapi-check-pass
CANN-robotCANN-robot成员
7月8日 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
7月8日 评论:

流水线任务触发成功
任务链接 [88eeba9a05fb4e31aa3aef910d3c49a6][流水线指导]

任务名称状态日志下载链接
SCA ✅ SUCCESS >>>>>
antipoison ✅ SUCCESS >>>>>
Check_Pr ✅ SUCCESS >>>>>
Compile_Ascend_X86 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM ✅ SUCCESS >>>>> >>>>>
pre_comment ✅ SUCCESS >>>>>
Compile_Ascend_X86_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM_ubuntu24 ✅ SUCCESS >>>>> >>>>>
StaticCheck_codespell_check ✅ SUCCESS
StaticCheck_link_validity_check ✅ SUCCESS
StaticCheck_resource_existence_check ✅ SUCCESS
StaticCheck_tag_closed_check ✅ SUCCESS
StaticCheck_markdownlint ✅ SUCCESS
ST_Test ✅ SUCCESS
API_Check ✅ SUCCESS >>>>>
codecheck ✅ SUCCESS >>>>>
codecheck_style ✅ SUCCESS >>>>>
UT_Test ✅ SUCCESS >>>>>
precommit ⚠️ WARNING >>>>> >>>>>
PreSmoke_A900_npupool ✅ SUCCESS >>>>>
PreSmoke_A3_npupool ✅ SUCCESS >>>>>

[2026-07-08 10:41:17]    CI执行结束

likedislike
CANN-robotCANN-robot成员
7月8日 添加了label:api-check-pass
CANN-robotCANN-robot成员
7月8日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
7月8日 添加了label:ci-pipeline-passed
CANN-robot
CANN-robot成员
7月8日 评论:
流水线 PR-pipeline_cann_hcomm#14250 [ commitID:5c5caa6f ] 已完成
likedislike
hulk1997成员
7月8日 评论:

/lgtm

likedislike
Innoecho成员
7月8日 评论:

/approve

likedislike
CANN-robotCANN-robot成员
7月8日 添加了label:lgtmapproved
CANN-robotCANN-robot成员
7月8日 合入了pull request