GPU技术支持-事务篇-问题排查思路
前语
转载请附上原文出处链接
稀土掘金本文链接:/spost/72395…
CSDN本文链接:blog.csdn.net/qq_43252610…
概述
本文为个人在平时排查问题时的思路总结,以下思路仅供参考。
由于本人为软件工程师,经验总结更倾向于软件思想。
思路
思路不复杂,对于很多人来说或许很简略,总结下来就一句话:
规模从大到小,不变中寻觅变化,变化中总结不变
常用办法:比照法
排查问题过程中,用的最多的就是比照法。经过比照的差异性来缩小问题规模,定位到问题点。
例如:
- 反常、正常状况比照:正常状况和问题状况的各类状况比照。
- 同类、同类型产品比照:产品替换成同类型、同批次或许其他厂家类似产品,调查问题是否消失。
- 产品版别比照:不同软件、硬件版别比照,确定问题是否由某一版其他修正引进。
注意:存在设备替换、版别改变等状况改变时,尽量需求保持单一变量改变
呈现机遇:问题何时呈现?
呈现机遇对一些状况下的问题排查有相当大的参考价值。
-
正常运用一段时间,问题忽然呈现:
问题呈现前是否存在某些状况变化,主要重视这些变化。
-
设备第一次运用就存在该问题:
呈现机遇无参考价值,正常流程排查
影响规模:个例or共性?
看到一个问题,常常需求承认问题的影响规模。不同的影响规模偏重的排查方向和重心也不同:个例问题针对个例状况单独剖析,在类似的环境中找不同;共性问题则需求在不同的复现环境、机遇下总结复现问题时的共同点。
个例问题
个例问题指的是该问题在同批次、同类型设备仅一台(或许极少量设备)呈现的问题。一般软件环境简略存在差异,也就简略存在个例问题。个例问题需求和正常设备比照寻觅差异,在差异中定位问题。
如果需求找到根因,问题环境需求保存,则需求正向排查、运用其他环境测验复现问题、设备中部分组件替换验证等等办法。
如果只需求解决问题,可以先对软件环境进行统一,如果软件环境统一后问题仍然存在,可以考虑需求硬件介入排查。
共性问题
共性问题指的是问题在同类型、同批次设备中很多或许全部呈现的问题。共性问题一般需求正向排查,首先承认问题大约规模,一步步缩小规模去定位问题。
共性问题也可以运用同类产品比照、产品版别比照来从旁边面去缩小问题规模。
例如:
- 显现相关问题在硬件上可以替换显现器、线缆、显卡等设备验证。软件上可以替换显卡驱动版别验证。
- 图形运用运转问题在硬件上可以替换显卡设备验证。软件上可以运转同类运用比照、晋级(降级)显卡驱动、替换窗口管理器等等办法验证。
问题概率:偶发or必现?
问题的呈现概率,一般也代表着问题的排查难度。一般来说,偶发问题排查难度相对大,必现问题排查难度相对小。
偶发问题
偶发问题软件上需求保存问题复现时的状况信息(日志),跟未复现问题时的状况信息做比照(日志),找到其中的不同点,锁定大约的问题规模。
依据问题规模,测验去做相关改动增大复现问题的概率,如果改动点可以增大复现概率,阐明改动方向是正确的。后续理清原理之后,理论上也能经过相关修正把偶发问题变为必现问题。
如果日志比照无法发现反常点,也没办法去增大问题复现概率,经过上述的办法找不到问题的大约规模,可以考虑直接先做大规模的变化:例如替换硬件、替换系统等等办法,先从大的规模承认怀疑点。
必现问题
必现问题一般是正向排查,依据问题现有的报错、日志等等信息,承认问题规模,之后进一步承认问题点。
比照法相同适用于必现问题的排查,经过同类替换,测验将必现问题变为不复现。从大的规模上锁定相关的或许问题点。
问题阻隔:找到有用的变量组合
问题阻隔简略来说就是想办法削减影响的变量。一步步除掉无关变量,将问题规模不断缩小,可以将问题约束在某一规模内。
比方某问题有变量A、B、C、D、E、F、G,其中变量E、G、F同时存在时,问题会发生。那么变量E、G、F就是有用的变量组合。
其实影响规模、问题概率的章节中已经在运用问题阻隔的办法。下面举一个简略的例子来作阐明:
-
问题现象:一台主机,运转某个游戏溃散了
-
硬件变量:显卡、CPU、内存、硬盘
-
软件变量:游戏、操作系统、显卡驱动
-
缩小规模:
- 运转其他游戏,是否也会溃散?(显卡驱动、操作系统不变)
- 运用其他操作系统运转游戏,是否也会溃散?(游戏、显卡驱动版别不变)
- 运用其他版其他显卡驱动运转游戏,是否也会溃散?(游戏、操作系统不变)
- ……
当经过缩小规模去掉其他无关变量,找到有用的变量组合后,整个问题的排查规模就已经缩小了,有利于接下来的问题排查。
变量拆分:进一步定位问题点
经过问题阻隔的办法能找到有用的变量组合,那么如何深入下去进一步排查呢?
这个时候就需求对变量进行拆分,将变量拆分成不同的子变量,对子变量进行验证或许剖析,进一步深入去缩小规模。
下面举一个例子来阐明:
在某个视频解码运用的排查过程中,呈现窗口中无图画显现问题,开始定位问题只和运用相关。
运用可以简略分成解码、上屏两个部分,相当于运用这个变量拆分出了解码、上屏两个子变量。接下来就需求对两个子变量进行验证。
运用-变量拆分:
- 子变量1:解码
- 子变量2:上屏
运用-变量验证:
- 解码验证:解码数据给到上屏时是否正常?将解码数据转存下来验证
- 上屏验证:上屏逻辑是否正常?运用简略图片上屏验证
转存的解码数据正常,运用简略图片上屏仍然无显现,承认问题在上屏逻辑中,持续对上屏的变量进行拆分,拆分为窗口创立、纹路绑定、上屏制作几个子变量。
上屏-变量拆分:
- 子变量1:窗口创立
- 子变量2:纹路绑定
- 子变量3:上屏制作
上屏-变量验证:
- 窗口创立验证:窗口创立是否正常?窗口是否正常显现
- 纹路绑定验证:纹路绑定是否有正确的回来值?回来值符合标准
- 上屏制作验证:制作部分是否正常改写?制作时的矩阵是否
最后定位问题在上屏制作部分,制作部分改写逻辑有误,未能正常改写。
实际问题举例
显现黑屏问题排查
客户反应遇到开机后遇到屏幕黑屏无显现问题。依照文中的思路进行排查。
排查思路:
-
影响规模:共性问题
据客户反应运用同批次的主板、显卡,问题仍旧存在
-
问题概率:必现问题
每次开机均呈现该问题
-
问题阻隔:
显现问题一般跟以下几个变量有关:显卡(强关联显卡驱动)、显现器、线缆
验证1:其他变量不变,替换其他品牌显卡,问题仍旧存在
验证2:其他变量不变,替换其他品牌显现器,问题仍旧存在
验证3:其他变量不变,替换其他线缆,问题解决
该问题可以定位为线缆问题
运用闪退问题排查
客户反应遇到运用闪退问题。依照文中的思路进行排查。
排查思路:
-
影响规模:共性问题
据客户反应运用同批次的主板、显卡,问题仍旧存在
-
问题概率:必现问题
每次运用发动均呈现该问题
-
问题阻隔:
运用闪退问题一般跟以下几个变量有关:显卡(强关联显卡驱动)、运用、CPU、操作系统
验证1:其他变量不变,替换其他品牌显卡,问题不存在
验证2:其他变量不变,替换其他类似运用,问题不存在
不需求进行下一步了,直接把变量控制在显卡、运用上面了
-
变量拆分:
由于是软件报错问题,暂时不考虑显卡硬件上的问题,只对显卡驱动进行变量拆分
显卡驱动:核内、3D
同时运用层闪退可以运用GDB调试定位大约的问题点,运用GDB后定位问题在极点数据相关部分,省去了运用中子变量的问题阻隔过程。
运用:极点数据读取、极点缓冲区请求、极点数据传输到显存
-
验证:
显卡驱动部分比较繁杂,暂时不进行验证,先从运用层面入手
极点数据读取验证:极点数据正常读取,和文件中存储的数据一致
极点缓冲区请求验证:运用请求的极点缓冲区较多。对一切请求后回来的极点缓冲区ID进行打印,发现后边一部分ID回来不符合规范。
问题根本定位,极点缓冲区请求失利导致运转运用后呈现闪退。估测是显卡驱动存在一个最大的极点缓冲区请求约束。
回溯验证-运用:削减程序的极点缓冲区请求,程序正常运转
回溯验证-驱动:走读驱动代码,发现确实存在最大极点缓冲区请求上限。超过上限时ID回来0。
-
解决方案:
运用对极点数据进行合批,削减需求请求的极点缓冲区数量
该问题可以定位为运用问题,运用需求对反常回来值进行判断,而不是直接运用


