作者icetofux ()
看板LinuxDev
标题[问题] 想要降低load average
时间Tue Jan 19 23:01:25 2021
我近期在类似树梅派这样的单板电脑上架构了一个应用,大约由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程式设计时间并不长,不太知道这类问题要怎麽下关键字找资料比
较正确,所以想请问各位先进寻求建议,让我有个方向可以解决这个现象。
谢谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.169.83.240 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/LinuxDev/M.1611068487.A.576.html
1F:→ ketrobo: 你了解load average数字代表的意义吗?只有这个数字其实 01/20 00:29
2F:→ ketrobo: 看不出什麽,还需要配合CPU/IO等等 01/20 00:30
3F:推 s678131: profilers 01/20 09:31
4F:→ leolarrel: 可以google unix 的select/poll/epoll,或许可以帮助你 01/20 12:54
5F:推 Bencrie: 睡到秒才有效果那应该不是 I/O 那边的问题吧 01/21 01:17
6F:→ Bencrie: 挂个 perf 上去跑看看 01/21 01:17
7F:→ james732: 通常写MCU的不是会用interrupt base的架构吗 01/22 19:38
8F:推 dces4212: io_uring 02/02 00:03