Skip to content

Commit 724142f

Browse files
WuHao270gregkh
authored andcommitted
fpga: dfl: fme: add performance reporting support
This patch adds support for performance reporting private feature for FPGA Management Engine (FME). Now it supports several different performance counters, including 'basic', 'cache', 'fabric', 'vtd' and 'vtd_sip'. It allows user to use standard linux tools to access these performance counters. e.g. List all events by "perf list" perf list | grep fme dfl_fme0/cache_read_hit/ [Kernel PMU event] dfl_fme0/cache_read_miss/ [Kernel PMU event] ... dfl_fme0/fab_mmio_read/ [Kernel PMU event] dfl_fme0/fab_mmio_write/ [Kernel PMU event] ... dfl_fme0/fab_port_mmio_read,portid=?/ [Kernel PMU event] dfl_fme0/fab_port_mmio_write,portid=?/ [Kernel PMU event] ... dfl_fme0/vtd_port_devtlb_1g_fill,portid=?/ [Kernel PMU event] dfl_fme0/vtd_port_devtlb_2m_fill,portid=?/ [Kernel PMU event] ... dfl_fme0/vtd_sip_iotlb_1g_hit/ [Kernel PMU event] dfl_fme0/vtd_sip_iotlb_1g_miss/ [Kernel PMU event] ... dfl_fme0/clock [Kernel PMU event] ... e.g. check increased counter value after run one application using "perf stat" command. perf stat -e dfl_fme0/fab_mmio_read/,dfl_fme0/fab_mmio_write/ ./test Performance counter stats for './test': 1 dfl_fme0/fab_mmio_read/ 2 dfl_fme0/fab_mmio_write/ 1.009496520 seconds time elapsed Please note that fabric counters support both fab_* and fab_port_*, but actually they are sharing one set of performance counters in hardware. If user wants to monitor overall data events on fab_* then fab_port_* can't be supported at the same time, see example below: perf stat -e dfl_fme0/fab_mmio_read/,dfl_fme0/fab_port_mmio_write,portid=0/ Performance counter stats for 'system wide': 0 dfl_fme0/fab_mmio_read/ <not supported> dfl_fme0/fab_port_mmio_write,portid=0/ 2.141064085 seconds time elapsed Signed-off-by: Luwei Kang <[email protected]> Signed-off-by: Xu Yilun <[email protected]> Signed-off-by: Wu Hao <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 1f03ac9 commit 724142f

File tree

7 files changed

+1134
-1
lines changed

7 files changed

+1134
-1
lines changed
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
What: /sys/bus/event_source/devices/dfl_fmeX/format
2+
Date: April 2020
3+
KernelVersion: 5.8
4+
Contact: Wu Hao <[email protected]>
5+
Description: Read-only. Attribute group to describe the magic bits
6+
that go into perf_event_attr.config for a particular pmu.
7+
(See ABI/testing/sysfs-bus-event_source-devices-format).
8+
9+
Each attribute under this group defines a bit range of the
10+
perf_event_attr.config. All supported attributes are listed
11+
below.
12+
13+
event = "config:0-11" - event ID
14+
evtype = "config:12-15" - event type
15+
portid = "config:16-23" - event source
16+
17+
For example,
18+
19+
fab_mmio_read = "event=0x06,evtype=0x02,portid=0xff"
20+
21+
It shows this fab_mmio_read is a fabric type (0x02) event with
22+
0x06 local event id for overall monitoring (portid=0xff).
23+
24+
What: /sys/bus/event_source/devices/dfl_fmeX/cpumask
25+
Date: April 2020
26+
KernelVersion: 5.8
27+
Contact: Wu Hao <[email protected]>
28+
Description: Read-only. This file always returns cpu which the PMU is bound
29+
for access to all fme pmu performance monitoring events.
30+
31+
What: /sys/bus/event_source/devices/dfl_fmeX/events
32+
Date: April 2020
33+
KernelVersion: 5.8
34+
Contact: Wu Hao <[email protected]>
35+
Description: Read-only. Attribute group to describe performance monitoring
36+
events specific to fme. Each attribute in this group describes
37+
a single performance monitoring event supported by this fme pmu.
38+
The name of the file is the name of the event.
39+
(See ABI/testing/sysfs-bus-event_source-devices-events).
40+
41+
All supported performance monitoring events are listed below.
42+
43+
Basic events (evtype=0x00)
44+
45+
clock = "event=0x00,evtype=0x00,portid=0xff"
46+
47+
Cache events (evtype=0x01)
48+
49+
cache_read_hit = "event=0x00,evtype=0x01,portid=0xff"
50+
cache_read_miss = "event=0x01,evtype=0x01,portid=0xff"
51+
cache_write_hit = "event=0x02,evtype=0x01,portid=0xff"
52+
cache_write_miss = "event=0x03,evtype=0x01,portid=0xff"
53+
cache_hold_request = "event=0x05,evtype=0x01,portid=0xff"
54+
cache_data_write_port_contention =
55+
"event=0x06,evtype=0x01,portid=0xff"
56+
cache_tag_write_port_contention =
57+
"event=0x07,evtype=0x01,portid=0xff"
58+
cache_tx_req_stall = "event=0x08,evtype=0x01,portid=0xff"
59+
cache_rx_req_stall = "event=0x09,evtype=0x01,portid=0xff"
60+
cache_eviction = "event=0x0a,evtype=0x01,portid=0xff"
61+
62+
Fabric events (evtype=0x02)
63+
64+
fab_pcie0_read = "event=0x00,evtype=0x02,portid=0xff"
65+
fab_pcie0_write = "event=0x01,evtype=0x02,portid=0xff"
66+
fab_pcie1_read = "event=0x02,evtype=0x02,portid=0xff"
67+
fab_pcie1_write = "event=0x03,evtype=0x02,portid=0xff"
68+
fab_upi_read = "event=0x04,evtype=0x02,portid=0xff"
69+
fab_upi_write = "event=0x05,evtype=0x02,portid=0xff"
70+
fab_mmio_read = "event=0x06,evtype=0x02,portid=0xff"
71+
fab_mmio_write = "event=0x07,evtype=0x02,portid=0xff"
72+
fab_port_pcie0_read = "event=0x00,evtype=0x02,portid=?"
73+
fab_port_pcie0_write = "event=0x01,evtype=0x02,portid=?"
74+
fab_port_pcie1_read = "event=0x02,evtype=0x02,portid=?"
75+
fab_port_pcie1_write = "event=0x03,evtype=0x02,portid=?"
76+
fab_port_upi_read = "event=0x04,evtype=0x02,portid=?"
77+
fab_port_upi_write = "event=0x05,evtype=0x02,portid=?"
78+
fab_port_mmio_read = "event=0x06,evtype=0x02,portid=?"
79+
fab_port_mmio_write = "event=0x07,evtype=0x02,portid=?"
80+
81+
VTD events (evtype=0x03)
82+
83+
vtd_port_read_transaction = "event=0x00,evtype=0x03,portid=?"
84+
vtd_port_write_transaction = "event=0x01,evtype=0x03,portid=?"
85+
vtd_port_devtlb_read_hit = "event=0x02,evtype=0x03,portid=?"
86+
vtd_port_devtlb_write_hit = "event=0x03,evtype=0x03,portid=?"
87+
vtd_port_devtlb_4k_fill = "event=0x04,evtype=0x03,portid=?"
88+
vtd_port_devtlb_2m_fill = "event=0x05,evtype=0x03,portid=?"
89+
vtd_port_devtlb_1g_fill = "event=0x06,evtype=0x03,portid=?"
90+
91+
VTD SIP events (evtype=0x04)
92+
93+
vtd_sip_iotlb_4k_hit = "event=0x00,evtype=0x04,portid=0xff"
94+
vtd_sip_iotlb_2m_hit = "event=0x01,evtype=0x04,portid=0xff"
95+
vtd_sip_iotlb_1g_hit = "event=0x02,evtype=0x04,portid=0xff"
96+
vtd_sip_slpwc_l3_hit = "event=0x03,evtype=0x04,portid=0xff"
97+
vtd_sip_slpwc_l4_hit = "event=0x04,evtype=0x04,portid=0xff"
98+
vtd_sip_rcc_hit = "event=0x05,evtype=0x04,portid=0xff"
99+
vtd_sip_iotlb_4k_miss = "event=0x06,evtype=0x04,portid=0xff"
100+
vtd_sip_iotlb_2m_miss = "event=0x07,evtype=0x04,portid=0xff"
101+
vtd_sip_iotlb_1g_miss = "event=0x08,evtype=0x04,portid=0xff"
102+
vtd_sip_slpwc_l3_miss = "event=0x09,evtype=0x04,portid=0xff"
103+
vtd_sip_slpwc_l4_miss = "event=0x0a,evtype=0x04,portid=0xff"
104+
vtd_sip_rcc_miss = "event=0x0b,evtype=0x04,portid=0xff"

drivers/fpga/Kconfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ config FPGA_DFL
156156

157157
config FPGA_DFL_FME
158158
tristate "FPGA DFL FME Driver"
159-
depends on FPGA_DFL && HWMON
159+
depends on FPGA_DFL && HWMON && PERF_EVENTS
160160
help
161161
The FPGA Management Engine (FME) is a feature device implemented
162162
under Device Feature List (DFL) framework. Select this option to

drivers/fpga/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ obj-$(CONFIG_FPGA_DFL_FME_REGION) += dfl-fme-region.o
4040
obj-$(CONFIG_FPGA_DFL_AFU) += dfl-afu.o
4141

4242
dfl-fme-objs := dfl-fme-main.o dfl-fme-pr.o dfl-fme-error.o
43+
dfl-fme-objs += dfl-fme-perf.o
4344
dfl-afu-objs := dfl-afu-main.o dfl-afu-region.o dfl-afu-dma-region.o
4445
dfl-afu-objs += dfl-afu-error.o
4546

drivers/fpga/dfl-fme-main.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -579,6 +579,10 @@ static struct dfl_feature_driver fme_feature_drvs[] = {
579579
.id_table = fme_power_mgmt_id_table,
580580
.ops = &fme_power_mgmt_ops,
581581
},
582+
{
583+
.id_table = fme_perf_id_table,
584+
.ops = &fme_perf_ops,
585+
},
582586
{
583587
.ops = NULL,
584588
},

0 commit comments

Comments
 (0)