Skip to content

Commit 8e7220e

Browse files
committed
scheduler: fix scheduler not working, prioritize foreground
Signed-off-by: Kajus Naujokaitis <[email protected]>
1 parent 219ba3d commit 8e7220e

File tree

7 files changed

+70
-22
lines changed

7 files changed

+70
-22
lines changed

REUSE.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ path = [
3131
"overlays/custom-packages/cosmic/cosmic-comp/0001-Disable-VRR-by-default.patch",
3232
"overlays/custom-packages/cosmic/cosmic-initial-setup/0001-Preselect-Ghaf-themes.patch",
3333
"overlays/custom-packages/cosmic/cosmic-greeter/0001-Replace-fallback-background-with-Ghaf-default.patch",
34-
"overlays/custom-packages/cosmic/cosmic-applets/*.patch"
34+
"overlays/custom-packages/cosmic/cosmic-applets/*.patch",
35+
"overlays/custom-packages/system76-scheduler/0001-fix-add-missing-loop-in-process-scheduler-refresh-ta.patch"
3536
]
3637

3738
[[annotations]]

modules/common/services/performance/guests.nix

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -53,24 +53,36 @@ let
5353
matchers = [
5454
"pipewire"
5555
"pipewire-pulse"
56+
"wireplumber"
57+
];
58+
};
59+
# Apps belonging to user
60+
# Minor prioritization
61+
# Should be removed when cosmic-comp supports foreground checking
62+
app-slice = {
63+
nice = -2;
64+
ioClass = "best-effort";
65+
ioPrio = 0;
66+
matchers = [
67+
"include cgroup=\"/user.slice/*slice/*service/*slice/*.scope\""
5668
];
5769
};
5870
# Session services belonging to the user
5971
session-services = {
60-
nice = 12;
72+
nice = 9;
6173
ioClass = "idle";
6274
matchers = [
63-
"include cgroup=\"/user.slice/*.service\" parent=\"systemd\""
64-
"include cgroup=\"/user.slice/*.session.slice/*\" parent=\"systemd\""
65-
"include cgroup=\"/user.slice/*app-dbus*\""
75+
"include cgroup=\"/user.slice/*.slice/*\""
76+
"exclude cgroup=\"/user.slice/*.slice/*.service/app.slice/*\""
6677
];
6778
};
6879
# System services belonging to root
6980
system-services = {
70-
nice = 15;
81+
nice = 12;
7182
ioClass = "idle";
7283
matchers = [
7384
"include cgroup=\"/system.slice/*\""
85+
"exclude cgroup=\"/user.slice/*\" parent=\"systemd\""
7486
];
7587
};
7688
};
@@ -182,11 +194,7 @@ in
182194
};
183195

184196
net = {
185-
enable = mkEnableOption "Ghaf-specific scheduler and power optimizations for net-vm.";
186-
scheduler = {
187-
# net-vm is running on one core, so scheduling is too heavy for it to be useful
188-
enable = mkEnableOption "system76-scheduler on net-vm for Ghaf-specific process scheduling.";
189-
};
197+
enable = mkEnableOption "Ghaf-specific power optimizations for net-vm.";
190198
tuned = {
191199
enable = mkEnableOption "TuneD service on the net-vm for Ghaf-specific performance profiles." // {
192200
default = true;
@@ -215,8 +223,13 @@ in
215223
inherit (cfg.gui.scheduler) enable;
216224
settings = {
217225
processScheduler = {
218-
pipewireBoost.enable = true;
226+
pipewireBoost.enable = false;
227+
# cosmic-comp still lacks integration with s76-scheduler
228+
foregroundBoost.enable = false;
229+
useExecsnoop = true;
230+
refreshInterval = 30;
219231
};
232+
cfsProfiles.enable = false;
220233
};
221234
assignments = guiVmSchedulerAssignments;
222235
};
@@ -267,15 +280,6 @@ in
267280

268281
(mkIf cfg.net.enable (
269282
{
270-
services.system76-scheduler = {
271-
inherit (cfg.net.scheduler) enable;
272-
settings = {
273-
processScheduler = {
274-
# Instead poll every 60s
275-
useExecsnoop = false;
276-
};
277-
};
278-
};
279283
services.tuned = {
280284
inherit (cfg.net.tuned) enable;
281285
ppdSupport = true;

modules/common/services/performance/host.nix

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ let
4545
ioClass = "idle";
4646
matchers = [
4747
"include cgroup=\"/system.slice/*\""
48+
"exclude cgroup=\"/system.slice/system-sysvms.slice/*\""
49+
"exclude cgroup=\"/system.slice/system-appvms.slice/*\""
4850
];
4951
};
5052
};
@@ -170,7 +172,6 @@ let
170172
sysctl = {
171173
"vm.swappiness" = "20";
172174
"vm.dirty_writeback_centisecs" = "1500";
173-
"kernel.sched_autogroup_enabled" = "1";
174175
"vm.laptop_mode" = "2";
175176
};
176177
};
@@ -241,6 +242,8 @@ in
241242
settings = {
242243
cfsProfiles.enable = false;
243244
processScheduler = {
245+
useExecsnoop = true;
246+
refreshInterval = 60;
244247
pipewireBoost.enable = false;
245248
foregroundBoost.enable = false;
246249
};

modules/microvm/sysvms/guivm.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ let
214214
pkgs.waypipe
215215
pkgs.gnome-calculator
216216
pkgs.sticky-notes
217+
pkgs.tuned
217218
])
218219
++ [
219220
pkgs.pamixer

overlays/custom-packages/default.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
libfm = import ./libfm { inherit prev; };
2121
papirus-icon-theme = import ./papirus-icon-theme { inherit prev; };
2222
qemu_kvm = import ./qemu { inherit final prev; };
23+
system76-scheduler = import ./system76-scheduler { inherit prev; };
2324
tpm2-pkcs11 = import ./tpm2-pkcs11 { inherit prev; };
2425
tpm2-tools = import ./tpm2-tools { inherit prev; };
2526
xdg-desktop-portal-cosmic = import ./cosmic/xdg-desktop-portal-cosmic { inherit prev; };
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
From eddba4de430f72117f9557e8a0ed2efebbb1ca36 Mon Sep 17 00:00:00 2001
2+
From: Kajus Naujokaitis <[email protected]>
3+
Date: Mon, 24 Nov 2025 16:20:36 +0200
4+
Subject: [PATCH] fix: add missing loop in process scheduler refresh task
5+
6+
Signed-off-by: Kajus Naujokaitis <[email protected]>
7+
---
8+
daemon/src/main.rs | 7 +++++--
9+
1 file changed, 5 insertions(+), 2 deletions(-)
10+
11+
diff --git a/daemon/src/main.rs b/daemon/src/main.rs
12+
index 308f069..7124ae7 100644
13+
--- a/daemon/src/main.rs
14+
+++ b/daemon/src/main.rs
15+
@@ -189,8 +189,11 @@ async fn daemon(
16+
Duration::from_secs(u64::from(service.config.process_scheduler.refresh_rate));
17+
let tx = tx.clone();
18+
async move {
19+
- let _res = tx.send(Event::RefreshProcessMap).await;
20+
- tokio::time::sleep(refresh_rate).await;
21+
+ let mut interval = tokio::time::interval(refresh_rate);
22+
+ loop {
23+
+ interval.tick().await;
24+
+ let _ = tx.send(Event::RefreshProcessMap).await;
25+
+ }
26+
}
27+
});
28+
29+
--
30+
2.51.2
31+
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# SPDX-FileCopyrightText: 2022-2026 TII (SSRC) and the Ghaf contributors
2+
# SPDX-License-Identifier: Apache-2.0
3+
{ prev }:
4+
5+
prev.system76-scheduler.overrideAttrs (_old: {
6+
patches = [ ./0001-fix-add-missing-loop-in-process-scheduler-refresh-ta.patch ];
7+
})

0 commit comments

Comments
 (0)