Oka*_*ari 30 performance power-management
当我使用 Windows 8.1 时,有一个“高性能”的电源选项,可以以电源为代价获得更高的性能。
有没有办法在 Linux 上将我的电源选项设置为“高性能”?
Win*_*nix 40
要查看可用的调速器,请使用以下命令:
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
performance powersave
Run Code Online (Sandbox Code Playgroud)
如果您确实有多个调控器,则可以使用以下命令检查当前正在使用的内容:
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
powersave
Run Code Online (Sandbox Code Playgroud)
要将处理器更改为性能模式,请使用:
$ echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
performance
Run Code Online (Sandbox Code Playgroud)
然后您会注意到 CPU% 利用率下降了大约 5%,但也会注意到速度将从大约 1000 MHz 增加到 3000 MHz,并且温度会飙升约 10 度,具体取决于您的处理器:
我注意到,即使在Ubuntu 首次启动时设置为省电模式(我一直使用),它也会在性能模式下运行90 秒,然后最终进入省电模式。
在使用上述适当的命令手动将调控器设置为性能模式后,仍然如此。通过使用上面的适当命令确认它现在已经在性能模式下停留了 10 分钟,并通过上面的 conky 显示双重确认。
我让调速器开着performance30 分钟,它工作得很好。一些读者可能会感兴趣,当关闭性能调节器回到默认的节能调节器时,conky 显示的样子:
CPU% 利用率飙升了 5%,但 CPU 频率下降了 1500 MHz,温度下降了大约 10 度。总的来说,我认为省电模式最适合大多数配置。
2019 年 4 月 12 日 - 有人要求提供conky代码,所以我包含了今天的版本。今天的刷新率设置为 2.5 秒,而在 .gifs 中可能是 1 秒或 0.75 秒。我在这里编辑了一些代码,因为我的代码设置为三台显示器,大多数人将拥有一台显示器。
存储部分有点棘手。您需要将设备名称更改为您自己的名称,if如果未安装分区,则会进行测试,显示系统信息,如缓存和缓冲区。
override_utf8_locale yes
use_xft yes
xftfont ubuntu:size=10.5
xftalpha 0.5
uppercase no
no_buffers yes # Subtract cached and buffered ram from memory usage.
short_units yes # Use "G" instead of "GiB"
text_buffer_size 2048
update_interval 2.5 # change to .001 for 1000 times per second stress test
own_window_class Conky
own_window yes
own_window_type dock
own_window_transparent no
own_window_argb_visual yes
own_window_argb_value 145 # semi-transparent
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
double_buffer yes
minimum_size 400
maximum_width 400
alignment top_right
draw_shades yes
# off-white
default_color ECEAE4
# blue
color1 1EB5FF
# light blue
color2 30DDFB
# dark blue
color3 0090ff
# lime
color4 98FF76
default_shade_color 000000
draw_outline no
draw_borders no
stippled_borders 0
TEXT
#------------+
# Distro |
#------------+
${color}Today is:${color green}$alignr${time %A,}$alignr ${time %e %B %G}
${color}Distribution:${color green}$alignr ${execi 6300 cat /etc/issue.net} $machine
${color}Kernel:$alignr${color green} $kernel
${color orange}${voffset 2}${hr 1}
#------------+
# i7-6700 CPU|
#------------+
${color2}${voffset 5}Intel® i-7 6700HQ 3.5 GHz: ${color1}@ ${color green}${freq} MHz
${color}${goto 13}CPU 0 ${goto 81}${color green}${cpu cpu1}% ${goto 131}${color3}${cpubar cpu1 18}
#${cpugauge cpu1 20,40}
#${cpugraph 1 15,200 555555 AAAAAA -l}
${color}${goto 13}CPU 1 ${goto 81}${color green}${cpu cpu2}% ${goto 131}${color3}${cpubar cpu2 18}
${color}${goto 13}CPU 2 ${goto 81}${color green}${cpu cpu3}% ${goto 131}${color3}${cpubar cpu3 18}
${color}${goto 13}CPU 3 ${goto 81}${color green}${cpu cpu4}% ${goto 131}${color3}${cpubar cpu4 18}
${color}${goto 13}CPU 4 ${goto 81}${color green}${cpu cpu5}% ${goto 131}${color3}${cpubar cpu5 18}
${color}${goto 13}CPU 5 ${goto 81}${color green}${cpu cpu6}% ${goto 131}${color3}${cpubar cpu6 18}
${color}${goto 13}CPU 6 ${goto 81}${color green}${cpu cpu7}% ${goto 131}${color3}${cpubar cpu7 18}
${color}${goto 13}CPU 7 ${goto 81}${color green}${cpu cpu8}% ${goto 131}${color3}${cpubar cpu8 18}
#------------+
# Temperature|
#------------+
#${color1}All CPUs ${color green}${cpu}% ${goto 131}${color1}Temp: ${color green}${execpi .001 cat /sys/class/thermal/thermal_zone7/temp | cut -c1-2}°C ${alignr}${color1}Up: ${color green}$uptime
# Next line is for kernel >= 4.13.0-36-generic
${color1}All CPUs ${color green}${cpu}% ${goto 131}${color1}Temp: ${color green}${hwmon 1 temp 1}°C ${alignr}${color1}Up: ${color green}$uptime
# Next line is for temperature with Kerenel 4.4
#${color1}All CPUs ${color green}${cpu}% ${goto 131}${color1}Temp: ${color green}${hwmon 0 temp 1}°C ${alignr}${color1}Up: ${color green}$uptime
${color green}$running_processes ${color1}running of ${color green}$processes ${color1}loaded processes.
${color1}Load Average 1-5-15 minutes: ${alignr}${color green}${execpi .001 (awk '{printf "%s/", $1}' /proc/loadavg; grep -c processor /proc/cpuinfo;) | bc -l | cut -c1-4} ${execpi .001 (awk '{printf "%s/", $2}' /proc/loadavg; grep -c processor /proc/cpuinfo;) | bc -l | cut -c1-4} ${execpi .001 (awk '{printf "%s/", $3}' /proc/loadavg; grep -c processor /proc/cpuinfo;) | bc -l | cut -c1-4}
#------------+
# Intel iGPU |
#------------+
${color orange}${hr 1}${if_match "intel" == "${execpi 99999 prime-select query}"}
${color2}${voffset 5}Intel® Skylake GT2 HD 530 iGPU @${alignr}${color green}${execpi .001 (cat /sys/class/drm/card1/gt_cur_freq_mhz)} MHz
${color}${goto 13}Min. Freq:${goto 120}${color green}${execpi .001 (cat /sys/class/drm/card1/gt_min_freq_mhz)} MHz${color}${goto 210}Max. Freq:${alignr}${color green}${execpi .001 (cat /sys/class/drm/card1/gt_max_freq_mhz)} MHz
${color orange}${hr 1}${else}
#------------+
# Nvidia GPU |
#------------+
${color2}${voffset 5}${execpi .001 (nvidia-smi --query-gpu=gpu_name --format=csv,noheader)} ${color1}@ ${color green}${execpi .001 (nvidia-smi --query-gpu=clocks.sm --format=csv,noheader)} ${alignr}${color1}Temp: ${color green}${execpi .001 (nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader)}°C
${color1}${voffset 5}Ver: ${color green}${execpi .001 (nvidia-smi --query-gpu=driver_version --format=csv,noheader)} ${color1} P-State: ${color green}${execpi .001 (nvidia-smi --query-gpu=pstate --format=csv,noheader)} ${alignr}${color1}BIOS: ${color green}${execpi .001 (nvidia-smi --query-gpu=vbios_version --format=csv,noheader)}
${color1}${voffset 5}GPU:${color green}${execpi .001 (nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader)} ${color1}Ram:${color green}${execpi .001 (nvidia-smi --query-gpu=utilization.memory --format=csv,noheader)} ${color1}Pwr:${color green}${execpi .001 (nvidia-smi --query-gpu=power.draw --format=csv,noheader)} ${alignr}${color1}Freq: ${color green}${execpi .001 (nvidia-smi --query-gpu=clocks.mem --format=csv,noheader)}
${color orange}${hr 1}${endif}
#------------+
# Prcoesses |
#------------+
${color1}${voffset 5}Process Name: ${goto 200}PID ${goto 265}CPU% ${alignr}Mem%
${color}${goto 13}${top name 1} ${goto 190}${top pid 1} ${goto 270}${color green}${top cpu 1} ${alignr}${top mem 1}
${color}${goto 13}${top name 2} ${goto 190}${top pid 2} ${goto 270}${color green}${top cpu 2} ${alignr}${top mem 2}
${color}${goto 13}${top name 3} ${goto 190}${top pid 3} ${goto 270}${color green}${top cpu 3} ${alignr}${top mem 3}
${color}${goto 13}${top name 4} ${goto 190}${top pid 4} ${goto 270}${color green}${top cpu 4} ${alignr}${top mem 4}
${color}${goto 13}${top name 5} ${goto 190}${top pid 5} ${goto 270}${color green}${top cpu 5} ${alignr}${top mem 5}
${color}${goto 13}${top name 6} ${goto 190}${top pid 6} ${goto 270}${color green}${top cpu 6} ${alignr}${top mem 6}
${color}${goto 13}${top name 7} ${goto 190}${top pid 7} ${goto 270}${color green}${top cpu 7} ${alignr}${top mem 7}
${color}${goto 13}${top name 8} ${goto 190}${top pid 8} ${goto 270}${color green}${top cpu 8} ${alignr}${top mem 8}
${color}${goto 13}${top name 9} ${goto 190}${top pid 9} ${goto 270}${color green}${top cpu 9} ${alignr}${top mem 9}
${color orange}${voffset 2}${hr 1}
#------------+
# Storage |
#------------+
${color1}RAM Use/Free:${goto 148}${color red}$mem ${color red} ${goto 220}${membar 15,100} $alignr${color}${memeasyfree}
${color1}Linux Root:${goto 148}${color red}${fs_used /} ${color red} ${goto 220}${fs_bar 15,100 /} $alignr${color}${fs_free /}
${color1}Ubuntu 18.04:${goto 148}${if_mounted /mnt/clone}${color red} ${fs_used /mnt/clone} ${color red} ${goto 220}${fs_bar 15,100 /mnt/clone} $alignr${color}${fs_free /mnt/clone}${else} ${color yellow} /mnt/clone ${endif}
${color1}${if_mounted /mnt/old}Broken 16.04:${goto 148}${color red} ${fs_used /mnt/old} ${color red} ${goto 220}${fs_bar 15,100 /mnt/old} $alignr${color}${fs_free /mnt/old}${else}Cache RAM:${goto 148}${color green}${cached} ${color1} ${alignr}Buffers: ${color green} ${buffers}${endif}
${color1}${if_mounted /mnt/e}WSL+Linux:${goto 148}${color red}${fs_used /mnt/e} ${color red} ${goto 220}${fs_bar 15,100 /mnt/e} $alignr${color}${fs_free /mnt/e}${else}Swap:${goto 148}${color green}${swap} / ${swapmax} $alignr${color green}${swapperc}%${endif}
#${color}NVMe Win 10:${goto 148}${if_mounted /mnt/c}${color green} ${fs_used /mnt/c} / ${fs_size /mnt/c} $alignr${color green}${fs_used_perc /mnt/c}%${else}${color yellow}/mnt/c${endif}
#${color}${if_mounted /mnt/d}HGST_Win10:${goto 148}${color red} ${fs_used /mnt/d} / ${fs_size /mnt/d} $alignr${color green}${fs_used_perc /mnt/d}%${else}Cache RAM:${goto 148}${color green}${cached} ${color} Buffers: ${color green} ${buffers}${endif}
#${color}${if_mounted /mnt/e}WSL+Linux:${goto 148}${color red}${fs_used /mnt/e} / ${fs_size /mnt/e} $alignr${color red}${fs_used_perc /mnt/e}%${else}Swap:${goto 148}${color green}${swap} / ${swapmax} $alignr${color green}${swapperc}%${endif}
${color orange}${voffset 2}${hr 1}
#------------+
# Network |
#------------+
#${color1}Network using vnStat "-i", "-w" and "-m"
${color}${goto 5}Today ${goto 100}Yesterday ${goto 225}Week ${goto 325}Month ${color green}
# vnstatd updates database every five minutes
${execi 300 vnstat -i enp59s0 | grep "today" | awk '{print $8" "substr ($9, 1, 1)}'} ${goto 110}${execi 300 vnstat -i enp59s0 | grep "yesterday" | awk '{print $8" "substr ($9, 1, 1)}'} ${goto 220}${execi 300 vnstat -i enp59s0 -w | grep "current week" | awk '{print $9" "substr ($10, 1, 1)}'} ${goto 315}${execi 300 vnstat -i enp59s0 -m | grep "`date +"%b '%y"`" | awk '{print $9" "substr ($10, 1, 1)}'}
${color}Down: ${color green}${downspeed enp59s0}/s ${color}${goto 220}Up: ${color green}${upspeed enp59s0}/s
${downspeedgraph enp59s0 25,190 000000 ff0000} ${alignr}${upspeedgraph enp59s0 25,190 000000 00ff00}$color
Total: ${color green}${totaldown enp59s0} $color${alignr}Total: ${color green}${totalup enp59s0}
#Bit Rate:$color ${wireless_bitrate wlp60s0}
#------------+
# Brightness |
#------------+
${color orange}${voffset 2}${hr 1}
${color1}${goto 5}Rise: ${color green}${execpi 300 cat /usr/local/bin/.eyesome-sunrise} ${goto 155}${color1}Set: ${color green}${execpi 300 cat /usr/local/bin/.eyesome-sunset} ${alignr}${color1}Level: ${color green}${execpi 10 cat /sys/class/backlight/intel_backlight/brightness}
Run Code Online (Sandbox Code Playgroud)
刚刚注意到上面的 conky 图片只是上半部分。下半部分包含在下面,因此代码更有意义。还要注意 Intel iGPU 之前出现是因为prime-select intel使用过。这里出现 nVidia GPU 是因为prime-select nvidia使用了:
0x2*_*fa0 19
您可以使用以下命令安装 CPU 频率控制器:
sudo apt-get install indicator-cpufreq
Run Code Online (Sandbox Code Playgroud)
然后重启,进入通知区域(顶部面板右侧),点击cpu频率指示器,然后选择性能。
Akh*_*hil 11
将其放在方便的地方~/.bashrc或~/.zshrc
alias cpugetavail='cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_governors'
alias cpushowcurrent='cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor'
alias cpusethigh='echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor'
Run Code Online (Sandbox Code Playgroud)
设置 > 电源模式
在 Ubuntu 22.04 的“电源设置”中,我发现了一个可能感兴趣的设置,您可以选择“电源模式”:
TODO 如何更准确地实施这些?Ubuntu 22.04 如何处理电源模式?似乎在问它。该选项不影响:
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
Run Code Online (Sandbox Code Playgroud)
仍设置为powersave.
它的来源似乎位于:https://github.com/GNOME/gnome-control-center/blob/bb89fc1d0ef1d30ebc804c064f7813f76b473106/panels/power/cc-power-profile-row.c#L131但是通过快速阅读我可以不容易看到它的作用。
已知的 BIOS 模式问题
https://www.phoronix.com/review/thinkpad-p14s-gen4提到了一个相关的 BIOS 错误,该错误迫使 Lenovo ThinkPad P14s 进入低功耗模式:
我在最初的测试中确实遇到了一个值得注意的问题,那就是 ACPI 平台配置文件支持。默认情况下,系统在“low_power”配置文件中运行。当尝试通过 GNOME 界面或通过将不同的平台配置文件写入 sysfs 来更改正在使用的平台配置文件时,不会发生任何更改。联想最终能够重现这个问题。
low_power不幸的是,他没有进一步讨论复制细节,而且我在内核源代码中找不到明确的内容。
后来我实际上买了一台P14s,它实在是太甜了,无法抗拒。在 Ubuntu 23.10 上,“设置”GUI 上的“电源模式”行为如下:
尝试按照以下方式查找我的固件版本:如何使用命令行了解主板 BIOS 版本
sudo dmidecode -t bios
Run Code Online (Sandbox Code Playgroud)
包含:
BIOS Information
Vendor: LENOVO
Version: R2FET33W (1.13 )
Release Date: 09/08/2023
Run Code Online (Sandbox Code Playgroud)
这实际上已在下一个固件更新中修复了!
Vendor: LENOVO
Version: R2FET36W (1.16 )
Release Date: 10/24/2023
Run Code Online (Sandbox Code Playgroud)
我现在可以在模式之间切换!TODO 找到一个区分它们的基准。不是这样的:
stress-ng --cpu 4 --cpu-method matrixprod --metrics-brief --perf -t 4
Run Code Online (Sandbox Code Playgroud)
标杆管理
从Linux 的 CPU 基准测试实用程序中,我发现了一个简单的基准测试,可以清楚地区分我的 Lenovo ThinkPad P51 上的电源线是否已插入:
sudo apt install stress-ng
stress-ng --cpu 4 --cpu-method matrixprod --metrics-brief --perf -t 4
Run Code Online (Sandbox Code Playgroud)
它似乎在多个核心上进行矩阵乘法。
插入电源线并打开“性能”后,我总是得到大约 275 次操作/秒:
info: [177895] stressor bogo ops real time usr time sys time bogo ops/s bogo ops/s
stress-ng: info: [177895] (secs) (secs) (secs) (real time) (usr+sys time)
stress-ng: info: [177895] cpu 4417 4.00 15.98 0.00 1103.41 276.41
Run Code Online (Sandbox Code Playgroud)
一旦我拔掉电源并重新运行,它就会下降到大约 68 ops/s。
通过选择省电模式:
现在之后:
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
Run Code Online (Sandbox Code Playgroud)
| 堵塞 | 电源模式 | scaling_governor |
操作数/秒 |
|---|---|---|---|
| y | 表现 | 节能 | 275 |
| n | 表现 | 节能 | 68 |
| y | 省电器 | 节能 | 268 |
| n | 省电器 | 节能 | 75 |
| y | 表现 | 表现 | 278 |
| n | 表现 | 表现 | 68 |
结论
除了电源线的插拔之外,没有什么重要的。我还无法找到可以让我的计算机忽略电源线状态并保持高性能的软件修复程序。
有关的:
| 归档时间: |
|
| 查看次数: |
72588 次 |
| 最近记录: |