- CPU frequency scaling and battery optimization for Notebook and PC systems
is a Linux daemon used to prevent the overheating of platforms. This daemon monitors temperature and applies compensation using available cooling methods.
By default, it monitors CPU temperature using available CPU digital temperature sensors and maintains CPU temperature under control, before HW takes aggressive correction action. If there is a skin temperature sensor in thermal sysfs, then it tries to keep skin temperature under 45C.
As each update of thermald-package will overwrite the service file we need to move this to
So that it will not stop working after thermeld updates.
sudo pacman -S --needed thermald
sudo cp /usr/lib/systemd/system/thermald.service /etc/systemd/system/
sudo nano /etc/systemd/system/thermald.service
change the line:
ExecStart=/usr/bin/thermald --no-daemon --dbus-enable
ExecStart=/usr/bin/thermald --no-daemon --dbus-enable --ignore-cpuid-check
save the file by pressing [Ctrl+Alt+x] and confirm by typing “y”
Last two things to do is enable the systemd service for Thermald to automatic start it on every boot of your system:
sudo systemctl enable thermald
and now please reboot system to make it start working.
It will need some time to measure and then really control to hold the temperature down, so be patient and wait to see the effect for some time ( may need one or two hours before working for the first time)
Alternative to thermald (auto-cpufreq)
Not available on official Repository, so it needs to be built from AUR:
yay -S auto-cpufreq-git
On how to enable and use this read the documentation on GitHub:
is a set of userspace utilities designed to assist with CPU frequency scaling.
full list of available modules:
sudo ls /usr/lib/modules/$(uname -r)/kernel/drivers/cpufreq/
Load the appropriate module (see Kernel modules for details). Once the appropriate cpufreq driver is loaded, detailed information about the CPU(s) can be displayed by running
sudo cpupower frequency-info
Governors (see table below) are power schemes for the CPU. Only one may be active at a time. For details, see the kernel documentation in the kernel source.
NOTE: If you want to use this method, make sure you disable CPU-scaling from TLP (as this is enabled by default on EndeavourOS and using both together for the same mechanism will cause failure)
|performance||Run the CPU at the maximum frequency.|
|powersave||Run the CPU at the minimum frequency.|
|userspace||Run the CPU at user specified frequencies.|
|ondemand||Scales the frequency dynamically according to current load. Jumps to the highest frequency and then possibly back off as the idle time increases.|
|conservative||Scales the frequency dynamically according to current load. Scales the frequency more gradually than ondemand.|
|Scheduler-driven CPU frequency selection , .|
set one for all cores:
(replace governor with e.g. what you want ondemand p.e…)
sudo echo *governor* > /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
see live output:
watch grep \"cpu MHz\" /proc/cpuinfo
making one permanent:
sudo systemctl enable cpupower.service
and configure it to use what you want per default:
# Define CPUs governor # valid governors: ondemand, performance, powersave, conservative, userspace. governor='ondemand' # Limit frequency range # Valid suffixes: Hz, kHz (default), MHz, GHz, THz #min_freq="2.25GHz" #max_freq="3GHz" # Specific frequency to be set. # Requires userspace governor to be available. # Do not set governor field if you use this one. #freq= # Utilizes cores in one processor package/socket first before processes are # scheduled to other processor packages/sockets. # See man (1) CPUPOWER-SET for additional details. #mc_scheduler= # Utilizes thread siblings of one processor core first before processes are # scheduled to other cores. See man (1) CPUPOWER-SET for additional details. #smp_scheduler= # Sets a register on supported Intel processore which allows software to convey # its policy for the relative importance of performance versus energy savings to # the processor. See man (1) CPUPOWER-SET for additional details. #perf_bias= # vim:set ts=2 sw=2 ft=sh et:
for more info:
- On default EndeavourOS install TLP is installed and enabled already for you.
But read here on may needed optional dependencies to make stuff working on your hardware:
Install TLP from the official repositories – pay attention to its optional dependencies that may help provide additional power saving:
- acpi_call: ThinkPad battery functions, Sandy Bridge and newer
- ethtool: Disable Wake On Lan
- lsb-release: Display LSB release version in tlp-stat
- smartmontools: Display S.M.A.R.T. data in tlp-stat
- tp_smapi: ThinkPad battery functions
- x86_energy_perf_policy: Set energy versus performance policy on x86 processors
sudo pacman -S tlp
To complete TLP’s install, you must enable the systemd service tlp.service:
sudo systemctl enable tlp.service
You should also mask the systemd service systemd-rfkill.service and socket systemd-rfkill.socket to avoid conflicts and assure proper operation of TLP’s radio device switching options.
sudo systemctl mask systemd-rfkill.service systemd-rfkill.socket
reboot your machine and you are fine.
TLP configuration tool (tlpui)
The Python scripts in this project generate a GTK-UI to change TLP configuration files easily. It has the aim to protect users from setting bad configuration and to deliver a basic overview of all the valid configuration values.
The TLP configuration app is not available as a package so you will need to build from AUR:
yay -S tlpui-git