Skip to content

Commit 71d0788

Browse files
Changwoo Minhtejun
authored andcommitted
sched_ext: Add trace point to track sched_ext core events
Add tracing support to track sched_ext core events (/sched_ext/sched_ext_event). This may be useful for debugging sched_ext schedulers that trigger a particular event. The trace point can be used as other trace points, so it can be used in, for example, `perf trace` and BPF programs, as follows: ====== $> sudo perf trace -e sched_ext:sched_ext_event --filter 'name == "SCX_EV_ENQ_SLICE_DFL"' ====== ====== struct tp_sched_ext_event { struct trace_entry ent; u32 __data_loc_name; s64 delta; }; SEC("tracepoint/sched_ext/sched_ext_event") int rtp_add_event(struct tp_sched_ext_event *ctx) { char event_name[128]; unsigned short offset = ctx->__data_loc_name & 0xFFFF; bpf_probe_read_str((void *)event_name, 128, (char *)ctx + offset); bpf_printk("name %s delta %lld", event_name, ctx->delta); return 0; } ====== Signed-off-by: Changwoo Min <[email protected]> Acked-by: Andrea Righi <[email protected]> Signed-off-by: Tejun Heo <[email protected]>
1 parent 038730d commit 71d0788

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

include/trace/events/sched_ext.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,25 @@ TRACE_EVENT(sched_ext_dump,
2626
)
2727
);
2828

29+
TRACE_EVENT(sched_ext_event,
30+
TP_PROTO(const char *name, __s64 delta),
31+
TP_ARGS(name, delta),
32+
33+
TP_STRUCT__entry(
34+
__string(name, name)
35+
__field( __s64, delta )
36+
),
37+
38+
TP_fast_assign(
39+
__assign_str(name);
40+
__entry->delta = delta;
41+
),
42+
43+
TP_printk("name %s delta %lld",
44+
__get_str(name), __entry->delta
45+
)
46+
);
47+
2948
#endif /* _TRACE_SCHED_EXT_H */
3049

3150
/* This part must be outside protection */

kernel/sched/ext.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1554,6 +1554,7 @@ static DEFINE_PER_CPU(struct scx_event_stats, event_stats_cpu);
15541554
*/
15551555
#define scx_add_event(name, cnt) do { \
15561556
this_cpu_add(event_stats_cpu.name, cnt); \
1557+
trace_sched_ext_event(#name, cnt); \
15571558
} while(0)
15581559

15591560
/**
@@ -1565,6 +1566,7 @@ static DEFINE_PER_CPU(struct scx_event_stats, event_stats_cpu);
15651566
*/
15661567
#define __scx_add_event(name, cnt) do { \
15671568
__this_cpu_add(event_stats_cpu.name, cnt); \
1569+
trace_sched_ext_event(#name, cnt); \
15681570
} while(0)
15691571

15701572
/**

0 commit comments

Comments
 (0)