CoreSight 系统配置管理器¶
- 作者:
Mike Leach <mike.leach@linaro.org>
- 日期:
2020 年 10 月
简介¶
CoreSight 系统配置管理器是一个 API,它允许使用预定义配置对 CoreSight 系统进行编程,然后可以从 sysfs 或 perf 轻松启用这些配置。
许多 CoreSight 组件都可以通过复杂的方式进行编程——尤其是 ETM。此外,组件可以在 CoreSight 系统中交互,通常通过交叉触发组件(如 CTI 和 CTM)。这些系统设置可以定义并作为命名配置启用。
基本概念¶
本节介绍 CoreSight 系统配置的基本概念。
特性¶
特性是 CoreSight 设备的命名编程集。编程是设备相关的,可以用绝对寄存器值、资源使用和参数值来定义。
特性是使用描述符定义的。该描述符用于加载到匹配的设备上,无论是在特性加载到系统时,还是在 CoreSight 设备注册到配置管理器时。
加载过程涉及将描述符解释为驱动程序中的一组寄存器访问——资源使用和参数描述被转换为适当的寄存器访问。这种解释使得在需要时将特性编程到设备中变得容易且高效。
在特性启用且设备本身启用之前,特性不会在设备上激活。当设备启用时,已启用的特性将被编程到设备硬件中。
特性作为系统上正在启用的配置的一部分被启用。
参数值¶
参数值是一个命名值,用户可以在启用特性之前设置它,以调整特性编程的操作行为。
例如,这可以是一个编程操作中的计数器值,以给定速率重复。当特性启用时,参数的当前值将用于对设备进行编程。
特性描述符定义了参数的默认值,如果用户不提供新值,则使用该默认值。
用户可以使用 CoreSight 系统的 configfs API 更新参数值——下文将对此进行描述。
当该设备上的特性启用时,参数的当前值将加载到设备中。
配置¶
配置定义了一组特性,这些特性将在选择了该配置的跟踪会话中使用。对于任何跟踪会话,只能选择一个配置。
定义的特性可以在任何类型注册支持系统配置的设备上。配置可以选择在某类设备(例如任何 ETMv4)或特定设备(例如系统上的特定 CTI)上启用特性。
与特性一样,描述符用于定义配置。这将定义必须作为配置一部分启用的特性,以及可用于覆盖默认参数值的任何预设值。
预设值¶
预设值是配置使用的特性的参数值集合,易于选择。单个预设集中的值数量等于配置使用的特性中参数值的总和。
例如,一个配置包含 3 个特性,其中一个有 2 个参数,一个有单个参数,另一个没有参数。因此,一个预设集将有 3 个值。
预设由配置可选定义,最多可定义 15 个。如果没有选择预设,则照常使用特性中定义的参数值。
操作¶
配置的操作按以下步骤进行。
在此示例中,配置是“autofdo”,它有一个关联的特性“strobing”,该特性在 ETMv4 CoreSight 设备上运行。
配置已启用。例如,“perf”可以在其命令行中选择该配置
perf record -e cs_etm/autofdo/ myapp
这将启用“autofdo”配置。
perf 开始在系统上进行跟踪。当 perf 用于跟踪的每个 ETMv4 被启用时,配置管理器将检查该 ETMv4 是否具有与当前活动配置相关的特性。在此示例中,“strobing”被启用并编程到 ETMv4 中。
当 ETMv4 被禁用时,任何标记为需要保存的寄存器都将被读回。
在 perf 会话结束时,配置将被禁用。
查看配置和特性¶
可以使用 configfs API 查看当前加载到系统中的配置和特性集。
正常挂载 configfs 后,“cs-syscfg”子系统将出现
$ ls /config
cs-syscfg stp-policy
它有两个子目录
$ cd cs-syscfg/
$ ls
configurations features
系统内置了“autofdo”配置。可以按如下方式检查它
$ cd configurations/
$ ls
autofdo
$ cd autofdo/
$ ls
description feature_refs preset1 preset3 preset5 preset7 preset9
enable preset preset2 preset4 preset6 preset8
$ cat description
Setup ETMs with strobing for autofdo
$ cat feature_refs
strobing
每个声明的预设都有一个“preset<n>”子目录。可以检查预设的值
$ cat preset1/values
strobing.window = 0x1388 strobing.period = 0x2
$ cat preset2/values
strobing.window = 0x1388 strobing.period = 0x4
“enable”和“preset”文件在使用 CoreSight 与 sysfs 时允许控制配置。
配置引用的特性可以在 features 目录中检查
$ cd ../../features/strobing/
$ ls
description matches nr_params params
$ cat description
Generate periodic trace capture windows.
parameter 'window': a number of CPU cycles (W)
parameter 'period': trace enabled for W cycles every period x W cycles
$ cat matches
SRC_ETMV4
$ cat nr_params
2
移动到 params 目录以检查和调整参数
cd params
$ ls
period window
$ cd period
$ ls
value
$ cat value
0x2710
# echo 15000 > value
# cat value
0x3a98
以这种方式调整的参数会反映在已加载该特性的所有设备实例中。
在 perf 中使用配置¶
加载到 CoreSight 配置管理中的配置也声明在 perf 的“cs_etm”事件基础架构中,以便在 perf 下运行跟踪时可以选择它们
$ ls /sys/devices/cs_etm
cpu0 cpu2 events nr_addr_filters power subsystem uevent
cpu1 cpu3 format perf_event_mux_interval_ms sinks type
这里的关键目录是“events”——一个通用的 perf 目录,允许在 perf 命令行上进行选择。与 sinks 条目一样,它提供了配置名称的哈希值。
“events”目录中的条目使用 perf 内置的语法生成器在评估命令时替换名称的语法
$ ls events/
autofdo
$ cat events/autofdo
configid=0xa7c3dddd
可以在 perf 命令行上选择“autofdo”配置
$ perf record -e cs_etm/autofdo/u --per-thread <application>
也可以选择一个预设来覆盖当前参数值
$ perf record -e cs_etm/autofdo,preset=1/u --per-thread <application>
当以这种方式选择配置时,使用的跟踪接收器会自动选择。
在 sysfs 中使用配置¶
Coresight 可以通过 sysfs 控制。在使用时,可以为 sysfs 会话中使用的设备激活配置。
在一个配置中,有“enable”和“preset”文件。
要启用用于 sysfs 的配置
$ cd configurations/autofdo
$ echo 1 > enable
这将使用特性中的任何默认参数值——可以如上所述进行调整。
要使用 preset<n> 参数值集
$ echo 3 > preset
这将为配置选择 preset3。预设的有效值为 0(取消选择预设)和任何存在 preset<n> 子目录的 <n> 值。
请注意,活动的 sysfs 配置是一个全局参数,因此在任何给定时间,sysfs 只能有一个配置处于活动状态。尝试启用第二个配置将导致错误。此外,在使用中尝试禁用配置也将导致错误。
sysfs 对活动配置的使用独立于 perf 中使用的配置。
创建和加载自定义配置¶
自定义配置和/或特性可以通过可加载模块动态加载到系统中。
自定义配置的示例位于 ./samples/coresight 中。
这会创建一个新配置,该配置使用现有的内置闪烁特性,但提供了不同的预设集。
模块加载后,配置将出现在 configfs 文件系统中,并可以以与上述内置配置相同的方式进行选择。
配置可以使用以前加载的特性。系统将通过强制执行与加载顺序严格相反的卸载顺序,确保无法卸载当前正在使用的特性。