From: Tao Cui <cui.tao@linux.dev>
To: Johannes Weiner <hannes@cmpxchg.org>,
Suren Baghdasaryan <surenb@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
linux-kernel@vger.kernel.org, Tao Cui <cuitao@kylinos.cn>,
cui.tao@linux.dev
Subject: [PATCH 0/2] sched/psi: fix trigger window arithmetic
Date: Fri, 24 Jul 2026 12:11:44 +0800 [thread overview]
Message-ID: <20260724041146.510027-1-cui.tao@linux.dev> (raw)
From: Tao Cui <cuitao@kylinos.cn>
Two narrow numeric bugs in the PSI trigger-window arithmetic, both from
the original psi monitor (0e94682b73bf) and both only visible for trigger
windows larger than ~4.29s (UINT32_MAX ns).
1/2 window_update() estimates the stall growth inside a partially-elapsed
window as `prev_growth * remaining / size`. `remaining` is a u32 but
win->size is a u64 and may be up to 10s (1e10 ns), so for large windows
it truncates and the interpolation collapses; `prev_growth * remaining`
can also overflow u64. Use a u64 `remaining` and mul_u64_u64_div_u64().
2/2 psi_trigger_create() scales window/threshold us->ns with
`* NSEC_PER_USEC`. NSEC_PER_USEC is `long`, so on 32-bit the multiply
wraps for multi-second windows (a 10s window is stored as ~1.41s).
Cast to u64 first.
Neither path is the scheduler hot path (update_triggers() runs at
trigger-evaluation rate), and small-window triggers are numerically
unchanged.
Demo of 1/2 -- 10s window, previous window was 100% stall, polled each
1s, trigger "some 5s 10s". Estimated growth (seconds) inside the window:
elapsed current(u32) fixed(u64)
1 1 10
2 2 10
3 3 10
4 5 10
With the current code the trigger waits for the actual stall to reach the
5s threshold (~4s in) instead of firing once the run-rate predicts it
(~1s in): a ~3s delay on the first window of a stall.
Tao Cui (2):
sched/psi: fix trigger window growth interpolation for large windows
sched/psi: convert trigger window/threshold to ns in u64
kernel/sched/psi.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
--
2.43.0
next reply other threads:[~2026-07-24 4:12 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-24 4:11 Tao Cui [this message]
2026-07-24 4:11 ` [PATCH 1/2] sched/psi: fix trigger window growth interpolation for large windows Tao Cui
2026-07-24 4:11 ` [PATCH 2/2] sched/psi: convert trigger window/threshold to ns in u64 Tao Cui
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=20260724041146.510027-1-cui.tao@linux.dev \
--to=cui.tao@linux.dev \
--cc=cuitao@kylinos.cn \
--cc=hannes@cmpxchg.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=surenb@google.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.