Commit | Line | Data |
---|---|---|
a33b0daa PM |
1 | ARM Cache Coherent Network |
2 | ========================== | |
3 | ||
4 | CCN-504 is a ring-bus interconnect consisting of 11 crosspoints | |
5 | (XPs), with each crosspoint supporting up to two device ports, | |
6 | so nodes (devices) 0 and 1 are connected to crosspoint 0, | |
7 | nodes 2 and 3 to crosspoint 1 etc. | |
8 | ||
9 | PMU (perf) driver | |
10 | ----------------- | |
11 | ||
12 | The CCN driver registers a perf PMU driver, which provides | |
13 | description of available events and configuration options | |
14 | in sysfs, see /sys/bus/event_source/devices/ccn*. | |
15 | ||
16 | The "format" directory describes format of the config, config1 | |
17 | and config2 fields of the perf_event_attr structure. The "events" | |
18 | directory provides configuration templates for all documented | |
19 | events, that can be used with perf tool. For example "xp_valid_flit" | |
20 | is an equivalent of "type=0x8,event=0x4". Other parameters must be | |
21 | explicitly specified. For events originating from device, "node" | |
22 | defines its index. All crosspoint events require "xp" (index), | |
23 | "port" (device port number) and "vc" (virtual channel ID) and | |
24 | "dir" (direction). Watchpoints (special "event" value 0xfe) also | |
25 | require comparator values ("cmp_l" and "cmp_h") and "mask", being | |
26 | index of the comparator mask. | |
27 | ||
28 | Masks are defined separately from the event description | |
29 | (due to limited number of the config values) in the "cmp_mask" | |
30 | directory, with first 8 configurable by user and additional | |
31 | 4 hardcoded for the most frequent use cases. | |
32 | ||
33 | Cycle counter is described by a "type" value 0xff and does | |
34 | not require any other settings. | |
35 | ||
36 | Example of perf tool use: | |
37 | ||
38 | / # perf list | grep ccn | |
39 | ccn/cycles/ [Kernel PMU event] | |
40 | <...> | |
41 | ccn/xp_valid_flit/ [Kernel PMU event] | |
42 | <...> | |
43 | ||
44 | / # perf stat -C 0 -e ccn/cycles/,ccn/xp_valid_flit,xp=1,port=0,vc=1,dir=1/ \ | |
45 | sleep 1 | |
46 | ||
47 | The driver does not support sampling, therefore "perf record" will | |
48 | not work. Also notice that only single cpu is being selected | |
49 | ("-C 0") - this is because perf framework does not support | |
50 | "non-CPU related" counters (yet?) so system-wide session ("-a") | |
51 | would try (and in most cases fail) to set up the same event | |
52 | per each CPU. |