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”,它具有在 ETMv4 CoreSight 设备上工作的相关功能“strobing”。

  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

当使用带有 sysfs 的 CoreSight 时,“enable”和“preset”文件允许控制配置。

可以在功能目录中检查配置引用的功能

$ 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”目录中的条目使用 perfs 内置语法生成器来在评估命令时替换名称的语法

$ 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 中使用配置

可以使用 sysfs 控制 Coresight。当使用此功能时,可以为 sysfs 会话中使用的设备激活配置。

在配置中,有“enable”和“preset”文件。

启用配置以与 sysfs 一起使用

$ cd configurations/autofdo
$ echo 1 > enable

这将使用功能中的任何默认参数值 - 可以如上所述进行调整。

要使用预设<n>组参数值

$ echo 3 > preset

这将为配置选择预设 3。预设的有效值为 0(取消选择预设),以及存在预设<n>子目录的任何<n>值。

请注意,活动的 sysfs 配置是一个全局参数,因此在任何给定时间只能有一个配置处于活动状态以供 sysfs 使用。尝试启用第二个配置将导致错误。此外,尝试禁用正在使用的配置也会导致错误。

sysfs 使用的活动配置与 perf 中使用的配置无关。

创建和加载自定义配置

可以使用可加载模块将自定义配置和/或功能动态加载到系统中。

在 ./samples/coresight 中找到了自定义配置的示例。

这会创建一个使用现有内置选通功能的新配置,但会提供一组不同的预设。

当加载模块时,配置将出现在 configfs 文件系统中,并且可以像上述内置配置一样选择。

配置可以使用先前加载的功能。系统将确保不可能卸载当前正在使用的功能,方法是强制卸载顺序与加载顺序严格相反。