Professional Documents
Culture Documents
It's not the first time I write about cgroups, but a lot has changed since I wrote that post.
Not so long ago, someone mentioned in #OpenWrt that his desktop became sluggish while building an OpenWrt
image. I hadn't really noticed this myself, as most of the time I am building on a remote box over SSH. However,
yesterday I was physically using that machine, and I did notice lag while abusing the CPU. I wasn't building an
OpenWrt image, but that doesn't really matter. Whether you're building an OpenWrt image, running emerge
@world or mining some cryptocurrency, if your desktop is lagging when your CPU usage is near 100%, you can
improve the situation with cgroups. In this example I will use portage as the CPU hog.
In the past I have used libcgroup to configure the control groups, but today I am going to create a slice with
systemd. For this, I've created a file in /etc/systemd/system/portage.slice:
[Install]
WantedBy=slices.target
[Slice]
CPUShares=256
The settings you can use in the Slice section can be found here. The CPUShares option defaults to 1024. As
systemd will create a user slice for each user with an active session, and all tasks that user executes will be
assigned to that slice, anything I run will receive 4 times the CPU bandwidth of processes assigned to the portage
slice.
Now all that is left, is to assign the emerge process to the portage slice. For this, we can abuse the
PORTAGE_IONICE_COMMAND option in make.conf:
PORTAGE_IONICE_COMMAND="/usr/local/sbin/cgportage.sh \${PID}"
This will pass the PID of the emerge process to the script, which in turn will register the PID in the portage
slice:
#!/bin/sh
From now on, all child processes of emerge will also be assigned to the slice.
A quick test shows the expected results. When only emerge is running, the portage slice uses up to 1200% CPU
(12 threads at 100%). If I start openssl speed -multi 12 as my user, the CPU usage of the portage slice drops to
~240%, my user gets the other 960%, and the desktop lag is gone. Woooot!
https://stijn.tintel.eu/blog/2016/03/08/mitigate-desktop-lag-cgroups 1/2
09/04/2020 Mitigate desktop lag with cgroups | stintel's blog
https://stijn.tintel.eu/blog/2016/03/08/mitigate-desktop-lag-cgroups 2/2