diff --git a/home/dotfiles/config/systemd/user/tweak-cpu-usage.service b/home/dotfiles/config/systemd/user/tweak-cpu-usage.service new file mode 100644 index 0000000..7bb96f6 --- /dev/null +++ b/home/dotfiles/config/systemd/user/tweak-cpu-usage.service @@ -0,0 +1,10 @@ +[Unit] +Description=Tweak CPU usage + +[Service] +Type=simple +ExecStart=%h/.local/bin/tweak-cpu-usage +Restart=on-failure + +[Install] +WantedBy=default.target diff --git a/home/dotfiles/local/bin/tweak-cpu-usage b/home/dotfiles/local/bin/tweak-cpu-usage new file mode 100755 index 0000000..fb2b523 --- /dev/null +++ b/home/dotfiles/local/bin/tweak-cpu-usage @@ -0,0 +1,36 @@ +#!/bin/bash +set -e +set -u + +cores=$(nproc) + +limits=( + # process_name:limit% + firefox:$(( 50 * cores )) + vesktop:$(( 20 * cores )) +) + +# check for cpulimit command +if ! command -v cpulimit 2>/dev/null >/dev/null; then + echo "ERROR: need cpulimit command" >&2 + exit 1 +fi + +limit_process() { + local process_name="$1" + local limit_percentage="${2%%.}" + + cpulimit -i -e "$process_name" -l "$limit_percentage" +} + +limit_processes() { + local pids + pids=() + for limit in "${limits[@]}"; do + IFS=: read process_name limit_percentage <<<"$limit" + limit_process "$process_name" "$limit_percentage" & pids+=($!) + done + wait "${pids[@]}" +} + +limit_processes diff --git a/install.sh b/install.sh index c94bf70..5634e92 100755 --- a/install.sh +++ b/install.sh @@ -61,3 +61,9 @@ install_files "/etc" etc if command -v fc-cache >/dev/null 2>&1; then fc-cache -f fi + +if command -v systemctl >/dev/null 2>&1; then + systemctl --user daemon-reload + systemctl --user enable tweak-cpu-usage + systemctl --user restart tweak-cpu-usage +fi