写在前面
- 整理一些Linux用电功耗调优的笔记,分享给小伙伴,关于用电调优个人觉得:
- 最好使用powertop这样的专业工具来搞
- 或者使用Linux自带的调优策略来
- 建议针对某些策略进行调优要做好评估,错误预算。
- 如果单纯为了省电,造成生产故障,最后一地鸡毛,那就得不偿失,好心办了坏事。
- 博文提到的策略个人觉得部分并不适合生产环境,部分可以尝试,有些可能内核原因已经不支持了,这里整理出来作为了解
- 博文内容涉及:
-
食用方式
- 需了解Linux基础知识
「 我以为爱情可以填满人生的遗憾,然而,制造更多遗憾的却偏偏是爱情」
我的Linux内核版本
┌──[root@liruilongs.github.io]-[~]
└─$uname-r
4.18.0-193.el8.x86_64
┌──[root@liruilongs.github.io]-[~]
└─$
节能策略
管理与高CPU活动
相关的功耗和废热
是数据中心运行
的主要关注点之一。对于需要最大限度延长电池寿命的移动设备来说,最大限度地减少功耗也越来越重要。
可以使用一些通用策略来降低计算机上的功耗:
- 禁用未使用的服务。
- 禁用不用的硬件设备。
- 避免对系统进行轮询操作。
- 延长延迟活动的生命周期。
- 允许不活动的设备进入省电状态。
下面我们我们看一些可以在在Linux系统上实现这些策略的一些方法。
「禁用以太网局域:ethtool -s eth0 wol d
」
这里需要注意的是,当禁用之后,同一局域网下就不支持远程开机了
┌──[root@liruilongs.github.io]-[~]
└─$ethtool-seth0wold
┌──[root@liruilongs.github.io]-[~]
└─$ethtooleth0
Settingsforeth0:
Supportedports:[TP]
Supportedlinkmodes:1000baseT/Full
10000baseT/Full
Supportedpauseframeuse:No
Supportsauto-negotiation:No
SupportedFECmodes:Notreported
Advertisedlinkmodes:Notreported
Advertisedpauseframeuse:No
Advertisedauto-negotiation:No
AdvertisedFECmodes:Notreported
Speed:10000Mb/s
Duplex:Full
Port:TwistedPair
PHYAD:0
Transceiver:internal
Auto-negotiation:off
MDI-X:Unknown
SupportsWake-on:uag
Wake-on:d
Linkdetected:yes
┌──[root@liruilongs.github.io]-[~]
└─$
支持Wake-On-LAN
的以太网卡必须保持供电以监控Wake-On-LAN以太网帧(可用于远程开机)
,即使在系统断电的情况下。
「启用笔记本模式」
当启用笔记本模式时,缓存中的脏页一次提交,而不是随着时间的推移分散提交,减少了硬盘休眠后重新启动的需要。
┌──[root@liruilongs.github.io]-[~]
└─$echo1>/proc/sys/vm/laptop_mode
┌──[root@liruilongs.github.io]-[~]
└─$cat/proc/sys/vm/laptop_mode
1
┌──[root@liruilongs.github.io]-[~]
└─$
「关闭 nmi_watchdog」
nmi_watchdog
内核模块用于监视内核,并在怀疑CPU陷入繁忙循环时生成一个不可屏蔽的“中断”,允许内核记录调试信息。
┌──[root@liruilongs.github.io]-[~]
└─$cat/proc/sys/kernel/nmi_watchdog
1
┌──[root@liruilongs.github.io]-[~]
└─$echo0>/proc/sys/kernel/nmi_watchdog
┌──[root@liruilongs.github.io]-[~]
└─$cat/proc/sys/kernel/nmi_watchdog
0
┌──[root@liruilongs.github.io]-[~]
└─$
「启用noatime文件系统挂载选项,不更新访问时间」
Unix atime
跟踪文件的访问时间,其效果是每次读都有一个相关的写操作来更新atime
。atime字段
很少使用,可以通过使用noatime挂载文件系统来禁用它
。注意,Linux 6内核支持relative选项,该选项维护atime字段,但将更新提交推迟一天。我们当前的系统为Linux release 8.2 (Ootpa)
支持relative
和strictatime
man帮助文档
atimeDonotusethenoatimefeature,sotheinodeaccesstimeiscontrolledbykerneldefaults.See
alsothedescriptionsoftherelatimeandstrictatimemountoptions.
noatime
Donotupdateinodeaccesstimesonthisfilesystem(e.g.forfasteraccessonthenewsspoolto
speedupnewsservers).Thisworksforallinodetypes(directoriestoo),soitimplies
nodiratime.
启用方式
┌──[root@liruilongs.github.io]-[~]
└─$mount-oremount,noatime/dev/mapper/rhel-home/home
可以通过stat命令来查看文件目录的详细信息
┌──[root@liruilongs.github.io]-[/home]
└─$stat/home/
File:/home/
Size:23Blocks:0IOBlock:4096directory
Device:fd02h/64770dInode:128Links:3
Access:(0755/drwxr-xr-x)Uid:(0/root)Gid:(0/root)
Context:system_uhome_root_t:s0
Access:2020-11-250533.506038318+0800
Modify:2022-04-112350.446087028+0800
Change:2022-06-031141.288596109+0800
Birth:-
┌──[root@liruilongs.github.io]-[/home/liruilong]
└─$hciconfighci0down
蓝牙无线电接收器耗电,并需要连接USB子系统(额,英语小白..原文:and exercises the USB subsystem
.)。我们平常基本不会用的,禁用它
┌──[root@liruilongs.github.io]-[/home/liruilong]
└─$hciconfig-a
hci0:Type:PrimaryBus:USB
BDAddress:3C8061:72ACLMTU:8192:128SCOMTU:64:128
UPRUNNING
RXbytes:1048acl:0sco:0events:51errors:0
TXbytes:1209acl:0sco:0commands:51errors:0
Features:0xff0xff0x8f0xfe0x830xe10x080x80
Packettype:DM1DM3DM5DH1DH3DH5HV1HV2HV3
Linkpolicy:RSWITCHHOLDSNIFFPARK
Linkmode:SLAVEACCEPT
Name:'liruilongs.github.io'
Class:0x4c0000
ServiceClasses:Rendering,Capturing,Telephony
DeviceClass:Miscellaneous,
HCIVersion:2.1(0x4)Revision:0x100
LMPVersion:2.1(0x4)Subversion:0x100
Manufacturer:notassigned(6502)
命令选择 | 描述 |
---|---|
-a | 显示蓝牙设备信息 |
up | 开启蓝牙设备 |
down | 关闭蓝牙设备 |
reset | 重置蓝牙设备 |
pscan | 启用页面扫描,禁用查询扫描 |
┌──[root@liruilongs.github.io]-[/home/liruilong]
└─$hciconfigpscan
hci0:Type:PrimaryBus:USB
BDAddress:3C8061:72ACLMTU:8192:128SCOMTU:64:128
UPRUNNING
RXbytes:1840acl:0sco:0events:78errors:0
TXbytes:1571acl:0sco:0commands:78errors:0
┌──[root@liruilongs.github.io]-[/home/liruilong]
└─$hciconfighci0down
┌──[root@liruilongs.github.io]-[/home/liruilong]
└─$hciconfigpscan
hci0:Type:PrimaryBus:USB
BDAddress:3C8061:72ACLMTU:8192:128SCOMTU:64:128
DOWN
RXbytes:1840acl:0sco:0events:78errors:0
TXbytes:1571acl:0sco:0commands:78errors:0
「启用按需CPU频率调控器」
Linux内核允许通过可配置的策略来控制CPU速度。ondemand调控器允许cpu闲置或在使用不频繁时以较低的速度运行。
┌──[root@liruilongs.github.io]-[/usr/lib/modules/4.18.0-193.el8.x86_64/kernel/drivers/cpufreq]
└─$cat/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
┌──[root@liruilongs.github.io]-[/usr/lib/modules/4.18.0-193.el8.x86_64/kernel/drivers/cpufreq]
└─$modprobecpufreq_ondemand
┌──[root@liruilongs.github.io]-[/usr/lib/modules/4.18.0-193.el8.x86_64/kernel/drivers/cpufreq]
└─$echoondemand>/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
┌──[root@liruilongs.github.io]-[/usr/lib/modules/4.18.0-193.el8.x86_64/kernel/drivers/cpufreq]
└─$
常见策略我们简单来看下。
-
ondemand
:系统默认的超频模式
,按需调节,内核提供的功能,不是很强大,但有效实现了动态频率调节,平时以低速方式运行,当系统负载提高时候自动提高频率。以这种模式运行不会因为降频造成性能降低,同时也能节约电能和降低温度。一般官方内核默认的方式都是ondemand。 -
interactive
:交互模式
,直接上最高频率,然后看CPU负荷慢慢降低,比较耗电。Interactive 是以 CPU 排程数量而调整频率,从而实现省电。InteractiveX 是以 CPU 负载来调整 CPU 频率,不会过度把频率调低。所以比 Interactive 反应好些,但是省电的效果一般。 -
conservative
:保守模式
,类似于ondemand,但调整相对较缓,想省电就用他吧。Google官方内核,kang内核默认模式。 -
smartass
:聪明模式
,是I和C模式的升级,该模式在比interactive 模式不差的响应的前提下会做到了更加省电。 -
performance
:性能模式
,只有最高频率,从来不考虑消耗的电量,性能没得说,但是耗电量。 -
powersave
省电模式
,通常以最低频率运行。 -
userspace
:用户自定义模式
,系统将变频策略的决策权交给了用户态应用程序,并提供了相应的接口供用户态应用程序调节CPU 运行频率使用。也就是长期以来都在用的那个模式。可以通过手动编辑配置文件进行配置 -
Hotplug
:类似于ondemand
, 但是cpu会在关屏下尝试关掉一个cpu,并且带有deep sleep,比较省电。
临时设置,发现报错了。根据提示信息我们排查一下问题。
┌──[root@liruilongs.github.io]-[/sys/devices/system/cpu/cpu0]
└─$cpupowerfrequency-set-gondemand
Settingcpu:0
Errorsettingnewvalues.Commonerrors:
-Doyouhaveproperadministrationrights?(super-user?)
-Isthegovernoryourequestedavailableandmodprobed?
-Tryingtosetaninvalidpolicy?
-Tryingtosetaspecificfrequency,butuserspacegovernorisnotavailable,
forexamplebecauseofhardwarewhichcannotbesettoaspecificfrequency
orbecausetheuserspacegovernorisn'tloaded?
查frequency-info信息,发现调频的信息都没有
┌──[root@liruilongs.github.io]-[/sys/devices/system/cpu/cpu0]
└─$cpupowerfrequency-info
analyzingCPU0:
noorunknowncpufreqdriverisactiveonthisCPU
CPUswhichrunatthesamehardwarefrequency:NotAvailable
CPUswhichneedtohavetheirfrequencycoordinatedbysoftware:NotAvailable
maximumtransitionlatency:Cannotdetermineorisnotsupported.
hardwarelimits:NotAvailable
availablecpufreqgovernors:NotAvailable
Unabletodeterminecurrentpolicy
currentCPUfrequency:Unabletocallhardware
currentCPUfrequency:Unabletocalltokernel
booststatesupport:
Supported:no
Active:no
BoostStates:0
TotalStates:1
Pstate-P0:1600MHz
可能是调频模块没有启动,我们来看下。
┌──[root@liruilongs.github.io]-[/sys/devices/system/cpu/cpu0]
└─$cd/sys/devices/system/cpu/cpu0;ls
cachecrash_notes_sizefirmware_nodenode0subsystemuevent
crash_notesdrivermicrocodepowertopology
确实么有名为cpufreq的文件夹,然后我们看一下我的CUP信息
┌──[root@liruilongs.github.io]-[/sys/devices/system/cpu/cpu0]
└─$cat/proc/cpuinfo|grepname
modelname:AMDRyzen72700UwithRadeonVegaMobileGfx
modelname:AMDRyzen72700UwithRadeonVegaMobileGfx
┌──[root@liruilongs.github.io]-[/sys/devices/system/cpu/cpu0]
└─$
可以用的 CPUfreq 模块
┌──[root@liruilongs.github.io]-[/sys/devices/system/cpu/cpu0]
└─$ls/usr/lib/modules/$(uname-r)/kernel/drivers/cpufreq/
acpi-cpufreq.ko.xzp4-clockmod.ko.xzspeedstep-lib.ko.xz
amd_freq_sensitivity.ko.xzpowernow-k8.ko.xz
┌──[root@liruilongs.github.io]-[/sys/devices/system/cpu/cpu0]
└─$
- p4-clockmod.ko.xz Intel P4的处理器
- speedstep-lib.ko.xz 迅弛,很多笔记本都是这个
- amd_freq_sensitivity.ko.xz,powernow-k*.ko AMD处理器用的
- acpi-cpufreq.ko.xz 如果所有的都不行,试试这个,(但2.6.20或以上的内核推荐优先使用该项)
加载一下AMD对应的模块试试,发现没办法加载
┌──[root@liruilongs.github.io]-[/lib/modules/4.18.0-193.el8.x86_64/kernel/drivers/cpufreq]
└─$modprobepowernow-k8
modprobe:ERROR:couldnotinsert'powernow_k8':Nosuchdevice
尝试修改一下配置试试,我们要修改这个文件
┌──[root@liruilongs.github.io]-[/lib/modules/4.18.0-193.el8.x86_64/kernel/drivers/cpufreq]
└─$cat/proc/cmdline
BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-193.el8.x86_64root=/dev/mapper/rhel-rootroresume=/dev/mapper/rhel-swapnet.ifnames=0biosdevname=0rd.lvm.lv=rhel/rootrd.lvm.lv=rhel/swaprhgbquiet
但是cmdline 不能直接更改,而是通过更改配置文件生成的该文件
┌──[root@liruilongs.github.io]-[/lib/modules/4.18.0-193.el8.x86_64/kernel/drivers/cpufreq]
└─$sed'$aGRUB_CMDLINE_LINUX_DEFAULT="intel_pstate=disable"'/etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed's,release.*$,,g'/etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="resume=/dev/mapper/rhel-swapnet.ifnames=0biosdevname=0rd.lvm.lv=rhel/rootrd.lvm.lv=rhel/swaprhgbquiet"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true
GRUB_CMDLINE_LINUX_DEFAULT="intel_pstate=disable"
┌──[root@liruilongs.github.io]-[/lib/modules/4.18.0-193.el8.x86_64/kernel/drivers/cpufreq]
└─$sed-i'$aGRUB_CMDLINE_LINUX_DEFAULT="intel_pstate=disable"'/etc/default/grub
运行grub2-mkconfig -o /boot/grub2/grub.cfg
,重新生成config文件
┌──[root@liruilongs.github.io]-[/lib/modules/4.18.0-193.el8.x86_64/kernel/drivers/cpufreq]
└─$grub2-mkconfig-o/boot/grub2/grub.cfg
Generatinggrubconfigurationfile...
reboot 重启检查/proc/cmdline
┌──[root@liruilongs.github.io]-[~]
└─$cat/proc/cmdline|grepintel_pstate=disable
BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-193.el8.x86_64root=/dev/mapper/rhel-rootroresume=/dev/mapper/rhel-swapnet.ifnames=0biosdevname=0rd.lvm.lv=rhel/rootrd.lvm.lv=rhel/swaprhgbquietintel_pstate=disable
还是不行,时间关系这里做简单记录,感兴趣小伙伴在研究下,看文档需要系统 BIOS 配置为允许操作系统控制 CPU 电源管理
┌──[root@liruilongs.github.io]-[/usr/lib/modules/4.18.0-193.el8.x86_64/kernel/drivers/cpufreq]
└─$modprobepowernow-k8
modprobe:ERROR:couldnotinsert'powernow_k8':Nosuchdevice
┌──[root@liruilongs.github.io]-[/usr/lib/modules/4.18.0-193.el8.x86_64/kernel/drivers/cpufreq]
└─$
感兴趣小伙伴可以参考下这个:https://access.redhat.com/solutions/253803
「将符合AC97的声卡设置为省电模式」
┌──[root@liruilongs.github.io]-[~]
└─$cat/sys/module/snd_ac97_codec/parameters/power_save
5
┌──[root@liruilongs.github.io]-[~]
└─$echo1>/sys/module/snd_ac97_codec/parameters/power_save
┌──[root@liruilongs.github.io]-[~]
└─$cat/sys/module/snd_ac97_codec/parameters/power_save
1
┌──[root@liruilongs.github.io]-[~]
└─$
「禁用rsyslogd
同步」rsyslog是一个开源的软件程序,它负责写入日志。它记录绝大部分的日志记录,和系统有关的、安全、认证ssh,su、计划任务at,cron等日志。所以这要根据实际情况选择,如果遇到木马入侵等安全相关问题,通过日志排查可以发现问题。
┌──[root@liruilongs.github.io]-[~]
└─$sed-e's#s/var/log/#-'/etc/rsyslog.conf
默认情况下,rsyslogd
在写入所有文件后同步所有文件
。在文件名前面加上"-
"将禁用此行为。
┌──[root@liruilongs.github.io]-[~]
└─$grep/var/log/etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none/var/log/messages
authpriv.*/var/log/secure
mail.*-/var/log/maillog
cron.*/var/log/cron
uucp,news.crit/var/log/spooler
local7.*/var/log/boot.log
┌──[root@liruilongs.github.io]-[~]
└─$
「启用电源感知CPU调度器」
这个我的机器没办法做Demo。感兴趣小伙伴可以研究下
echo1>/sys/devices/system/cpu/sched_mc_power_savings
调整任务调度,使任务在尽可能少的内核上调度,允许未使用的cpu空闲。支持以下值。
- 0:无节能负载均衡(默认值)
- 1:对于长时间运行的线程,先填充一个线程/内核/包
- 2:也将任务唤醒到半空闲的cpu包,以节省电力
「增加虚拟机的脏回写时间」
┌──[root@liruilongs.github.io]-[/sys/devices/system/cpu]
└─$cat/proc/sys/vm/dirty_writeback_centisecs
500
┌──[root@liruilongs.github.io]-[/sys/devices/system/cpu]
└─$echo300000>/proc/sys/vm/dirty_writeback_centisecs
┌──[root@liruilongs.github.io]-[/sys/devices/system/cpu]
└─$cat/proc/sys/vm/dirty_writeback_centisecs
300000
┌──[root@liruilongs.github.io]-[/sys/devices/system/cpu]
└─$
vm/dirty_writeback_centisecs sysctl
控制I/O缓存中的脏页
提交到磁盘的时间
,在Linux中默认为500。增加时间可以显著减少磁盘旋转,但在崩溃的情况下会有更多的数据丢失的风险。
「开启ALPM (SATAAggressive Link Power Management)模式」
现代SATA控制器
可以在不工作时进入低功耗模式,从而显著节省电力。
echomin_power>/sys/class/scsihost/hoste/link_power_management_policy
这个也不行,可能是内核版本的原因,或者是需要安装TLP电源管理工具
「启用USB 的autosuspend」
usbcore.autosuspend=1(onthekernelcommand1ine)
USB自动暂停允许不活动的USB设备进入省电模式。
「开启无线设备的省电模式」
iwprivwlaneset_power5c
无线设备支持不同的功率级别,从1到5不等。O表示自动,6表示不节能。
节能调优配置文件
RHEL7/8的调优服务tuned:提供了大量预设的调优方案,旨在于简化调优的实施,充分利用系统资源与能效。管理员可以针对不同的业务选择不同的优化策略,节能的调优可以使用powersave
策略
┌──[root@liruilongs.github.io]-[/sys/class/scsi_host/host0]
└─$tuned-admlist|greppowersave
-powersave-Optimizeforlowpowerconsumption
┌──[root@liruilongs.github.io]-[/sys/class/scsi_host/host0]
└─$tuned-admprofilepowersave
┌──[root@liruilongs.github.io]-[/sys/class/scsi_host/host0]
└─$tuned-admactive
Currentactiveprofile:powersave
配置功率使用powertop
PowerTOP
是一个笔记本电脑节省电源的 Linux 工具。此工具由 Intel 公司发布。它可以帮助用户找出那些耗电量大的程序,通过修复或者关闭那些应用程序或进程,从而为用户节省电源。
PowerTOP 要求 Linux 内核开启 tickless idle 功能,具备 2.6.21 及以上版本。另外,PowerTOP 工作的最佳平台为笔记本电脑。
官网地址:http://www.linuxpowertop.org/
需要装包
┌──[root@liruilongs.github.io]-[/sys/class/scsi_host/host0/power]
└─$yum-yinstallpowertop
帮助文档
┌──[root@liruilongs.github.io]-[~]
└─$powertop--help
Usage:powertop[OPTIONS]
--auto-tunesetsalltunableoptionstotheirGOODsetting
-c,--calibraterunspowertopincalibrationmode
-C,--csv[=filename]generateacsvreport
--debugrunin"debug"mode
--extech[=devnode]usesanExtechPowerAnalyzerformeasurements
-r,--html[=filename]generateahtmlreport
-i,--iteration[=iterations]numberoftimestoruneachtest
-q,--quietsuppressstderroutput
-s,--sample[=seconds]intervalforpowerconsumptionmeasurement
-t,--time[=seconds]generateareportfor'x'seconds
-w,--workload[=workload]filetoexecuteforworkload
-V,--versionprintversioninformation
-h,--helpprintthishelpmenu
Formorehelppleaserefertothe'man8powertop'
Tunables 分页为调优选择
请使用 Tab, Shift + Tab 或方向键 ←, → 切换至 Tunables 分页 ↑, ↓ 上下移动,于欲调校的项目按下 Enter 进行调校,当所有状态显示为 Good 后即可按下 q 离开。
也可以通过命令来批量设置
┌──[root@liruilongs.github.io]-[~]
└─$powertop--auto-tune
modprobecpufreq_statsfailedLoaded0priormeasurements
RAPLdeviceforcpu0
RAPLdeviceforcpu0
Devfreqnotenabled
globreturnedGLOB_ABORTED
theportissda
LeavingPowerTOP
┌──[root@liruilongs.github.io]-[~]
└─$
PowerTOP 本身并无储存功能,但我们可以借由 powertop --html/csv
产生的报告来调校系统,甚至于开机时载入这些设定.
┌──[root@liruilongs.github.io]-[~]
└─$powertop--html
modprobecpufreq_statsfailedLoaded0priormeasurements
RAPLdeviceforcpu0
RAPLdeviceforcpu0
Devfreqnotenabled
globreturnedGLOB_ABORTED
Preparingtotakemeasurements
Taking1measurement(s)foradurationof20second(s)each.
theportissda
PowerTOPoutputingusingbasefilenamepowertop.html
PSE:docker>scproot@192.168.26.66:/root/powertop.html.
root@192.168.26.66'spassword:
powertop.html100%71KB9.9MB/s00:00
PSE:docker>
原文标题:Linux性能调优之用电调优(Power Usage Tuning)
文章出处:【微信公众号:一口Linux】欢迎添加关注!文章转载请注明出处。
-
内核
+关注
关注
3文章
1372浏览量
40281 -
cpu
+关注
关注
68文章
10855浏览量
211594 -
Linux
+关注
关注
87文章
11294浏览量
209344 -
功耗
+关注
关注
1文章
810浏览量
31937
原文标题:Linux性能调优之用电调优(Power Usage Tuning)
文章出处:【微信号:yikoulinux,微信公众号:一口Linux】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论