No more ideas on reducing idle watts while being responsive.
For reducing idle watts while sacrificing the responsiveness, maybe rtcwake with modes standby/freeze might be better.
For keeping the “system performance under load”, depending on what you decide what performance you want wrt to the load, you can run everything, or as much as you can automatically reassign, to the efficiency cores by default, and make performance cores “opt-in”, which is what I do.
EFF=0-4,10-14
PERF=5-9,15-19
sed -i "s@\(GRUB_CMDLINE_LINUX_DEFAULT=.*\)\"@\1 nohz_full=$PERF rcu_nocbs=$PERF\"@" /etc/default/grub
cat /etc/default/grub | rg GRUB_CMDLINE_LINUX_DEFAULT
update-grub
# on systemd-enabled systems this generally works fine (cgroups v2)
mkdir -p /etc/systemd/system/{system,user}.slice.d
printf "[Slice]\nAllowedCPUs=%s\n" "$EFF" > /etc/systemd/system/user.slice.d/99-efficiency.conf
printf "[Slice]\nAllowedCPUs=%s\n" "$EFF" > /etc/systemd/system/system.slice.d/99-efficiency.conf
Doesn’t reduce idle watts but just allows you to be more “efficient” depending on your needs
stress -c 20 should then only trigger your efficiency cores
sudo systemd-run --scope --slice=generic.slice taskset -c 5-9,15-19 stress -c 20
should trigger the performance cores only
sudo systemd-run --scope --slice=generic.slice sudo -u $USER stress -c 20
should trigger all cores
Unfortunately this requires root privileges, making it without root privileges should theoretically be possible, though it would be far more an intensive setup, off the top of my head the easiest way would be need a startup script per user every time instead of this way you can just set and forget. Include sudo -u $USER to make life easier, especially for file outputs.
Couldn’t find any watt figures for performance vs efficiency but if Intel was anything to go by performance cores use a lot of watts.