1. 概述
本文档介绍了曦云®系列GPU EID,旨在帮助开发人员、FAE和系统管理员理解信息具体的含义,以达到分析和解决GPU相关问题的目的。
1.1. 什么是EID消息
EID(Error Message ID)是沐曦GPU上运行 MXMACA® 异构程序的错误报告,打印在系统的内核日志或系统日志中,分为Driver EID和SDK EID。
EID代表发生了常规 GPU 错误,通常是由于MXMACA异构程序错误地对 GPU 进行编程或发送到 GPU 的命令损坏。这些消息可能表示硬件问题、MXMACA平台软件问题或用户在MXMACA平台上开发的应用软件问题。每条消息的含义在MXMACA软件栈版本之间是一致的。
1.2. 如何使用EID消息
EID主要为调试用途。由于许多问题可能有多个可能的根本原因,因此无法仅从 EID 本身提供的信息来了解所有问题。当用户发现问题时,可用mx-report工具来收集所有的日志信息,便于综合分析。
2. EID格式
2.1. EID通用格式
EID日志打印格式:
LOGLEVEL EID([device id]):[Error Code],[Descrition],[Recover Suggestion],[Error Data]
编号 |
字段 |
说明 |
|---|---|---|
1 |
LOGLEVEL |
表示日志等级,定义参见表 2.2 |
2 |
device id |
发生EID错误的GPU设备PCIe DBDF号,如0000:0e:00.0 |
3 |
Error Code |
错误码 |
4 |
Description |
该EID错误的简要描述信息 |
5 |
Recover Suggestion |
可选,可能的修复方案 |
6 |
Error Data |
可选,错误相关的数据,可以帮助进一步的问题诊断 |
编号 |
LOGLEVEL |
说明 |
|---|---|---|
1 |
EMERG |
紧急错误,系统不可用 |
2 |
ALERT |
告警错误,需要立即处理 |
3 |
CRIT |
严重错误 |
4 |
ERROR |
一般错误 |
5 |
WARN |
告警提示 |
6 |
INFO |
普通信息 |
7 |
DEBUG |
调试信息 |
2.2. Driver日志格式
在Linux系统中,GPU KMD内核驱动打印日志通常会放在 /var/log/messages路径下,通过以下命令可以查看GPU KMD打印的错误信息:
sudo grep -P "METAX.*ERROR|MXCD.*ERROR|MXGVM.*ERROR" /var/log/messages
备注
Linux内核日志存放路径会因Linux发行版本不同而有所区别,主流Linux发行版内核日志存放路径如下:
Ubuntu: /var/log/kern.log
CentOS: /var/log/messages
如果存在GPU KMD内核驱动错误记录,比如ATU Fault,会得到类似如下日志:
[…] METAX.B10200.ATU.ERROR EID (xxxx:xx:xx.x): 0x2101, atu 0x0 pde_base_addr 0x50016c0000
[…] METAX.B10200.ATU.ERROR EID (xxxx:xx:xx.x): 0x2101, xpid 1 vfid 0 vf 0 page va 224200000
[…] METAX.B10200.ATU.ERROR EID (xxxx:xx:xx.x): 0x2101, hwip DMAW0 fault code(7) perm code: 2
2.2.1. Driver日志正文打印格式
MODULE.DBDF.SUBMOD.LOGLEVEL EID([device id]):[Error Code],[Descrition],[Recover Suggestion],[Error Data]
其中 MODULE.DBDF.SUBMOD 为Driver特有字段。LOGLEVEL 之后字段说明参见 2.1 EID通用格式。
编号 |
字段 |
说明 |
|---|---|---|
1 |
MODULE |
打印日志的主模块,目前包括 |
2 |
DBDF |
日志所属的GPU卡的PCIe DBDF(Domain Bus Device Function) 格式为 |
3 |
SUBMOD |
打印日志的子模块,根据主模块的不同,子模块的具体定义也不一样 |
2.3. SDK日志格式
在Linux系统中,GPU SDK EID打印日志默认存放在 /var/log/syslog 路径下,通过以下几种方法可以查看GPU SDK EID打印的错误信息。
备注
Linux内核日志存放路径会因Linux发行版本不同而有所区别,主流Linux发行版内核日志存放路径如下:
Ubuntu: /var/log/syslog
CentOS: /var/log/messages
实时查看:使用以下命令可以实时查看日志文件的最新内容
sudo tail -f /var/log/syslog
过滤特定日志:使用以下命令可以查找包含特定关键词的日志,例如“error”
sudo grep "error" /var/log/syslog
分页查看:使用以下命令可以分页查看日志文件
sudo less /var/log/syslog
如果存在SDK EID错误记录,比如执行用户进程 eidNumericTrap 出现核函数除零错误,会得到类似如下日志:
./eidNumericTrap
sudo tail -f /var/log/syslog
……
Jun 4 15:22:36 myhostname maca:[406708.798499]SDK.0203300X.UMD.WARN EID(0000:0a:00.0):0x3111,(eidNumericTrap)Divide 0,check app kernel, ZL16kernel_data_copyPfs
syslog 日志遵循标准格式,每条记录包含以下字段:
时间戳:记录事件发生时间(如
Jun 4 15:22:36)。主机名:生成日志的主机名或IP地址(如
myhostname)。服务名:产生日志的服务或程序名称,MXMACA SDK的服务名固定为
maca。程序ID:产生日志的进程ID和线程ID(如
:[406708.798499])。日志正文:消息内容,描述具体事件或错误信息。
2.3.1. SDK日志正文打印格式
PACKAGE.VERSION.SUBPACK.LOGLEVEL EID([device id]):[Error Code],[Descrition],[Recover Suggestion],[Error Data] MODULE.DBDF.SUBMOD.LOGLEVEL CONTENT
其中 PACKAGE.VERSION.SUBPACK 为SDK特有字段。LOGLEVEL 之后字段说明参见 2.1 EID通用格式。
编号 |
字段 |
说明 |
|---|---|---|
1 |
PACKAGE |
打印日志的软件发布包名,目前只包括 |
2 |
VERSION |
打印日志的软件发布包版本, 内容为 左起1-2位为软件架构版本X(如 左起3-5位为该软件架构版本发布开始的第Y个版本,从0开始计数(如 左起第6位为第Y个版本的分支Z(如 左起7-8位为基于X.Y.Z的构建数量,从0开始计数(如 |
3 |
SUBPACK |
打印日志的软件发布包子模块,目前只包括 |
3. EID日志收集方法
3.1. 通用收集方法
编号 |
方法 |
说明 |
|---|---|---|
1 |
mx-report工具 |
可执行 mx-report工具的使用方法参见《曦云®系列通用计算GPU用户指南》。 |
2 |
mx-exporter工具 |
mx-exporter通过指标 mx-exporter 工具的使用方法参见《曦云®系列通用计算GPU mx-exporter使用手册》。 |
3.2. Dirver日志收集方法
Driver日志收集方法参见表 3.2:
编号 |
方法 |
说明 |
|---|---|---|
1 |
dmesg命令 |
Linux系统通用命令,只能查看当前运行时内核日志信息。同时由于Linux内核日志缓存区大小限制,可能无法显示当前运行时内核的完整日志。 命令如下:
|
2 |
journalctl命令 |
基于systemd启动的Linux系统上的强大日志工具,没有dmesg命令的内核日志缓存区限制问题,还可以查看系统的历史运行日志。 命令如下:
|
3 |
/var/log/message 或 /var/log/kern.log 文件 |
Linux系统内核日志在磁盘存放位置,用户需要注意收集的内核日志是否属于当前系统运行时日志,还是系统以前运行的历史日志。 CentOS系统命令如下:
Ubuntu系统命令如下:
|
3.3. SDK日志收集方法
MXMACA SDK日志收集方法参见表 3.3。
本节以Ubuntu系统为例,下列为收集时的注意事项:
日志文件可能很大,考虑压缩后再传输(
gzip /var/log/syslog)。确保有足够的权限访问日志文件(通常需要 root 权限)。
定期清理旧日志,避免磁盘空间不足。
敏感信息可能存在于日志中,传输时考虑加密。
对于持续收集,建议设置日志轮转策略。
编号 |
方法 |
说明 |
|---|---|---|
1 |
直接复制文件 /var/log/syslog |
最简单的方法是直接复制文件:
或者使用 scp 传输到远程服务器:
|
2 |
journalctl命令 |
基于systemd启动的Linux系统上的强大日志工具,可以查看系统的历史运行日志。命令如下:
|
3 |
rsync 同步 |
使用 rsync 同步:
|
4 |
logrotate 管理 |
配置 /etc/logrotate.conf 或 /etc/logrotate.d/ 下的配置文件,可以自动管理日志文件大小和备份:
|
5 |
使用系统日志服务 (rsyslog/syslog-ng) |
|
4. EID错误列表
下表展示了EID 错误类型、可能原因、影响及修复建议,供用户参考。
EID |
可能原因 |
影响 |
修复建议 |
|---|---|---|---|
0x1101 |
EEPROM数据校验出错 |
固件中存储的参数可能出错 |
联系售后维修 |
0x1102 |
寄存器访问违反安全策略限制 |
软件的寄存器操作未成功 |
检查软件中是否有对寄存器的越权访问 |
0x1103 |
主flash损坏,从备用flash启动 |
无直接影响,固件会自动修复 |
不需要修复 |
0x1104 |
board自检异常,或初始化失败 |
业务无法运行 |
检查使用的VBIOS是否正确 |
0x1105 |
芯片硬件配置信息校验出错 |
业务无法运行 |
检查使用的VBIOS是否正确 |
0x1106 |
VR芯片固件版本校验出错 |
芯片性能可能受影响 |
尝试更新VR固件 |
0x1107 |
PHY固件SRAM数据校验出错 |
PCIe链路可能会出现异常 |
联系售后维修 |
0x1108 |
光模块被拔出,或光链路异常 |
光口通信可能出现异常 |
检查光口物理连接 |
0x1109 |
slave die flash损坏,尝试修复 |
无直接影响,固件会自动修复 |
不需要修复 |
0x2101 |
|
业务发生异常 |
使用非法VA或者越界访问,用户定位代码是否非法使用地址,其他原因报bug给硬件厂商处理 |
0x2102 |
error_type xxx:表示触发了哪种类型的XCORE shader error
|
发生异常进程结束 |
|
0x2103 |
GPU内部资源释放失败 |
应用程序结束过慢或者卡住 |
尝试warmreset或重启服务器进行恢复,仍无法解决报bug给硬件厂商 |
0x2104 |
HBM显存出现坏页 |
坏页隔离失败会发生异常结束进程 |
|
0x2105 |
在GPU内核驱动加载或者卸载过程中,用户正在尝试通过SMI接口访问GPU相关资源 |
SMI信息获取失败 |
在GPU内核驱动加载或卸载完成后,再执行GPU业务操作 |
0x2106 |
导致这个问题的原因比较复杂,需要结合软硬件环境综合判断 |
KMD与SMP通讯失败导致驱动加载失败或者SMI获取信息失败 |
联系硬件厂商解决 |
0x2107 |
PCIe bar空间不够 |
设备枚举异常,驱动无法加载 |
|
0x2108 |
UMD申请内存使用的VA有重叠,KMD会检测每个进程各GPU VA到PA的entry映射是否与其他entry有重复(包括部分重复),一旦检测到GPU VA到PA存在多重映射,KMD 日志就会记录冲突地址,标记当前映射失败,并返回错误码 |
业务执行失败 |
联系硬件厂商解决 |
0x2109 |
GPU应用程序使用了过多的HBM显存或者GPU SDK存在内存管理相关问题 |
业务执行失败 |
|
0x210A |
GPU应用程序使用了过多的系统内存或者GPU SDK存在内存管理相关问题 |
业务执行失败 |
|
0x210B |
GPU触发INT中断和CPU处理中断的过程是异步的,当GPU触发INT中断消息的速度超过CPU处理中断的速度,会出现GPU驱动的中断FIFO队列溢出问题 |
出现丢中断,影响业务执行 |
确认CPU是不是运行在最高频率,通过 如果还有问题,请联系硬件厂商。 |
0x210C |
GPU卡PCIe通讯链路不稳定或者服务器PCIe相关配置不对 |
业务异常或者不可靠 |
链路不稳定可以尝试重新插拔GPU卡或者更换PCIe板卡。 需要联系硬件厂商和服务器厂家分析PCIe AER产生的原因。如果是偶尔发生这种情况,可以尝试warm reset或重启服务器进行恢复。 |
0x210D |
前面执行业务异常导致GPU通讯断开或者硬件问题导致 |
GPU设备无法访问 |
硬件问题可以尝试更换PCIe slot或者GPU卡进行测试。 需要联系硬件厂商和服务器厂家分析PCIe通讯断开产生的原因。如果是偶尔发生这种情况,可以尝试warm reset或重启服务器进行恢复。 |
0x210E |
IP发生Fatal error或者uncorrectable error |
发生异常业务退出 |
可能是IP发生了Fatal Error或者Uncorrectable Error,可以先尝试warmreset或重启服务器进行恢复。如果还是会重现这个错误,则需要换卡进行测试。 需要联系硬件厂商分析造成syncflood的IP发生错误的原因。 |
0x210F |
硬件发生RAS异常 |
发生异常业务退出 |
可能是硬件问题,可以先尝试warm reset或者重启服务器进行恢复。如果还是会重现这个错误,可以尝试更换GPU卡进行测试。 需要联系硬件厂商分析RAS ERROR产生的原因。 |
0x2201 |
GPU内部资源释放失败 |
应用程序结束过慢或者卡住 |
GPU内部任务调度失败,报bug给硬件厂商,然后尝试warm reset或重启服务器进行恢复 |
0x2202 |
一般是软件传参非法或者条件不满足导致 |
业务发生异常 |
该问题需要结合实际环境配置和报错信息综合判断原因 |
0x2301 |
服务器MMIO空间不够 |
驱动加载失败 |
确认服务器BIOS是否有MMIO空间相关配置选项,如果有,建议将MMIO空间配置到最大 |
0x2302 |
GPU驱动与SMP通讯失败 |
驱动加载失败或者SMI获取信息失败 |
|
0x2303 |
GPU卡的VBIOS固件版本与当前GPU驱动不兼容 |
业务无法使用GPU设备 |
可以尝试升级与GPU驱动兼容的VBIOS版本 |
0x2304 |
GPU卡不支持SRIOV虚拟化 |
驱动加载失败 |
GPU卡不支持SRIOV功能,使用 |
0x2305 |
服务器BIOS是否开启SRIOV相关配置且MMIO空间不够或者GPU VBIOS版本与服务器不匹配 |
驱动加载失败 |
|
0x2306 |
服务器BIOS未开启SRIOV相关配置 |
驱动加载失败 |
|
0x2307 |
GPU硬件或者VBIOS固件问题 |
FLR复位失败 |
用mx-report工具收集VBIOS运行日志,并报告给硬件厂商 |
0x2308 |
可能之前业务执行异常导致GPU通讯断开或者硬件问题 |
GPU设备无法访问 |
|
0x2309 |
|
业务发生异常 |
使用非法VA或者越界访问,用户定位代码是否非法使用地址,其他原因报bug给硬件厂商处理 |
0x3101 |
核函数在寄存器初始化前读取寄存器 |
用户进程因GPU致命异常退出 |
|
0x3102 |
核函数指令的编码或操作数有误,GPU硬件检测到非法指令 |
|
|
0x3103 |
核函数访问内存的偏移量小于0,越界或数据未按要求对齐 |
EID打印的核函数所属软件模块定位分析:review核函数代码,可借助MXMACA SDK的trap工具和打印详情辅助分析,也可以到沐曦开发者社区寻求更多帮助 |
|
0x3104 |
核函数使用的VA地址有误 |
||
0x3105 |
寄存器访问越界,例如在只分配16个STREG时访问第17个STREG触发 |
||
0x3106 |
硬件极小概率的电磁干扰引起的,瞬间就会恢复 |
检修设备周围的电磁环境 |
|
0x3107 |
核函数执行时间超过了 |
EID打印的核函数所属软件模块定位分析:review核函数代码,可借助MXMACA SDK的trap工具和打印详情辅助分析,也可以到沐曦开发者社区寻求更多帮助 |
|
0x3111 |
核函数存在除零操作(divide 0) |
GPU因Numeric异常短暂停止服务,相关信息收集完毕后,用户程序继续执行。 说明:这部分EID仅在开启Nemeric异常( |
EID打印的核函数所属软件模块定位分析:review核函数代码,可借助MXMACA SDK的trap工具和打印详情辅助分析,也可以到沐曦开发者社区寻求更多帮助 必要时使用精度和Loss异常分析与排查手段,包括但不限于:
|
0x3112 |
核函数存在数据上溢 (data overflow) |
||
0x3113 |
核函数存在数据下溢 (data underflow) |
||
0x3114 |
核函数存在无效操作(invalid operation,如NaN/Not a Number,未定义或不可表示的值) |
||
0x3115 |
核函数输入了非规约数 (input denormal) |
||
0x3116 |
核函数数据出现了精度损失(Inexact) |
||
0x3211 |
|
用户进程可能Hang,可能需运维干预 |
根据EID打印的Hang详情日志文件定位分析 |
0x3212 |
|