linux系统-降低功耗

1、前言

        在移动设备和嵌入式系统领域,续航时间是指设备在一次充电后可以使用的时间长短。嵌入式系统的续航时间取决于多种因素,例如电池容量、功耗、处理器性能等等。为了延长嵌入式系统的续航时间,可以采用低功耗设计,例如使用低功耗的处理器、优化程序代码等。

2、常用的工具

        在国产os当中,大多数采用laptop-mode来进行维护,但是它存在着以下问题:

通过查看源码结构发现,会在

laptop-mode/laptop-mode-tools-1.72.6/install.sh

下进行安装,执行完成之后会包含这个应用程序的配置文件、service服务等其他配置信息,脚本的核心内容如下所示:

$INSTALL -d -m 755 "$DESTDIR/etc/laptop-mode"#安装在/etc/laptop-mode目录下,核心文件为laptop-mode.conf,该文件包含了laptop mode tool下的configuration文件
$INSTALL -d -m 755 "$DESTDIR/etc/laptop-mode/batt-start"#表示开启电源管理脚本
$INSTALL -d -m 755 "$DESTDIR/etc/laptop-mode/batt-stop"#表示关闭电源管理脚本
$INSTALL -d -m 755 "$DESTDIR/etc/laptop-mode/lm-ac-start"#在连接电源的情况下,关闭laptop
$INSTALL -d -m 755 "$DESTDIR/etc/laptop-mode/lm-ac-stop"#在连接电源的情况下,关闭laptop
$INSTALL -d -m 755 "$DESTDIR/etc/laptop-mode/nolm-ac-start"#在使用电池的情况下,打开laptop
$INSTALL -d -m 755 "$DESTDIR/etc/laptop-mode/nolm-ac-stop"#在使用电池的情况下,关闭laptop
$INSTALL -d -m 755 "$DESTDIR/usr/share/laptop-mode-tools/modules"
$INSTALL -d -m 755 "$DESTDIR/usr/share/laptop-mode-tools/module-helpers"
$INSTALL -d -m 755 "$DESTDIR/etc/laptop-mode/conf.d"
$INSTALL -d -m 755 "$DESTDIR/etc/laptop-mode/modules"#laptop-mode的模块说明
$INSTALL -d -m 755 "$DESTDIR/usr/share/polkit-1/actions"
$INSTALL -d -m 755 "$DESTDIR/usr/share/applications"
$INSTALL -d -m 755 "$DESTDIR/usr/share/pixmaps"#包含laptop的一些基本配置项
$INSTALL -d -m 755 "$DESTDIR/usr/sbin"#laptop的执行目录
$INSTALL -d -m 755 "$DESTDIR/$UDEV_D/rules.d"#添加laptop的rules规则
$INSTALL -d -m 755 "$DESTDIR/$MAN_D/man8"#添加laptop的文档说明

综上所述:laptop-mode会存在以下问题:

1、用shell实现,以文件的方式来进行组织,一个脚本实现一个功能,这样的代码组织方式不利于功能扩展和维护;

2、只有一组配置文件作为对外接口,不方便用户的操作

因此,需要在软件层面来设计出一款新的电源管理和功耗优化的程序。在linux系统领域内,有一款自由开源的高级电源管理工具,可以在不进行任何配置的情况下延长电池寿命,它的所有配置均存储在/etc/default/tlp文件下,我们可以根据自己的需求来进行调整:

例如在国产os系统中,将对应的config文件放置在/etc/tlp.d/目录下

这里只列举了配置文件中的部分参数,例如TLP_ENABLE这个参数指的是是否开启TLP,开启之后tlp会往/proc/sys/vm/laptop_mode下进行写值操作,具体源码如下所示:

sudo tlp start

具体源码如下所示:

# --- Subroutines
apply_common_settings () { # apply settings common to all modes
                           # $1: 0=ac mode, 1=battery mode
    set_laptopmode $1
    set_dirty_parms $1
    set_scaling_governor $1
    set_scaling_min_max_freq $1
    set_cpu_hwp_pref $1
    set_cpu_perf_pct $1
    set_cpu_boost_all $1
    set_sched_powersave $1
    set_nmi_watchdog
    set_phc_controls $1
    set_energy_perf_policy $1
    set_disk_apm_level $1
    set_disk_spindown_timeout $1
    set_disk_io_sched
    set_sata_link_power $1
    set_ahci_runtime_pm $1
    set_pcie_aspm $1
    set_radeon_profile $1
    set_wifi_power_mode $1
    disable_wake_on_lan
    set_sound_power_mode $1
    set_runtime_pm $1

    return 0
}
set_laptopmode () { # set kernel laptop mode -- $1: 0=ac mode, 1=battery mode
    check_sysfs "set_laptopmode" "/proc/sys/vm/laptop_mode"

    local isec

    if [ "$1" = "1" ]; then
        isec=${DISK_IDLE_SECS_ON_BAT:-}
    else
        isec=${DISK_IDLE_SECS_ON_AC:-}
    fi
    # replace with empty string if non-numeric chars are contained
    isec=$(printf '%s' "$isec" | egrep '^[0-9]+$')

    if [ -z "$isec" ]; then
        # do nothing if unconfigured or non numeric value
        echo_debug "pm" "set_laptopmode($1).not_configured"
        return 0
    fi

    echo_debug "pm" "set_laptopmode($1): $isec"#添加对应的打印结果
    { printf '%s\n' "$isec" > /proc/sys/vm/laptop_mode; } 2> /dev/null#在这里进行写值

    return 0
}

以上是对tlp start命令的一个初步解析,包含了tlp start的源码和命令的执行结果。

3、tlp工具的使用和配置参数解析

        TLP是适用于Linux系统下电源管理系统,其工作原理是调整影响功耗的内核设置,内核态的配置文件存储在RAM当中,所以并不具备持久性。TLP将配置存储在用户态中,在内核进行启动的时候对其进行配置。TLP处理大多数内核设置都作为sysfs节点导出到用户空间,即为/sys/下的文件,tlp-stat的命令将会显示对应的路径。与此同时TLP会提供两组独立的设置,称为配置文件,一组用于电池(BAT),另外一组用于交流操作。这意味着TLP不仅在启动时,而且在每次电源更改时都必须应用适当的配置文件。如下所示:

例如查看当前设备的电池情况,可以使用

sudo tlp-stat --battery

执行结果如下所示:

使用以下命令来进行查看

sudo tlp-stat --graphics

查看当前设备的显卡状态

我们也可以将当前系统下的tlp配置文件进行导出,例如导出到桌面:

sudo tlp-stat --config | tee /home/dingh/Desktop/tlp-config.txt

导出结果如下所示:

TLP触发事件(信号)

充电器插入(ac供电):应用AC配置文件;充电器已拔下(bat供电):应用BAT配置文件;已插入USB设备:激活设备的USB自动挂起模式;系统启动(boot):应用与当前电源AC/BAT相对应的设备配置文件,应用充电阈值并根据你的个人设置切换蓝牙和wwan设备(在默认设备中进行禁用);系统关机(power off):保存或者切换蓝牙、WIFI和WWAN设备状态,并根据你的个人设置禁用USB自动挂起(在默认配置中禁用)

详细命令如下所示:

4、tlp工具的相关命令

TLP

sudo tlp bat 应用电池配置文件并进入手动模式 手动模式意味着对电源的更改将被忽略,直到下一次重新启动或发出 tlp start 以恢复自动模式

sudo tlp ac应用交流配置文件并进入手动模式

sudo tlp usb 对所有的 ubs 设备应用自动挂起

sudo tlp bayoff 关闭 MediaBay/Ultrabay 中的光驱电源

sudo tlp setcharge [<START_CHARGE_THRESH> <STOP_CHARGE_THRESH>] [BAT0|BAT1|BAT<x>|CMB0|CMB1] 可以设定对指定电池开始充电百分比和结束充电的百分比,以达到养护电池的目的(如果不带参数 会重置电池管理方案)(命令只能暂时更改,如果需要持久化更改 需要修改配置文件)

sudo tlp fullcharge [BAT0|BAT1|BAT<x>|CMB0|CMB1] 设定电池充满

tlp diskid 显示已经配置驱动器的磁盘 ID

以下部分为 ThinkPad 专属

sudo tlp chargeonce [BAT0|BAT1] 将电池充电至停止充电阈值一次,这个阈值是使用 setcharge 设置的

sudo tlp discharge [BAT0|BAT1] 让电池在交流电源下完全放电

sudo tlp recalibrate [BAT0|BAT1]校准电池

TLP-RDW命令

sudo tlp-rdw [ enable | disable ] 启用或关闭无线电管理功能

bluetooth [ on | off | toggle ]
nfc [ on | off | toggle ]
wifi [ on | off | toggle ]
wwan [ on | off | toggle ]
​
启用、禁用、切换或检查内置蓝牙、NFC、Wi-Fi 和 WWAN(3G/UMTS、4G/LTE 或 5G)无线电的状态,如果不带参数则为当前硬件状态(硬件需要支持 rfkill)

TLP-STAT命令

sudo tlp-stat 查看 TLP 配置信息,系统信息和内核省电设置以及电池数据

sudo tlp-stat [-b /--battery] 查看电池信息,部分电池加 -v参数可以查看电压

sudo tlp-stat [-c /--config]查看配置信息

sudo tlp-stat --cdiff 查看默认配置和用户配置之间的差异

sudo tlp-stat [-d /--disk] 查看硬盘配置信息

sudo tlp-stat [-e/ --pcie] 查看 Pcie 配置信息

5、tlp的配置参数解析

--- TLP 1.1 --------------------------------------------
#TLP作为一种用于优化计算机性能和延迟电池寿命的相关技术
+++ Configured Settings: /etc/default/tlp
TLP_ENABLE=1#0表示禁用,1表示开启
TLP_DEFAULT_MODE=AC#一般默认开启的是AC模式不是BATRRAY模式
TLP_PERSISTENT_DEFAULT=0#0时,表示TLP会根据电源来源来自动选择工作模式;1时表示TLP会根据TLP_DEFAULT_MODE来确定指定模式
DISK_IDLE_SECS_ON_AC=0#非0值表示磁盘空闲一段时间后,计算机才会执行同步操作。非0值则表示启用笔记本的电脑模式
DISK_IDLE_SECS_ON_BAT=2#同上
MAX_LOST_WORK_SECS_ON_AC=15#如果计算机连续15秒没有工作,系统将会自动进行关闭,避免用于防止计算机长时间处于空闲状态导致电池消耗过多
MAX_LOST_WORK_SECS_ON_BAT=60#同上
CPU_HWP_ON_AC=balance_performance#表示笔记本在交流电源下,系统将自动启用高性能处理器的省电模式,以平衡性能和功耗;balance_performance表示尽可能保持CPU的高性能运行状态,这可能会导致更高的电能消耗和电池寿命的减少
CPU_HWP_ON_BAT=balance_power#通过降低CPU的运行频率以减少功耗,从而减少电池寿命
SCHED_POWERSAVE_ON_AC=0#表示不在交流电下使用省电模式
SCHED_POWERSAVE_ON_BAT=1#表示在电池供电下启用省电模式
NMI_WATCHDOG=0#是否开启看门狗机制
ENERGY_PERF_POLICY_ON_AC=performance#这意味着系统将使用性能优先策略来管理能耗,这意味着会尽量提高处理器的性能
ENERGY_PERF_POLICY_ON_BAT=power#在电池供电的情况下,系统将使用功耗优先策略来管理能耗,这意味着系统会尽量降低处理器的功耗,以延长电池寿命
DISK_DEVICES="sda sdb"
DISK_APM_LEVEL_ON_AC="254 254"#数值254表示硬盘不会降低转速,同时也不会进入省电模式
DISK_APM_LEVEL_ON_BAT="128 128"#数值128表示硬盘会降低其转速,以实现静音的效果
SATA_LINKPWR_ON_AC="med_power_with_dipm max_performance"#硬盘的链接功率状态为中等功耗模式和最大性能模式
SATA_LINKPWR_ON_BAT="med_power_with_dipm min_power"#硬盘的链接功率状态和最低性能模式
AHCI_RUNTIME_PM_TIMEOUT=15#磁盘在没有活动之前是处于挂起状态
PCIE_ASPM_ON_AC=performance#当电脑处于一个休眠状态,则会降低PCI Express接口的传输速率
PCIE_ASPM_ON_BAT=powersave
RADEON_POWER_PROFILE_ON_AC=high#显卡的解析速率
RADEON_POWER_PROFILE_ON_BAT=low
RADEON_DPM_STATE_ON_AC=performance#是否在AC模式下开启显卡的动态电源管理技术,其中performance处于一种高性能模式
RADEON_DPM_STATE_ON_BAT=battery#如果是BAT模式,则显卡将处于电池优化模式
RADEON_DPM_PERF_LEVEL_ON_AC=auto#会根据显卡的使用情况来自动选择性能等级,已提最佳的传输速率和性能表现
RADEON_DPM_PERF_LEVEL_ON_BAT=auto
WIFI_PWR_ON_AC=off#是否开启WiFi的节能模式,AC模式则开启;BAT模式下关闭
WIFI_PWR_ON_BAT=on
WOL_DISABLE=Y#表示禁用WOL(局域网)技术
SOUND_POWER_SAVE_ON_AC=0#禁用音频省电模式
SOUND_POWER_SAVE_ON_BAT=1#打开音频省电模式
SOUND_POWER_SAVE_CONTROLLER=Y#启用音频的电源管理
BAY_POWEROFF_ON_AC=0#表示不关闭硬盘
BAY_POWEROFF_ON_BAT=0#表示不关闭硬盘
BAY_DEVICE="sr0"#硬盘名称
RUNTIME_PM_ON_AC=on#是否在开启时打开电源管理
RUNTIME_PM_ON_BAT=auto#是否在BAT的模式下自动开启电源管理技术
USB_AUTOSUSPEND=1#表示启用usb设备挂起技术
USB_BLACKLIST_BTUSB=0
USB_BLACKLIST_PHONE=0
USB_BLACKLIST_PRINTER=1
USB_BLACKLIST_WWAN=1
RESTORE_DEVICE_STATE_ON_STARTUP=0

  • 19
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值