[问题] 想要降低load average

楼主: icetofux   2021-01-19 23:01:25
我近期在类似树梅派这样的单板电脑上架构了一个应用,大约由10支程式独立程式构
成,程式部分以C++跟python编写,主要用途是借由板子上的UART与外部设备通讯、
读取ADC,用GPIO控制周边电路。
程式跟程式间我使用redis进行资料交换,程式架构的虚拟码大致如下:
while(true) {
// 从redis读取别的程式产生的资料
...
// UART通讯 or 读ADC or 操作GPIO
...
// 将读到的值或执行的结果写入redis
...
// 延迟若干时间让CPU得以休息
// C++用std::this_thread::sleep_for()
// Python用time.sleep()
delay(n);
}
这种结构是我以前写MCU或RTOS常使用的程式架构。
今天查资料时偶然知道uptime跟free这类效能监控命令,结果发现load average
异常的高,在单核心CPU下1、5、30分钟的监测值都落在8.x~10.x之间,至于记忆
体使用量倒是还好,平均都还有25%的闲置(free)空间。以top观看CPU使用率较高
的程式都是我编写的,其他service等使用量都不高。我有尝试去加长delay时间,
delay要直到秒级才有比较明显的效果,但这么长的delay有点不实际。
由于接触linux程式设计时间并不长,不太知道这类问题要怎么下关键字找资料比
较正确,所以想请问各位先进寻求建议,让我有个方向可以解决这个现象。
谢谢。
作者: ketrobo (猫萝卜)   2021-01-20 00:29:00
你了解load average数字代表的意义吗?只有这个数字其实看不出什么,还需要配合CPU/IO等等
作者: s678131 (Mu)   2021-01-20 09:31:00
profilers
作者: leolarrel (真.粽子无双)   2021-01-20 12:54:00
可以google unix 的select/poll/epoll,或许可以帮助你
作者: Bencrie   2021-01-21 01:17:00
睡到秒才有效果那应该不是 I/O 那边的问题吧挂个 perf 上去跑看看
作者: james732 (好人超)   2021-01-22 19:38:00
通常写MCU的不是会用interrupt base的架构吗
作者: dces4212 (flawless)   2021-02-02 00:03:00
io_uring

Links booklink

Contact Us: admin [ a t ] ucptt.com