* [ANNOUNCE] linux-7.2-ck1, MuQSS CPU scheduler for linux-7.2
@ 2026-08-17 2:32 Con Kolivas
2026-08-17 14:33 ` Jonathan Corbet
2026-08-22 14:21 ` Steven Rostedt
0 siblings, 2 replies; 8+ messages in thread
From: Con Kolivas @ 2026-08-17 2:32 UTC (permalink / raw)
To: linux-kernel
Announcing the return of the first stable version of my out-of-tree
patchset - not for mainline inclusion consideration.
Tag:
https://github.com/ckolivas/linux/releases/tag/v7.2-ck1
Tree:
https://github.com/ckolivas/linux/tree/7.2-ck
The -ck patchset aims to improve desktop/mobile device responsiveness,
interactivity, and gaming, mostly by replacing the CPU scheduler
en-bloc with my EEVDF, configurable runqueue sharing, MultiQueue
Skiplist Scheduler.
It's been 10 years since I originally abandoned the patchset for time
reasons, but LLMs have made merging and development infinitely easier.
Changes since the last publicly announced release are features I
planned years ago and never implemented that are new:
I/O aware CPU scheduling which accounts reads and writes to the calling task.
Kthread work on behalf of a calling task is accounted back to that task.
P/E core aware load balancing.
Skiplist structure size minimisation & micro-optimisations.
The mother of all resyncs to bring it up to 7.2.
Numerous bugfixes.
Note: Scheduler CGROUPs remain no-op stubs as they are largely unused
in the target environments and would require massive amounts of code
to support.
Patchlist:
Add -ck1 version.
Make nohz_full not be picked up as a default config option and add
recommendation to help.
Set default Hz to 100 in combination with MuQSS and -ck patches.
Make hrtimer granularity and minimum hrtimeout configurable in sysctl.
Set default granularity to 100us and min timeout to 500us.
Don't use hrtimer overlay when pm_freezing since some drivers still
don't correctly use freezable timeouts.
Replace all calls to schedule_timeout_uninterruptible to use
schedule_msec_hrtimeout_uninterruptible.
Replace all calls to schedule_timeout_interruptible to use
schedule_msec_hrtimeout_interruptible.
Convert msleep to use hrtimers when active.
Convert all low value schedule_timeouts to their hrtimeout equivalents.
Create highres timeout variants of schedule_timeout functions.
Make preemptible kernel default.
MultiQueue Skiplist Scheduler v0.31.
The patches are kept modular for easy porting to each successive linux
kernel version.
Out of deference to LKML's signal to noise ratio, please just reply to
me without CC'ing the mailing list for any discussion/issues.
Enjoy!
お楽しみください
-ck
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [ANNOUNCE] linux-7.2-ck1, MuQSS CPU scheduler for linux-7.2
2026-08-17 2:32 [ANNOUNCE] linux-7.2-ck1, MuQSS CPU scheduler for linux-7.2 Con Kolivas
@ 2026-08-17 14:33 ` Jonathan Corbet
2026-08-17 20:34 ` Con Kolivas
2026-08-22 14:21 ` Steven Rostedt
1 sibling, 1 reply; 8+ messages in thread
From: Jonathan Corbet @ 2026-08-17 14:33 UTC (permalink / raw)
To: Con Kolivas, linux-kernel
Con Kolivas <con@kolivas.org> writes:
> Announcing the return of the first stable version of my out-of-tree
> patchset - not for mainline inclusion consideration.
>
> Tag:
> https://github.com/ckolivas/linux/releases/tag/v7.2-ck1
> Tree:
> https://github.com/ckolivas/linux/tree/7.2-ck
>
> The -ck patchset aims to improve desktop/mobile device responsiveness,
> interactivity, and gaming, mostly by replacing the CPU scheduler
> en-bloc with my EEVDF, configurable runqueue sharing, MultiQueue
> Skiplist Scheduler.
>
> It's been 10 years since I originally abandoned the patchset for time
> reasons, but LLMs have made merging and development infinitely easier.
I'm genuinely curious: have you considered moving this work to
sched_ext? That would instantly make it much more widely available for
people to try out and actually use.
Thanks,
jon
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [ANNOUNCE] linux-7.2-ck1, MuQSS CPU scheduler for linux-7.2
2026-08-17 14:33 ` Jonathan Corbet
@ 2026-08-17 20:34 ` Con Kolivas
0 siblings, 0 replies; 8+ messages in thread
From: Con Kolivas @ 2026-08-17 20:34 UTC (permalink / raw)
To: Jonathan Corbet; +Cc: linux-kernel
On Tue, 18 Aug 2026 at 00:33, Jonathan Corbet <corbet@lwn.net> wrote:
>
> Con Kolivas <con@kolivas.org> writes:
>
> > Announcing the return of the first stable version of my out-of-tree
> > patchset - not for mainline inclusion consideration.
> >
> > Tag:
> > https://github.com/ckolivas/linux/releases/tag/v7.2-ck1
> > Tree:
> > https://github.com/ckolivas/linux/tree/7.2-ck
> >
> > The -ck patchset aims to improve desktop/mobile device responsiveness,
> > interactivity, and gaming, mostly by replacing the CPU scheduler
> > en-bloc with my EEVDF, configurable runqueue sharing, MultiQueue
> > Skiplist Scheduler.
> >
> > It's been 10 years since I originally abandoned the patchset for time
> > reasons, but LLMs have made merging and development infinitely easier.
>
> I'm genuinely curious: have you considered moving this work to
> sched_ext? That would instantly make it much more widely available for
> people to try out and actually use.
Considered yes. It would work for the scheduling policy but there's no
way to extend it to runqueue sharing which provides half the benefit.
Thanks,
Con
>
> Thanks,
>
> jon
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [ANNOUNCE] linux-7.2-ck1, MuQSS CPU scheduler for linux-7.2
2026-08-17 2:32 [ANNOUNCE] linux-7.2-ck1, MuQSS CPU scheduler for linux-7.2 Con Kolivas
2026-08-17 14:33 ` Jonathan Corbet
@ 2026-08-22 14:21 ` Steven Rostedt
2026-08-22 22:25 ` Con Kolivas
1 sibling, 1 reply; 8+ messages in thread
From: Steven Rostedt @ 2026-08-22 14:21 UTC (permalink / raw)
To: Con Kolivas; +Cc: linux-kernel
On Mon, Aug 17, 2026 at 12:32:43PM +1000, Con Kolivas wrote:
> Announcing the return of the first stable version of my out-of-tree
> patchset - not for mainline inclusion consideration.
>
> Tag:
> https://github.com/ckolivas/linux/releases/tag/v7.2-ck1
> Tree:
> https://github.com/ckolivas/linux/tree/7.2-ck
>
> The -ck patchset aims to improve desktop/mobile device responsiveness,
> interactivity, and gaming, mostly by replacing the CPU scheduler
> en-bloc with my EEVDF, configurable runqueue sharing, MultiQueue
> Skiplist Scheduler.
>
> It's been 10 years since I originally abandoned the patchset for time
> reasons, but LLMs have made merging and development infinitely easier.
>
> Changes since the last publicly announced release are features I
> planned years ago and never implemented that are new:
> I/O aware CPU scheduling which accounts reads and writes to the calling task.
> Kthread work on behalf of a calling task is accounted back to that task.
> P/E core aware load balancing.
> Skiplist structure size minimisation & micro-optimisations.
> The mother of all resyncs to bring it up to 7.2.
> Numerous bugfixes.
>
> Note: Scheduler CGROUPs remain no-op stubs as they are largely unused
> in the target environments and would require massive amounts of code
> to support.
>
Hi Con,
Thank you for doing this. I'm actually trying to implement "Scheduler
Governors"[1][2]. Back in 2023 when I was working on the Google ChromeOS team,
we were looking for ways to improve our desktop performance. We had several
benchmarks that we used. One was to run Google Meet with 16 users while typing
in a Google Doc. This was fully automated (the test would simulate active
users). We measured mouse jank and latency (key press, how long the screen
would react after the mouse would move over a window, etc). We tested out your
last MuQSS scheduler that you posted. It did extremely well. So much so, the
tester wanted to push it upstream (I had to tell him about the history and
that wasn't possible). But it did get me thinking. I found that trying to have
one scheduler to handle multiple environments wasn't optimal. I would like to
have different schedulers for different environments (one for phones, one for
desktops, one for servers). I would use your MuQSS scheduler as the desktop
governor.
I recently received a grant on using Anthropic's max claude for 6 months
(pretty much unlimited tokens) to do this.
Peter Zijlstra hates this idea, but I want to do this and see if it is indeed
an improvement. If anything, I'm hoping to improve the scheduler and perhaps
with enough evidence it may be something to consider implementing upstream.
-- Steve
[1] https://lwn.net/Articles/1020596/
[2] https://docs.google.com/presentation/d/1dtm0AiiTI30gTFeKj95vmSyirYmk5_QiR_lh17l_Moo/edit?usp=sharing
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [ANNOUNCE] linux-7.2-ck1, MuQSS CPU scheduler for linux-7.2
2026-08-22 14:21 ` Steven Rostedt
@ 2026-08-22 22:25 ` Con Kolivas
2026-08-23 2:08 ` Con Kolivas
0 siblings, 1 reply; 8+ messages in thread
From: Con Kolivas @ 2026-08-22 22:25 UTC (permalink / raw)
To: rostedt; +Cc: linux-kernel
On Sun, 23 Aug 2026 at 00:21, Steven Rostedt <rostedt@goodmis.org> wrote:
>
> On Mon, Aug 17, 2026 at 12:32:43PM +1000, Con Kolivas wrote:
> > Announcing the return of the first stable version of my out-of-tree
> > patchset - not for mainline inclusion consideration.
> >
> > Tag:
> > https://github.com/ckolivas/linux/releases/tag/v7.2-ck1
> > Tree:
> > https://github.com/ckolivas/linux/tree/7.2-ck
> >
> > The -ck patchset aims to improve desktop/mobile device responsiveness,
> > interactivity, and gaming, mostly by replacing the CPU scheduler
> > en-bloc with my EEVDF, configurable runqueue sharing, MultiQueue
> > Skiplist Scheduler.
> >
> > It's been 10 years since I originally abandoned the patchset for time
> > reasons, but LLMs have made merging and development infinitely easier.
> >
> > Changes since the last publicly announced release are features I
> > planned years ago and never implemented that are new:
> > I/O aware CPU scheduling which accounts reads and writes to the calling task.
> > Kthread work on behalf of a calling task is accounted back to that task.
> > P/E core aware load balancing.
> > Skiplist structure size minimisation & micro-optimisations.
> > The mother of all resyncs to bring it up to 7.2.
> > Numerous bugfixes.
> >
> > Note: Scheduler CGROUPs remain no-op stubs as they are largely unused
> > in the target environments and would require massive amounts of code
> > to support.
> >
>
> Hi Con,
Hi Steve.
>
> Thank you for doing this. I'm actually trying to implement "Scheduler
> Governors"[1][2]. Back in 2023 when I was working on the Google ChromeOS team,
> we were looking for ways to improve our desktop performance. We had several
> benchmarks that we used. One was to run Google Meet with 16 users while typing
> in a Google Doc. This was fully automated (the test would simulate active
> users). We measured mouse jank and latency (key press, how long the screen
> would react after the mouse would move over a window, etc). We tested out your
> last MuQSS scheduler that you posted. It did extremely well. So much so, the
> tester wanted to push it upstream (I had to tell him about the history and
> that wasn't possible).
I was not aware of this work, thanks for pointing it out - I had not
been monitoring the linux kernel landscape for quite some time. It's
nice to see independent benchmarks verifying its validity.
But it did get me thinking. I found that trying to have
> one scheduler to handle multiple environments wasn't optimal. I would like to
> have different schedulers for different environments (one for phones, one for
> desktops, one for servers). I would use your MuQSS scheduler as the desktop
> governor.
Interesting, that is why I tried the pluggable approach indeed.
MuQSS was my attempt to address the fact the earlier BFS design was
constrained to only being useful in desktop/mobile environments and
was configurable for different workloads - but it received almost no
attention outside desktop use as that was obviously what I initially
developed it for. My own limited benchmarks showed it performed very
well there anyway. However the requirements for all the extra features
bolted onto the basic scheduler with cgroups etc. made it far too big
for one person to develop. In the end as you know I didn't even have
time to maintain even the basic functionality.
I'm curious to see just how your scheduler governors differ in
practice from a pluggable scheduler - it seems on the surface to do
exactly the same thing by proxy anyway (I have yet to watch your
presentation, I will check it out soon.) sched_ext as I said in
response to Corbet is not extensible enough for some of MuQSS'
architecture.
>
> I recently received a grant on using Anthropic's max claude for 6 months
> (pretty much unlimited tokens) to do this.
Fun project, go for it. Anthropic ignored me so I paid out of pocket
for what little access I did get. MuQSS is pretty stable in design now
after initial churn to properly sync up with mainline, and I've tried
to keep the patch monolithic in the -ck patchset.
>
> Peter Zijlstra hates this idea, but I want to do this and see if it is indeed
> an improvement. If anything, I'm hoping to improve the scheduler and perhaps
> with enough evidence it may be something to consider implementing upstream.
I don't know how to feel about this idea. Having a few hours
intermittently every few weeks or months only to dedicate to linux
kernel development is why I got out of it in the first place. As the
author, attempting to push it upstream would change the dynamic
dramatically. It would be presumptuous to think I could "fire and
forget" and not be available.
>
> -- Steve
>
> [1] https://lwn.net/Articles/1020596/
> [2] https://docs.google.com/presentation/d/1dtm0AiiTI30gTFeKj95vmSyirYmk5_QiR_lh17l_Moo/edit?usp=sharing
Thanks,
-ck
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [ANNOUNCE] linux-7.2-ck1, MuQSS CPU scheduler for linux-7.2
2026-08-22 22:25 ` Con Kolivas
@ 2026-08-23 2:08 ` Con Kolivas
2026-08-23 14:28 ` Steven Rostedt
0 siblings, 1 reply; 8+ messages in thread
From: Con Kolivas @ 2026-08-23 2:08 UTC (permalink / raw)
To: rostedt; +Cc: linux-kernel
[trimmed to relevant governor discussion]
> On Sun, 23 Aug 2026 at 00:21, Steven Rostedt <rostedt@goodmis.org> wrote:
>> But it did get me thinking. I found that trying to have
> > one scheduler to handle multiple environments wasn't optimal. I would like to
> > have different schedulers for different environments (one for phones, one for
> > desktops, one for servers). I would use your MuQSS scheduler as the desktop
> > governor.
>
> Interesting, that is why I tried the pluggable approach indeed.
>
> MuQSS was my attempt to address the fact the earlier BFS design was
> constrained to only being useful in desktop/mobile environments and
> was configurable for different workloads - but it received almost no
> attention outside desktop use as that was obviously what I initially
> developed it for. My own limited benchmarks showed it performed very
> well there anyway. However the requirements for all the extra features
> bolted onto the basic scheduler with cgroups etc. made it far too big
> for one person to develop. In the end as you know I didn't even have
> time to maintain even the basic functionality.
>
> I'm curious to see just how your scheduler governors differ in
> practice from a pluggable scheduler - it seems on the surface to do
> exactly the same thing by proxy anyway (I have yet to watch your
> presentation, I will check it out soon.) sched_ext as I said in
> response to Corbet is not extensible enough for some of MuQSS'
> architecture.
> >
> > I recently received a grant on using Anthropic's max claude for 6 months
> > (pretty much unlimited tokens) to do this.
> > -- Steve
> >
Hi again Steve et. al
> > [1] https://lwn.net/Articles/1020596/
> > [2] https://docs.google.com/presentation/d/1dtm0AiiTI30gTFeKj95vmSyirYmk5_QiR_lh17l_Moo/edit?usp=sharing
I'm now caught up with your presentation as presented in the youtube
video linked in the lwn article. Thanks, very informative and
thoughtful. I was unable to access the google doc but have requested
read access - though I believe it was all presented on the video.
Your governor idea is not as dissimilar to plugsched as may appear on
the surface. Plugsched built in all the schedulers into the kernel and
allowed you to boot the scheduler of your choice at boot time; it was
not to just build one scheduler into the kernel. Making it switch on
the fly was a pipe-dream goal but since it got shot down in
spectacular fashion I did not pursue it further. Its code is also so
outdated that literally nothing is of relevance in the current kernel
tree.
If you do pursue the governor idea there are a few things worth noting
about how high up and broad the hooks need to be.
One overhead problem with plugsched was it added a layer of
indirection to every single scheduler function call that was shared
between different schedulers. The cost of this may be considered
either trivially irrelevant or not remotely worth it depending on your
viewpoint. A the time I wrote plugsched, Itanic[sic] was still an
active architecture and the indirection was considered a huge
downside.
There are four broad aspects to achieving low latency with muqss which
all need to be adopted to reproduce its behaviour, in order of
decreasing importance.
1. Policy - the simple ordering aspect based on deadline, timeslice
interval etc. based on a shared monotonically increasing nanosecond
time counter.
2. Shared access to a global queue - BFS did this by having only one
queue. MuQSS was created as a way to address scalability concerns by
reintroducing separate runqueues. It became clear very quickly that
policy alone did not reproduce the behaviour of BFS and that's where
the idea for having shared runqueues came about. The more the
runqueues were shared, the closer the latency approximated BFS'. The
default configuration chooses MC - Multicore. For virtually all
desktops and mobile devices that means they all end up with one
runqueue anyway. It is pre-configurable in kconfig, but also boot-time
selectable.
3. Busy and idle load balancing. In MuQSS' case the busy balancing
happens by proxy through the next task selection, but idle balancing
is handled separately. Mainline handles both of these separately from
policy.
4. Highres timer based scheduling to effect the nanosecond timers.
This is to disentangle the scheduler's latency dependency on the
chosen jiffy Hz which ties all other subsystem components to that
resolution and/or overhead.
None of these are insurmountable endpoints with enough LLM tokens, but
I suspect there will at least be one/some indirection somewhere in the
implementation.
Thanks,
-ck
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [ANNOUNCE] linux-7.2-ck1, MuQSS CPU scheduler for linux-7.2
2026-08-23 2:08 ` Con Kolivas
@ 2026-08-23 14:28 ` Steven Rostedt
2026-08-23 14:54 ` Con Kolivas
0 siblings, 1 reply; 8+ messages in thread
From: Steven Rostedt @ 2026-08-23 14:28 UTC (permalink / raw)
To: Con Kolivas; +Cc: linux-kernel
On Sun, 23 Aug 2026 12:08:19 +1000
Con Kolivas <con@kolivas.org> wrote:
> Hi again Steve et. al
>
> > > [1] https://lwn.net/Articles/1020596/
> > > [2] https://docs.google.com/presentation/d/1dtm0AiiTI30gTFeKj95vmSyirYmk5_QiR_lh17l_Moo/edit?usp=sharing
>
> I'm now caught up with your presentation as presented in the youtube
> video linked in the lwn article. Thanks, very informative and
> thoughtful. I was unable to access the google doc but have requested
> read access - though I believe it was all presented on the video.
>
> Your governor idea is not as dissimilar to plugsched as may appear on
> the surface. Plugsched built in all the schedulers into the kernel and
> allowed you to boot the scheduler of your choice at boot time; it was
> not to just build one scheduler into the kernel. Making it switch on
> the fly was a pipe-dream goal but since it got shot down in
> spectacular fashion I did not pursue it further. Its code is also so
> outdated that literally nothing is of relevance in the current kernel
> tree.
Yeah, the main reason I call it a "governor" and not "plugable" is
because I wanted to stress that it's not for any scheduler. It is for
an environment. Similar to the power management governors. Saying
"plugable" gives a "plug and play" feel that I wanted to avoid. Ingo's
complaint back then was that we would have hundreds of schedulers. Now
with sched_ext, that's exactly what we have. Thus, the governor was an
idea to bring back collaboration between folks that work in the same
environment.
>
> If you do pursue the governor idea there are a few things worth noting
> about how high up and broad the hooks need to be.
> One overhead problem with plugsched was it added a layer of
> indirection to every single scheduler function call that was shared
> between different schedulers. The cost of this may be considered
> either trivially irrelevant or not remotely worth it depending on your
> viewpoint. A the time I wrote plugsched, Itanic[sic] was still an
> active architecture and the indirection was considered a huge
> downside.
I'm not sure you are aware that the Linux kernel today has something
called a "static_call"[1]. It's a direct function call that can be
switched at runtime with run-time code modification. It is something
that I was planning on using.
> There are four broad aspects to achieving low latency with muqss which
> all need to be adopted to reproduce its behaviour, in order of
> decreasing importance.
> 1. Policy - the simple ordering aspect based on deadline, timeslice
> interval etc. based on a shared monotonically increasing nanosecond
> time counter.
> 2. Shared access to a global queue - BFS did this by having only one
> queue. MuQSS was created as a way to address scalability concerns by
> reintroducing separate runqueues. It became clear very quickly that
> policy alone did not reproduce the behaviour of BFS and that's where
> the idea for having shared runqueues came about. The more the
> runqueues were shared, the closer the latency approximated BFS'. The
> default configuration chooses MC - Multicore. For virtually all
> desktops and mobile devices that means they all end up with one
> runqueue anyway. It is pre-configurable in kconfig, but also boot-time
> selectable.
> 3. Busy and idle load balancing. In MuQSS' case the busy balancing
> happens by proxy through the next task selection, but idle balancing
> is handled separately. Mainline handles both of these separately from
> policy.
For my idea, I would have the governors only affect SCHED_OTHER and
SCHED_IDLE. The RT and DL schedulers would not be affected. But having
the governor take over the idle and other tasks, it would have more
control of what it could do.
> 4. Highres timer based scheduling to effect the nanosecond timers.
> This is to disentangle the scheduler's latency dependency on the
> chosen jiffy Hz which ties all other subsystem components to that
> resolution and/or overhead.
I believe mainline is going in this direction too.
>
> None of these are insurmountable endpoints with enough LLM tokens, but
> I suspect there will at least be one/some indirection somewhere in the
> implementation.
Again, indirection is solved by the static calls. When spectre and
meltdown mitigations were introduced into the kernel, indirect calls
took a hugh hit. Tracepoints used them quite extensively and it slowed
down hackbench with the sched_switch tracepoint active by 10%!
I started working on a way to replace indirect calls with a direct call
that could be modified. Then Josh Poimbeouf took over and Linus didn't
like the implementation.Finally, Peter Zijlstra got it into the kernel.
They are expensive to change, but for things that do not change often
(like enabling a tracepoint, picking a KVM implementation, or picking a
specific scheduler governor) it is really useful. The hackbench
slowdown disappeared and tracepoints are actually even faster than what
they were with the indirect calls.
-- Steve
[1] https://lwn.net/Articles/815908/
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [ANNOUNCE] linux-7.2-ck1, MuQSS CPU scheduler for linux-7.2
2026-08-23 14:28 ` Steven Rostedt
@ 2026-08-23 14:54 ` Con Kolivas
0 siblings, 0 replies; 8+ messages in thread
From: Con Kolivas @ 2026-08-23 14:54 UTC (permalink / raw)
To: Steven Rostedt; +Cc: linux-kernel
On Mon, 24 Aug 2026 at 00:28, Steven Rostedt <rostedt@goodmis.org> wrote:
>
> On Sun, 23 Aug 2026 12:08:19 +1000
> Con Kolivas <con@kolivas.org> wrote:
>
> > Hi again Steve et. al
> >
> > > > [1] https://lwn.net/Articles/1020596/
> > > > [2] https://docs.google.com/presentation/d/1dtm0AiiTI30gTFeKj95vmSyirYmk5_QiR_lh17l_Moo/edit?usp=sharing
> >
> > I'm now caught up with your presentation as presented in the youtube
> > video linked in the lwn article. Thanks, very informative and
> > thoughtful. I was unable to access the google doc but have requested
> > read access - though I believe it was all presented on the video.
> >
> > Your governor idea is not as dissimilar to plugsched as may appear on
> > the surface. Plugsched built in all the schedulers into the kernel and
> > allowed you to boot the scheduler of your choice at boot time; it was
> > not to just build one scheduler into the kernel. Making it switch on
> > the fly was a pipe-dream goal but since it got shot down in
> > spectacular fashion I did not pursue it further. Its code is also so
> > outdated that literally nothing is of relevance in the current kernel
> > tree.
>
> Yeah, the main reason I call it a "governor" and not "plugable" is
> because I wanted to stress that it's not for any scheduler. It is for
> an environment. Similar to the power management governors. Saying
> "plugable" gives a "plug and play" feel that I wanted to avoid. Ingo's
> complaint back then was that we would have hundreds of schedulers. Now
> with sched_ext, that's exactly what we have. Thus, the governor was an
> idea to bring back collaboration between folks that work in the same
> environment.
Fair enough.
>
> >
> > If you do pursue the governor idea there are a few things worth noting
> > about how high up and broad the hooks need to be.
> > One overhead problem with plugsched was it added a layer of
> > indirection to every single scheduler function call that was shared
> > between different schedulers. The cost of this may be considered
> > either trivially irrelevant or not remotely worth it depending on your
> > viewpoint. A the time I wrote plugsched, Itanic[sic] was still an
> > active architecture and the indirection was considered a huge
> > downside.
>
> I'm not sure you are aware that the Linux kernel today has something
> called a "static_call"[1]. It's a direct function call that can be
> switched at runtime with run-time code modification. It is something
> that I was planning on using.
No, I was not aware, that takes the worst aspect off the table.
>
> > There are four broad aspects to achieving low latency with muqss which
> > all need to be adopted to reproduce its behaviour, in order of
> > decreasing importance.
> > 1. Policy - the simple ordering aspect based on deadline, timeslice
> > interval etc. based on a shared monotonically increasing nanosecond
> > time counter.
> > 2. Shared access to a global queue - BFS did this by having only one
> > queue. MuQSS was created as a way to address scalability concerns by
> > reintroducing separate runqueues. It became clear very quickly that
> > policy alone did not reproduce the behaviour of BFS and that's where
> > the idea for having shared runqueues came about. The more the
> > runqueues were shared, the closer the latency approximated BFS'. The
> > default configuration chooses MC - Multicore. For virtually all
> > desktops and mobile devices that means they all end up with one
> > runqueue anyway. It is pre-configurable in kconfig, but also boot-time
> > selectable.
>
> > 3. Busy and idle load balancing. In MuQSS' case the busy balancing
> > happens by proxy through the next task selection, but idle balancing
> > is handled separately. Mainline handles both of these separately from
> > policy.
>
> For my idea, I would have the governors only affect SCHED_OTHER and
> SCHED_IDLE. The RT and DL schedulers would not be affected. But having
> the governor take over the idle and other tasks, it would have more
> control of what it could do.
Sounds good. MuQSS' multiple runqueues would be better without having
to handle RT tasks as well - there's a corner case where checking
another runqueue for its best task won't find the best SCHED_OTHER
task if there's an RT task ahead of it (though in the desktop it would
probably be one runqueue.)
Switching to a different number of runqueues on the fly would require
some special handling, something like the CPU hotplug paths used for
suspend/resume.
>
> > 4. Highres timer based scheduling to effect the nanosecond timers.
> > This is to disentangle the scheduler's latency dependency on the
> > chosen jiffy Hz which ties all other subsystem components to that
> > resolution and/or overhead.
>
> I believe mainline is going in this direction too.
Sounds good.
>
> >
> > None of these are insurmountable endpoints with enough LLM tokens, but
> > I suspect there will at least be one/some indirection somewhere in the
> > implementation.
>
> Again, indirection is solved by the static calls. When spectre and
> meltdown mitigations were introduced into the kernel, indirect calls
> took a hugh hit. Tracepoints used them quite extensively and it slowed
> down hackbench with the sched_switch tracepoint active by 10%!
>
> I started working on a way to replace indirect calls with a direct call
> that could be modified. Then Josh Poimbeouf took over and Linus didn't
> like the implementation.Finally, Peter Zijlstra got it into the kernel.
>
> They are expensive to change, but for things that do not change often
> (like enabling a tracepoint, picking a KVM implementation, or picking a
> specific scheduler governor) it is really useful. The hackbench
> slowdown disappeared and tracepoints are actually even faster than what
> they were with the indirect calls.
Very good. Looking forward to seeing your progress.
I've split out the muqss patch into two separate patches on a new git
branch, leaving the IO time code as a separate patch, making it
possible to concentrate purely on the scheduler components.
https://github.com/ckolivas/linux/tree/7.2-muqss
>
> -- Steve
>
> [1] https://lwn.net/Articles/815908/
Thanks,
-ck
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-08-23 14:54 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-17 2:32 [ANNOUNCE] linux-7.2-ck1, MuQSS CPU scheduler for linux-7.2 Con Kolivas
2026-08-17 14:33 ` Jonathan Corbet
2026-08-17 20:34 ` Con Kolivas
2026-08-22 14:21 ` Steven Rostedt
2026-08-22 22:25 ` Con Kolivas
2026-08-23 2:08 ` Con Kolivas
2026-08-23 14:28 ` Steven Rostedt
2026-08-23 14:54 ` Con Kolivas
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.