嵌入式系统性能优化总结
分享一些日常工作中的系统调优总结:
一、编程模式
-
DDS编程模式,由wait_set回调,尽量改成周期性读取
-
密集计算中(例如多重长循环),要中途调用sleep释放CPU,否则容易出现CPU尖峰
-
尽量避免动态申请内存,尤其在循环中,建议使用内存池
-
尽量少用除法运算,尤其在中断处理函数中。除法/ 会被翻译成汇编 __div 函数,执行时间根据被除数的不同会动态变化
-
减少以太网负载,尽可能把多包数据拼成一包来转发,不管是否有应用在接收,都可以减少io-pkt的负载
-
算法模块,减少DDS Participant,每个会多增加3个线程,而且里面的收发会让procnto和io-pkt倍增,去除后CPU狂减
-
接收降频,修改DDS QoS,对不需要高频接收的topic,接收端主动降低接收频率,最好是细化每个算法模块dds的收发策略
-
减少DDS消息订阅,把高频接收和处理can信息号的模块从soc挪到mcu
-
DDS QoS配置,使用unicast,真的需要多个接收的时候才用multicast
-
模块周期性发送之前还检查reader是否有收到数据,没有收到的也不转发
二、系统调度
-
优先级调整,分析软件各个app的工作流程,设置合理的优先级,把一些重要的通信模块调高优先级,保证系统不出现丢帧
-
sleep/usleep/nanosleep的参数是否过小。出现过某个进程sleep过短,相当于死循环操作了,死循环是不主动释放CPU的
-
应用程序cpu绑核或者绑镞
三、系统log
- 系统写og,短周期任务内,不应该写很多log
四、芯片配置或底层优化
-
CPU超频或者提频,但要注意温度、稳定性的影响
-
底层驱动,如优化操作系统io pkg