* [RFC] memory.high auto limit daemon
@ 2026-08-21 18:28 Andrew Moise
0 siblings, 0 replies; only message in thread
From: Andrew Moise @ 2026-08-21 18:28 UTC (permalink / raw)
To: linux-mm, hannes
Hi all. So I wrote a daemon which attempts to manage memory.high limits
to keep interactive processes usable during thrashing (Rust compiles,
NixOS builds, etc) without the user needing to do workload-specific
setup. I'd be interested in feedback on idea and implementation, if
anyone is interested to take a look.
Code: https://codeberg.org/andyman/destressd
Basically what it's doing is:
* We watch the PSI stall percentages to see if programs are starting
to stall because of memory pressure.
* When they are, we try to roughly estimate how much memory each
cgroup was trying to touch during the last 5 seconds of its
computation time, if PSI waiting time hadn't been a factor.
* Whatever is the weightiest cgroup by that metric (*), we start
bumping down its memory.high allotment incrementally until we stop
seeing PSI-indicated memory stalls in other cgroups.
(*) oversimplifying a bit
To me this seems like experimentally a feasible approach. I did some
testing of how long it takes to do simple browser tasks under pretty
punishing thrashing caused by Rust compiles. There are details in
the tool's README, but overall the results on my machine averaged
over five runs are these:
phase normal thrashing thrashing+destressd
--------------------- --------- ---------- -------------------
browser_startup 0.78s 21.63s 14.95s
reddit_load 2.56s 27.57s 10.02s
scroll_20 20.99s 39.91s 27.05s
The test is not super-scientific, just an attempt to give numbers to
my subjective feeling that "when we set memory.high on the thrashing
process the system gets a lot more responsive." Of course that outcome
is not surprising, but having a daemon that will adaptively set
memory.high when needed to make it happen seems useful to me.
I would also very much like to get the "thrashing+destressd" numbers
down so they're more similar to the unthrashing case. I probably will
keep working, seeing if there's a way of better containing the
thrashing cgroup so that the interactive stuff just works similarly
to how it does if the system's not loaded. But that up there is
the performance right now with the current approach.
Thoughts? Feedback? I saw a talk where
the idea of limiting memory.high was briefly mentioned
(https://lpc.events/event/7/contributions/649/attachments/546/965/2020-lpc-resource-management.pdf),
and in the tool's README I list some prior art of similar approaches
that I was able to find, but I couldn't find much that's using this
specific memory.high limiting approach, and to me it seems like a good
way. But like I say I'm curious what the people who are in this space
think about it.
-Andrew
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2026-08-21 18:28 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-21 18:28 [RFC] memory.high auto limit daemon Andrew Moise
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox