概述
在树莓派4的系列硬件中,处理器都是基于Broadcom BCM2711,内部具有4个ARM Cortex-A72和VideoCore VI。如果仔细看:树莓派4B开发板用的是BCM2711B0,主频为 1.5GHz;而Pi 400(Keyboard Computer)的SoC略有区别,型号是BCM2711C0,主频为 1.8GHz。这暗示着RPi 4有一定的超频能力。
图1-树莓派400 vs 树莓派4B
为什么要超频?
如果需要让树莓派跑高速计算的应用,比如视频编解码、图像识别、游戏模拟器等,当然速率越快越好。
有老外网友尝试,BCM2711B0(树莓派4B)可从原来的1.5GHz超频至2.147GHz,而BCM2711C0(树莓派400)可以从原来的1.8GHz超频至2.3GHz(见参考链接[1])。这种高达30%以上的速率提升,也许某些应用在超频之前是卡顿的,在超频之后就顺畅了。
为什么出厂时不设置超频?
既然谁都喜欢高性能,那么,为什么出厂时不默认设置为超频呢?
首先,芯片由晶圆方式制造出来,一片晶圆上有数千颗芯片,它们都是同批制造,但有些性能好一点,有些性能弱一点。好一点的就有可能被命名为前面的“BCM2711C0”(用于树莓派400),坏一点的被命名为“BCM2711B0”(用于树莓派4B)。厂家在宣传的时候,只能说一个保守的、大多数芯片能达到的性能。那么,经过芯片测试,比如将BCM2711C0设置为1.8GHz,或者将BCM2711B0设置为1.5GHz,它是稳定的、达标的。
图2-芯片在晶圆上同批次生产
其次,所谓“标频”或者“超频”都是相对外在条件而言,这个条件与“散热”息息相关。也许在另一种更好的散热情况下,也许出厂默认时BCM2711C0的标准频率是1.9GHz,或者BCM2711B0的标准频率是1.6GHz,也未尝不可呢?但可以肯定的是,高性能的代价是更复杂的PCB和散热设备,而这都是成本。在高性能情况下,树莓派的售价也许还要更贵,这都是靠钱堆出来的,你说是吧。
超频在超什么?
超频意味着将处理器(CPU 或 GPU)的最大时钟速度设置为高于出厂默认的水平,例如,树莓派4B BCM2711B0的默认时钟速度是 1.5GHz,如果将此时钟速度提高到1.5GHz以上,都称为超频(Overclocking)。
这个超频的“频”,指的是时钟频率,在现代处理器上都是PLL(锁相环)。简单理解的话,PLL是一种压控振荡器,可以通过参数设置,改变时钟振荡器频率。
图3-PLL(锁相环)框图
功耗与节流问题
超频时处理器的功耗会上升,如果多出来的热量散不掉,处理器的温度就会提升,当温度高到一定程度就会引发处理器节流(throttling),这可能会使得处理器性能还不如超频前状态,甚至工作不稳定。我们来看下内部原理:
所有处理器,包括树莓派BCM2711,内部都有很多晶体管组成,由PLL时钟驱动。当处理器在执行指令时,内部晶体管正在进行“0”/“1”或称为“导通”/“关闭”的操作。
图4-晶体管导通与关闭
尽管导通、关闭发生得非常快,但晶体管的状态切换总需要一个时间,这个时间内晶体管内部会有一些的电流流过(图中小峰值),而且,这个时间内晶体管是有阻抗的。那么,电流+阻抗,就会发热。随着时钟频率的增加,这种小峰值的数量也成比例地增加,热量也随之增加。
处理器内部具有保护机制来保护硬件免受损坏,比如,在温度过高时自动减慢时钟速率,这个就是处理器节流(throttling),这种情况下处理器的性能会比出厂默认的1.5GHz更差。这就是为什么如果要超频,就一定要配备良好的散热设备,不然适得其反。
除了温度上升,处理器需要消耗更多能量,为此处理器的电力供给也要充足,有时还需要适当提升处理器的供电电压,来维持所需功耗。
对于树莓派来说,如果处理器温度太高(80°C及以上)、或者供电电压不足,在显示屏上会有指示标记提示(我没看到过,看过的网友留个言):
图5-树莓派超频时出现供电电压不足的标志
超频的潜在影响
我们需要知道:超频时处理器处在更为恶劣的工作状态下。
处理器内部还有另一个保护机制——动态时钟切换(Dynamic clock frequency),它的意思是CPU根据需要来切换时钟频率,在有任务执行的时候高速执行,在没有任务执行的时候,就低速运行。
但是偏偏有些人会把“动态时钟切换”这个功能关闭,强制让处理器一直处于超频模式下,这样CPU是容易损坏的。
因为在超频状态下,晶体管承受的是高温和高压。在现代芯片制造中,例如树莓派的BCM2711就是28nm工艺制程,晶体管的gate绝缘层很薄,薄到只有几十个原子厚。长期的高温和高压,该层容易被击穿,处理器也就废了。
图6-MOSFET(金属氧化物半导体场效应晶体管)内部极薄的金属氧化物层(红框内部两个白色箭头所指区域)
这就是为什么不推荐买那些跑过矿机的二手显卡,因为经过长期的高负荷运行,它们的芯片内部可能已经“千疮百孔”了。。。
超频方法
超频方法很多博主有讲,具体操作过程很详细,详见参考链接[1]~[5],在此罗列一下关键步骤及其说明。
首先,处理器工作频率的调整是在/boot/config.txt文件里面进行参数配置,在该文件中找到arm_freq、gpu_freq、over_voltage,改为如下值:
arm_freq=2000
gpu_freq=750
over_voltage=6
分别解释一下:
- arm_freq,是ARM核的工作频率,2000是设置为2GHz。如参考链接的多篇文章指出,设置为2147(2.147GHz)是上限。如果再高,会有不稳定现象,或者无法正常启动。
- gpu_freq,是GPU核的工作频率,从默认的600MHz,改为750MHz。
- over_voltage,代表不同的处理器供电等级,默认是1.35V供电,设置为数值“6”,表示供电改为1.5V。
图7-/boot/config.txt配置超频参数
还有一个参数是force_turbo,默认是force_turbo=0,如果改为“1”,表示禁用上述所说的“动态时钟切换”,这样树莓派始终处于高速运行状态,不推荐修改。
设置完/boot/config.txt文件里的参数后,重启生效。
如果重启后不正常,则把SD卡拿出来,在其他电脑上修改为默认值后,放回去重新启动。所以,在上述超频操作之前,建议备份一下config.txt文件。
超频前后的性能对比
在此介绍一下处理器性能对比的相关命令或工具,附上参考链接和部分截图。
使用lscpu
此命令从sysfs和/proc/cpuinfo收集cpu体系结构信息并显示。详见参考链接[6]。
图8-lscpu运行结果
使用vcgencmd
此命令可以获取处理器的频率和温度。详见参考链接[7]。
图9-vcgencmd运行结果
使用sysbench
此命令通过计算素数来测试性能。输出结果不会提供处理器频率,但会显示每秒的事件数,及计算耗时,以此来对比性能。详见参考链接[8]。
使用Stressberry
Stressberry,它是一个用于测试不同负载下的核心温度的软件包,它可以生成漂亮的图,可以轻松进行性能对比。详见参考链接[9]。
在超频后,通过Stressberry测试,我的树莓派4B核心温度没超70℃摄氏度:
图10-Stressberry测试图
莫非是因为我这种外壳散热效果还不错?
图11-我树莓派4B的散热外壳
使用Phoronix
Phoronix是一个测试套件工具,允许使用者通过搭配http://OpenBenchmarking.org公开的线上测试脚本,分享他们的硬体及软体测试结果的协作平台。详见参考链接[10]。
最后祝大家超频时玩得开心。
参考链接:
- [1] How to overclock Raspberry Pi 4 — The MagPi magazine
- [2] How to overclock and stress-test your Raspberry Pi
- [3] https://github.com/akopytov/sysbench
- [4] https://github.com/nschloe/stressberry
- [5] https://www.phoronix.com/
欢迎关注我的微信公众号“疯狂的运放”
,及时收到最新的推文。