问题描述
例如在每个刻度为500个单位的AtomicSimplecpu中,我想输入以下内容:
0 function1
2000 function2
5000 function3
表示function1
在时间0开始执行,function2
在时间2000开始,依此类推。
我可以从--debug-flags ExecAll
中解析出来,但是由于它会输出大量信息,因此大大降低了执行速度,这很烦人。
解决方法
我在gem5 6bc2111c9674d0c8db22f6a6adcc00e49625aabd上偶然发现了一个函数:
gem5.opt fs.py --param 'system.cpu[0].function_trace = True'
--param 'system.cpu[0].function_trace_start = 0'
生成文件ftrace.system.cpu
,该文件包含以下格式的输出:
0: _start (6500)
6500: on_exit (2500)
9000: __register_exitproc (13500)
22500: _start (2000)
24500: main (4000)
其中_start
在时间0
开始执行,执行了6500个单位。
我测试了一个arm64 Linux kernel v5.4.3. boot with it,它只使执行速度降低了大约30%,这很好
该功能当前无法用于系统调用仿真:
BaseSimpleCPU::postExecute()
{
if (FullSystem)
traceFunctions(instAddr);
我试图快速删除它,并且main
的输出看起来确实正确,但是由于某种原因,似乎在__end__
之前的每个时间戳上都打印了名为main
的入口函数,这很烦人。它应该很容易修复。