[問題] 想要降低load average

看板LinuxDev作者時間3年前 (2021/01/19 23:01), 編輯推噓3(305)
留言8則, 6人參與, 最新討論串1/1
我近期在類似樹梅派這樣的單板電腦上架構了一個應用,大約由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

01/20 00:29, 3年前 , 1F
你瞭解load average數字代表的意義嗎?只有這個數字其實
01/20 00:29, 1F

01/20 00:30, 3年前 , 2F
看不出什麼,還需要配合CPU/IO等等
01/20 00:30, 2F

01/20 09:31, 3年前 , 3F
profilers
01/20 09:31, 3F

01/20 12:54, 3年前 , 4F
可以google unix 的select/poll/epoll,或許可以幫助你
01/20 12:54, 4F

01/21 01:17, 3年前 , 5F
睡到秒才有效果那應該不是 I/O 那邊的問題吧
01/21 01:17, 5F

01/21 01:17, 3年前 , 6F
掛個 perf 上去跑看看
01/21 01:17, 6F

01/22 19:38, 3年前 , 7F
通常寫MCU的不是會用interrupt base的架構嗎
01/22 19:38, 7F

02/02 00:03, , 8F
io_uring
02/02 00:03, 8F
文章代碼(AID): #1W1lH7Ls (LinuxDev)
文章代碼(AID): #1W1lH7Ls (LinuxDev)