Skip to content

Commit 938aa5d

Browse files
kajusnaubrianmcgillion
authored andcommitted
scheduler: fix assignment conflicts, reduce aggressiveness
- fix scheduler assignments conflicts - reduce scheduler priority and IO aggressiveness Signed-off-by: Kajus Naujokaitis <kajus.naujokaitis@unikie.com>
1 parent 8be1c1b commit 938aa5d

File tree

3 files changed

+53
-45
lines changed

3 files changed

+53
-45
lines changed

modules/common/services/performance/default.nix

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,16 @@ in
145145
];
146146
services.system76-scheduler = {
147147
useStockConfig = false;
148+
settings = {
149+
processScheduler = {
150+
pipewireBoost.enable = false;
151+
# cosmic-comp still lacks integration with s76-scheduler
152+
foregroundBoost.enable = false;
153+
useExecsnoop = true;
154+
};
155+
cfsProfiles.enable = false;
156+
};
157+
};
148158
services.tuned.package = tunedNoDesktop;
149159
systemd.services = mkIf config.ghaf.profiles.debug.enable {
150160
tuned = {

modules/common/services/performance/guests.nix

Lines changed: 34 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,17 @@ let
3131

3232
guiVmSchedulerAssignments = {
3333
desktop-environment = {
34-
nice = -9;
35-
ioClass = "realtime";
34+
nice = -5;
35+
ioClass = "best-effort";
3636
ioPrio = 0;
3737
matchers = [
3838
"cosmic-comp"
3939
];
4040
};
4141
waypipe = {
42-
nice = -12;
42+
nice = -3;
4343
ioClass = "best-effort";
44-
ioPrio = 1;
44+
ioPrio = 2;
4545
matchers = [
4646
"waypipe"
4747
];
@@ -55,22 +55,33 @@ let
5555
"pipewire-pulse"
5656
];
5757
};
58+
# Apps belonging to user
59+
# Minor prioritization
60+
# Should be removed when cosmic-comp supports foreground checking
61+
app-slice = {
62+
nice = -2;
63+
ioClass = "best-effort";
64+
ioPrio = 0;
65+
matchers = [
66+
"include cgroup=\"/user.slice/*slice/*service/*slice/*.scope\""
67+
];
68+
};
5869
# Session services belonging to the user
5970
session-services = {
60-
nice = 12;
71+
nice = 5;
6172
ioClass = "idle";
6273
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*\""
74+
"include cgroup=\"/user.slice/*.slice/*\""
75+
"exclude cgroup=\"/user.slice/*.slice/*.service/app.slice/*\""
6676
];
6777
};
6878
# System services belonging to root
6979
system-services = {
70-
nice = 15;
80+
nice = 7;
7181
ioClass = "idle";
7282
matchers = [
7383
"include cgroup=\"/system.slice/*\""
84+
"exclude cgroup=\"/user.slice/*\" parent=\"systemd\""
7485
];
7586
};
7687
};
@@ -89,53 +100,53 @@ let
89100
start =
90101
(mkBrightnessScript 40)
91102
+ optionalString useGivc ''
92-
${givc-cli} start service --vm "ghaf-host" host-powersave.service &
93-
${givc-cli} start service --vm "net-vm" net-powersave.service &
103+
timeout 5s ${givc-cli} start service --vm "ghaf-host" host-powersave.service &
104+
timeout 5s ${givc-cli} start service --vm "net-vm" net-powersave.service &
94105
'';
95106
};
96107
gui-balanced = mkTunedScript {
97108
name = "gui-balanced";
98109
start =
99110
(mkBrightnessScript 70)
100111
+ optionalString useGivc ''
101-
${givc-cli} start service --vm "ghaf-host" host-balanced.service &
102-
${givc-cli} start service --vm "net-vm" net-balanced.service &
112+
timeout 5s ${givc-cli} start service --vm "ghaf-host" host-balanced.service &
113+
timeout 5s ${givc-cli} start service --vm "net-vm" net-balanced.service &
103114
'';
104115
};
105116
gui-performance = mkTunedScript {
106117
name = "gui-performance";
107118
start =
108119
''''
109120
+ optionalString useGivc ''
110-
${givc-cli} start service --vm "ghaf-host" host-performance.service &
111-
${givc-cli} start service --vm "net-vm" net-performance.service &
121+
timeout 5s ${givc-cli} start service --vm "ghaf-host" host-performance.service &
122+
timeout 5s ${givc-cli} start service --vm "net-vm" net-performance.service &
112123
'';
113124
};
114125
gui-powersave-battery = mkTunedScript {
115126
name = "gui-powersave-battery";
116127
start =
117128
(mkBrightnessScript 25)
118129
+ optionalString useGivc ''
119-
${givc-cli} start service --vm "ghaf-host" host-powersave-battery.service &
120-
${givc-cli} start service --vm "net-vm" net-powersave-battery.service &
130+
timeout 5s ${givc-cli} start service --vm "ghaf-host" host-powersave-battery.service &
131+
timeout 5s ${givc-cli} start service --vm "net-vm" net-powersave-battery.service &
121132
'';
122133
};
123134
gui-balanced-battery = mkTunedScript {
124135
name = "gui-balanced-battery";
125136
start =
126137
(mkBrightnessScript 50)
127138
+ optionalString useGivc ''
128-
${givc-cli} start service --vm "ghaf-host" host-balanced-battery.service &
129-
${givc-cli} start service --vm "net-vm" net-balanced-battery.service &
139+
timeout 5s ${givc-cli} start service --vm "ghaf-host" host-balanced-battery.service &
140+
timeout 5s ${givc-cli} start service --vm "net-vm" net-balanced-battery.service &
130141
'';
131142
};
132143
gui-performance-battery = mkTunedScript {
133144
name = "gui-performance-battery";
134145
start =
135146
(mkBrightnessScript 70)
136147
+ optionalString useGivc ''
137-
${givc-cli} start service --vm "ghaf-host" host-performance-battery.service &
138-
${givc-cli} start service --vm "net-vm" net-performance-battery.service &
148+
timeout 5s ${givc-cli} start service --vm "ghaf-host" host-performance-battery.service &
149+
timeout 5s ${givc-cli} start service --vm "net-vm" net-performance-battery.service &
139150
'';
140151
};
141152
};
@@ -182,11 +193,7 @@ in
182193
};
183194

184195
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-
};
196+
enable = mkEnableOption "Ghaf-specific power optimizations for net-vm.";
190197
tuned = {
191198
enable = mkEnableOption "TuneD service on the net-vm for Ghaf-specific performance profiles." // {
192199
default = true;
@@ -215,7 +222,7 @@ in
215222
inherit (cfg.gui.scheduler) enable;
216223
settings = {
217224
processScheduler = {
218-
pipewireBoost.enable = true;
225+
refreshInterval = 30;
219226
};
220227
};
221228
assignments = guiVmSchedulerAssignments;
@@ -267,15 +274,6 @@ in
267274

268275
(mkIf cfg.net.enable (
269276
{
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-
};
279277
services.tuned = {
280278
inherit (cfg.net.tuned) enable;
281279
ppdSupport = true;

modules/common/services/performance/host.nix

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,15 @@ let
2424

2525
hostSchedulerAssignments = {
2626
system-vms = {
27-
nice = -15;
28-
ioClass = "realtime";
27+
nice = -5;
28+
ioClass = "best-effort";
2929
ioPrio = 0;
3030
matchers = [
3131
"include cgroup=\"/system.slice/system-sysvms.slice/*\""
3232
];
3333
};
3434
app-vms = {
35-
nice = -10;
35+
nice = 0;
3636
ioClass = "best-effort";
3737
ioPrio = 2;
3838
matchers = [
@@ -41,10 +41,13 @@ let
4141
};
4242
# System services belonging to root
4343
system-services = {
44-
nice = 12;
45-
ioClass = "idle";
44+
nice = 5;
45+
ioClass = "best-effort";
46+
ioPrio = 5;
4647
matchers = [
4748
"include cgroup=\"/system.slice/*\""
49+
"exclude cgroup=\"/system.slice/system-sysvms.slice/*\""
50+
"exclude cgroup=\"/system.slice/system-appvms.slice/*\""
4851
];
4952
};
5053
};
@@ -170,7 +173,6 @@ let
170173
sysctl = {
171174
"vm.swappiness" = "20";
172175
"vm.dirty_writeback_centisecs" = "1500";
173-
"kernel.sched_autogroup_enabled" = "1";
174176
"vm.laptop_mode" = "2";
175177
};
176178
};
@@ -239,10 +241,8 @@ in
239241
services.system76-scheduler = {
240242
inherit (cfg.host.scheduler) enable;
241243
settings = {
242-
cfsProfiles.enable = false;
243244
processScheduler = {
244-
pipewireBoost.enable = false;
245-
foregroundBoost.enable = false;
245+
refreshInterval = 60;
246246
};
247247
};
248248
assignments = hostSchedulerAssignments;

0 commit comments

Comments
 (0)