如何使Powertop更改永久生效?


75

我正在使用Compaq 615,风扇很大。您对此无能为力,但我正在尝试使CPU / GPU尽可能保持凉爽。这是Powertop必须说的:

PowerTOP 1.97-概述-空闲状态-频率状态-设备状态-可调参数

如果我将它们全部更改为“良好”,则所做的更改将无法在重新启动后保留下来。

我按照建议在 “ grub”文件中添加了这一行

如何使Powertop建议的“ Tunables”永久保存?


您没有正确编辑文件。您可能弄乱了路径,或者忘记了sudo用于编辑文件的方式。
Chan-Ho Suh 2012年

1
仅花了我的两分钱:在禁用powertop所说对电池寿命不利的东西之后,我发现自己处于无法插入任何USB设备而无法识别它的阶段。我必须手动将模块加载到内核中,然后再插入设备。保留“ USB控制器”选项为“错误”状态可以使其按预期工作。
Pedro Brito


首先检查每个建议的可调参数是否真的省电。注意2:powertop由于内部电池的重新校准,的测量值可能不准确。资料来源:askubuntu.com/questions/161774/…–
Pro Backup

请接受解决方案!
Elod

Answers:


64

如果您将所有参数都更改为良好,则只需使用以下命令

sudo powertop --auto-tune

开机时自动调用powertop自动调整

1。

systemd用作启动管理器的系统(例如Ubuntu)上,将其安装为服务:

cat << EOF | sudo tee /etc/systemd/system/powertop.service
[Unit]
Description=PowerTOP auto tune

[Service]
Type=idle
Environment="TERM=dumb"
ExecStart=/usr/sbin/powertop --auto-tune

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable powertop.service

2。

在未使用的系统上systemd,或者如果您想对/etc/rc.local文件使用旧样式,请将此行添加到末尾/etc/rc.local

powertop --auto-tune
exit 0

注意:如果脚本已经包含该脚本,请exit 0确保将所有命令放在该行之前,导致退出脚本

如果您想将所有设置都设为好而只有一行,则可以先自动调整,然后再用一条额外的行禁用一项设置,例如,如果要重新启用触摸屏设备(位于USB 2-7),请添加在此之前exit 0

powertop --auto-tune
echo 'on' > '/sys/bus/usb/devices/2-7/power/control'
exit 0

注意:在具有的Linux上systemd,请确保在启动时由兼容性服务执行/etc/rc.local

systemctl status rc-local.service

1
我注意到,禁用WiFi连接可节省更多能量。即使设置了power_save选项,如果激活,WiFi卡在系统上仍会使用大约4 W的功率
rubo77

1
仅供参考:出于某种原因,我发现我必须将这些命令以单行的形式添加到rc.local中powertop --auto-tune && echo 'on' > '/sys/bus/usb/devices/5-2/power/control',以使其在启动时在每个会话中都能正常工作。
Rich.T.

这应该是最可靠的答案!
Costin Gușă 2015年

这对我来说是最有用的答案。 注意:在我的系统(ubuntu 16.04)上,上述输出为inactive (dead)rc.local重新启动后,通过运行sudo chmod + x /etc/rc.local 使可执行文件获得所需的结果。
eldad-a

1
我添加了systemd选项作为服务
rubo77 '17

24

这是使更改永久生效的方法:

sudo powertop --html

这将生成一个powertop-xxxxxxxxxx-xxxxxx.html文件。

现在,要么在浏览器中打开它,然后将echo命令从“ ...需要调优” 复制到/etc/rc.local

或使用类似以下的命令提取命令:

echo "grep 'echo ' powertop-20120805-125538.html | sed 's/.*\(echo.*\);.*/\1/g'"

如果rc.local包含exit 0,则需要确保将命令放在此行之前。


1
Eliah,我正在运行编译的Powertop 2.0。我已经运行了--html命令,无法找到文件的存放位置,甚至无法写入文件。另外,当Powertop启动时,我也会收到此消息:无法从文件/var/cache/powertop/saved_pa​​rameters.powertop加载
Kendor 2012年

尝试了这种方法,但是我的powertop文件(@Kendor-它保存在您所在的目录中)不包含任何echo(或其他)命令。
metakermit 2012年

@ kermit666如果实际发生更改,则只有“ echo”在里面。因此,如果您已经在powertop中应用了设置,则需要先撤消该设置。也许只是重新启动会更容易
pumpupthevolume 2012年

e,为什么这么复杂?如果我想要的话,powertop只会输出一个脚本!您的解决方案忽略了大于号>编写为&gt;。在html输出中...
Zordid 2014年

2
您不能只为'echo'
改写

15

您需要下载并编译它,因为没有人拥有最新版本

下载powertop https://01.org/powertop/downloads/2013/powertop-v2.3

powertop-2.3.tar.gz <<<单击并下载我

编译之前,您需要安装依赖项

安装依赖项(只需复制粘贴以下命令)

sudo apt-get install libtool autoconf libnl-dev ncurses-dev pciutils-dev build-essential -y

安装Powertop

要构建和安装PowerTOP,请键入以下命令,

cd Downloads/powertop*  # assuming that you have downloaded in Downloads folder in you home directory   
configure 
make        # use -j option if you want to see details below
make install

您也可以使用-j2来表示要在./make .Replace -j2中使用多少个内核,以及要用于编译过程的CPU内核数量是多少。例如我用过./make -j8

安装了Powertop后,您可以拔出交流电源并可以运行

sudo powertop

但是,大多数设置不会保存,并且重启后会丢失。但是,您可以使用PowerTOP html报告中提供的命令使它们永久化。要生成HTML报告,请运行以下命令:webupd8.org

sudo powertop --html=powertop.html

在电池上实施Powertop建议,然后返回以最大化交流电源的性能

为此,您需要编写一个脚本,该脚本在电池上运行powertop建议并最大程度地提高交流电源的性能。

将其放在/etc/pm/power.d/中并赋予执行权

sudo gedit /etc/pm/power.d/power

将以下内容复制粘贴到电源文件中

 #!/bin/sh

 # Shell script to reduce energy consumption when running battery. Place
 # it in /etc/pm/power.d/ and give execution rights.

 if on_ac_power; then

 # Start AC powered settings --------------------------------------------#


 # Disable laptop mode
 echo 0 > /proc/sys/vm/laptop_mode

 #NMI watchdog should be turned on
 for foo in /proc/sys/kernel/nmi_watchdog;
 do echo 1 > $foo;
 done

 # Set SATA channel: max performance
 for foo in /sys/class/scsi_host/host*/link_power_management_policy;
 do echo max_performance > $foo;
 done

 # CPU Governor: Performance
 for foo in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor;
 do echo performance > $foo;
 done 

 # Disable USB autosuspend
 for foo in /sys/bus/usb/devices/*/power/level;
 do echo on > $foo;
 done

 # Disable PCI autosuspend
 for foo in /sys/bus/pci/devices/*/power/control;
 do echo on > $foo;
 done

 # Disabile audio_card power saving
 echo 0 > /sys/module/snd_hda_intel/parameters/power_save_controller
 echo 0 > /sys/module/snd_hda_intel/parameters/power_save

 # End AC powered settings ----------------------------------------------#

 else

 # Start battery powered settings ---------------------------------------#

 # Enable Laptop-Mode disk writing
 echo 5 > /proc/sys/vm/laptop_mode

 #NMI watchdog should be turned on
 for foo in /proc/sys/kernel/nmi_watchdog;
 do echo 0 > $foo;
 done

 # Set SATA channel to power saving
 for foo in /sys/class/scsi_host/host*/link_power_management_policy;
 do echo min_power > $foo;
 done

 # Select Ondemand CPU Governor
 for foo in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor;
 do echo ondemand > $foo;
 done

 # Activate USB autosuspend
 for foo in /sys/bus/usb/devices/*/power/level;
 do echo auto > $foo;
 done

 # Activate PCI autosuspend
 for foo in /sys/bus/pci/devices/*/power/control;
 do echo auto > $foo;
 done

 # Activate audio card power saving
 # (sounds shorter than 5 seconds will not be played)
 echo 5 > /sys/module/snd_hda_intel/parameters/power_save
 echo 1 > /sys/module/snd_hda_intel/parameters/power_save_controller

 # End battery powered settings -----------------------------------------#

 fi

现在您需要分配超级脚本的执行权限

 sudo chmod +x /etc/pm/power.d/power

现在,当您拔下电源时,Powertop建议将接管并最大程度地延长电池寿命,并且插入交流电源后,您将获得最高性能。

有用的链接

http://ubuntuforums.org/showthread.php?t=1855126&page=3 http://www.webupd8.org/2012/08/install-powertop-21-in-ubuntu-1204.html

对于-j选项http://dnscrypt.org/


1
相反,我建议您使用checkinstall。它还将允许您创建一个.deb软件包,以后可以卸载/升级。您可以通过sudo apt-get install
GuySoft

bash:./make:没有这样的文件或目录-为什么这样?pastebin.com/bX3iLygx
TracyIquiña13年

@TracyIquiña对不起... sudo make not ./make .....
Qasim

1
@Qasim昨天我意识到错误,(和刚才读您的评论),所以我做了makesudo checkinstall。它按预期工作。自述文件需要对此进行更正。
TracyIquiña13年

@TracyIquiña那就是g8,也请看看我的回答askubuntu.com/questions/285434/…–
Qasim

9

这不是您要的答案,但是您可以尝试在中运行laptop-mode。去做这个:

打开一个终端并输入:

gksu gedit /etc/default/acpi-support

输入密码,然后转到底部,并在谈论笔记本电脑模式的部分中输入true而不是false,关闭文档并保存

然后输入:

gksu gedit /etc/laptop-mode/laptop-mode.conf

这个文件有点长,但是这是我编辑我的方法。我在修改的默认行之前添加了#,如下所示:

#
# Should laptop mode tools add the "noatime" option to the mount options when 
# laptop mode is enabled?
#
#CONTROL_NOATIME=0
CONTROL_NOATIME=1

默认值为0,我将其设置为1,仅修改我修改的行。您可以在此处查看一些选项,并根据需要进行切换。当您关闭并保存时。

完成此操作后,您将要输入:

gksu gedit

现在,在文本编辑器中,单击“打开”,然后进入/etc/laptop-mode/conf.d/文件夹,其中包含各种文件,您可能对USB自动挂起,hda音频,iwl intel无线,intel sata和sched mc省电感兴趣。逐个打开这些文件并阅读,它们以完美的标准英语编写,并且很好地解释了所有内容。您会知道该怎么做,请记住,大多数情况下0代表关闭,1代表打开。

完成后,关闭并保存每个文件。

现在重新启动并欣赏笔记本电脑模式,然后:

sudo powertop

并检查功耗,如果您正确完成了所有操作,那么powertop就不会做出任何其他建议,因为您已经调整了所有要调整的内容(或多或少)。

资料来源:http : //ubuntuforums.org/showthread.php?t=1157408&p=7271995#post7271995Axx83撰写


谢谢。但是没有办法使Powertop更改永久生效吗?
H3R3T1K 2012年

我对此进行了搜索,发现(异地)最好的解决方案是启用笔记本电脑模式。这是一种解决方法-如果我找到更好的解决方案,我也会添加它。希望这可以暂时提供帮助。
rlemon 2012年

2
在acpi-support文件中,它说的是关于笔记本电脑模式的内容:“#注意:要启用”笔记本电脑模式“(将硬盘驱动器旋转#更长的时间),请安装laptop-mode-tools软件包并配置#在/etc/laptop-mode/laptop-mode.conf中。” 我安装了软件包并打开了文件。我以为我现在处于笔记本电脑模式?它说启用了“笔记本电脑模式工具”。我还做了您建议的其他更改(noatime)。
H3R3T1K 2012年

哦,这是编辑文件的示例。您将需要查看每个选项的功能并根据需要进行切换。笔记本电脑模式应该可以抑制风扇。
rlemon 2012年

6

使用udev规则永久节能可直接在源头配置设置,而无需创建脚本或依赖可能未安装的软件包。因此,一旦udev您的设置添加了硬件,就会立即应用。

正确的udev规则会使设置在硬件不存在时不适用,从而使配置更易于移植。您将进一步了解Linux内核的内部工作原理:-)。通过这种方式进行的配置在不依靠电池供电时也同样适用。

可调参数的示例Enable SATA link power Managmenet for host0。建议是:

# echo 'min_power' > '/sys/class/scsi_host/host0/link_power_management_policy'`

这已经使您知道硬件在哪里:/ sys / class / scsi_host。您可以使用以下方法进行验证:

# udevadm info -a -p /sys/class/scsi_host/host?
…
  looking at device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/scsi_host/host0':
    KERNEL=="host0"
    SUBSYSTEM=="scsi_host"
…
    ATTR{eh_deadline}=="0"
    ATTR{link_power_management_policy}=="max_performance"
    ATTR{host_busy}=="0"

最好不要触摸/lib/udev/rules.d/中的系统udev规则,并在/etc/udev/rules.d/中大约60级创建自己的udev规则文件。例如,使用nano编辑器:

$ nano /etc/udev/rules.d/60-power.rules

其他一些示例编写如下规则:

KERNEL=="host[0-5]", SUBSYSTEM=="scsi_host", ATTR{link_power_management_policy}="min_power"

我会说不要,仅在链接电源管理策略设置为max_performance时才应用它,从而使您的规则更加完善。看一下小的区别(寻找双方程符号):

KERNEL=="host[0-5]", SUBSYSTEM=="scsi_host", ATTR{link_power_management_policy}=="max_performance", ATTR{link_power_management_policy}="min_power"

测试您的规则udevadm test /devices/…

# udevadm test /devices/pci0000:00/0000:00:1f.2/ata1/host0/scsi_host/host0/link_power_management_policy
calling: test
version 204
This program is for debugging only, it does not run any program
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.

=== trie on-disk ===
tool version:          204
file size:         5660180 bytes
header size             80 bytes
strings            1265196 bytes
nodes              4394904 bytes
load module index
read rules file: /lib/udev/rules.d/40-crda.rules
read rules file: /lib/udev/rules.d/40-gnupg.rules
read rules file: /lib/udev/rules.d/40-hyperv-hotadd.rules
read rules file: /lib/udev/rules.d/42-usb-hid-pm.rules
read rules file: /lib/udev/rules.d/50-firmware.rules
read rules file: /lib/udev/rules.d/50-udev-default.rules
read rules file: /lib/udev/rules.d/55-dm.rules
read rules file: /lib/udev/rules.d/60-cdrom_id.rules
read rules file: /lib/udev/rules.d/60-keyboard.rules
read rules file: /lib/udev/rules.d/60-persistent-alsa.rules
read rules file: /lib/udev/rules.d/60-persistent-input.rules
read rules file: /lib/udev/rules.d/60-persistent-serial.rules
read rules file: /lib/udev/rules.d/60-persistent-storage-dm.rules
read rules file: /lib/udev/rules.d/60-persistent-storage-tape.rules
read rules file: /lib/udev/rules.d/60-persistent-storage.rules
read rules file: /lib/udev/rules.d/60-persistent-v4l.rules
read rules file: /etc/udev/rules.d/60-power.rules
read rules file: /lib/udev/rules.d/61-accelerometer.rules
read rules file: /lib/udev/rules.d/64-btrfs.rules
read rules file: /etc/udev/rules.d/70-persistent-net.rules
read rules file: /lib/udev/rules.d/70-power-switch.rules
read rules file: /lib/udev/rules.d/70-uaccess.rules
read rules file: /lib/udev/rules.d/71-biosdevname.rules
read rules file: /lib/udev/rules.d/71-seat.rules
read rules file: /lib/udev/rules.d/73-idrac.rules
read rules file: /lib/udev/rules.d/73-seat-late.rules
read rules file: /lib/udev/rules.d/75-net-description.rules
read rules file: /lib/udev/rules.d/75-persistent-net-generator.rules
read rules file: /lib/udev/rules.d/75-probe_mtd.rules
read rules file: /lib/udev/rules.d/75-tty-description.rules
read rules file: /lib/udev/rules.d/78-graphics-card.rules
read rules file: /lib/udev/rules.d/78-sound-card.rules
read rules file: /lib/udev/rules.d/80-drivers.rules
read rules file: /lib/udev/rules.d/85-hdparm.rules
read rules file: /lib/udev/rules.d/85-keyboard-configuration.rules
read rules file: /lib/udev/rules.d/85-regulatory.rules
read rules file: /lib/udev/rules.d/95-udev-late.rules
rules contain 24576 bytes tokens (2048 * 12 bytes), 11335 bytes strings
1814 strings (22027 bytes), 1179 de-duplicated (11328 bytes), 636 trie nodes used
ATTR '/sys/devices/pci0000:00/0000:00:1f.2/ata1/host0/scsi_host/host0/link_power_management_policy' writing 'min_power' /etc/udev/rules.d/60-power.rules:1
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata1/host0/scsi_host/host0
SUBSYSTEM=scsi_host
USEC_INITIALIZED=1203444595
unload module index

我找不到应用规则的方法,因此在这种情况下,我重新启动以应用了新创建的udev规则。


由于powertop在“ Tunables”列表中将它们显示为长名称,因此我如何发现属性的ID和可能的值?谢谢
克里斯蒂亚诺

3

systemd使操作变得简单:

# /etc/systemd/system/powertop-autotune.service
[Unit]
Description=Auto-tune power savings (oneshot)

[Service]
Type=oneshot
ExecStart=/usr/bin/powertop --auto-tune
RemainAfterExit=true

[Install]
WantedBy=multi-user.target

保存单元文件kill -HUP 1systemctl enable --now powertop-autotune.service,完成了!


PS,如果您需要任何例外--auto-tune,只需添加更多ExecStart行即可设置自己的设置。

#...
ExecStart=/usr/bin/powertop --auto-tune
ExecStart=/bin/sh -c "echo on > /sys/bus/usb/devices/2-7/power/control"

#...

在Ubuntu上,powertop位于中/usr/sbin,不在中/usr/bin
rustyx

2

我通过创建破折号脚本解决了这个问题/root/power_save.sh

#!/bin/dash
find /sys/devices/pci* -path "*power/control" -exec bash -c "echo auto > '{}'" \;

将其设置为可执行文件:

sudo chmod u+x /root/power_save.sh

并将其添加到根crontab中sudo crontab -e

@reboot /root/power_save.sh

@dago这是我在您的答案中实施解决方案的方式。
SeppoErviälä11年

一些问题,希望能教育我:首先,为什么不破破烂,有所不同?放入/root/power.sh有什么好处?CRON是终端的另一个版本吗?您的解决方案是否要求输入密码?
dago

破折号是另一个在Ubuntu中用于运行所有启动脚本的shell,因为它的启动速度比bash快。有关更多信息,请参见wiki.ubuntu.com/DashAsBinSh
SeppoErviälä11年

cron是用于创建定时任务的工具(例如,每n小时运行一次此脚本)。当系统启动时,它也可以用于运行脚本。
SeppoErviälä11年

这不需要密码。
SeppoErviälä11年

2

这个链接谈论的是谈论同样的问题:

https://bbs.archlinux.org/viewtopic.php?pid=860406

我自己对解决方案感兴趣,请稍后再试。告诉我您是否可以实施该解决方案。

我无法使其运行,因为系统始终告诉我拒绝运行可执行文件的权限。

但是,这似乎可行:

http://philatwarrimoo.blogspot.com/2011/06/powertop-howto-enable-device-power.html

我使用了简短的命令,并使用sudo运行它。

作为半自动解决方案,我创建了一个启动器:

在此处输入图片说明

脚本如下:

在此处输入图片说明

有什么方法可以防止询问我的密码?


@dago-“权限被拒绝”错误的原因是因为您需要运行“ chmod + x setauto.sh”,即使执行过滤的脚本可执行。
fossfreedom

1
@dago-同样,将解决方案绑定到脚本中,并使用此解决方案使脚本自动运行,而不是手动运行-askubuntu.com/questions/9806/…–
fossfreedom

理解了第一句话。但是第二种方法对我来说似乎更容易。我试图通过将xterm -e放在前面来通过启动器执行tis命令。它要求我输入密码,但实际上不起作用。你能帮助我吗?它希望半手动运行它,因为只有在使用电池时才需要它。
dago

@dago-建议创建一个桌面文件并使用gksudo运行脚本。如有疑问,请复制并粘贴philatwarrimoo中描述您的新脚本文件的代码,整理答案,然后我将使用建议的newfile.desktop文件编辑您的答案,您可以从
natty

按照建议做了。将启动器图标添加到启动器时,松开所选符号。
dago

0

每rubo77的回答,我跑powertop --auto-tune/etc/rc.local,然后撤消不需要的默认变化。

但是,由于我要禁用自动电源控制的设备是一个外部USB设备,可能会以其他/sys树形设备编号出现,因此我做了一些脚本编写工作来动态识别它:

/usr/local/sbin/powertop --auto-tune

export VENDOR=aaaa
export PRODUCT=bbbb

for d in /sys/bus/usb/devices/*; do
        if [ -f $d/idVendor ] && \
           [ "$(cat $d/idVendor)" == "${VENDOR}" ] && \
           [ -f $d/idProduct ] && \
           [ "$(cat $d/idProduct)" == "${PRODUCT}" ]; then
                echo 'on' > $d/power/control
        fi   
done

exit 0

其中VENDORPRODUCT设置为USB供应商和产品ID(小写十六进制)。

这些可以通过

  • lsusb输出中标识设备(ID以形式出现在其中aaaa:bbbb),或

  • 当您切换电源设置,转到设备的当前/sys/bus/usb/devices/*目录并从当前文件idProductidVendor文件中获取值时,观察powertop运行的命令。


-1

我遇到了类似的问题,在阅读了该网站上的问题后,发现“ powertop”程序显然更适合开发人员。

如何安装powertop 1.13?

对于用户更有用的版本是在存储库中找到的“ powertop-1.13”。它显示节电建议以及执行建议所使用的命令。

这个Red Hat Docs网站提供了进一步的说明,以使这些更改永久生效。

特别:

为了帮助您使更改永久生效,PowerTOP将显示执行该优化所运行的确切命令。/etc/rc.local使用首选的文本编辑器将命令添加到文件中,以使该命令 在计算机每次启动时生效。

祝好运!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.