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

From: Changwoo Min
Date: Mon Feb 03 2025 - 10:51:20 EST


Hello,

On 25. 2. 3. 02:33, Tejun Heo wrote:
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.

That makes sense. I will change the code as you suggested.


@@ -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?

You are right. I will clean this up.

Regards,
Changwoo Min