From: Tejun Heo Date: Sun, 9 Feb 2025 06:39:11 +0000 (-1000) Subject: sched_ext: Add SCX_EV_ENQ_SKIP_MIGRATION_DISABLED X-Git-Tag: v6.15-rc1~227^2~27 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eace54dff05157ed2629848111366b836dcf3ad9;p=thirdparty%2Fkernel%2Fstable.git sched_ext: Add SCX_EV_ENQ_SKIP_MIGRATION_DISABLED Count the number of times a migration disabled task is automatically dispatched to its local DSQ. Signed-off-by: Tejun Heo Acked-by: Changwoo Min --- diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c index 310db8484b776..b2378e29f45aa 100644 --- a/kernel/sched/ext.c +++ b/kernel/sched/ext.c @@ -1483,6 +1483,13 @@ struct scx_event_stats { */ u64 SCX_EV_ENQ_SKIP_EXITING; + /* + * If SCX_OPS_ENQ_MIGRATION_DISABLED is not set, the number of times a + * migration disabled task skips ops.enqueue() and is dispatched to its + * local DSQ. + */ + u64 SCX_EV_ENQ_SKIP_MIGRATION_DISABLED; + /* * The total number of tasks enqueued (or pick_task-ed) with a * default time slice (SCX_SLICE_DFL). @@ -2119,8 +2126,10 @@ static void do_enqueue_task(struct rq *rq, struct task_struct *p, u64 enq_flags, /* see %SCX_OPS_ENQ_MIGRATION_DISABLED */ if (!static_branch_unlikely(&scx_ops_enq_migration_disabled) && - is_migration_disabled(p)) + is_migration_disabled(p)) { + __scx_add_event(SCX_EV_ENQ_SKIP_MIGRATION_DISABLED, 1); goto local; + } if (!SCX_HAS_OP(enqueue)) goto global; @@ -5067,6 +5076,7 @@ static void scx_dump_state(struct scx_exit_info *ei, size_t dump_len) scx_dump_event(s, &events, SCX_EV_DISPATCH_LOCAL_DSQ_OFFLINE); scx_dump_event(s, &events, SCX_EV_DISPATCH_KEEP_LAST); scx_dump_event(s, &events, SCX_EV_ENQ_SKIP_EXITING); + scx_dump_event(s, &events, SCX_EV_ENQ_SKIP_MIGRATION_DISABLED); scx_dump_event(s, &events, SCX_EV_ENQ_SLICE_DFL); scx_dump_event(s, &events, SCX_EV_BYPASS_DURATION); scx_dump_event(s, &events, SCX_EV_BYPASS_DISPATCH); @@ -7210,6 +7220,7 @@ __bpf_kfunc void scx_bpf_events(struct scx_event_stats *events, scx_agg_event(&e_sys, e_cpu, SCX_EV_DISPATCH_LOCAL_DSQ_OFFLINE); scx_agg_event(&e_sys, e_cpu, SCX_EV_DISPATCH_KEEP_LAST); scx_agg_event(&e_sys, e_cpu, SCX_EV_ENQ_SKIP_EXITING); + scx_agg_event(&e_sys, e_cpu, SCX_EV_ENQ_SKIP_MIGRATION_DISABLED); scx_agg_event(&e_sys, e_cpu, SCX_EV_ENQ_SLICE_DFL); scx_agg_event(&e_sys, e_cpu, SCX_EV_BYPASS_DURATION); scx_agg_event(&e_sys, e_cpu, SCX_EV_BYPASS_DISPATCH);