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 檔案系統中,並可以以與上述內建配置相同的方式進行選擇。

配置可以使用以前載入的特性。系統將透過強制執行與載入順序嚴格相反的解除安裝順序,確保無法解除安裝當前正在使用的特性。