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?