From: Tejun Heo <tj@kernel.org>
To: John Stultz <jstultz@google.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
David Stevens <stevensd@google.com>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
K Prateek Nayak <kprateek.nayak@amd.com>,
Thomas Gleixner <tglx@linutronix.de>,
Juri Lelli <juri.lelli@redhat.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
Valentin Schneider <vschneid@redhat.com>,
Suleiman Souhlal <suleiman@google.com>,
Andrea Righi <arighi@nvidia.com>, Metin Kaya <Metin.Kaya@arm.com>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Steven Rostedt <rostedt@goodmis.org>,
Zimuzo Ezeozue <zezeozue@google.com>,
Waiman Long <longman@redhat.com>,
Boqun Feng <boqun.feng@gmail.com>,
"Paul E. McKenney" <paulmck@kernel.org>,
Joel Fernandes <joelagnelf@nvidia.com>,
Qais Yousef <qyousef@layalina.io>,
Xuewen Yan <xuewen.yan94@gmail.com>,
kuyo chang <kuyo.chang@mediatek.com>, hupu <hupu.gm@gmail.com>,
Zhan Xusheng <zhanxusheng@xiaomi.com>,
"zhidao su (Xiaomi)" <soolaugust@gmail.com>,
Hui Su <sh_def@163.com>,
"Shubhang Kaushik (Ampere)" <sh@gentwo.org>,
kernel-team@android.com, Johannes Weiner <hannes@cmpxchg.org>,
Suren Baghdasaryan <surenb@google.com>
Subject: Re: [PATCH v33 1/7] sched/psi: Preserve sleep-persistent PSI flags on off-CPU sleeping dequeues
Date: Thu, 29 Oct 2026 12:02:19 -1000 [thread overview]
Message-ID: <cc76808cadf384b5ce9441f21b65a9e9@kernel.org> (raw)
In-Reply-To: <20261023220431.1106611-2-jstultz@google.com>
Hello, John.
This patch also fixes a trigger without proxy execution, through
switching_from_fair(). A fair task sleeps in iowait and is delay-dequeued.
sched_setscheduler() then moves it to SCHED_FIFO, and switching_from_fair()
dequeues it with DEQUEUE_SLEEP | DEQUEUE_DELAYED. TSK_ONCPU is clear, so
since c2ae8b0df2d1 ("sched/core: Fix psi_dequeue() for Proxy Execution")
psi_dequeue() clears all of its psi flags, TSK_IOWAIT included. The wakeup's
psi_enqueue() trips the check:
psi: inconsistent task state! task=1318:python3 cpu=3 psi_flags=0 clear=1 set=4
Tested on mainline 4dd16e31135e with CONFIG_SCHED_PROXY_EXEC disabled, each
run a fresh boot. Without the patch, the reproducer below hit the warning on
10 of 10 boots within about a second. With only 1/7 applied, 0 of 10
sixty-second boots hit it, while switching_from_fair() dequeued a delayed
iowait task about 3,500 to 16,000 times per boot.
Tested-by: Tejun Heo <tj@kernel.org>
The reproducer needs root and a block device for O_DIRECT reads, and takes
[secs [cpu [blockdev]]].
#!/bin/bash
# psi-delayed.sh [secs [cpu [blockdev]]]
SECS=${1:-60} CPU=${2:-3} DEV=${3:-/dev/sda}
PY=$(mktemp --suffix=.py)
trap 'kill -9 $(jobs -p) 2>/dev/null; rm -f "$PY"' EXIT
cat > "$PY" <<'EOF'
import mmap, os, random, sys, time
if sys.argv[1] == "io":
# spin ~3ms so the entity runs past its share, then a 4K O_DIRECT read
fd = os.open(sys.argv[2], os.O_RDONLY | os.O_DIRECT)
nblk = os.lseek(fd, 0, os.SEEK_END) // 4096
buf = mmap.mmap(-1, 4096)
while True:
t = time.perf_counter() + 0.003
while time.perf_counter() < t:
pass
os.preadv(fd, [buf], random.randrange(nblk) * 4096)
else:
# flip the I/O task between SCHED_FIFO and SCHED_OTHER
pid, end = int(sys.argv[2]), time.time() + float(sys.argv[3])
while time.time() < end:
os.sched_setscheduler(pid, os.SCHED_FIFO, os.sched_param(1))
os.sched_setscheduler(pid, os.SCHED_OTHER, os.sched_param(0))
EOF
for i in 1 2; do taskset -c "$CPU" bash -c 'while :; do :; done' & done
taskset -c "$CPU" python3 -I "$PY" io "$DEV" &
IOPID=$!
sleep 1
taskset -c $(( (CPU + 2) % $(nproc) )) python3 -I "$PY" switch "$IOPID" "$SECS"
echo "io task pid $IOPID"
dmesg | grep 'psi: inconsistent' || echo "not reproduced"
Thanks.
--
tejun
next prev parent reply other threads:[~2026-10-29 22:02 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-23 22:04 [PATCH v33 0/7] Sleeping Owner Handling for Proxy Execution (v33) John Stultz
2026-10-23 22:04 ` [PATCH v33 1/7] sched/psi: Preserve sleep-persistent PSI flags on off-CPU sleeping dequeues John Stultz
2026-10-24 11:44 ` Peter Zijlstra
2026-10-26 5:00 ` K Prateek Nayak
2026-10-26 4:32 ` K Prateek Nayak
2026-10-26 5:16 ` Zhan Xusheng
2026-10-29 22:02 ` Tejun Heo [this message]
2026-10-23 22:04 ` [PATCH v33 2/7] sched/core: Use the scheduling context for remote ticks John Stultz
2026-10-24 13:44 ` Kayra Cizmeci
2026-10-23 22:04 ` [PATCH v33 3/7] sched/core: Activate blocked donor when no owner is found John Stultz
2026-10-24 8:33 ` Andrea Righi
2026-10-26 3:02 ` K Prateek Nayak
2026-10-23 22:04 ` [PATCH v33 4/7] sched/proxy: Set TASK_RUNNING when shortcuting return migration John Stultz
2026-10-24 8:36 ` Andrea Righi
2026-10-26 3:09 ` K Prateek Nayak
2026-10-23 22:04 ` [PATCH v33 5/7] sched/proxy: Break cyclic proxy chains by deactivating blocked tasks John Stultz
2026-10-24 21:19 ` Kayra Cizmeci
2026-10-23 22:04 ` [PATCH v33 6/7] sched/proxy: Detect cycles in proxy walks earlier John Stultz
2026-10-24 15:34 ` Kayra Cizmeci
2026-10-23 22:04 ` [PATCH v33 7/7] sched/proxy: Add deactivated (sleeping) owner handling to find_proxy_task() John Stultz
2026-10-24 9:07 ` Andrea Righi
2026-10-26 4:26 ` K Prateek Nayak
2026-10-27 16:22 ` Juri Lelli
2026-10-28 3:36 ` K Prateek Nayak
2026-10-28 10:01 ` Juri Lelli
2026-10-28 10:11 ` K Prateek Nayak
2026-10-28 10:36 ` Juri Lelli
2026-10-29 3:27 ` K Prateek Nayak
2026-10-26 7:40 ` K Prateek Nayak
2026-10-26 19:59 ` Kayra Cizmeci
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=cc76808cadf384b5ce9441f21b65a9e9@kernel.org \
--to=tj@kernel.org \
--cc=Metin.Kaya@arm.com \
--cc=arighi@nvidia.com \
--cc=boqun.feng@gmail.com \
--cc=dietmar.eggemann@arm.com \
--cc=hannes@cmpxchg.org \
--cc=hupu.gm@gmail.com \
--cc=joelagnelf@nvidia.com \
--cc=jstultz@google.com \
--cc=juri.lelli@redhat.com \
--cc=kernel-team@android.com \
--cc=kprateek.nayak@amd.com \
--cc=kuyo.chang@mediatek.com \
--cc=linux-kernel@vger.kernel.org \
--cc=longman@redhat.com \
--cc=mingo@redhat.com \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=qyousef@layalina.io \
--cc=rostedt@goodmis.org \
--cc=sh@gentwo.org \
--cc=sh_def@163.com \
--cc=soolaugust@gmail.com \
--cc=stevensd@google.com \
--cc=suleiman@google.com \
--cc=surenb@google.com \
--cc=tglx@linutronix.de \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.com \
--cc=xuewen.yan94@gmail.com \
--cc=zezeozue@google.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.