ubuntu18.04下cpu睿频模式设置
由于有一台老笔记本用来充当服务器,自然会在上面跑些业务。可感觉CPU不给力,于是研究了一下,发现CPU睿频有挺多有趣的点,遂逐一试了一下,记录下来。
首先就是查看cpu信息,传统的查看方法有两种,一种是lscpu,另一种则是查看/proc/cpuinfo文件信息。
但实际上还可以通过sysfs查看cpu主频,即查看/sys/devices/system/cpu/cpu0/cpufreq目录下的文件获得cpu信息。若该目录为空,则需要手动apt安装cpufrequtils软件包。
cpuinfo_max_freq cpuinfo_min_freq 代表cpu支持的最大、最小频率
scaling_available_governors 可供软件选择的频率调节策略
scaling_governor 当前选择的策略
scaling_max_freq scaling_min_freq 软件调节时的最大、最小频率
scaling_cur_freq 是软件当前指定的频率
scaling_driver 调节频率的驱动 (当前为intel_pstate)
注意/sys/devices/system/cpu目录下有cpu0, cpu1, cpu2, cpu3四个文件夹,对应本机上的4个核心(实际上是2核4线程)。
对于现代 Intel CPU,将使用 pstate 功率驱动程序,而非下列其他驱动程序。此驱动程序的优先级高于其他驱动程序,并编入内核(而非编译为模块)。此驱动程序将自动用于 Sandy Bridge(以及更新的 CPU)。如果在使用这个驱动的时候遇到问题,建议您在 Grub 的内核参数中将其禁用(即修改 /etc/default/grub 文件,在 GRUB_CMDLINE_LINUX_DEFAULT= 后添加 intel_pstate=disable)。您可以使用与此驱动程序配套的用户空间工具,但这些工具不受您的控制。
尽管上述 P State 行为会受到 /sys/devices/system/cpu/intel_pstate 影响,例如:可以通过 # echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo关闭 Intel 睿频加速,从而降低 CPU 的温度。
对于现代 Intel CPU,Linux Thermal Daemon 也提供了一些其他的控制方法(例如 thermald),它们可以通过 P-state、T-state 或 Intel 节能驱动程序来主动控制系统温度。thermald 也适用于较老的 Intel CPU。如果最新版本的驱动程序不可用,那么守护进程会还原为 x86 MSR (Model Specific Register),由 Linux“cpufreq 子系统”来控制系统冷却。
为了关闭intel_pstate,可在/etc/default/grub文件中找到GRUB_CMDLINE_LINUX_DEFAULT,在后面加上"intel_pstate=disable",然后执行sudo update-grub。
安装cpufrequtils之后,可执行cpufreq-info查看CPU频率信息。
接下来即可使用如下指令指定cpu频率模式
sudo cpufreq-set -g powersave
sudo cpufreq-set -d 1800m -u 2700m ## 适用模式为powersave|ondemand|conservative|performance
sudo cpufreq-set -f {1800m~2700m} ## 适用模式为userspace
使用上述方式设置后,重启电脑又会回到默认值。为了让该设置长久生效,需安装sysfsutils,然后编辑/etc/sysfs.conf,在其中加入如下语句(有多少cpu就加多少行)
devices/system/cpu/cpu0/cpufreq/scaling_governor = performance
devices/system/cpu/cpu1/cpufreq/scaling_governor = performance
devices/system/cpu/cpu2/cpufreq/scaling_governor = performance
devices/system/cpu/cpu3/cpufreq/scaling_governor = performance
此外,查看和设置cpu频率还可以使用cpupower工具,该工具需要手动安装linux-tools-common和linux-tools-generic
sudo apt-get install linux-tools-common linux-tools-generic
安装完成之后可以用cpupower monitor指令查看cpu信息。
红框中即为cpu频率。也可采用如下指令查看cpu信息。
cpupower -c all frequency-info
如果要设置CPU性能模式,可用如下指令设置。
cpupower -c all frequency-set -g performance ## 设置为性能模式
cpupower -c all frequency-set -g powersave ## 设置为节能模式
如果想使每个核心运行在不同的频率,需要注意以下问题:
cpufreq提供的很多功能并不被Hardware或者Kernel所支持,所以通过cpufreq设置的功能不一定会按照预期运行。例如,如果利用cpufreq为每个cpu设置单独的运行的频率,现实中在超线程的系统,两个CPUs可能会绑定在一起,所以必须有相同的频率。
Intel P-states实际上是提供了一个frequency-voltage对,通过降低cpu运行的电压来降低cpu的运行频率。这些frequency-voltage对是离散的,可能与cpufreq提供的可选频率有出入。
对于intel的cpu,当前消费级别的uncore(如i系),只支持设置唯一一个时钟频率。然后是服务器级的uncore(如E系),虽然支持每个核心不同频率,但是你一旦指定他们运行在不同的频率,uncore中功耗控制单元(PCU)可能会再次改写你的请求,因为PCU可能认为你的设定不合理。
通过修改MSR IA32_PERF_CTL寄存器貌似可以要求每个核心运行在不同频率,但是这并不意味着硬件会响应你的请求。
通过设置不同核的电压,间接改变核心的运行频率,这一思路受限于很少系统是有与核数量相同的电源来提供运行在不同电压上。并且在Haswell架构之前,频率和电压是绑定的,一起写入MSR IA32_PERF_CTL。Haswell 提供了 on-chip voltage regulators ,其允许给不同的核心不同的频率。但这也不意味着硬件会响应你的请求(因为PCU的存在)。
PCU有最终的决定权,这部分详细可以去看 Uncore Performance Monitoring Manuals for the various Xeon E5 products
注意以上几种查看cpu频率的方式显示的结果会有所差别,但具体哪个比较准确,我也不知道。
最后,可以通过top查看cpu负载情况,
其中红框中代表1分钟,5分钟,15分钟的系统平均负载情况。也可通过uptime指令查看,
这里有必要解释一下平均负载的意思。
系统平均负载:是处于可运行或不可中断状态的平均进程数。
可运行进程:使用 CPU 或等待使用 CPU 的进程
不可中断状态进程:正在等待某些 IO 访问,一般是和硬件交互,不可被打断(不可被打断的原因是为了保护系统数据一致,防止数据读取错误)
vmstat可用于查看系统内存,cpu上下文切换和中断次数。(参数1代表每隔1秒输出一次)
其中cs为每秒的上下文切换次数;in为每秒的中断次数;r表示就绪队列长度,正在运行或等待 CPU 的进程;b表示不可中断睡眠状态的进程数,例如正在和硬件交互。
taskset可将进程指定cpu运行。
-p, 设定一个已存在的pid,而不是重新开启一个新任务
-c, 指定一个处理,可以指定多个,以逗号分隔,也可指定范围,如:2,4,5,6-8。
例如如下语句将进程13290切换到cpu3上。
taskset -cp 3 13290
以下语句则将任务运行在cpu0,cpu2和cpu3上。
taskset -c 0,2-3 tar jcf test.tar.bz2 test
nice则可以指定程序运行的优先级,最高为-20,最低为19,常规程序为0。以下指令指定程序以低优先级10运行。
nice -n 10 tar zcf test.tar.gz test
若要调整已经运行的程序优先级,则需要用renice,例如下面语句将进程13348的优先级调整为8
renice 8 13348
ulimit可以限制当前shell及其派生的子进程的cpu运行时间,因此可在脚本中使用使得脚本执行时间受限。但这样做可能导致程序无法顺利运行完。
#!/bin/bash
ulimit -SHt 100
tar zcvf test.tar.gz test
为了排查cpu负载情况,可安装stress工具对cpu进行压力测试,同时利用perf进行性能分析。这部分内容比较多,以后再详细介绍。
- 手把手推导Back Propagation
- 手把手推导Back Propagation
- ubuntu18.04下cpu睿频模式设置
- aircrack-ng的使用
- python实现kalman滤波的一个简单例子
- btrfs的使用
- 利用Python做科学计算
- 【机器学习系列】概率图模型第四讲:变量消除法和Belief Propagation算法
- Go Context: Cancelation and Propagation
- FPGA开发流程
- 反向傳播演算法(Back propagation)(1) — 小簡介
- A Facebook software engineer publicly resigned in protest over the social network's 'propag...
- Neurons, Activation Functions, Back-Propagation, Epoch, Gradient Descent: What are these?
- HSIC bottleneck: An alternative to Back-Propagation
- This cryptocurrency mining botnet uses Taylor Swift pics to propagate itself
- Constant propagation is now on by default in nightly
- EMNLP 2019结合单词级别意图识别的stack-propagation框架进行口语理解
- EMNLP 2019结合单词级别意图识别的stack-propagation框架进行口语理解