Commit | Line | Data |
---|---|---|
39915b6b GH |
1 | ====================================== |
2 | HNS3 Performance Monitoring Unit (PMU) | |
3 | ====================================== | |
4 | ||
5 | HNS3(HiSilicon network system 3) Performance Monitoring Unit (PMU) is an | |
6 | End Point device to collect performance statistics of HiSilicon SoC NIC. | |
7 | On Hip09, each SICL(Super I/O cluster) has one PMU device. | |
8 | ||
9 | HNS3 PMU supports collection of performance statistics such as bandwidth, | |
10 | latency, packet rate and interrupt rate. | |
11 | ||
12 | Each HNS3 PMU supports 8 hardware events. | |
13 | ||
14 | HNS3 PMU driver | |
15 | =============== | |
16 | ||
17 | The HNS3 PMU driver registers a perf PMU with the name of its sicl id.:: | |
18 | ||
19 | /sys/devices/hns3_pmu_sicl_<sicl_id> | |
20 | ||
21 | PMU driver provides description of available events, filter modes, format, | |
22 | identifier and cpumask in sysfs. | |
23 | ||
24 | The "events" directory describes the event code of all supported events | |
25 | shown in perf list. | |
26 | ||
27 | The "filtermode" directory describes the supported filter modes of each | |
28 | event. | |
29 | ||
30 | The "format" directory describes all formats of the config (events) and | |
31 | config1 (filter options) fields of the perf_event_attr structure. | |
32 | ||
33 | The "identifier" file shows version of PMU hardware device. | |
34 | ||
35 | The "bdf_min" and "bdf_max" files show the supported bdf range of each | |
36 | pmu device. | |
37 | ||
38 | The "hw_clk_freq" file shows the hardware clock frequency of each pmu | |
39 | device. | |
40 | ||
41 | Example usage of checking event code and subevent code:: | |
42 | ||
43 | $# cat /sys/devices/hns3_pmu_sicl_0/events/dly_tx_normal_to_mac_time | |
44 | config=0x00204 | |
45 | $# cat /sys/devices/hns3_pmu_sicl_0/events/dly_tx_normal_to_mac_packet_num | |
46 | config=0x10204 | |
47 | ||
48 | Each performance statistic has a pair of events to get two values to | |
49 | calculate real performance data in userspace. | |
50 | ||
51 | The bits 0~15 of config (here 0x0204) are the true hardware event code. If | |
52 | two events have same value of bits 0~15 of config, that means they are | |
53 | event pair. And the bit 16 of config indicates getting counter 0 or | |
54 | counter 1 of hardware event. | |
55 | ||
dbeb56fe | 56 | After getting two values of event pair in userspace, the formula of |
39915b6b GH |
57 | computation to calculate real performance data is::: |
58 | ||
59 | counter 0 / counter 1 | |
60 | ||
61 | Example usage of checking supported filter mode:: | |
62 | ||
63 | $# cat /sys/devices/hns3_pmu_sicl_0/filtermode/bw_ssu_rpu_byte_num | |
64 | filter mode supported: global/port/port-tc/func/func-queue/ | |
65 | ||
66 | Example usage of perf:: | |
67 | ||
68 | $# perf list | |
69 | hns3_pmu_sicl_0/bw_ssu_rpu_byte_num/ [kernel PMU event] | |
70 | hns3_pmu_sicl_0/bw_ssu_rpu_time/ [kernel PMU event] | |
71 | ------------------------------------------ | |
72 | ||
73 | $# perf stat -g -e hns3_pmu_sicl_0/bw_ssu_rpu_byte_num,global=1/ -e hns3_pmu_sicl_0/bw_ssu_rpu_time,global=1/ -I 1000 | |
74 | or | |
75 | $# perf stat -g -e hns3_pmu_sicl_0/config=0x00002,global=1/ -e hns3_pmu_sicl_0/config=0x10002,global=1/ -I 1000 | |
76 | ||
77 | ||
78 | Filter modes | |
79 | -------------- | |
80 | ||
81 | 1. global mode | |
82 | PMU collect performance statistics for all HNS3 PCIe functions of IO DIE. | |
83 | Set the "global" filter option to 1 will enable this mode. | |
84 | Example usage of perf:: | |
85 | ||
86 | $# perf stat -a -e hns3_pmu_sicl_0/config=0x1020F,global=1/ -I 1000 | |
87 | ||
88 | 2. port mode | |
89 | PMU collect performance statistic of one whole physical port. The port id | |
90 | is same as mac id. The "tc" filter option must be set to 0xF in this mode, | |
91 | here tc stands for traffic class. | |
92 | ||
93 | Example usage of perf:: | |
94 | ||
95 | $# perf stat -a -e hns3_pmu_sicl_0/config=0x1020F,port=0,tc=0xF/ -I 1000 | |
96 | ||
97 | 3. port-tc mode | |
98 | PMU collect performance statistic of one tc of physical port. The port id | |
99 | is same as mac id. The "tc" filter option must be set to 0 ~ 7 in this | |
100 | mode. | |
101 | Example usage of perf:: | |
102 | ||
103 | $# perf stat -a -e hns3_pmu_sicl_0/config=0x1020F,port=0,tc=0/ -I 1000 | |
104 | ||
105 | 4. func mode | |
106 | PMU collect performance statistic of one PF/VF. The function id is BDF of | |
107 | PF/VF, its conversion formula:: | |
108 | ||
109 | func = (bus << 8) + (device << 3) + (function) | |
110 | ||
111 | for example: | |
112 | BDF func | |
113 | 35:00.0 0x3500 | |
114 | 35:00.1 0x3501 | |
115 | 35:01.0 0x3508 | |
116 | ||
117 | In this mode, the "queue" filter option must be set to 0xFFFF. | |
118 | Example usage of perf:: | |
119 | ||
120 | $# perf stat -a -e hns3_pmu_sicl_0/config=0x1020F,bdf=0x3500,queue=0xFFFF/ -I 1000 | |
121 | ||
122 | 5. func-queue mode | |
123 | PMU collect performance statistic of one queue of PF/VF. The function id | |
124 | is BDF of PF/VF, the "queue" filter option must be set to the exact queue | |
125 | id of function. | |
126 | Example usage of perf:: | |
127 | ||
128 | $# perf stat -a -e hns3_pmu_sicl_0/config=0x1020F,bdf=0x3500,queue=0/ -I 1000 | |
129 | ||
130 | 6. func-intr mode | |
131 | PMU collect performance statistic of one interrupt of PF/VF. The function | |
132 | id is BDF of PF/VF, the "intr" filter option must be set to the exact | |
133 | interrupt id of function. | |
134 | Example usage of perf:: | |
135 | ||
136 | $# perf stat -a -e hns3_pmu_sicl_0/config=0x00301,bdf=0x3500,intr=0/ -I 1000 |