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 檔案系統中,並可以以與上述內建配置相同的方式進行選擇。
配置可以使用以前載入的特性。系統將透過強制執行與載入順序嚴格相反的解除安裝順序,確保無法解除安裝當前正在使用的特性。