Mauro Carvalho Chehab | 6baec31 | 2019-04-18 17:35:40 -0300 | [diff] [blame] | 1 | ========================== |
Pawel Moll | a33b0da | 2014-07-22 18:32:59 +0100 | [diff] [blame] | 2 | ARM Cache Coherent Network |
| 3 | ========================== |
| 4 | |
| 5 | CCN-504 is a ring-bus interconnect consisting of 11 crosspoints |
| 6 | (XPs), with each crosspoint supporting up to two device ports, |
| 7 | so nodes (devices) 0 and 1 are connected to crosspoint 0, |
| 8 | nodes 2 and 3 to crosspoint 1 etc. |
| 9 | |
| 10 | PMU (perf) driver |
| 11 | ----------------- |
| 12 | |
| 13 | The CCN driver registers a perf PMU driver, which provides |
| 14 | description of available events and configuration options |
| 15 | in sysfs, see /sys/bus/event_source/devices/ccn*. |
| 16 | |
| 17 | The "format" directory describes format of the config, config1 |
| 18 | and config2 fields of the perf_event_attr structure. The "events" |
| 19 | directory provides configuration templates for all documented |
| 20 | events, that can be used with perf tool. For example "xp_valid_flit" |
| 21 | is an equivalent of "type=0x8,event=0x4". Other parameters must be |
Pawel Moll | 90d11e2 | 2016-08-11 11:56:28 +0100 | [diff] [blame] | 22 | explicitly specified. |
Pawel Moll | a33b0da | 2014-07-22 18:32:59 +0100 | [diff] [blame] | 23 | |
Pawel Moll | 90d11e2 | 2016-08-11 11:56:28 +0100 | [diff] [blame] | 24 | For events originating from device, "node" defines its index. |
| 25 | |
| 26 | Crosspoint PMU events require "xp" (index), "bus" (bus number) |
| 27 | and "vc" (virtual channel ID). |
| 28 | |
| 29 | Crosspoint watchpoint-based events (special "event" value 0xfe) |
Randy Dunlap | 251c99b | 2020-07-03 20:20:15 -0700 | [diff] [blame] | 30 | require "xp" and "vc" as above plus "port" (device port index), |
Pawel Moll | 90d11e2 | 2016-08-11 11:56:28 +0100 | [diff] [blame] | 31 | "dir" (transmit/receive direction), comparator values ("cmp_l" |
| 32 | and "cmp_h") and "mask", being index of the comparator mask. |
Mauro Carvalho Chehab | 6baec31 | 2019-04-18 17:35:40 -0300 | [diff] [blame] | 33 | |
Pawel Moll | a33b0da | 2014-07-22 18:32:59 +0100 | [diff] [blame] | 34 | Masks are defined separately from the event description |
| 35 | (due to limited number of the config values) in the "cmp_mask" |
| 36 | directory, with first 8 configurable by user and additional |
| 37 | 4 hardcoded for the most frequent use cases. |
| 38 | |
| 39 | Cycle counter is described by a "type" value 0xff and does |
| 40 | not require any other settings. |
| 41 | |
Pawel Moll | ffa4152 | 2015-04-16 12:14:35 +0100 | [diff] [blame] | 42 | The driver also provides a "cpumask" sysfs attribute, which contains |
| 43 | a single CPU ID, of the processor which will be used to handle all |
| 44 | the CCN PMU events. It is recommended that the user space tools |
| 45 | request the events on this processor (if not, the perf_event->cpu value |
| 46 | will be overwritten anyway). In case of this processor being offlined, |
| 47 | the events are migrated to another one and the attribute is updated. |
| 48 | |
Mauro Carvalho Chehab | 6baec31 | 2019-04-18 17:35:40 -0300 | [diff] [blame] | 49 | Example of perf tool use:: |
Pawel Moll | a33b0da | 2014-07-22 18:32:59 +0100 | [diff] [blame] | 50 | |
Mauro Carvalho Chehab | 6baec31 | 2019-04-18 17:35:40 -0300 | [diff] [blame] | 51 | / # perf list | grep ccn |
| 52 | ccn/cycles/ [Kernel PMU event] |
| 53 | <...> |
| 54 | ccn/xp_valid_flit,xp=?,port=?,vc=?,dir=?/ [Kernel PMU event] |
| 55 | <...> |
Pawel Moll | a33b0da | 2014-07-22 18:32:59 +0100 | [diff] [blame] | 56 | |
Mauro Carvalho Chehab | 6baec31 | 2019-04-18 17:35:40 -0300 | [diff] [blame] | 57 | / # perf stat -a -e ccn/cycles/,ccn/xp_valid_flit,xp=1,port=0,vc=1,dir=1/ \ |
| 58 | sleep 1 |
Pawel Moll | a33b0da | 2014-07-22 18:32:59 +0100 | [diff] [blame] | 59 | |
| 60 | The driver does not support sampling, therefore "perf record" will |
Pawel Moll | ffa4152 | 2015-04-16 12:14:35 +0100 | [diff] [blame] | 61 | not work. Per-task (without "-a") perf sessions are not supported. |