ARM 快取一致性網路

CCN-504 是一個環形匯流排互連,由 11 個交叉點 (XP) 組成,每個交叉點最多支援兩個裝置埠,因此節點(裝置)0 和 1 連線到交叉點 0,節點 2 和 3 連線到交叉點 1 等。

PMU (perf) 驅動程式

CCN 驅動程式註冊了一個 perf PMU 驅動程式,它在 sysfs 中提供了可用事件和配置選項的描述,參見 /sys/bus/event_source/devices/ccn*。

“format”目錄描述了 perf_event_attr 結構的 config、config1 和 config2 欄位的格式。“events”目錄提供了所有已記錄事件的配置模板,可與 perf 工具一起使用。例如,“xp_valid_flit”等同於“type=0x8,event=0x4”。其他引數必須明確指定。

對於源自裝置的事件,“node”定義其索引。

交叉點 PMU 事件需要“xp”(索引)、“bus”(匯流排號)和“vc”(虛擬通道 ID)。

基於交叉點觀察點(watchpoint)的事件(特殊“event”值 0xfe)需要如上所述的“xp”和“vc”,以及“port”(裝置埠索引)、“dir”(傳輸/接收方向)、比較器值(“cmp_l”和“cmp_h”)和“mask”,即比較器掩碼的索引。

掩碼與事件描述分開定義(由於配置值的數量有限),在“cmp_mask”目錄中,前 8 個可由使用者配置,另外 4 個為最常見用例硬編碼。

迴圈計數器由“type”值 0xff 描述,不需要任何其他設定。

驅動程式還提供了一個“cpumask”sysfs 屬性,其中包含一個 CPU ID,即將用於處理所有 CCN PMU 事件的處理器。建議使用者空間工具在此處理器上請求事件(如果不是,perf_event->cpu 值無論如何都會被覆蓋)。如果此處理器離線,事件將遷移到另一個處理器,並且該屬性會更新。

perf 工具使用示例

/ # perf list | grep ccn
  ccn/cycles/                                        [Kernel PMU event]
<...>
  ccn/xp_valid_flit,xp=?,port=?,vc=?,dir=?/          [Kernel PMU event]
<...>

/ # perf stat -a -e ccn/cycles/,ccn/xp_valid_flit,xp=1,port=0,vc=1,dir=1/ \
                                                                       sleep 1

該驅動程式不支援取樣,因此“perf record”將不起作用。不支援按任務(不帶“-a”)的 perf 會話。