summaryrefslogtreecommitdiff
path: root/content/posts/2021-02-03-gentoo-no-desktop-lag.md
diff options
context:
space:
mode:
authorChristian Segundo2024-07-25 02:12:22 +0200
committerChristian Segundo2024-07-28 12:58:19 +0200
commit15e3dedcee1d0830871ffc692143318a87646101 (patch)
tree3e15f8a3f5082b7df89d208a4c8189b8ad453998 /content/posts/2021-02-03-gentoo-no-desktop-lag.md
parenta248abee10bbcda6282982d72788acf689deb7aa (diff)
downloadcheck-caps-lock-15e3dedcee1d0830871ffc692143318a87646101.tar.gz
wip
Diffstat (limited to 'content/posts/2021-02-03-gentoo-no-desktop-lag.md')
-rw-r--r--content/posts/2021-02-03-gentoo-no-desktop-lag.md52
1 files changed, 52 insertions, 0 deletions
diff --git a/content/posts/2021-02-03-gentoo-no-desktop-lag.md b/content/posts/2021-02-03-gentoo-no-desktop-lag.md
new file mode 100644
index 0000000..966419b
--- /dev/null
+++ b/content/posts/2021-02-03-gentoo-no-desktop-lag.md
@@ -0,0 +1,52 @@
+---
+layout: post
+title: Say goodbye to desktop lag while compiling your @world
+category: GNU/Linux
+tags:
+ - gentoo
+ - systemd
+---
+
+1. Start by creating a new systemd slice `/etc/systemd/system/portage.slice`:
+
+ ```
+ [Install]
+ WantedBy=slices.target
+
+ [Slice]
+ CPUShares=256
+ ```
+
+1. Enable and start the unit you just created:
+
+ ```
+ systemctl enable --now portage.slice
+ ```
+
+ CPUShares option defaults to 1024, `systemd` will create a user slice for
+ each user with an active session, and all processes that user run will be
+ assigned to that slice, anything that a user may run will receive 4 times the
+ CPU time of processes assigned to the portage slice.
+
+ ```
+ ➜ ~ cat /sys/fs/cgroup/cpu,cpuacct/user.slice/cpu.shares
+ 1024
+ ```
+
+1. Repurpose `PORTAGE_IONICE_COMMAND` variable. This is one of those awesome
+ variables you can set in your `make.conf` to alter how you build stuff. It
+ should be a command string for portage to call to modify its own priority
+ with a `\${PID}` placeholder that will be substituted with a `PID`. Maybe it
+ was created with `ionice` in mind, but we can abuse that placeholder to write
+ pids to the `cgroup.procs` file in the portage slice.
+
+ Add the following line to your `/etc/portage/make.conf`:
+
+ ```
+ PORTAGE_IONICE_COMMAND="sh -c \"echo \${PID} > /sys/fs/cgroup/systemd/portage.slice/cgroup.procs\""
+ ```
+
+ The `cgroup.procs` file is present in every cgroup and contains a list of
+ processes that are members of that particular cgroup. Writing a PID to this
+ file will move all threads in that process at once to the cgroup. And that,
+ is awesome :D