Intel CPU主频(Linux)配置总结
【摘要】 一、Linux系统层面Linux内核有一个cpufreq框架,支持根据不同的策略管理CPU运行频率。cpufreq框架分为两层,一层负责策略,一层负责执行。策略层负责决定采用什么运行频率,执行层负责将指令下发给CPU去动态切换运行频率。常见的策略(governor)有两种:performance、powersave。1、配置为performance策略模式,CPU运行频率一般会锁定在某个较高...
一、Linux系统层面
Linux内核有一个cpufreq框架,支持根据不同的策略管理CPU运行频率。
cpufreq框架分为两层,一层负责策略,一层负责执行。策略层负责决定采用什么运行频率,执行层负责将指令下发给CPU去动态切换运行频率。
常见的策略(governor)有两种:performance、powersave。
1、配置为performance策略模式,CPU运行频率一般会锁定在某个较高频率不变。
2、配置为powersave策略模式,系统会根据负载动态调整CPU运行频率。系统负载低的时候,CPU运行频率就低,系统负载高的时候,CPU运行频率就高。
其他策略模式还有userspace、conservative、ondemand、schedutil等。
关于cpufreq框架介绍详见:https://kernel.org/doc/html/latest/admin-guide/pm/cpufreq.html
而Intel专门开发了intel_pstate驱动,其工作在两种模式:
1、active模式:intel_pstate驱动统管策略和执行,只能看到的performance、powersave两种策略。
2、passive模式:intel_pstate驱动退化为单纯的执行驱动,运行策略其他cpufreq策略模块提供。
关于intel_pstate的介绍详见:https://kernel.org/doc/html/latest/admin-guide/pm/intel_pstate.html
通过sysfs接口可以查询cpufreq、intel_pstate的一些状态。
linux@~ # grep . /sys/devices/system/cpu/cpufreq/policy0/*
/sys/devices/system/cpu/cpufreq/policy0/affected_cpus:0
/sys/devices/system/cpu/cpufreq/policy0/cpuinfo_max_freq:3500000
/sys/devices/system/cpu/cpufreq/policy0/cpuinfo_min_freq:1000000
/sys/devices/system/cpu/cpufreq/policy0/cpuinfo_transition_latency:0
/sys/devices/system/cpu/cpufreq/policy0/related_cpus:0
/sys/devices/system/cpu/cpufreq/policy0/scaling_available_governors:performance powersave
/sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq:2999996
/sys/devices/system/cpu/cpufreq/policy0/scaling_driver:intel_pstate
/sys/devices/system/cpu/cpufreq/policy0/scaling_governor:performance
/sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq:3500000
/sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq:1000000
/sys/devices/system/cpu/cpufreq/policy0/scaling_setspeed:<unsupported>
|
linux@~ # grep . /sys/devices/system/cpu/intel_pstate/*
/sys/devices/system/cpu/intel_pstate/max_perf_pct:100
/sys/devices/system/cpu/intel_pstate/min_perf_pct:100
/sys/devices/system/cpu/intel_pstate/no_turbo:0
/sys/devices/system/cpu/intel_pstate/num_pstates:26
/sys/devices/system/cpu/intel_pstate/status:active
/sys/devices/system/cpu/intel_pstate/turbo_pct:43
|
通过命令行也可以操作。
1、查询当前cpufreq驱动、策略和工作频率。
linux@~ # cpupower -c all frequency-info
analyzing CPU 0:
driver: intel_pstate
CPUs which run at the same hardware frequency: 0
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: Cannot determine or is not supported.
hardware limits: 1000 MHz - 3.50 GHz
available cpufreq governors: performance powersave
current policy: frequency should be within 1000 MHz and 3.50 GHz.
The governor "performance" may decide which speed to use
within this range.
current CPU frequency: Unable to call hardware
current CPU frequency: 3.00 GHz (asserted by call to kernel)
boost state support:
Supported: yes
Active: yes
... |
2、配置intel_pstate进入passive模式,并修改cpu频率。
linux@~ # echo passive > /sys/devices/system/cpu/intel_pstate/status linux@~ # cpupower frequency-set -g userspace ... linux@~ # cpupower frequency-set -f 2.5GHz ... |
二、Intel CPU层面
处理器支持多个P-State,每个P-State就是对应一种运行频率。一个CPU一般有个基准频率,如果超过这个频率就是超频,或者睿频,也就是turbo P-State。比如,E5-2650 v4处理器后面会跟个2.2GHz,说明这个处理器基准频率为2.2GHz。而其最小频率为1.2GHz,最大频率为2.9GHz,100MHz为一个台阶,一共有18个P-States。那从2.2GHz到2.9GHz之间的P-States就是turbo P-States。
处理器支持C-State,C0表示CPU在执行指令的状态,除了C0之外的其他State都是低功耗的状态,CPU不会执行指令,也因而会节省更多的功耗。ACPI定义的C State是按照数字递增的如C0,C1,C2,C3,他们和CPU vendor定义的并不完全一致,CPU厂商通常会定义C0, C1E, C6, C7。
Intel CPU支持多种电源管理功能:
1、Inhanced Intel SpeedStep Technology(EIST),支持自动降频来降低功耗,达到节能的目的。
2、Intel Dynamic Acceleration Technology(IDA),超线程两个核一个核忙一个核空闲的时候,处理器会让空闲的核进入C-State,将忙的核主频提高提速,从整体上达到节能效果。
3、Intel Turbo Boost Technology,处理器根据当前运行负载以及功耗、散热等情况,动态调整运行速度。
4、Monitor/Mwait,允许软件主动执行mwait指令,控制处理器进入节能的某个C-State。
Intel CPU提供了若干CPUID寄存器用来查询其各个特性的支持情况。
1、CPUID.01H:用来查询当前处理器型号。
2、CPUID.05H:可以查询处理器对于Mwait、C-State支持情况。
3、CPUID.06H:可以查询当前CPU是否支持Intel Turbo Boost Technology。
4、CPUID.16H:可以查询CPU支持的基准频率、最大频率等。
Intel CPU提供了若干MSR寄存器作为配置界面。
1、IA32_PERF_STATUS(198H):可以用来查询当前处理器工作P-State。
2、IA32_PERF_CTL(199H):可以用来修改处理器当前工作的P-State(调整可能需要一个过程,不一定立即生效)。
3、IA32_MISC_ENABLE(1A0H):不同的位控制标记CPU不同功能开关。
4、IA32_ENERGY_PERF_BIAS(1B0H):用来配置处理器当前电源管理偏好,是performance重要(0)还是powersave重要(15)。
从用户态也有接口查询CPUID、MSR寄存器。
# CPUID.16H
linux@~ # dd if=/dev/cpu/0/cpuid skip=$((16#16)) iflag=skip_bytes bs=16 count=1 2>/dev/null | hexdump -C
00000000 60 09 00 00 ac 0d 00 00 64 00 00 00 00 00 00 00 |`.......d.......|
00000010
linux@~ # echo $((16#960)) $((16#dac))
2400 3500
linux@~ # lscpu | grep Hz
Model name: Intel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz
CPU MHz: 3000.011
CPU max MHz: 3500.0000
CPU min MHz: 1000.0000
# IA32_PERF_STATUS
linux@~ # dd if=/dev/cpu/0/msr skip=$((16#198)) iflag=skip_bytes bs=8 count=1 2>/dev/null | hexdump -C
00000000 00 1e 00 00 ca 1b 00 00 |........|
00000008
linux@~ # echo $((16#1e * 100))
3000
# IA32_PERF_CTL
linux@~ # dd if=/dev/cpu/0/msr skip=$((16#199)) iflag=skip_bytes bs=8 count=1 2>/dev/null | hexdump -C
00000000 00 23 00 00 00 00 00 00 |.#......|
00000008
linux@~ # echo $((16#23 * 100))
3500
|
详见附件《Intel 64 and IA-32 Architectures Software Developer's Manual》。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)