Intel(R) 跟蹤中心 (TH)¶
概述¶
Intel(R) 跟蹤中心 (TH) 是一組硬體塊,用於透過多種型別的跟蹤輸出埠生成、切換和輸出來自多個硬體和軟體源的跟蹤資料,這些資料以系統跟蹤協議 (MIPI STPv2) 編碼,旨在執行完整的系統除錯。有關硬體的更多資訊,請參見 Intel(R) 跟蹤中心開發人員手冊 [1]。
它由跟蹤源、跟蹤目標(輸出)和一個交換機(全域性跟蹤中心 GTH)組成。這些裝置放置在它們自己的匯流排(“intel_th”)上,可以在那裡透過 sysfs 屬性發現和配置它們。
- 目前,支援以下 Intel TH 子裝置(塊):
軟體跟蹤中心 (STH),跟蹤源,它是一個系統跟蹤模組 (STM) 裝置,
記憶體儲存單元 (MSU),跟蹤輸出,允許將跟蹤中心輸出儲存在系統記憶體中,
並行跟蹤介面輸出 (PTI),透過 PTI 埠輸出到外部除錯主機,
全域性跟蹤中心 (GTH),它是一個交換機,也是 Intel(R) 跟蹤中心架構的中心元件。
輸出裝置的通用屬性在 ABI 檔案 testing/sysfs-bus-intel_th-output-devices 中描述,其中最值得注意的是 “active”,它啟用或停用跟蹤輸出到該特定輸出裝置。
GTH 允許透過其 “masters” 屬性組將不同的 STP 主裝置定向到不同的輸出埠。更詳細的 GTH 介面描述位於 ABI 檔案 testing/sysfs-bus-intel_th-devices-gth。
STH 註冊一個 stm 類裝置,透過該裝置,它提供與使用者空間和核心空間軟體跟蹤源的介面。有關更多資訊,請參見 系統跟蹤模組。
MSU 可以配置為將跟蹤資料收集到系統記憶體緩衝區中,該緩衝區稍後可以透過 read() 或 mmap() 介面從其裝置節點讀取,並定向到將消耗資料和/或進一步轉發資料的“軟體接收器”驅動程式。
總而言之,Intel(R) 跟蹤中心不需要任何特殊的使用者空間軟體即可執行;一切都可以透過 sysfs 屬性和裝置節點進行配置、啟動和收集。
[1] https://software.intel.com/sites/default/files/managed/d3/3c/intel-th-developer-manual.pdf
匯流排和子裝置¶
對於系統中的每個 Intel TH 裝置,都會建立一個它自己的匯流排,並分配一個 ID 號,該 ID 號反映了 TH 裝置列舉的順序。所有 TH 子裝置(intel_th 總線上的裝置)都以該 ID 開頭:0-gth、0-msc0、0-msc1、0-pti、0-sth,後跟裝置的名稱和一個可選索引。
輸出裝置還在 /dev/intel_thN 中獲取一個裝置節點,其中 N 是 Intel TH 裝置 ID。例如,MSU 的記憶體緩衝區在分配後可以透過 /dev/intel_th0/msc{0,1} 訪問。
快速示例¶
# 找出哪個 GTH 埠是第一個記憶體控制器
$ cat /sys/bus/intel_th/devices/0-msc0/port
0
# 看起來是埠 0,配置主裝置 33 將資料傳送到埠 0
$ echo 0 > /sys/bus/intel_th/devices/0-gth/masters/33
# 在第一個記憶體控制器上分配一個 2 視窗的多塊緩衝區,每個緩衝區 64 頁
$ echo multi > /sys/bus/intel_th/devices/0-msc0/mode
$ echo 64,64 > /sys/bus/intel_th/devices/0-msc0/nr_pages
# 也為此控制器啟用環繞
$ echo 1 > /sys/bus/intel_th/devices/0-msc0/wrap
# 並啟用到此埠的跟蹤
$ echo 1 > /sys/bus/intel_th/devices/0-msc0/active
# .. 向主裝置 33 傳送資料,有關更多詳細資訊,請參見 系統跟蹤模組 .. # .. 等待跟蹤堆積 .. # .. 並停止跟蹤
$ echo 0 > /sys/bus/intel_th/devices/0-msc0/active
# 現在你可以從裝置節點收集跟蹤
$ cat /dev/intel_th0/msc0 > my_stp_trace
主機偵錯程式模式¶
可以配置跟蹤中心,並透過遠端除錯主機控制其跟蹤捕獲,該主機應透過硬體除錯介面之一連線,然後將使用該介面來控制 Intel 跟蹤中心並將跟蹤資料傳輸到除錯主機。
需要告訴驅動程式正在進行這樣的安排,以便它不接觸任何捕獲/埠配置,並避免與除錯主機的配置訪問發生衝突。驅動程式在此模式下執行的唯一活動是將軟體跟蹤收集到軟體跟蹤中心(一個 stm 類裝置)。使用者仍然負責設定接收端解碼器可以識別的足夠的主裝置/通道對映。
為了啟用主機模式,請將 'intel_th' 核心模組的 'host_mode' 引數設定為 'y'。沒有虛擬輸出裝置會顯示在 intel_th 總線上。此外,'gth' 裝置的跟蹤配置和捕獲控制屬性組將不會公開。'sth' 裝置將照常執行。
軟體接收器¶
記憶體儲存單元 (MSU) 驅動程式提供一個核心 API,供驅動程式註冊自身作為跟蹤資料的軟體接收器。此類驅動程式可以透過其他裝置(例如 USB 裝置控制器或網絡卡)進一步匯出資料。
- 該 API 有兩個主要部分:
通知軟體接收器某個特定視窗已滿,並“鎖定”該視窗,即使其無法用於跟蹤收集;當發生這種情況時,MSU 驅動程式將自動切換到緩衝區中的下一個視窗(如果已解鎖),如果未解鎖,則停止跟蹤捕獲;
跟蹤視窗的“鎖定”狀態,並提供一種方式,供軟體接收器驅動程式在視窗解鎖並可以再次用於收集跟蹤資料時通知 MSU 驅動程式。
示例接收器驅動程式 msu-sink 說明了軟體接收器的實現。從功能上講,它只是在視窗滿時立即解鎖視窗,使 MSU 以迴圈緩衝區模式執行。與“多”模式不同,它將填充緩衝區中的所有視窗,而不僅僅是第一個視窗。可以透過將 “sink” 寫入 “mode” 檔案來啟用它(假設 msu-sink.ko 已載入)。