Hexagon图形分析器介绍(四)
2.5 工作集数据
分析器可以从配置数据文件生成工作集数据。 工作集定义为在指定执行范围内跨所有线程(处理器硬件和 RTOS 软件)访问的所有指令和数据地址的集合。
执行范围通过开始/结束 PC 指令地址或开始/结束循环时间或其组合指定(这对应于模拟器 --pcfilter 和 --timefilter_ns 选项)。
收集的数据包括所有已执行的指令包和所有数据访问,无论它们是属于正在运行的应用程序代码还是操作系统(如果存在)。
2.5.1 生成工作集配置文件数据
工作集数据是通过运行 Hexagon 模拟器并收集图形分析器 qprof 事件数据生成的。 工作集数据所需的图形分析器 qprof 事件如下:
- 内存访问
- PC跟踪数据
要在模拟期间收集这些事件,模拟器命令行必须包含用于收集图形分析事件数据的选项(即 --qprof 文件模拟器选项)。 指定的 qprof 配置文件必须包含以下指令:
--memory
--pctrace_min or --pctrace
注意: 相比于 --pctrace, 更推荐--pctrace_min,因为 --pctrace_min 只生成执行的 PC 地址,而 --pctrace 生成执行的 PC 地址以及指令反汇编和更改的寄存器值,这会导致巨大的 qprof 事件数据文件。
2.5.2 收集工作集数据
2.5.2.1 指令包数据
对于每个执行的指令包,收集以下数据:
- 数据包第一条指令的地址。
- 数据包被执行的次数。
2.5.2.2 内存访问数据
对于每次内存访问,都会收集以下数据:
- 内存访问地址。
- 访问的字节数。
- 访问类型(读或写或取指令)。
- 引起访问的指令包地址
2.5.3 转储工作集数据
通过使用2.3.1.5 节中讨论的新命令行选项运行图形分析器来转储(或输出)工作集数据。
2.5.4 工作集配置文件
工作集配置文件是使用纯文本编辑器创建的文本文件。 配置文件包含指定要转储的工作集数据以及将输出发送到哪里的指令。
工作集配置文件中的每一行都包含一个指令,该指令指定输出文件(或 stdout、stderr)的名称,后跟一个或多个工作集列表 ID 的列表:
(filename|stdout|stderr) working_set_id ...
指令中的项目(文件名、工作集列表 ID)必须由一个或多个空白字符(空格、制表符)分隔。
可以在配置文件中添加注释和空格以提高其可读性。 从# 符号到行尾的所有字符都被视为注释。 空白行和空白字符将被忽略。
2.5.4.1 输出文件名
输出文件名必须是全限定路径名、相对路径名或标准输出流名称(即,stdout 或 stderr)。 如果输出文件名包含空格字符,则完整路径名必须用双引号括起来。
注意: 配置文件中的输出文件名必须是唯一的。
2.5.4.2 工作集 ID
工作集 ID 指定要输出的工作集数据列表。定义的工作集数据列表在第 5 章中描述。表 2-3 列出了工作集 ID。
2.5.5 工作集符号文件
工作集符号文件包含用户指定的用于标识内存区域的符号。 此选项的典型用途是识别仅在运行时才知道的动态分配的内存区域。 用户运行他们的程序,其中包含打印语句来识别动态内存区域,然后可以将这些区域提供给分析器以供工作集功能使用。
工作集 symfile 中的每一行都包含一个地址(以 0x 开头的十六进制)、一个以字节为单位表示内存区域大小的长度(十进制)和一个用双引号括起来的名称。 示例行如下所示:
0x0004abc0 256 "Temp read buffer"
每行中的项目必须由一个或多个空白字符(空格、制表符)分隔。
可以向符号文件添加注释和空格以提高其可读性。 从# 符号到行尾的所有字符都被视为注释。 空白行和空白字符将被忽略。