Skip to content

Instantly share code, notes, and snippets.

@89luca89
Last active January 21, 2023 20:11
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 89luca89/29be32da857fa4aa59b09ab626929d2f to your computer and use it in GitHub Desktop.
Save 89luca89/29be32da857fa4aa59b09ab626929d2f to your computer and use it in GitHub Desktop.
Powersave Rules for Linux | Run and reboot. Consider using the commented tweaks in grub for advanced powersaving
#UDEV rules to handle powersaving
# pcie_aspm=force IN GRUB
echo '
# Some logging
SUBSYSTEM=="power_supply", ATTR{online}=="0", RUN+="/bin/sh -c '"'"'echo Unplugged $(date) >> /var/log/powerlog.log'"'"'"
SUBSYSTEM=="power_supply", ATTR{online}=="1", RUN+="/bin/sh -c '"'"'echo Plugged $(date) >> /var/log/powerlog.log'"'"'"
# CPU Bias power/performance toggle
SUBSYSTEM=="power_supply", ATTR{online}=="0", RUN+="/usr/bin/x86_energy_perf_policy power"
SUBSYSTEM=="power_supply", ATTR{online}=="1", RUN+="/usr/bin/x86_energy_perf_policy performance"
# Periferals power saving features
SUBSYSTEM=="power_supply", ATTR{online}=="0", RUN+="/bin/sh -c '"'"'echo powersave > /sys/module/pcie_aspm/parameters/policy'"'"'"
SUBSYSTEM=="power_supply", ATTR{online}=="1", RUN+="/bin/sh -c '"'"'echo default > /sys/module/pcie_aspm/parameters/policy'"'"'"
ACTION=="add", SUBSYSTEM=="pci", ATTR{power/control}="auto"
ACTION=="add", SUBSYSTEM=="ahci", ATTR{power/control}="auto"
ACTION=="add", SUBSYSTEM=="scsi_host", KERNEL=="host*", ATTR{link_power_management_policy}="min_power"
ACTION=="add", SUBSYSTEM=="usb", ATTR{power/autosuspend_delay_ms}="1000"
ACTION=="add", SUBSYSTEM=="usb", ATTR{power/control}="auto"
ACTION=="add", SUBSYSTEM=="scsi", ATTR{power/control}="auto"
ACTION=="add", SUBSYSTEM=="acpi", ATTR{power/control}="auto"
ACTION=="add", SUBSYSTEM=="block", ATTR{power/control}="auto"
ACTION=="add", SUBSYSTEM=="workqueue", ATTR{power/control}="auto"
ACTION=="add", SUBSYSTEM=="i2c", ATTR{power/control}="auto"
# Disable Wake on Lan and enable wifi powersaving
ACTION=="add", SUBSYSTEM=="net", KERNEL=="enp*", RUN+="/usr/sbin/ethtool -s %k wol d"
ACTION=="add", SUBSYSTEM=="net", KERNEL=="wlp*", RUN+="/usr/sbin/ethtool -s %k wol d"
ACTION=="add", SUBSYSTEM=="net", KERNEL=="wlp*", RUN+="/usr/sbin/iw dev %k set power_save on"
# Set read ahead for disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/read_ahead_kb}="65536"
# Set deadline scheduler for non-rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"
# Set deadline scheduler for rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="cfq"
# Set powersaving features for disks
ACTION=="add|change", KERNEL=="sd[a-z]", RUN+="/usr/sbin/hdparm -B 1 /dev/%k"
' | sudo tee /etc/udev/rules.d/powersave.rules
#Systemctl tweaks for powersaving
# https://unix.stackexchange.com/a/41831
echo 'vm.laptop_mode = 5
kernel.nmi_watchdog = 0
vm.swappiness = 5
vm.oom_kill_allocating_task = 1
vm.block_dump=1
vm.vfs_cache_pressure = 100
vm.dirty_ratio = 90
vm.dirty_background_ratio = 50
vm.dirty_writeback_centisecs = 60000
vm.dirty_expire_centisecs = 60000 ' | sudo tee /etc/sysctl.conf
echo "options i915 disable_power_well=0 enable_dc=2 enable_psr=3 enable_rc6=7 enable_fbc=1 powersave=1 semaphores=1" | sudo tee /etc/modprobe.d/i915.conf
echo 'options iwlwifi power_save=Y power_level=5
options iwlmvm power_scheme=3' | sudo tee /etc/modprobe.d/iwlwifi.conf
echo 'options e1000e SmartPowerDownEnable=1' | sudo tee /etc/modprobe.d/e1000e.conf
echo 'options snd_hda_intel power_save_controlle=Y power_save=1' | sudo tee /etc/modprobe.d/snd_hda_intel.conf
echo "blacklist intel_powerclamp" | sudo tee /etc/modprobe.d/disable-powerclamp.conf
### ADVANCED
### ADD THIS TO YOUR GRUB_CMDLINE_LINUX_DEFAULT (Without the comment)
# nmi_watchdog=0 pcie_aspm=force drm.debug=0 drm.vblankoffdelay=1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment