From: Zhan Xusheng <zhanxusheng1024@gmail.com>
To: sh@gentwo.org
Cc: mingo@redhat.com, peterz@infradead.org, juri.lelli@redhat.com,
vincent.guittot@linaro.org, dietmar.eggemann@arm.com,
rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de,
vschneid@redhat.com, kprateek.nayak@amd.com,
shubhang@os.amperecomputing.com, cl@gentwo.org,
linux-kernel@vger.kernel.org, zhanxusheng@xiaomi.com
Subject: Re: [PATCH] sched/fair: Restart hrtick after same-task repicks
Date: Wed, 26 Aug 2026 12:00:37 +0800 [thread overview]
Message-ID: <20260826040037.201697-1-zhanxusheng1024@gmail.com> (raw)
In-Reply-To: <20260813-sched-fair-hrtick-restart-v1-1-4230d1e18fbb@gentwo.org>
From: Zhan Xusheng <zhanxusheng@xiaomi.com>
On Thu, 13 Aug 2026 14:23:48 -0700, Shubhang Kaushik (Ampere) wrote:
> + rq->hrtick_rearm_fair = hrtick_enabled_fair(rq) &&
> + rq->cfs.h_nr_runnable > 1 &&
> + rq->cfs.h_nr_runnable == rq->cfs.h_nr_queued;
The last term switches the fix off whenever anything on the rq sits in
delayed dequeue. set_delayed() decrements h_nr_runnable and leaves
h_nr_queued alone (kernel/sched/fair.c:6398), clear_delayed() puts it
back (6418), so the two differ exactly while a delay-dequeued entity is
present. With DELAY_DEQUEUE that is routine, and it says nothing about
whether the running task still needs its slice bounded.
Your test cannot show that either way: two CPU-bound tasks pinned to one
CPU never sleep, so nothing is ever delay-dequeued there and the term is
true for the whole run. Adding a third task that sleeps in a loop should
bring the missed hrtick back while the term is false.
If the intent is only to skip rqs whose other queued entities are not
competing for the CPU, h_nr_runnable > 1 already says that by itself.
> +static inline void hrtick_rearm_fair(struct rq *rq, struct task_struct *p)
> +{
> + if (rq->hrtick_rearm_fair)
> + __hrtick_rearm_fair(rq, p);
> +}
What does the rq field buy? __hrtick_rearm_fair() already tests
hrtick_enabled_fair(), hrtick_active() and the class, and a same-task
repick that finds no hrtick armed wants one regardless of what triggered
the repick. If there is a same-task repick that must not arm one, the
changelog is the place to name it.
Last one is only a question. entity_tick() -> update_curr() ->
update_deadline() has already pushed se->deadline by a slice before
task_tick_fair() reaches the queued branch, so hrtick_start_fair() would
compute a valid delay if called right there, with no new field and no
change to put_prev_set_next_task(). The difference I can see is that the
tick callback runs with rq->hrtick_sched == 0, so hrtick_start() would
program the hrtimer immediately from inside its own callback instead of
leaving it to hrtick_schedule_exit(). Is that what moved you to the pick
side?
Thanks,
Zhan Xusheng
next prev parent reply other threads:[~2026-08-26 4:00 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-13 21:23 [PATCH] sched/fair: Restart hrtick after same-task repicks Shubhang Kaushik (Ampere)
2026-08-26 1:13 ` Shubhang
2026-08-26 4:00 ` Zhan Xusheng [this message]
-- strict thread matches above, loose matches on Subject: below --
2026-08-24 18:26 kernel test robot
2026-08-24 19:35 kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260826040037.201697-1-zhanxusheng1024@gmail.com \
--to=zhanxusheng1024@gmail.com \
--cc=bsegall@google.com \
--cc=cl@gentwo.org \
--cc=dietmar.eggemann@arm.com \
--cc=juri.lelli@redhat.com \
--cc=kprateek.nayak@amd.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mgorman@suse.de \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=sh@gentwo.org \
--cc=shubhang@os.amperecomputing.com \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.com \
--cc=zhanxusheng@xiaomi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.