[PATCH v4 0/7] sched_ext: Implement core event counters
From: Changwoo Min
Date: Tue Feb 04 2025 - 00:21:28 EST
The sched_ext core often has to override the BPF scheduler decisions,
and some events could be interesting but not easily visible.
This patchset aims to address such a problem in the following manner:
- Introduce an infrastructure to collect such events in a scalable and
extensible way and to expose the collected events to the BPF scheduler
in a compatible way.
- Define seven events to be collected.
- Modify scx schedulers to demonstrate the usage of the new BPF APIs.
ChangeLog: v3 -> v4
- Do not include the already applied patches (1-4) from the patchset.
- Add a missing scx_agg_event() for SCX_EV_ENQ_SKIP_EXITINGk.
- Move SCX_EV_BYPASS_DISPATCH loggig to select_task_rq_scx() and
do_enqueue_task().
- Move scx_bypass_timestamp inside the scx_ops_bypass function
(renamed to bypass_timestamp).
ChangeLog: v2 -> v3
- Rename scx_bpf_event_stats() to scx_bpf_events().
- Add a prefix SCX_EV_ to all event names.
- Change the implementation SCX_EV_SELECT_CPU_FALLBACK such that
record the selected cpu (p->scx.selected_cpu) in
select_task_rq_scx() and compare it in enqueue_task_scx() to
reliably count events.
- Change the implementation of SCX_EV_BYPASS_DISPATCH such that log
the event where the condition is initially detected.
- Modify scx_qmap to print the core event counter every second.
- Remove unnecessary white space in patch 6.
ChangeLog: v1 -> v2
- Rename scx_event_stat and scx_bpf_event_stat() to scx_event_stats and
scx_bpf_event_stats().
- Rename event names following the convention of $COMPONENT_$EVENT.
- Rename event_stats to event_stats_cpu.
- Drop the enum scx_event_kind and related macros.
- Revise scx_add_event() to use this_cpu_add().
- Add __scx_add_event() to use __this_cpu_add().
- Move the event counter resetting code to the loading of a BPF scheduler.
- The bypass-related event is further categorized into three events:
BYPASS_ACTIVATE, BYPASS_DISPATCH, and BYPASS_DURATION.
- Revise SELECT_CPU_FALLBACK to capture the case of the chosen CPU is not
allowed.
- Move is_cpu_allowed() from core.c to sched.h to use in the
SELECT_CPU_FALLBACK code.
Changwoo Min (7):
sched_ext: Add an event, SCX_EV_ENQ_SKIP_EXITING
sched_ext: Add an event, SCX_EV_BYPASS_ACTIVATE
sched_ext: Add an event, SCX_EV_BYPASS_DISPATCH
sched_ext: Add an event, SCX_EV_BYPASS_DURATION
sched_ext: Add scx_bpf_events() and scx_read_event() for BPF
schedulers
sched_ext: Print core event count in scx_central scheduler
sched_ext: Print core event count in scx_qmap scheduler
kernel/sched/ext.c | 51 ++++++++++++++++++++++--
tools/sched_ext/include/scx/common.bpf.h | 4 ++
tools/sched_ext/scx_central.bpf.c | 21 ++++++++++
tools/sched_ext/scx_qmap.bpf.c | 19 +++++++++
4 files changed, 92 insertions(+), 3 deletions(-)
--
2.48.1