CANN/hcomm taskException模块代码解析
taskException 模块代码解析【免费下载链接】hcommHCOMMHuawei Communication是HCCL的通信基础库提供通信域以及通信资源的管理能力。项目地址: https://gitcode.com/cann/hcomm功能描述taskException 模块是 HCCL 集合通信库中的DFXDesign for eXcellence异常诊断子系统负责在集合通信任务执行失败时进行异常捕获、错误信息解析、诊断日志打印和错误上报。该模块横跨 Host 侧和 AICPU 侧两个运行环境Host 侧接收 Runtime 下发的异常回调根据任务类型分发到不同的异常处理流程通用任务异常 / CCU 任务异常完成 AICPU 错误信息读取、UB DFX 寄存器信息打印、集群监控错误上报等。AICPU 侧以守护线程方式定期检测各通信域流上的 CQECompletion Queue Entry异常完成异常 CQE 解析、错误信息组织、通过 HDC 通道上报到 Host 侧、通过 Mailbox 通知 TSFW。核心能力包括向 Runtime 注册/注销异常回调函数基于 GlobalMirrorTasks 查找异常 TaskInfo通过 HDC 通道从 AICPU 侧读取 ErrorMessageReport解析 CCUCube Compute Unit任务异常基于 CcuRep 指令表示体系还原出错指令上下文打印 UB DFX 寄存器信息辅助硬件诊断向集群监控上报 CQE 错误信息打印异常任务前序上下文最多 50 条 task 信息目录描述taskException/ ├── host/ # Host 侧异常处理 │ ├── hcclCommTaskException.h # TaskExceptionHost / TaskExceptionHostManager 类声明 │ ├── hcclCommTaskException.cc # Host 侧通用异常处理实现 回调注册管理 │ ├── ccuTaskException.h # CcuTaskException 类声明 │ ├── ccuTaskException.cc # CCU 任务异常处理实现指令解析、寄存器读取、错误信息生成 │ └── ccu_error_info_v1.h # CCU 错误信息数据结构定义CcuErrorInfo、CcuLoopContext、CcuMissionContext 等 └── aicpu/ # AICPU 侧异常处理 ├── hcclCommTaskExceptionLite.h # HcclCommTaskExceptionLite 类声明 └── hcclCommTaskExceptionLite.cc # AICPU 侧异常检测、CQE 解析、错误上报实现文件间关系文件功能依赖关系hcclCommTaskException.h/.ccHost 侧主入口注册 Runtime 异常回调分发到通用/CCU 异常处理依赖ccuTaskException.h处理 CCU 类型异常依赖global_mirror_tasks.h查找 TaskInfo通过回调从 AICPU 侧获取 ErrorMessageReportccuTaskException.h/.ccCCU 任务异常专用处理解析 CcuRep 指令表示、读取硬件寄存器依赖ccu_error_info_v1.h的数据结构依赖ccu_kernel_mgr.h获取 CcuRepContext依赖ccu_urma_channel.h获取通道信息ccu_error_info_v1.hCCU 错误信息数据结构定义被ccuTaskException.h/.cc引用依赖ccu_rep_type_v1.h定义 CcuRepType 枚举hcclCommTaskExceptionLite.h/.ccAICPU 侧守护线程检测 CQE 异常并上报 Host依赖coll_comm_aicpu.h获取 AICPU 通信域依赖error_message_v2.h组织 ErrorMessageReport 并通过 HDC 上报 HostTaskException文件交互流程描述注册流程Aicpu模式Host侧注册流程Aicpu模式Device侧注册流程CCU模式注册流程异常处理流程Aicpu模式Host侧异常处理流程Aicpu模式Device侧异常处理流程SendTaskExceptionByMBox 错误码转换表源码hcclCommTaskExceptionLite.cc:429-435常量定义hcomm_task_scheduler_error.hCQE sqeTypeCQE errorCodeTS 错误码值说明UB (sqeType9)0x02TS_ERROR_HCCL_OP_UB_DDRC_FAILED0x3eaUB本端返回ERRORUB (sqeType9)0x03TS_ERROR_HCCL_OP_UB_POISON_FAILED0x3ebUB远端返回ERRORUB (sqeType9)0x05TS_ERROR_HCCL_OP_UB_LINK_FAILED0x3ecUB网络异常taack超时UB (sqeType9)其他TS_ERROR_HCCL_OTHER_ERROR0x223UB其他错误SDMA (sqeType11)0x09TS_ERROR_SDMA_LINK_ERROR0x222SDMA写拷贝超时代答或地址译码错误SDMA (sqeType11)0x0aTS_ERROR_SDMA_POISON_ERROR0x221SDMA读拷贝超时代答或读HBM返回ERRORSDMA (sqeType11)0x08TS_ERROR_SDMA_DDRC_ERROR0x220SDMA读HBM返回ERRORSDMA (sqeType11)其他TS_ERROR_HCCL_OTHER_ERROR0x223SDMA其他错误其他sqeType-TS_ERROR_HCCL_OTHER_ERROR0x223非UB/SDMA错误CCU模式异常处理流程接口描述类图接口描述TaskExceptionHost接口类型参数返回值功能说明GetInstance(s32)公有静态[in] deviceLogicIDTaskExceptionHost*获取指定设备的异常处理器最大支持 65 个设备Register(u64)公有[in] commHandleHcclResult将 commHandle 写入 CommRegisterMap_首个 comm 注册时调用aclrtSetExceptionInfoCallback(ProcessCallback)向 RTS 注册异常回调UnRegister(u64)公有[in] commHandleHcclResult从 CommRegisterMap_ 移除 commHandle最后一个 comm 注销时将回调设为 nullptrProcessCallback(rtExceptionInfo_t*)公有静态[in] exceptionInfovoidRuntime 异常回调入口通过 GetInstance 获取处理器后转发到 ProcessHandleAicpuErrorReport(rtExceptionInfo_t*, const ErrorMessageReport, const TaskInfo)私有[in] exceptionInfo, [in] errorMessage, [in] taskInfovoid处理 AICPU 侧已上报的错误打印 BaseInfo/ParaInfo/GroupInfo/OpDataInfo调用 PrintUbDfxInfo、ReportErrorMsgubCqeStatus 非零时调用 GetAicpuCqeErrInfoHandleHostErrorReport(rtExceptionInfo_t*, const TaskInfo)私有[in] exceptionInfo, [in] taskInfovoidHost 侧自行处理异常TASK_NOTIFY_WAIT 时打印前序 task 上下文并上报 EI0002打印集群监控错误信息ReportErrorMsg(const TaskInfo, const string, const ErrorMessageReport, rtExceptionInfo_t*)私有[in] exceptionTaskInfo, [in] groupRankContent, [in] errorMessage, [in] exceptionInfovoid根据任务类型上报不同错误码TASK_NOTIFY_WAIT→EI0002UB/Write 类型→EI0018ProcessException(rtExceptionInfo_t*, const TaskInfo)私有[in] exceptionInfo, [in] taskInfovoid通用异常处理入口检查 hasAicpuReport_未上报时通过 CollComm::GetAicpuTaskException 获取 ErrorMessageReport分派到 HandleAicpuErrorReport 或 HandleHostErrorReportPrintTaskContextInfo(uint32_t, uint32_t, uint32_t)私有[in] deviceId, [in] streamId, [in] taskIdvoid打印异常任务前最多 50 条前序 task 上下文信息PrintUbDfxInfo(rtExceptionInfo_t*, const ErrorMessageReport)私有[in] exceptionInfo, [in] errorMessagevoid针对 UB 类型任务TASK_WRITE_WITH_NOTIFY/TASK_UB 等打印 UB CQE 状态和 EID 信息并读取 UB DFX 寄存器PrintUbRegisters(s32, RdmaHandle)私有[in] devLogicId, [in] rdmaHandleHcclResult通过 RaGetAuxInfo 读取并打印 UB DFX 寄存器信息GetGroupRankInfo(const TaskInfo)私有[in] taskInfostring从 TaskInfo 中获取 group/rankSize/rankId 信息GetAicpuCqeErrRemoteLocalIdByRankId(CollComm*, uint32_t, u32)私有[in] collComm, [in] rankid, [out] remoteLocalIdvoid通过 RankGraph 获取远端 rank 对应的 LocalIdGetAicpuCqeErrNetInstanceByRankId(CollComm*, uint32_t, string)私有[in] collComm, [in] rankid, [out] netInstanceIdvoid通过 RankGraph 获取远端 rank 对应的 NetInstanceIdCcuTaskException接口类型参数返回值功能说明ProcessCcuException(const rtExceptionInfo_t*, const TaskInfo)公有静态[in] exceptionInfo, [in] taskInfovoidCCU 任务异常处理主入口初始化通道映射、遍历 Mission、打印错误和寄存器、清理 TaskKill 状态InitChannelMap(s32, u64)私有静态[in] deviceId, [in] ccuKernelHandleHcclResult初始化 channelId→channelHandle 全局映射g_channelIdToHandleGetCcuErrorMsg(int32_t, uint16_t, const ParaCcu, vectorCcuErrorInfo)私有静态[in] deviceId, [in] missionStatus, [in] ccuTaskParam, [out] errorInfoHcclResult获取 CCU 错误信息核心方法读取 MissionContext查找异常 Rep分派到不同的 GenErrorInfo 方法GenErrorInfoByRepType(const ErrorInfoBase, shared_ptrCcuRepBase, vectorCcuErrorInfo)私有静态[in] baseInfo, [in] repBase, [out] errorInfovoid根据 CcuRepType 分派到对应的 GenErrorInfo 方法使用 HANDLER_MAP 函数表GenErrorInfoLoop(const ErrorInfoBase, CcuRepContext, vectorCcuErrorInfo)私有静态[in] baseInfo, [in] ctx, [out] errorInfoHcclResult解析 Loop 类型异常读取 LoopContext 寄存器递归解析 Loop 内的 RepGenErrorInfoLoopGroup(const ErrorInfoBase, shared_ptrCcuRepBase, CcuRepContext, vectorCcuErrorInfo)私有静态[in] baseInfo, [in] repBase, [in] ctx, [out] errorInfoHcclResult解析 LoopGroup 类型异常展开所有 Loop 并逐个解析PrintCcuUbRegisters(const vectorCcuErrorInfo, s32, const TaskInfo)私有静态[in] errorInfos, [in] devLogicId, [in] taskInfoHcclResult获取 CCU Jetty 状态对错误 Jetty 打印 UB 寄存器GetCcuJettys(const CcuErrorInfo, pairCcuChannelInfo, vectorCcuJetty*)私有静态[in] errorInfo, [out] ctxHcclResult从 CcuErrorInfo 中获取 channelId通过 channel→endpoint→ctxPool 链路获取 JettyGetCcuCqeErrorInfo(const CcuErrorInfo, const TaskInfo, u32, uint8_t)私有静态[in] ccuErrorInfo, [in] taskInfo, [in] locDeviceId, [in] missionStatusvoid通过 channelId 获取 remoteRankId 和 NetInstanceId调用 ClusterMoniterGetCcuCqeErrInfo 上报集群监控HcclCommTaskExceptionLite接口类型参数返回值功能说明GetInstance()公有静态无HcclCommTaskExceptionLite获取单例实例Init(u32)公有[in] devIdvoid初始化设备IDCall()公有无void守护线程回调入口调用 HandleExceptionCqe失败后设置 stopCall_ 防止刷屏HandleExceptionCqe()私有无HcclResult遍历所有通信域的所有线程检测 CQE 异常并处理GetThreadCqe(Thread*, rtLogicCqReport_t, CqeStatus)私有[in] thread, [out] cqeException, [out] cqeStatusHcclResult通过 CqReportRecv 获取指定线程的 CQE 异常信息ProcessCqe(CollCommAicpu*, const rtLogicCqReport_t, const CqeStatus, const vectorpairstring,CollCommAicpuMgr*)私有[in] aicpuComm, [in] exceptionInfo, [in] cqeStatus, [in] aicpuCommInfoHcclResult处理 CQE 异常打印 TaskException 上报 Host NotifyWait 超时时打印全通信域信息ReportErrMsg(CollCommAicpu*, const rtLogicCqReport_t)私有[in] aicpuComm, [in] exceptionInfoHcclResult检查 IsErrorReported未上报时生成 ErrorMessageReport 通过 HDC 上报 Host并通过 Mailbox 通知 TSFW然后 SetErrorReported(true)GenerateErrorMessageReport(CollCommAicpu*, const TaskInfo, const rtLogicCqReport_t, ErrorMessageReport)私有[in] aicpuComm, [in] taskInfo, [in] exceptionInfo, [out] errMsgInfoHcclResult根据任务信息填充 ErrorMessageReport 的公共字段然后调用 GenerateTaskErrMsg 填充任务类型特定字段GenerateTaskErrMsg(const TaskInfo, ErrorMessageReport, const rtLogicCqReport_t)私有[in] taskInfo, [out] errMsgInfo, [in] exceptionInfovoid根据 taskType 分派到 FillNotifyErrMsg/FillReduceErrMsg/FillDmaErrMsg/FillUbErrMsg/FillSdmaErrMsg/FillReduceInlineErrMsgFillNotifyErrMsg(const TaskInfo, ErrorMessageReport)私有[in] taskInfo, [out] errMsgInfovoid填充 NOTIFY_WAIT/NOTIFY_RECORD 类型的 notifyId 和 notifyValueFillReduceErrMsg(const TaskInfo, ErrorMessageReport, const rtLogicCqReport_t)私有[in] taskInfo, [out] errMsgInfo, [in] exceptionInfovoid填充 UB_REDUCE_INLINE/WRITE_REDUCE_WITH_NOTIFY 类型的 reduceOp、notifyId、locEid、rmtEid、ubCqeStatus 等FillDmaErrMsg(const TaskInfo, ErrorMessageReport, const rtLogicCqReport_t)私有[in] taskInfo, [out] errMsgInfo, [in] exceptionInfovoid填充 UB_INLINE_WRITE/WRITE_WITH_NOTIFY 类型内部调用 FillUbErrMsgFillUbErrMsg(const TaskInfo, ErrorMessageReport, const rtLogicCqReport_t)私有[in] taskInfo, [out] errMsgInfo, [in] exceptionInfovoid填充 UB 类型的 locEid、rmtEid、ubCqeStatus、linkType、size 等FillSdmaErrMsg(const TaskInfo, ErrorMessageReport)私有[in] taskInfo, [out] errMsgInfovoid填充 SDMA 类型的 linkType、size、srcAddr、dstAddrFillReduceInlineErrMsg(const TaskInfo, ErrorMessageReport)私有[in] taskInfo, [out] errMsgInfovoid填充 REDUCE_INLINE 类型的 reduceOpSendTaskExceptionByMBox(u32, u32, const rtLogicCqReport_t)私有[in] notifyId, [in] tsId, [in] exceptionInfoHcclResult通过 Mailbox 向 TSFW 上报任务异常事件包含错误码转换UB/SDMA 错误码→TS 错误码SwitchUBCqeErrCodeToTsErrCode(u32)私有[in] cqeErrCodeuint16_tUB CQE 错误码转 TS 错误码详见 3.2.2 表格SwitchSdmaCqeErrCodeToTsErrCode(u32)私有[in] cqeErrCodeuint16_tSDMA CQE 错误码转 TS 错误码详见 3.2.2 表格PrintAllCommTaskException()公有无HcclResult打印所有通信域的所有 Task 异常信息PrintCommTaskException(CollCommAicpu*)公有[in] aicpuCommHcclResult打印指定通信域所有线程的 Task 异常信息PrintTaskExceptionBySqeId(CollCommAicpu*, u32, u32)私有[in] aicpuComm, [in] sqId, [in] sqeIdHcclResult打印指定 sqId/sqeId 的 Task 异常信息BaseInfo/ParaInfo、EID、GroupInfo、OpData/TaskContextPrintTaskContextInfo(CollCommAicpu*, u32, u32)私有[in] aicpuComm, [in] sqId, [in] taskIdHcclResult打印异常 task 前最多 50 条前序 task 上下文信息按 opIndex 分段打印CollectTaskContext(CollCommAicpu*, u32, u32, vectorshared_ptrTaskInfo)私有[in] aicpuComm, [in] sqId, [in] taskId, [out] taskContextHcclResult从 MirrorTaskManagerLite 的队列中收集异常 task 前最多 50 条 task 信息PrintEid(const TaskInfo)私有[in] taskInfovoidUB 类型任务打印 localEid 和 remoteEidGetGroupInfo(CollCommAicpu*)私有[in] aicpuCommstring获取通信域的 group/rankSize/localRank 信息GetSqeId(uint16_t, uint16_t)私有[in] taskId, [in] streamIdu32将 taskId 和 streamId 组合为 sqeId全局回调注册接口接口参数功能说明RegisterGetAicpuCqeErrInfoCallBackHcomm(callback)AICPU CQE 错误信息回调注册 AICPU CQE 错误信息上报到集群监控的回调RegisterAicpuGetErrStatusVecCallBack(callback)AICPU 错误状态向量回调注册获取 AICPU 侧异常设备状态列表的回调RegisterGetCcuCqeErrInfoCallBackHcomm(callback)CCU CQE 错误信息回调注册 CCU CQE 错误信息上报到集群监控的回调RegisterCcuGetErrStatusVecCallBack(callback)CCU 错误状态向量回调注册获取 CCU 侧异常设备状态列表的回调使用限制支持的场景芯片模式Host 侧AICPU 侧说明Ascend 950PR/Ascend 950DTAICPU支持支持Indop 任务走新流程非 Indop 任务回退 legacy TaskExceptionHandlerAscend 950PR/Ascend 950DTCCU支持不涉及TASK_CCU 类型由 CcuTaskException 处理Ascend 950PR/Ascend 950DTMC2回退 legacy不涉及回退至 legacy 目录下的 TaskExceptionHandler规格约束设备数量限制最大支持 65 个设备MAX_MODULE_DEVICE_NUM_V2 65TaskExceptionHostManager::GetHandler在 devId 65 时返回 nullptrCCU 消息长度CCU 传输长度不能超过 256MBCCU_MSG_256MB_LEN超出时打印警告AICPU 重复上报防护Host 侧通过hasAicpuReport_标志位防止同一 TaskExceptionHost 重复处理 AICPU 上报的错误AICPU 侧通过CollCommAicpu::IsErrorReported()标志位防止同一通信域重复上报Host 侧 comm 注册管理通过CommRegisterMap_管理 commHandle 注册Process 时校验 commHandle 是否已注册最后一个 comm 注销时清除 RTS 回调AICPU 侧刷屏防护HcclCommTaskExceptionLite在HandleExceptionCqe失败后设置stopCall_true停止后续调用CQE 错误信息获取CCU 侧通过isGetCqeErrInfo原子标志位避免重复获取 CQE 错误信息集群监控上报限制异常设备信息最多列出 3 个maxListSize 3任务上下文打印限制最多打印异常 task 前 50 条 task 信息TASK_CONTEXT_SIZE 50单次打印长度不超过TASK_CONTEXT_INFO_SIZECCU Mission 数量当前ccuMissionNum为 1仅处理单个 Mission 异常CCU 指令回溯限制打印出错指令前最多 10 条指令loopUpInstrNum 10CCU Loop 展开Loop 内的指令通过GenErrorInfoLoop递归展开LoopGroup 通过GenErrorInfoLoopGroup展开所有 Loop错误码转换AICPU 侧 UB/SDMA 错误码需转换为 TS 错误码后才能通过 Mailbox 上报未识别的错误码统一转为TS_ERROR_HCCL_OTHER_ERROR线程安全g_communicatorCallbackMapV2和g_channelIdToHandle均通过 mutex 保护并发访问【免费下载链接】hcommHCOMMHuawei Communication是HCCL的通信基础库提供通信域以及通信资源的管理能力。项目地址: https://gitcode.com/cann/hcomm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考