Re: [PATCH v3 07/11] sched_ext: Add an event, SCX_EV_BYPASS_DISPATCH

From: Tejun Heo
Date: Sun Feb 02 2025 - 12:34:03 EST


Hello,

On Fri, Jan 31, 2025 at 04:09:34PM +0900, Changwoo Min wrote:
...
> @@ -2869,11 +2874,17 @@ static int balance_one(struct rq *rq, struct task_struct *prev)
> }
>
> /* if there already are tasks to run, nothing to do */
> - if (rq->scx.local_dsq.nr)
> + if (rq->scx.local_dsq.nr) {
> + if (scx_rq_bypassing(rq))
> + __scx_add_event(SCX_EV_BYPASS_DISPATCH, 1);
> goto has_tasks;
> + }
>
> - if (consume_global_dsq(rq))
> + if (consume_global_dsq(rq)) {
> + if (scx_rq_bypassing(rq))
> + __scx_add_event(SCX_EV_BYPASS_DISPATCH, 1);

Hmm... Wouldn't it be easier to count it from select_task_rq_scx() and
do_enqueue_task()? The latter already has scx_rq_bypassing() condition and
the former one can easily cache bypassing test result and use that in the
else block.

> @@ -2899,10 +2910,16 @@ static int balance_one(struct rq *rq, struct task_struct *prev)
> rq->scx.flags |= SCX_RQ_BAL_KEEP;
> goto has_tasks;
> }
> - if (rq->scx.local_dsq.nr)
> + if (rq->scx.local_dsq.nr) {
> + if (scx_rq_bypassing(rq))
> + __scx_add_event(SCX_EV_BYPASS_DISPATCH, 1);
> goto has_tasks;
> - if (consume_global_dsq(rq))
> + }
> + if (consume_global_dsq(rq)) {
> + if (scx_rq_bypassing(rq))
> + __scx_add_event(SCX_EV_BYPASS_DISPATCH, 1);
> goto has_tasks;
> + }

The above can happen while bypass mode is being turned on but once on
control doesn't even reach here, right?

Thanks.

--
tejun