mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
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

  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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®