寫在前面
- 整理一些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文章
1391瀏覽量
40602 -
cpu
+關注
關注
68文章
10947瀏覽量
213900 -
Linux
+關注
關注
87文章
11373瀏覽量
211297 -
功耗
+關注
關注
1文章
828瀏覽量
32222
原文標題:Linux性能調優之用電調優(Power Usage Tuning)
文章出處:【微信號:yikoulinux,微信公眾號:一口Linux】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論