mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 12:43:29 +02:00
trace,smp: Add tracepoints around remotelly called functions
The recently added ipi_send_{cpu,cpumask} tracepoints allow finding sources of IPIs targeting CPUs running latency-sensitive applications. For NOHZ_FULL CPUs, all IPIs are interference, and those tracepoints are sufficient to find them and work on getting rid of them. In some setups however, not *all* IPIs are to be suppressed, but long-running IPI callbacks can still be problematic. Add a pair of tracepoints to mark the start and end of processing a CSD IPI callback, similar to what exists for softirq, workqueue or timer callbacks. Signed-off-by: Leonardo Bras <leobras@redhat.com> Tested-and-reviewed-by: Valentin Schneider <vschneid@redhat.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lore.kernel.org/r/20230615065944.188876-5-leobras@redhat.com
This commit is contained in:
committed by
Peter Zijlstra
parent
60be49bdf1
commit
949fa3f11c
45
include/trace/events/csd.h
Normal file
45
include/trace/events/csd.h
Normal file
@@ -0,0 +1,45 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#undef TRACE_SYSTEM
|
||||
#define TRACE_SYSTEM csd
|
||||
|
||||
#if !defined(_TRACE_CSD_H) || defined(TRACE_HEADER_MULTI_READ)
|
||||
#define _TRACE_CSD_H
|
||||
|
||||
#include <linux/tracepoint.h>
|
||||
|
||||
/*
|
||||
* Tracepoints for a function which is called as an effect of smp_call_function.*
|
||||
*/
|
||||
DECLARE_EVENT_CLASS(csd_function,
|
||||
|
||||
TP_PROTO(smp_call_func_t func, struct __call_single_data *csd),
|
||||
|
||||
TP_ARGS(func, csd),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(void *, func)
|
||||
__field(void *, csd)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->func = func;
|
||||
__entry->csd = csd;
|
||||
),
|
||||
|
||||
TP_printk("func=%ps, csd=%p", __entry->func, __entry->csd)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(csd_function, csd_function_entry,
|
||||
TP_PROTO(smp_call_func_t func, struct __call_single_data *csd),
|
||||
TP_ARGS(func, csd)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(csd_function, csd_function_exit,
|
||||
TP_PROTO(smp_call_func_t func, struct __call_single_data *csd),
|
||||
TP_ARGS(func, csd)
|
||||
);
|
||||
|
||||
#endif /* _TRACE_CSD_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
#include <trace/define_trace.h>
|
Reference in New Issue
Block a user