Commit 1e5aa12d authored by Mete Durlu's avatar Mete Durlu Committed by Vasily Gorbik
Browse files

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: default avatarVasily Gorbik <gor@linux.ibm.com>
Co-developed-by: default avatarTobias Huschle <huschle@linux.ibm.com>
Signed-off-by: default avatarTobias Huschle <huschle@linux.ibm.com>
Signed-off-by: default avatarMete Durlu <meted@linux.ibm.com>
Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
parent c0d4ba05
Loading
Loading
Loading
Loading
+58 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Tracepoint header for hiperdispatch
 *
 * Copyright IBM Corp. 2024
 */

#undef TRACE_SYSTEM
#define TRACE_SYSTEM s390

#if !defined(_TRACE_S390_HIPERDISPATCH_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_S390_HIPERDISPATCH_H

#include <linux/tracepoint.h>

#undef TRACE_INCLUDE_PATH
#undef TRACE_INCLUDE_FILE

#define TRACE_INCLUDE_PATH asm/trace
#define TRACE_INCLUDE_FILE hiperdispatch

TRACE_EVENT(s390_hd_work_fn,
	    TP_PROTO(int steal_time_percentage,
		     int entitled_core_count,
		     int highcap_core_count),
	    TP_ARGS(steal_time_percentage,
		    entitled_core_count,
		    highcap_core_count),
	    TP_STRUCT__entry(__field(int, steal_time_percentage)
			     __field(int, entitled_core_count)
			     __field(int, highcap_core_count)),
	    TP_fast_assign(__entry->steal_time_percentage = steal_time_percentage;
			   __entry->entitled_core_count = entitled_core_count;
			   __entry->highcap_core_count = highcap_core_count;),
	    TP_printk("steal: %d entitled_core_count: %d highcap_core_count: %d",
		      __entry->steal_time_percentage,
		      __entry->entitled_core_count,
		      __entry->highcap_core_count)
);

TRACE_EVENT(s390_hd_rebuild_domains,
	    TP_PROTO(int current_highcap_core_count,
		     int new_highcap_core_count),
	    TP_ARGS(current_highcap_core_count,
		    new_highcap_core_count),
	    TP_STRUCT__entry(__field(int, current_highcap_core_count)
			     __field(int, new_highcap_core_count)),
	    TP_fast_assign(__entry->current_highcap_core_count = current_highcap_core_count;
			   __entry->new_highcap_core_count = new_highcap_core_count),
	    TP_printk("change highcap_core_count: %u -> %u",
		      __entry->current_highcap_core_count,
		      __entry->new_highcap_core_count)
);

#endif /* _TRACE_S390_HIPERDISPATCH_H */

/* This part must be outside protection */
#include <trace/define_trace.h>
+5 −0
Original line number Diff line number Diff line
@@ -53,6 +53,9 @@
#include <asm/smp.h>
#include <asm/topology.h>

#define CREATE_TRACE_POINTS
#include <asm/trace/hiperdispatch.h>

#define HD_DELAY_FACTOR			(4)
#define HD_DELAY_INTERVAL		(HZ / 4)
#define HD_STEAL_THRESHOLD		30
@@ -200,9 +203,11 @@ static void hd_capacity_work_fn(struct work_struct *work)
	else
		new_cores = hd_entitled_cores;
	if (hd_high_capacity_cores != new_cores) {
		trace_s390_hd_rebuild_domains(hd_high_capacity_cores, new_cores);
		hd_high_capacity_cores = new_cores;
		topology_schedule_update();
	}
	trace_s390_hd_work_fn(steal_percentage, hd_entitled_cores, hd_high_capacity_cores);
	mutex_unlock(&smp_cpu_state_mutex);
	schedule_delayed_work(&hd_capacity_work, HD_DELAY_INTERVAL);
}