Skip to content

Commit 1e5aa12

Browse files
NickJackolsonVasily Gorbik
authored andcommitted
s390/hiperdispatch: Add trace events
Add trace events to debug hiperdispatch behavior and track domain rebuilding. Two events provide information about the decision making of hiperdispatch and the adjustments made. Acked-by: Vasily Gorbik <[email protected]> Co-developed-by: Tobias Huschle <[email protected]> Signed-off-by: Tobias Huschle <[email protected]> Signed-off-by: Mete Durlu <[email protected]> Signed-off-by: Vasily Gorbik <[email protected]>
1 parent c0d4ba0 commit 1e5aa12

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/* SPDX-License-Identifier: GPL-2.0 */
2+
/*
3+
* Tracepoint header for hiperdispatch
4+
*
5+
* Copyright IBM Corp. 2024
6+
*/
7+
8+
#undef TRACE_SYSTEM
9+
#define TRACE_SYSTEM s390
10+
11+
#if !defined(_TRACE_S390_HIPERDISPATCH_H) || defined(TRACE_HEADER_MULTI_READ)
12+
#define _TRACE_S390_HIPERDISPATCH_H
13+
14+
#include <linux/tracepoint.h>
15+
16+
#undef TRACE_INCLUDE_PATH
17+
#undef TRACE_INCLUDE_FILE
18+
19+
#define TRACE_INCLUDE_PATH asm/trace
20+
#define TRACE_INCLUDE_FILE hiperdispatch
21+
22+
TRACE_EVENT(s390_hd_work_fn,
23+
TP_PROTO(int steal_time_percentage,
24+
int entitled_core_count,
25+
int highcap_core_count),
26+
TP_ARGS(steal_time_percentage,
27+
entitled_core_count,
28+
highcap_core_count),
29+
TP_STRUCT__entry(__field(int, steal_time_percentage)
30+
__field(int, entitled_core_count)
31+
__field(int, highcap_core_count)),
32+
TP_fast_assign(__entry->steal_time_percentage = steal_time_percentage;
33+
__entry->entitled_core_count = entitled_core_count;
34+
__entry->highcap_core_count = highcap_core_count;),
35+
TP_printk("steal: %d entitled_core_count: %d highcap_core_count: %d",
36+
__entry->steal_time_percentage,
37+
__entry->entitled_core_count,
38+
__entry->highcap_core_count)
39+
);
40+
41+
TRACE_EVENT(s390_hd_rebuild_domains,
42+
TP_PROTO(int current_highcap_core_count,
43+
int new_highcap_core_count),
44+
TP_ARGS(current_highcap_core_count,
45+
new_highcap_core_count),
46+
TP_STRUCT__entry(__field(int, current_highcap_core_count)
47+
__field(int, new_highcap_core_count)),
48+
TP_fast_assign(__entry->current_highcap_core_count = current_highcap_core_count;
49+
__entry->new_highcap_core_count = new_highcap_core_count),
50+
TP_printk("change highcap_core_count: %u -> %u",
51+
__entry->current_highcap_core_count,
52+
__entry->new_highcap_core_count)
53+
);
54+
55+
#endif /* _TRACE_S390_HIPERDISPATCH_H */
56+
57+
/* This part must be outside protection */
58+
#include <trace/define_trace.h>

arch/s390/kernel/hiperdispatch.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@
5353
#include <asm/smp.h>
5454
#include <asm/topology.h>
5555

56+
#define CREATE_TRACE_POINTS
57+
#include <asm/trace/hiperdispatch.h>
58+
5659
#define HD_DELAY_FACTOR (4)
5760
#define HD_DELAY_INTERVAL (HZ / 4)
5861
#define HD_STEAL_THRESHOLD 30
@@ -200,9 +203,11 @@ static void hd_capacity_work_fn(struct work_struct *work)
200203
else
201204
new_cores = hd_entitled_cores;
202205
if (hd_high_capacity_cores != new_cores) {
206+
trace_s390_hd_rebuild_domains(hd_high_capacity_cores, new_cores);
203207
hd_high_capacity_cores = new_cores;
204208
topology_schedule_update();
205209
}
210+
trace_s390_hd_work_fn(steal_percentage, hd_entitled_cores, hd_high_capacity_cores);
206211
mutex_unlock(&smp_cpu_state_mutex);
207212
schedule_delayed_work(&hd_capacity_work, HD_DELAY_INTERVAL);
208213
}

0 commit comments

Comments
 (0)