From: Pintu Kumar Agarwal <pintu.agarwal@oss.qualcomm.com>
To: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org,
hannes@cmpxchg.org, surenb@google.com, rostedt@goodmis.org,
mhiramat@kernel.org, peterz@infradead.org,
mathieu.desnoyers@efficios.com, mingo@redhat.com,
juri.lelli@redhat.com, vincent.guittot@linaro.org,
dietmar.eggemann@arm.com, bsegall@google.com, mgorman@suse.de,
vschneid@redhat.com, kprateek.nayak@amd.com,
pintu.agarwal@oss.qualcomm.com, pintu.ping@gmail.com,
nathan@kernel.org, ojeda@kernel.org, nsc@kernel.org,
gary@garyguo.net, tglx@kernel.org,
thomas.weissschuh@linutronix.de, aliceryhl@google.com,
dianders@chromium.org, linux.amoon@gmail.com,
rdunlap@infradead.org, akpm@linux-foundation.org,
shuah@kernel.org
Subject: [RFC PATCH 0/1] psi: Introduce in-kernel PSI auto monitor feature
Date: Thu, 2 Jul 2026 22:46:05 +0530 [thread overview]
Message-ID: <20260702171606.527077-1-pintu.agarwal@oss.qualcomm.com> (raw)
Hi all,
This RFC introduces an in-kernel PSI auto monitor aimed at improving
root-cause visibility for resource pressure events in Linux systems.
Motivation:
PSI already provides an excellent mechanism to detect CPU, memory and
I/O pressure and includes trigger-based notifications via pollable
interfaces. However, it deliberately avoids attributing pressure to
individual tasks.
In real-world systems, this creates a gap: when a PSI trigger fires,
users still need to determine *which tasks caused the stall* by combining
multiple tools (top, meminfo, vmstat, perf, tracing, etc.), often after
the event has already passed.
This process becomes particularly difficult during:
- transient bursts of pressure
- system boot or early initialization before user space
- PREEMPT_RT or latency-sensitive workloads
- heavily loaded embedded systems where user space is delayed
- small resource-constraints minimal system
- production system where most debugging interface are disabled
Proposal:
This patch introduces an optional in-kernel PSI auto monitor that:
- periodically samples PSI signals
- detects threshold breaches
- captures top contributing tasks at that moment
- emits trace events and kernel logs for analysis
The design goal is **low-latency attribution at the source of truth**,
without relying on user-space daemons or polling loops.
Why in-kernel?
While similar logic can be implemented in user space, there are inherent
limitations:
- scheduling delays under high pressure
- risk of missing short-lived spikes
- dependency on continuous polling or daemons
- difficulty deploying in early boot or minimal environments
In contrast, the in-kernel approach:
- observes PSI signals without scheduling latency
- captures contributors exactly at threshold breach
- works during early boot and degraded system states
- avoids duplicating logic across multiple user-space tools
- easy configurable even in runtime
- captures all sorts of information during same timestamp
Design Highlights:
- Does not modify PSI fast paths
- Optional (CONFIG_PSI_AUTO_MONITOR)
- Runtime configurable thresholds and interval
- Uses existing kernel accounting (task runtime, RSS, I/O stats)
- Provides structured tracepoints for post-processing
- Lightweight and intended for diagnostic use
- Idea is similar to, when OOM occurs dump contending tasks
Reviews and Assistance:
The core idea is mine.
However, I have taken few assistance from AI for review and enhancement.
I have done extensive review and suggestion using ChatGPT and Copilot.
The commit message and this cover letter were also prepared by Copilot.
I have done self-review and corrective actions accordingly.
Experimental Validation:
The feature has been evaluated on multiple ARM64 platforms (Cortex-A53,
A55) across different kernels and storage setups.
Extensive experiments has been carried out with multiple workloads.
Some tools and logs are shared here:
https://github.com/pintuk/KERNEL/tree/master/PSI_WORK
Test scenarios include:
- CPU/memory/IO stress workloads both on eMMC and NAND
- system boot tracing (no external tools)
- mixed workloads (stress-ng, workqueues, user/kernel threads, processes)
- PREEMPT_RT cyclictest correlation with real workloads
Results show:
- consistent identification of top resource contributors
- improved root-cause visibility compared to user-space-only methods
- ability to capture transient hotspots during boot and runtime
- correlation of latency spikes with system pressure
Papers and Reference:
The paper is presented in Open Source Summit India - 2026:
https://ossindia2026.sched.com/event/2KNI4/introducing-in-kernel-psi-auto-monitor-feature-pintu-kumar-agarwal-qualcomm?iframe=yes&w=100%&sidebar=yes&bg=no
https://hosted-files.sched.co/ossindia2026/19/OSS-IND-26-PSI-Auto-Monitor.pdf
The initial idea was also presented in LPC-2024:
https://lpc.events/event/18/contributions/1884/attachments/1439/3069/LPC2024_PIntu_PSI.pdf
Open Questions (RFC):
Feedback is especially appreciated on:
- whether this functionality belongs in-kernel vs user-space
- interface choice (sysfs vs tracefs/debugfs alternatives)
- scoring heuristic (CPU/RSS/IO weighting)
- potential reuse or extension of existing PSI interfaces
- cgroup-aware extensions for future work
Future Work:
- finer-grained PSI window integration
- IRQ pressure support
- cgroup-based attribution
- improved tracing/export interfaces
- optional integration with user-space analysis tools
Thanks for your time, and I’d really appreciate feedback.
Regards,
Pintu Kumar Agarwal
Pintu Kumar Agarwal (1):
psi: Introduce in-kernel PSI auto monitor feature
include/trace/events/psi_monitor.h | 53 +++++
init/Kconfig | 16 ++
kernel/sched/build_utility.c | 4 +
kernel/sched/psi_monitor.c | 307 +++++++++++++++++++++++++++++
4 files changed, 380 insertions(+)
create mode 100644 include/trace/events/psi_monitor.h
create mode 100644 kernel/sched/psi_monitor.c
--
2.34.1
next reply other threads:[~2026-07-02 17:17 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-02 17:16 Pintu Kumar Agarwal [this message]
2026-07-02 17:16 ` [RFC PATCH 1/1] psi: Introduce in-kernel PSI auto monitor feature Pintu Kumar Agarwal
2026-07-02 19:51 ` K Prateek Nayak
2026-07-03 15:32 ` Pintu Kumar Agarwal
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=20260702171606.527077-1-pintu.agarwal@oss.qualcomm.com \
--to=pintu.agarwal@oss.qualcomm.com \
--cc=akpm@linux-foundation.org \
--cc=aliceryhl@google.com \
--cc=bsegall@google.com \
--cc=dianders@chromium.org \
--cc=dietmar.eggemann@arm.com \
--cc=gary@garyguo.net \
--cc=hannes@cmpxchg.org \
--cc=juri.lelli@redhat.com \
--cc=kprateek.nayak@amd.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=linux.amoon@gmail.com \
--cc=mathieu.desnoyers@efficios.com \
--cc=mgorman@suse.de \
--cc=mhiramat@kernel.org \
--cc=mingo@redhat.com \
--cc=nathan@kernel.org \
--cc=nsc@kernel.org \
--cc=ojeda@kernel.org \
--cc=peterz@infradead.org \
--cc=pintu.ping@gmail.com \
--cc=rdunlap@infradead.org \
--cc=rostedt@goodmis.org \
--cc=shuah@kernel.org \
--cc=surenb@google.com \
--cc=tglx@kernel.org \
--cc=thomas.weissschuh@linutronix.de \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.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