LXR | KVM | PM | Time | Interrupt | Systems Performance | Bootup Optimization

DV仿真环境下问题定位和性能分析工具:基于PC指针,结合map文件分析函数调用轨迹以及耗时

关键词:DV仿真,Python,map,PC等。

 

当DV使用复杂软件对硬件进行仿真时,由于没有类似Trace32等IDE调试环境,出现问题往往较难定位问题。同时如果想优化性能,较难直到不同流程耗时。

DV仿真可以记录每一次PC变动值,但是软件稍复杂会导致数据量非常庞大。

这里结合map就可以知道每一次执行所处函数,结合disassemble dump就可以直到每一次执行的指令。

1 PC指针指示了什么

ARM处理器3级流水线:取指->译码->执行,如下图:

PC始终指向正在取指的地址,由于流水线的存在,导致PC的值比当前正在执行的值要大两条指令的地址,而在ARM状态下,由于是四字节的指令因此PC保存着当前执行的指令地址值加 8 个字节,而在Thumb状态下,是两字节的指令因此加4字节即可。

2 工具设计思路

 pc_2_sym.py首先从map文件中解析出每个符号的名称/起始地址/大小/文件名,然后开始遍历PC轨迹文件:逐个根据PC-8查找对应的符号,写入csv文件中;将PC-8写入到ExecuteTraceAddress中。

3 Python实现

执行命令:

python pc_2_sym.py -m xxx.map -p pc.txt -o pc.csv

 代码如下:

 

4 使用

生成的csv文件使用Excel打开,对于查看函数调用轨迹可读性要好很多。

1. 可以对Symbol使用Filter进行过滤,查看关键函数轨迹。(函数级别)

2. 如果想查看函数内部调用细节,对照转换后的ExecuteTraceAddress和disassemble dump文件查看指令执行细节。(指令级别)

3. 可以对函数Duration进行排序,重点分析耗时较大的函数。或者明显异常的函数。或者一些udelay/mdelay延时函数。

缺点:

1. 无法记录函数入口和出口,所以csv中一次函数调用可能出现几次。对于分析函数耗时不准确,但结合代码可以分析出大概。

 

总体使用来看,比分析DV波形,查看关键节点寄存器或者特殊流程标记要高效全面得多。

posted on 2023-02-26 23:58  ArnoldLu  阅读(145)  评论(1编辑  收藏  举报

导航