HIXL 环境类问题排查指南:RoCE 连通性、网卡状态与 FabricMem 内存诊断
HIXL 环境类问题排查指南RoCE 连通性、网卡状态与 FabricMem 内存诊断【免费下载链接】hixlHIXLHuawei Xfer Library是一个灵活、高效的昇腾单边通信库面向集群场景提供简单、可靠、高效的点对点数据传输能力。项目地址: https://gitcode.com/cann/hixl本指南聚焦 CANN hixlHuawei Xfer Library运行时建链/传输失败中典型的环境类问题定位方法覆盖三类高发场景RoCE 网络连通性、NPU 网卡链路状态、FabricMem 模式下 HOST 内存申请 OOM。作为 hixl-troubleshoot 技能的环境检查参考本文依据.agents/skills/hixl-troubleshoot/references/env-check.md整理并结合仓库源码补充底层原理与验证手段。读完本文你将能使用hccn_tool独立完成 RoCE 连通性测试与网卡状态排查并通过numa_intersect.py量化 FabricMem 模式可用的 HOST 内存。1. 适用范围与前置约定环境类检查env-check是整个 HIXL 问题定位流程中的一个环节使用时有严格的先后约束应先通过hixl-transfer-paths.md判定问题落在哪条传输路径FabricMem 引擎 / ADXL 直传 / HIXL_CS再判建链或传输阶段仅在日志已经直接支持环境问题这一假设后才执行本文的最小必要检查不得由应用层超时直接推断网络、PFC、容器或环境问题见 differential-diagnosis.md 的证据门槛结论等级需满足已确认 关键日志来源/时间/行号 至少一条判别证据 建链问题双端日志否则只能输出高概率假设或继续收集证据。本文所涉及的环境检查主要服务于A2Atlas 800T A2对应昇腾 910B与 A3Atlas 800T A3对应昇腾 910两类硬件形态示例命令中的网卡序号如-i 0、-i 1需按实际拓扑替换。2. RoCE 连通性检查建链失败的第一排查项现象与假设环境 ROCE 没有配置连通会导致建链失败。在排除其他明显原因后应主动检查 device IP 和 device 间的联通性。检查方法使用昇腾驱动自带工具hccn_tool的roce_test子命令做端到端带宽/连通性测试。下面以双卡接收端-i 0发送端-i 1为例# 接收端 /usr/local/Ascend/driver/tools/hccn_tool -i 0 -roce_test reset /usr/local/Ascend/driver/tools/hccn_tool -i 0 -roce_test ib_send_bw -s 65536 -n 1000 -tcp # 发送端 /usr/local/Ascend/driver/tools/hccn_tool -i 1 -roce_test reset PEER_IP$(/usr/local/Ascend/driver/tools/hccn_tool -i 0 -ip -g 2/dev/null | sed -n s/^ipaddr:\(.*\)/\1/p | head -1) /usr/local/Ascend/driver/tools/hccn_tool -i 1 -roce_test ib_send_bw -s 65536 -n 1000 address $PEER_IP -tcp各要素说明reset先重置 roce_test 环境避免上一次测试残留状态干扰ib_send_bwib_send_bw 风格的带宽/连通测试-s 65536 表示报文大小 65536 字节-n 1000 表示发送 1000 个报文-tcp走 TCP 控制面协调测试两端发送端的PEER_IP通过-ip -g读取接收端 device IP再用sed从ipaddr:字段中提取随后通过address $PEER_IP指定对端地址发起测试。若ib_send_bw无法建立连接或带宽远低于预期即可确认 RoCE 网络连通性/配置存在环境问题回到建链问题的时间线中作为环境类候选假设证据。3. 网卡状态检查当前 DOWN 与历史 DOWN现象与假设网卡处于DOWN时会导致建链失败或传输失败。值得注意的是如果当前状态是UP但历史上曾在传输时刻处于DOWN同样可能是根因——例如 differential-diagnosis.md 中stream sync timeout的候选假设就包含RDMA 重传超次或网络闪断需要网卡历史DOWN证据来证实。当前状态查询循环遍历 0~15 号网卡查询实时链路状态for i in {0..15}; do /usr/local/Ascend/driver/tools/hccn_tool -i $i -link -g; done历史状态查询查询链路统计信息确认历史上是否曾发生DOWNfor i in {0..15}; do /usr/local/Ascend/driver/tools/hccn_tool -i $i -link_stat -g; done两条命令分别对应实时状态与统计累积信息建议成对执行先确认当前状态再核对历史统计从而覆盖曾经 DOWN 但现已恢复的隐蔽场景。该检查在 HIXL 传输超时stream sync timeout/RtStreamSynchronizeWithTimeout类问题中尤为重要——只有当网卡历史 DOWN 与重传统计同时存在时网络闪断假设才成立。4. FabricMem 模式 HOST 内存 OOMnuma_intersect.py检测4.1 问题背景与内存模型使用 FabricMem 模式时如果问题是申请 HOST 内存报 out of memory可以调用python3 scripts/numa_intersect.py检测有多少 HOST 内存可申请。该脚本位于 .agents/skills/hixl-troubleshoot/scripts/numa_intersect.py。要理解为何需要该脚本先看 FabricMem 的 HOST 内存分配方式。在 src/hixl/fabric_mem/fabric_mem_allocator.cc 中FabricMemAllocator::MallocMem支持MemType为 device 或 host 的 fabric 内存物理内存通过aclrtMallocPhysical申请其中 HOST 内存路径会按prop.location.idNUMA 节点申请并打印Malloc host memory for numa:%d.当指定 NUMA 节点申请失败时会退回到普通 HOST 分配路径日志Try common host allocation instead of numa:%d.失败后统一返回Allocate physical memory failed.。可见 FabricMem 的 HOST 内存与实际物理内存区间强相关申请失败根因常落在目标物理地址区间内没有足够可用内存。结合 docs/zh/FabricMem.md 的背景FabricMem 模式下 NPU 通过 HCCS 高速链路直接访问远程节点的 DRAM 内存内存以aclrtMallocPhysicalaclrtReserveMemAddressaclrtMapMem三段式管理先申请物理内存再预留虚拟地址最后映射。因此 HOST 内存 OOM 可能来自物理页不足或目标地址区间碎片化而不是简单的系统内存不够。4.2 脚本原理numa_intersect.py的核心逻辑是计算NUMA 节点空闲物理内存页与FabricMem 目标物理地址区间的交集大小从而量化当前还能申请到多少 HOST 内存。具体实现要点目标区间脚本内置了 4 个目标物理基地址RANGES0x29580000000、0xa9580000000、0x129580000000、0x1a9580000000每个区间大小RANGE_SIZE 682GB空闲页判定通过读取/proc/kpageflags中每个物理页的 flags检查KPF_BUDDYbit 10位判断该页是否处于 buddy 系统空闲链表中is_buddyNUMA 节点内存块从/sys/devices/system/node/nodeN/memory*读取每个 node 的物理内存块memory block结合/sys/devices/system/memory/block_size_bytes换算 PFN 范围连续区间合并将相邻的空闲页合并为连续 free segment_reset_run_if_block_gap、_apply_pfn_buddy_state再与目标区间求交集intersect过滤掉小于min_mb阈值的碎片后累加输出每个交集的起始/结束物理地址与大小以及总计可用大小。4.3 使用方法python3 scripts/numa_intersect.py参数说明参数含义默认值-n, --node指定 NUMA node ID 扫描不传则扫描所有 node全部 node-m, --min-mb小于该值MB的交集碎片不计入统计20482GB-v, --verbose开启 debug 日志关闭典型输出示意实际以机器为准 NUMA node 0 FREE∩RANGE : 0x0000002958000000 - 0x000000295c1fffff size1024.00 MB Total intersect FREE: 2048.00 MB解读FREE∩RANGE行的地址对表示该 NUMA 节点上、FabricMem 目标物理区间内、当前处于 buddy 空闲态的连续内存区间Total intersect FREE即为当前可申请 HOST 内存的量化上限。当该数值小于业务申请量时即可确认 FabricMem 模式 HOST 内存 OOM 属于物理可用内存不足的环境问题。4.4 使用前提与限制需要 root 权限读取/proc/kpageflags脚本依赖 Linux 的 buddy 页状态只能在可访问/proc/kpageflags的宿主机/特权容器内运行结果反映的是当前时刻的空闲内存快照实际可申请量会随其他进程内存占用波动应结合申请失败时刻的内存状态综合判断脚本内置的目标物理区间与 682GB 区间大小是特定硬件形态A2/A3 超节点 DRAM 统一编址的配置非该形态环境不可直接套用结论。5. 检查结果如何进入 HIXL 问题定位流程环境类检查的产出应作为候选假设的判别证据进入定位闭环而不是独立结论在 differential-diagnosis.md 的候选假设表中定位对应行如wait socket establish timeout的链路路径不一致需双端LINK_ERROR_INFO、HCCL_INTRA_ROCE_ENABLE一致503900的device 系统内存/CQ/QP 资源不足需要ibv_cmd_create_cq failed, ret 12等早于 HCCL 失败的证据将本文检查结果填入该假设的证实证据或反证列RoCE 测试通过可排除网络连通性网卡当前及历史均为 UP 可排除链路 DOWN若检查均正常则继续沿 hixl-transfer-paths.md 的路径决策树FabricMem 引擎 / ADXL 直传 / HIXL_CS回到源码侧定位。6. 快速自查清单建链失败时是否已先做 RoCEib_send_bw双端连通性测试含reset前置传输失败时是否同时查询了网卡当前状态-link -g与历史状态-link_stat -g是否确认了历史DOWN与传输时刻的对应关系而非只看当前UPFabricMem 模式 HOST 内存 OOM 时是否已用numa_intersect.py量化可申请量并与申请量对比环境类结论是否有直接检查证据而非由应用层超时反推【免费下载链接】hixlHIXLHuawei Xfer Library是一个灵活、高效的昇腾单边通信库面向集群场景提供简单、可靠、高效的点对点数据传输能力。项目地址: https://gitcode.com/cann/hixl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考