ProxmoxVE软路由降频节能控温
This is an article about Linux OS-level active settings for Intel processor temperature control on SFF (small form factor) FANLESS solution, mostly targets the “software router” computer.
In this case, it’s a compact size stuff, with 6 Intel i211 GigE, 2C4T i5-7300U mobile CPU, 8GB RAM and a non-brand 128GB SSD inside.
选择无扇设计其实是一种人生态度,安静、平和、与世无争……呃再来个什么形容词,充满哲思?呃,好吧,起码有一点,少一个电机,多一份可靠吧。
尽管大多数人喜欢那种强悍的、bling bling的RGB灯风扇乃至水冷,动不动就拿显存比人家内存,拿内存比人家硬盘的口吻;对此我只能说,KINDA NOT MY STYLE(壕啊,收了您的神通吧)!
本文的主角是这货,深圳产,6 Intel 千兆软路由,处理器Core i5-7300U,双核四线程移动版本。
【注】:前文吾の中土 | My Middle Earth有写到小型办公网络架构设计,此处不再赘述,只是最近加了几个新VLAN用于DELL iDRAC和研发专用实验网段而已。
话说在五月,一个和煦的春天,笔者依例去抚摸价值千元的高级软路由,突然间手指一阵刺痛……电,呃不是,烫到了。
速登SSH查看,oh~烫手算什么,我觉得我的高级货还可以抢救一下。
先把吃CPU的问题进程杀了,把温度降下来。
然后去讨某宝老板的嫌,估计老板的内心独白是“what’s your problem?”
只希望主板和老板一样经得住考验。
以上都是玩笑。其实工控主板的设计,处理器并非插座,而是直接焊在主板上,这样的设计本身就更利于散热;此外一般processor上会粘一块超出正常尺寸的散热片,跟所谓“冰刺”外壳接在一起,这也是在CPU高温时,壳体烫手的主要原因——散热设计考虑到了。
此外,主板BIOS也不是吃素的。主动散热时,BIOS会随着CPU核心温度的升高,同步通过PWM调速风扇来调高转速,以期达到降温的效果;而被动散热的情况下,一旦CPU温度超限,BIOS会控制CPU有意降频;正如驾驶建议里的“让速不让道”,意思是要急刹避祸,不要铤而走险变线导致事故。
说了这么多,Linux下有没有更主动的降频控温方案,让我们助BIOS一臂之力呢?
先查看操作系统(此处是Proxmox VE也即Debian Linux)提供的能源管理选项。
1 2 |
root@pve-router:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors performance powersave |
看来支持两个选项,“性能”和“节能”模式。
那么接下来装两个包,前者控制能源管理选项并实时输出cpu频率,后者显示核心温度。
1 |
sudo apt install cpufrequtils lm-sensors |
运行 cpufreq-info ,画风是这样的。好家伙,明明没负载的系统,运行频率(3.5GHz)跑过了标称频率(2.6GHz),已经处于“睿频加速”状态了,难怪负载一高,温度就突破天际。
接下来我们要创建一个配置文件 nano /etc/default/cpufrequtils ,用于在系统启动时,把系统切换到“节能”模式。
1 2 3 |
# valid values: powersave performance # get them from cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors GOVERNOR="powersave" |
正常情况下,这就打完收工了,重启检查成果。效果立竿见影,无负载频率从3.5直降到0.8~1.0左右。
反之亦然,如果想把CPU设置在“性能模式”,改动 cpufrequtils文件设到“performance”即可。
哦,差点忘记提到怎么查看CPU温度,刚才装过的lm-sensors包派上用场了。
sensors 运行一次,则即时显示多个核心的温度;想要一直显示一直爽,前边加个watch即可。
接下来又有同学提出需求,说powersave模式下,机器比较“懒”,不加足量负载,机器总是表现的很磨叽,调试时明显感觉机器慢。但是切到performance模式吧,又不适合一台软路由长期跑的感觉。确实,对一台路由而言,x86-64处理器其实是蛮强的,只要不跟人类交互,确实1GHz频率完全不会影响路由性能。
因此想让机器设置在powersave模式,但临时在软路由上调试时跑win10或者centos还要够给力。这是典型的“又要马儿跑,又要马儿不吃草”需求。
这样,本地创建一个脚本 nano cpufreq-set-all ,写入如下内容,写好后加上运行权限 chmod +x cpufreq-set-all。
1 2 3 4 5 6 |
#!/bin/bash MAX_CPU=$((`nproc --all` - 1)) for i in $(seq 0 $MAX_CPU); do echo "Changing CPU " $i " with parameter "$@; cpufreq-set -c $i $@ ; done |
然后就操作 ./cpufreq-set-all -g performance 随意切换了(下图点开为动图)。
如此设置仅在本次运行时有效,重启机器后,依然会回到 /etc/default/cpufrequtils 的设置上。
在某些发行版比如ubuntu上,如果重启后发现无法切换电源管理模式,要检查systemd有无一个叫做ondemand(按需调节)的服务,有的话禁用掉即可。
1 2 3 4 5 |
py27@aq-kiosk:~$ sudo systemctl list-unit-files | grep ondemand ondemand.service enabled py27@aq-kiosk:~$ sudo systemctl disable ondemand Removed /etc/systemd/system/multi-user.target.wants/ondemand.service. |
文章的脚注信息由WordPress的wp-posturl插件自动生成