首页 > 其他分享 >提升树莓派性能的方法

提升树莓派性能的方法

时间:2022-12-16 12:08:02浏览次数:38  
标签:树莓 over 性能 提升 freq tick config CPU 内核


文章目录

  • ​​前言​​
  • ​​树莓派安装 raspi-config 工具(ubuntu等非官方树莓派系统)​​
  • ​​硬件以及系统配置方面​​
  • ​​1. 减少 GPU 内存用量​​
  • ​​2. 禁用L2 cache​​
  • ​​3. 提高运行频率​​
  • ​​4. cpu 隔离​​
  • ​​5. 中断隔离​​
  • ​​5.1 普通外设中断​​
  • ​​5.2 timer tick​​
  • ​​5.3 设置中断亲和性 irqaffinity​​
  • ​​5.4 禁用 irqbalance​​
  • ​​5.5 关闭 nmi_watchdog​​
  • ​​6. 禁用 soft-lockup 检测器,死锁相关​​
  • ​​7. offload RCU(Read-Copy Update) callback​​
  • ​​8. 其它内核配置选项​​
  • ​​程序编写方面​​

前言

树莓派安装 raspi-config 工具(ubuntu等非官方树莓派系统)

安装依赖:

​sudo apt install whiptail parted lua5.1 alsa-utils psmisc​

从Raspberrypi官网下载最新的deb安装包:

​wget http://archive.raspberrypi.org/debian/pool/main/r/raspi-config/raspi-config_20200707_all.deb​

安装Deb安装包:

​sudo dpkg -i raspi-config_20200707_all.deb​

运行raspi-config:

​sudo raspi-config​

提升树莓派性能的方法_实时性

硬件以及系统配置方面

1. 减少 GPU 内存用量

如何查看GPU内存?

通过 ​​cat /proc/meminfo​​ 判断内存容量。

树莓派

树莓派上的内存是分一些给CPU用,分一些给GPU用的,GPU占用的默认是76M(1GB以上),rpi4 上,GPU 的 3D 组件有自己的内存管理单元,使用 Linux 中动态分配的内存。

方法一:

修改config.txt:​​gpu_mem=16​​,16MB 是最小值。

修改前:

提升树莓派性能的方法_内核启动_02

修改后:

提升树莓派性能的方法_内核启动_03

方法二:

运行​​raspi-config​​,选择分配大小。

提升树莓派性能的方法_实时性_04

2. 禁用L2 cache

​disable_l2cache=1​​ 禁止 CPU 对 GPU 的 L2 cache 的访问。BCM2835 的默认值为 0。在 BCM2836、BCM2837 和 BCM2711 上,默认值为 1。

3. 提高运行频率

方法一:

二代 raspi-config 超频设置选项参考:

提升树莓派性能的方法_超频_05

修改配置文件.config:

​arm_freq/arm_freq_min​​: 设置 CPU 频率,以MHZ为单位。1500/600,1800 if arm_boost=1(以pi4举例,下同)。

​arm_boost​​​: 将 ​​arm_freq​​ 增加到硬件支持的最高频率,set 1。

​gpu_freq/gpu_freq_min​​: 提供更精细的设置选项 * /250

*​​core_freq/core_freq_min​​: 设置 GPU 频率,MHz,会影响 CPU 的性能,由于二者共享 L2 cache 和内存总线(树莓派每个版本均共享?)。500/200

*​​h264_freq/h264_freq_min​​: hardware video block,MHz,覆盖 gpu_freq。500/250

*​​isp_freq/isp_freq_min​​: image sensor pipeline block,MHz,覆盖 gpu_freq。500/250

*​​v3d_freq/v3d_freq_min​​: 3D block,MHz,覆盖 gpu_freq。500/250

*​​hevc_freq/hevc_freq_min​​: High Efficiency Video Codec block,MHz,覆盖 gpu_freq,rpi4 专有。500

​sdram_freq​​: SDRAM 频率,rpi4 不支持内存频率超频,MHz。3200(pi4)

​over_voltage/over_voltage_min​​​: CPU/GPU 电压上限,范围 [-16,8]=[0.95,1.55],步长0.025V,​​force_turbo=1​​​ 时,允许值大于6(大于1.5V),​​over_voltage​​ 亦会设置。0

​over_voltage_sdram​​: 提供更精细的设置选项 * 0

*​​over_voltage_sdram_c​​: SDRAM控制器电压,[-16,8]=[0.8V,1.4V],步长0.025V。0

*​​over_voltage_sdram_i​​: SDRAM I/O电压,同上。0

*​​over_voltage_sdram_p​​: SDRAM phy电压,同上。0

固件使用自适应电压缩放 (AVS) 来确定由 over_voltage 和 over_voltage_min 定义的范围内的最佳 CPU/GPU 电压。

​force_turbo​​​: 强制 turbo 模式(终极超频模式)即使 ARM 核空闲,会设置 ​​over_voltage_*​​ 值。

​initial_turbo​​: 从启动到 turbo 模式,设置一个缓冲时间。最大 60s。0 Secs

​temp_limit​​:过热保护。当 SoC 达到此值(以摄氏度为单位)时,这会将时钟和电压设置为默认值。85

查看运行频率:

提升树莓派性能的方法_内核启动_06

结论:

  • 树莓派4B不支持SDRAM超频,默认3200MHz
  • 注释字段 ​​arm_boost=1​​。
  • ​force_turbo=1​​​ 强制使用最大频率,设置 CPU、GPU、内存频率、以及 ​​over_voltage_*​​ 的值。
  • ​temp_limit=85​​ 设置过热保护,将频率和电压设置为默认值,标称温度 -40~85。

修改前:

提升树莓派性能的方法_实时性_07

修改后:

提升树莓派性能的方法_超频_08

方法二:

aggregatepagefirst_rank_ecpm_v1~rank_v31_ecpm-2-123073227-null-null.pc_agg_new_rank&utm_term=%E6%A0%91%E8%8E%93%E6%B4%BEcpu%E9%A2%91%E7%8E%87&spm=1000.2123.3001.4430

安装工具:​​sudo apt-get install cpufrequtils​

查看当前运行频率:​​sudo cpufreq-info -w -m​

提升树莓派性能的方法_超频_09

方法三:

​raspi-config​​ 中的 overclock 选项,只适合于 pi1 和 pi2。

4. cpu 隔离

修改 cmdline.txt,添加内核启动参数 ​​isolcpus=3​​ 隔离第4个CPU。

编写测试程序,一共产生4个进程,负载均衡后平摊到每个CPU。

ubuntu@ubuntu:~/high_performance_rpi$ cat multiprocess.c
#include <stdlib.h>
void main()
{
fork();
fork();
while(1);
}

运行后,查看 ​​htop​​,确实进行了任务平摊:

提升树莓派性能的方法_树莓派_10

修改 cmdline.txt,隔离 CPU4:

运行程序,查看 ​​htop​​,确实进行了隔离,用户空间的进程不能在它上面运行。

提升树莓派性能的方法_超频_11

通过 ​​taskset​​ 命令,绑定任务到隔离的 CPU 3 上运行:

提升树莓派性能的方法_内核启动_12

将任务的 CPU 亲和性从 [0-2] 修改为 3,htop 查看结果:

提升树莓派性能的方法_树莓派_13

结论:​​isolcpu​​ 可以隔离用户进程。

5. 中断隔离

5.1 普通外设中断

查看外设中断的亲和性,值为7(0b0111),除了4号CPU被屏蔽。

提升树莓派性能的方法_超频_14

结论:对于普通外设,isolcpu 参数可以进行屏蔽,对于 timer tick、IPI 不行。

5.2 timer tick

传统的tick机制在系统进入空闲状态时仍然会产生周期性的中断,这种频繁的中断迫使CPU无法进入更深的睡眠。如果放开这个限制,在系统进入空闲时停止tick,有工作时恢复tick,实现完全自由的,根据需要产生tick的机制,可以使CPU获得更多的睡眠机会以及更深的睡眠,从而进一步节能。dynamic tick的出现,就是为彻底替换掉周期性的tick机制而产生的。

一般情况下,Linux 配置了 IDLE 状态时的 NO_HZ tickless,即,CPU4 上没有任务时,该timer值不会增加,但是当该CPU4上有任务时,CPU4的timer数量会增加,timer tick会频繁打断该线程,造成大量上下文切换。

想要达成运行一个任务时,也能够不增加 timer tick 值,需要重新编译内核,设置选项 ​​Full dynticks system(tickless)​​:

提升树莓派性能的方法_实时性_15

结论:对于 IDLE 状态的 CPU,一般情况下不会受到 timer tick 打扰,要想在 CPU 上运行的某一个任务不会被打扰,需要设置内核选项,同时指定内核参数,​​nohz_full=3​​,使得 CPU3 支持 NO_HZ_FULL。

5.3 设置中断亲和性 irqaffinity

内核启动参数:​​irqaffinity=0,1,2​​,默认由核0核1核2处理Linux中断,保证实时核3不会受到linux非实时设备的中断请求。

5.4 禁用 irqbalance

linux irqbalance 用于优化中断分配,它会自动收集系统数据以分析使用模式,并依据系统负载状况将硬件中断分配到各个CPU核心上处理。

内核启动参数:​​noirqbalance​

并且运行:

sudo systemctl stop irqbalance.service
sudo systemctl disable irqbalance.service

5.5 关闭 nmi_watchdog

NMI Watchdog 中包含 soft lockup detector 和 hard lockup detector,树莓派内核没有启用看门狗功能(Pi Zero、Pi 1),当内核宕机后即进入死机状态,不会重启系统。如果需要配置看门狗功能,

内核启动参数:​​nmi_watchdog=0​

并且运行:

​echo '0' > /proc/sys/kernel/nmi_watchdog​

6. 禁用 soft-lockup 检测器,死锁相关

内核配置:

SOFTLOCKUP_DETECTOR=n
BOOTPARAM_SOFTLOCKUP_PANIC=n

提升树莓派性能的方法_内核启动_16

7. offload RCU(Read-Copy Update) callback

对于 HPC 和实时工作负载很有用,对于被 RCU 保护的共享数据结构,读者不需要锁即可访问,写者在访问时需要拷贝一个副本,在副本上修改,然后通知访问该数据的CPU退出并指向新的被修改的数据(call-back),不使用 call-back,使用内核线程代替,减少CPU抖动。

内核配置:​​CONFIG_RCU_NOCB_CPU = y​

提升树莓派性能的方法_实时性_17

8. 其它内核配置选项

CONFIG_MIGRATION=n,不允许在保持虚拟内存页地址不变的情况下移动其所对应的物理内存页的位置。

CONFIG_PREEMPT=y,开启抢占

CONFIG_CPU_FREQ =n,禁止处理器动态调整频率。

CONFIG_CPU_IDLE =n

提升树莓派性能的方法_超频_18

提升树莓派性能的方法_实时性_19

提升树莓派性能的方法_cpu隔离_20

程序编写方面

  1. 使用静态编译语言
  2. 编写高性能的代码
  3. 尽量让分支有规律性,使用likely()/unlikely()或编写无分支代码
  4. 利用cache局部性原理,防止伪共享
  5. 合理分配任务优先级
  6. 尽量使用静态库
  7. 避免实时任务中进行动态内存分配
  8. 驱动程序中断处理尽可能短等等


标签:树莓,over,性能,提升,freq,tick,config,CPU,内核
From: https://blog.51cto.com/u_13731941/5947079

相关文章

  • C/S架构的性能测试-软件测试知识
    很多人关心LR在C/S架构上如何实施性能测试,我想根本原因在于两个方面,一是很多时候脚本无法录制,即LR无法成功调用被测的应用程序,二是测试脚本即使录制下来,可读性不强,往往......
  • Linux性能优化实战-网络丢包问题分析
     Linux性能优化实战-网络丢包问题分析 ......
  • 如何使用CSS提高页面性能
    一、前言大家好,我是CoderBin,每一个网页都离不开css,但是很多人又认为,css主要是用来完成页面布局的,像一些细节或者优化,就不需要怎么考虑,实际上这种想法是不正确的作为页面......
  • JavaScript DOM的性能优化详解
    本身JS操作DOM就比较消耗性能,你可以理解为JS和dom是独立的小岛,用桥实现两者的联系,但桥很窄,要过路费,所以我们要尽最大可能减少过桥的次数。 再加上每次操作DOM都会触发......
  • 通过 CancellationToken 提高 Web 性能
    https://www.cnblogs.com/newbe36524/p/16975042.html 在Web开发中,经常会遇到这样的场景:用户发起一个请求,Web服务器执行一些计算密集型的操作,等待结果返回给用户。这......
  • 提升3
    谁关键,谁在后,只有c,就a,就b,分开翻译箭头前矛盾,箭头后一样组成,苹果是水果,交叉,有的方砖是地砖,有的地砖是方砖语义关系......
  • 写一下自己一个星期玩树莓派的经验,如何安装系统,如何在树莓派中安装opencv,如何运行代码
    在树莓派上安装opencv最简单的方法是:sudoapt-getupdatesudoapt-getinstalllibopencv-devsudoapt-getinstallpython-opencv如果你还想了解更多,下面提供的那么多链接......
  • 破记录!国产数据库KunDB 单节点TPC-C事务性能超180万tpmC
    近日,星环科技KunDB在TPC-C事务性能测试中,采用常规国产服务器,实现了单节点tpmC超180万,体现其世界级领先的事务处理能力。TPC-C是全球OLTP数据库最权威的性能测试基准,由TP......
  • Dubbo性能调优参数
    dubbo参数说明:https://dubbo.apache.org/zh/docs3-v2/java-sdk/reference-manual/config/properties/调优参考:https://blog.csdn.net/yudianxiaoxiao/article/details/123......
  • MySQL查询性能优化七种武器之索引下推
    ​​MySQL查询性能优化七种武器之索引潜水​​​​MySQL查询性能优化七种武器之链路追踪​​今天要讲的是MySQL的另一种查询性能优化方式— 索引下推(IndexConditionPush......