Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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 <gor@linux.ibm.com>
Co-developed-by: Tobias Huschle <huschle@linux.ibm.com>
Signed-off-by: Tobias Huschle <huschle@linux.ibm.com>
Signed-off-by: Mete Durlu <meted@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>

authored by

Mete Durlu and committed by
Vasily Gorbik
1e5aa12d c0d4ba05

+63
+58
arch/s390/include/asm/trace/hiperdispatch.h
··· 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>
+5
arch/s390/kernel/hiperdispatch.c
··· 53 53 #include <asm/smp.h> 54 54 #include <asm/topology.h> 55 55 56 + #define CREATE_TRACE_POINTS 57 + #include <asm/trace/hiperdispatch.h> 58 + 56 59 #define HD_DELAY_FACTOR (4) 57 60 #define HD_DELAY_INTERVAL (HZ / 4) 58 61 #define HD_STEAL_THRESHOLD 30 ··· 203 200 else 204 201 new_cores = hd_entitled_cores; 205 202 if (hd_high_capacity_cores != new_cores) { 203 + trace_s390_hd_rebuild_domains(hd_high_capacity_cores, new_cores); 206 204 hd_high_capacity_cores = new_cores; 207 205 topology_schedule_update(); 208 206 } 207 + trace_s390_hd_work_fn(steal_percentage, hd_entitled_cores, hd_high_capacity_cores); 209 208 mutex_unlock(&smp_cpu_state_mutex); 210 209 schedule_delayed_work(&hd_capacity_work, HD_DELAY_INTERVAL); 211 210 }