The new power-profiles-daemon package is the problem (see TLP/issues/564). This package is installed by default in Ubuntu 21.04+ and a couple of other distributions.
Explanation
The new power-profiles-daemon package comes with a systemd unit power-profiles-daemon.service. This unit declare a conflict with tlp.service causing tlp.service to be effectively disabled.
/lib/systemd/system/power-profiles-daemon.service (notice the Conflicts= directive)
[Unit]
Description=Power Profiles daemon
Conflicts=tuned.service tlp.service auto-cpufreq.service
Before=multi-user.target display-manager.target
...
If a unit has a Conflicts= directive on another unit, starting the former will stop the latter and vice versa. And because tlp.service doesn't declare Conflicts= directive on power-profiles-daemon.service. It will always be the one that get disabled regardless of the activation order of the units.
Solution
- You may either disable power-profiles-daemon.service unit with
sudo systemctl disable power-profiles-daemon.service; or
- Remove power-profiles-daemon package from the system with
sudo apt purge power-profiles-daemon.
- Alternatively, you may override
tlp.service configurations with sudo systemctl edit tlp.service and set the the Conflicts= along with Before= directives manually.
[Unit]
Conflicts=power-profiles-daemon.service
Before=power-profiles-daemon.service