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 个。如果没有选择预设,则照常使用特性中定义的参数值。

操作

配置的操作按以下步骤进行。

  1. 在此示例中,配置是“autofdo”,它有一个关联的特性“strobing”,该特性在 ETMv4 CoreSight 设备上运行。

  2. 配置已启用。例如,“perf”可以在其命令行中选择该配置

    perf record -e cs_etm/autofdo/ myapp
    

    这将启用“autofdo”配置。

  3. perf 开始在系统上进行跟踪。当 perf 用于跟踪的每个 ETMv4 被启用时,配置管理器将检查该 ETMv4 是否具有与当前活动配置相关的特性。在此示例中,“strobing”被启用并编程到 ETMv4 中。

  4. 当 ETMv4 被禁用时,任何标记为需要保存的寄存器都将被读回。

  5. 在 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 文件系统中,并可以以与上述内置配置相同的方式进行选择。

配置可以使用以前加载的特性。系统将通过强制执行与加载顺序严格相反的卸载顺序,确保无法卸载当前正在使用的特性。