树莓派 4B Python 程序实时性优化

本文详述了如何通过提升Python进程优先级、绑定独立CPU和打内核RT补丁来优化树莓派4B上的Python程序,以实现毫秒级控制并减少误差。测试结果显示优化后性能显著提升,满足了项目需求。
摘要由CSDN通过智能技术生成

优化目的

项目需要用树莓派实现 毫秒级控制,并且误差控制在 5% 内(即 0.05ms = 50us)。
本身这种精度的控制应该考虑由 C 实现,但考虑到以下原因,最终还是选用了 Python 作为主语言。

  1. 用惯了 Python,好久好久没有写过 C 了,真的 不想写 C 啊啊啊啊 (/▽\)
  2. 控制过程中 Python 调用的 包多是封装了底层 C 库实现,实际性能并不差
  3. 整体程序框架中,需要 Python 实现的顶层控制非常简单

为了实现 50 us 的控制精度,需要针对树莓派上运行的 Raspberry Pi OS 及 Python 进程 进行优化

优化内容

优化的主要思路参考了 1 2

提升 Python 进程优先级

操作

1. 首先需要安装 wiringpi 包:

sudo pip3 install wiringpi

2. 其次需要在程序中加入以下内容:

import wiringpi
wiringpi.piHiPri(99)

原理

wiringpi 中的 piHiPri 函数通过调用 Linux 内核的 API,改变了当前进程的调度策略及优先级进一步提高了实时性。
这和 Python 中标准库的 os.setpriority 不同,os.setpriority 并未改变调度策略,实际优化效果很有限。
需要注意的是,此处设置的优先级是用于比较的相对值,严格地说并不是越大就越好。3 4 5

The priority parameter works relative to others – so you can make one program priority 1 and another priority 2 and it will have the same effect as setting one to 10 and the other to 90 (as long as no other programs are running with elevated priorities)6

priority 参数相对于其他参数有效-因此您可以将一个程序的优先级设置为 1,将另一个程序的优先级设置为 2,其效果与将一个设置为 10,另一个设置为 90 相同(只要没有其他程序以更高的优先级运行)。

绑定独立 CPU

操作

1. 首先需要更改内核启动参数:

sudo sed -i.bak -e 's/$/ isolcpus=3/' /boot/cmdline.txt

!!!请注意:单引号中的空格为必须!!!
其中 3 可以更改为你想要指定的 CPU 编号(树莓派 4B 中 CPU 编号为 0-3)。
考虑到未来可能需要还原,此步将原文件添加 .bak 后缀进行了备份

2. 接着安装后面要用到的 psutil

sudo pip3 install psutil

3. 最后在程序中加入以下内容:


                
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值