看板 LinuxDev 關於我們 聯絡資訊
我近期在類似樹梅派這樣的單板電腦上架構了一個應用,大約由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://www.ptt.cc/bbs/LinuxDev/M.1611068487.A.576.html
ketrobo: 你瞭解load average數字代表的意義嗎?只有這個數字其實 01/20 00:29
ketrobo: 看不出什麼,還需要配合CPU/IO等等 01/20 00:30
s678131: profilers 01/20 09:31
leolarrel: 可以google unix 的select/poll/epoll,或許可以幫助你 01/20 12:54
Bencrie: 睡到秒才有效果那應該不是 I/O 那邊的問題吧 01/21 01:17
Bencrie: 掛個 perf 上去跑看看 01/21 01:17
james732: 通常寫MCU的不是會用interrupt base的架構嗎 01/22 19:38
dces4212: io_uring 02/02 00:03