最後更新: 2020-12-12
目錄
- cli get cpu frequency
- cpufreqd
- 查看 CPU frequency 的資訊
- cpufreq-aperf
- cpufreq-set
cli get cpu frequency
lscpu | grep MHz
CPU max MHz: 3400.0000 CPU min MHz: 800.0000
即時每 Core 情況
grep "MHz" /proc/cpuinfo
cpu MHz : 3069.665 cpu MHz : 1300.000 cpu MHz : 3069.205 cpu MHz : 2729.131
cpufreqd
BIOS Setting
make sure Cool'n'Quiet (AMD) or SpeedStep (Intel) is enabled for you CPU
否則用唔到 cpufrequtils
apt-get install cpufrequtils
- /etc/init.d/loadcpufreq
- /etc/init.d/cpufrequtils
- cpufreq-info
- cpufreq-set
- cpufreq-aperf
/etc/init.d/loadcpufreq
* Loading cpufreq kernel modules...
/etc/init.d/cpufrequtils
* CPUFreq Utilities: Setting ondemand CPUFreq governor... * CPU0... * CPU1... [ OK ]
查看 CPU frequency 的資訊
cpufreq-info
analyzing CPU 0: driver: powernow-k8 CPUs which run at the same hardware frequency: 0 CPUs which need to have their frequency coordinated by software: 0 maximum transition latency: 8.0 us. hardware limits: 1.40 GHz - 3.60 GHz available frequency steps: 3.60 GHz, 3.20 GHz, 2.80 GHz, 2.40 GHz, 1.90 GHz, 1.40 GHz available cpufreq governors: conservative, ondemand, userspace, powersave, performance current policy: frequency should be within 3.60 GHz and 3.60 GHz. The governor "ondemand" may decide which speed to use within this range. current CPU frequency is 3.60 GHz (asserted by call to hardware). cpufreq stats: 3.60 GHz:5.19%, 3.20 GHz:0.29%, 2.80 GHz:0.25%, 2.40 GHz:0.56%, 1.90 GHz:0.30%, 1.40 GHz:93.41% (8187765) analyzing CPU 1: ...
# 現在 core 0 的 frequency (-m: human-readable output)
cpufreq-info -c 0 -fm
# 查看統計資料 (-s: statistics)
cpufreq-info -sm
File
/sys/devices/system/cpu/cpu*/cpufreq/
/sys/devices/system/cpu/cpu0/cpufreq/: affected_cpus cpuinfo_max_freq related_cpus scaling_driver scaling_setspeed bios_limit cpuinfo_min_freq scaling_available_frequencies scaling_governor stats cpb cpuinfo_transition_latency scaling_available_governors scaling_max_freq cpuinfo_cur_freq freqdomain_cpus scaling_cur_freq scaling_min_freq ...
行 cpufreq-aperf 出 Err
CPU Average freq(KHz) Time in C0 Time in Cx C0 percentage Could not read cpuid, is the cpuid driver loaded or compiled into the kernel?
解決:
modprobe cpuid msr
cpufreq-aperf Usage:
cpufreq-aperf
output:
CPU Average freq(KHz) Time in C0 Time in Cx C0 percentage 000 3600000 00 sec 096 ms 00 sec 903 ms 09 001 3636000 00 sec 129 ms 00 sec 870 ms 12 000 3600000 00 sec 098 ms 00 sec 901 ms 09 001 3672000 00 sec 137 ms 00 sec 862 ms 13 000 3600000 00 sec 130 ms 00 sec 869 ms 13 001 3672000 00 sec 106 ms 00 sec 893 ms 10
- -g --governor <GOV>
- -c --cpu <CPU> # 在那 core 上套用設定, default: 0
# the governor may select
- -d --min <FREQ>
- -u --max <FREQ>
# Requires userspace governor
- -f --freq <FREQ>
Kernel Modules
ls /lib/modules/$(uname -r)/kernel/drivers/cpufreq/
p4-clockmod.ko # Intel Pentium 4 / Xeon / Celeron processors
pcc-cpufreq.ko #
speedstep-lib.ko # for Intel speedstep
在 ubuntu 12.04 是見不到以下 module 的, 因為它們 compile 到了 kernel
powernow-k8 # AMD CPU
acpi-cpufreq
CPUFreq driver which utilizes the ACPI Processor Performance States.
This driver also supports Intel Enhanced SpeedStep
/boot/config-3.2.0-54-generic:
CONFIG_X86_ACPI_CPUFREQ=y CONFIG_X86_POWERNOW_K8=y
/etc/default/cpufrequtils (you might need to create it if it doesn't exist)
# valid values: userspace conservative powersave ondemand performance # get them from cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors GOVERNOR="conservative"
/etc/init.d/cpufrequtils 負責 load 此設定
支援與否
root@home:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
3600000 3200000 2800000 2400000 1900000 1400000
root@home:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
conservative ondemand userspace powersave performance
查看 CPU 現在的 freq
root@home:~# cat /sys/devices/system/cpu/*/cpufreq/cpuinfo_cur_freq
3600000 3600000
scaling_driver:
cat /sys/devices/system/cpu/*/cpufreq/scaling_driver
在使用中的 CPU
AMD A6-5400K APU with Radeon(tm) HD Graphics
power management: ts ttp tm 100mhzsteps hwpstate cpb eff_freq_ro
Tuning the ondemand governor
- performance Run the cpu at max frequency
- ondemand Does a periodic polling and changes frequency based on the CPU utilization.
- conservative Similar to ondemand. The frequency is gracefully increased and decreased
- powersave Run the cpu at the minimum frequency
# stepping up
# echo -n percent > /sys/devices/system/cpu/cpufreq/ondemand/up_threshold
To set the threshold for stepping down to another frequency:
# echo -n percent > /sys/devices/system/cpu/cpufreq/ondemand/down_threshold
Sampling rate
/sys/devices/system/cpu/cpufreq/ondemand/
sampling_rate
10000
sampling_down_factor
1
userland-based governors
apt-get install cpufreqd
cpufreqd
cpufreqd-get 透過 cpufreqd 獲得資料
cpufreqd-set
/etc/init.d/cpufreqd
/etc/default/cpufreqd
負責設定載入的 module
# CPU kernel module
# Governor modules
/etc/cpufreqd.conf
cpufreqd-get 與 cpufreqd-set
修改 /etc/cpufreqd.conf 後才用到
enable_remote=1 remote_group=root
cpufreqd-get
NULL 查看在 /etc/cpufreqd.conf 預先設定好的 profile
-l list applied Profiles for all cpus.
root@home:~# cpufreqd-get -l
CPU#0: "Performance High" performance 3600000-3600000 CPU#1: "Performance High" performance 3600000-3600000
root@home:~# cpufreqd-get
Name (#1): Performance High Active on CPU#: 0, 1 Governor: performance Min freq: 3600000 Max freq: 3600000 Name (#2): Performance Low Governor: performance Min freq: 2800000 Max freq: 2800000 Name (#3): Powersave High Governor: powersave Min freq: 2400000 Max freq: 2400000 Name (#4): Powersave Low Governor: powersave Min freq: 1400000 Max freq: 1400000
cpufreqd-set <command>
- manual
- dynamic <-- cpufreqd will poll system parameters
-
number <-- 用 cpufreqd-get 拿到的 Profile number
P-state 與 C-states
Processor performance states (P-states)
processor operating states (C-states)
* A P-state is a voltage and frequency operating point
* Higher P-state numbers represent slower processor speeds
* To operate at any P-state, the processor must be in the C0 operational state
* Higher C-state numbers represent deeper CPU sleep states
Intel: Enhanced Intel SpeedStep Technology
Software: CPUFreq
Dell Active Power controller (DAPC)
power profile:
OS Control
Enabled and all supported processor P-states are provided to the OS in the ACPI table
Active Power Controller
Enable DellSystem DBPM (BIOS will not make all P states available to OS)
Max Performance
The processor P-state is statically set to the highest supported P-state DBPM is disabled
Custom
詞語:
DBPM: demand‐based power management
C-States
There are only a few reasons to Disable any C-States:
1. Overclocking
2. The CPU needs to be in a full power mode 24/7
C0 ~ C10
C0 - CPU fully turned on
C1 - Halt
當有程式執行了 "HLT"(Halt) 指令後, CPU會進入傳統 halt 模式
halt: the processor is not executing instructions,
but can return to an executing state essentially instantaneously.
bus interface unit and APIC are kept running at full speed.
C1E (Enhanced C1 state)
Intel)
Stops CPU main internal clocks via software and reduces CPU voltage;
bus interface unit and APIC are kept running at full speed.
AMD)
Stops all CPU internal clocks.
C2 - Stop Grant
Stops CPU main internal clocks via hardware("STPCLK" 引腳);
bus interface unit and APIC are kept running at full speed.
AMD)
Stops CPU internal and external clocks via hardware
C3 - Deep Sleep
Stops all CPU internal and external clocks & bus interface
C4 - Deeper Sleep
降低 Core 的電壓
C4E/C5 - Enhanced Deeper Sleep (Intel)
Reduces CPU voltage even more and turns off the memory cache
C6 - Deep Power Down
CPU 的完整狀態儲存到一個特定的SRAM中, 之後關閉 CPU
AMD: 每個 CPU Core 均擁有自己的 VDD 線路
C7
C8
C9
C10