實時優化 Linux實時的一些小概念

2021-09-19 18:49:42 字數 1677 閱讀 9536

我們都知道對於機械人應用來說實時性很重要, 以及linux不是乙個實時系統, 但是說:

所以這裡簡單的做個實驗, 來直觀的認識一下.

注: 下面的測試資料, 都是在cpu滿載的情況下得出.

乙個簡單ros程式邏輯如下: 以100hz向外傳送資料.

while (1)
我們接下來就用這個程式的迴圈週期間隔來評估這個程式的實時性.

ps: robotics上常見的高頻率基本也就集中在200hz~100hz, 比如說imu感測器的週期和各種控制的取樣週期

預設linux的排程器為cfs.

在cfs排程器下, ros應用跑了5分鐘, 其**現的最大延遲為50ms

[ info] [1551423662.755795004]: dt: now 10893.000000 max 54892.000000
下面我們設定這個應用為rt排程策略

chrt --rr  -p pid
跑了5分鐘, 其**現的最大延遲為13ms

[ info] [1551425162.716713135]: dt: now 10447.000000 max 13020.000000
可以看到, 在預設cfs排程器的情況, 乙個程式的週期執行時間在cpu高負載的情況下是得不到保障的.

對關鍵的程式來說設定rt排程非常有必要.

不然疊加起來, 就有可能出現數百毫秒的延遲.

如果這是乙個剎車鏈路, 那在80km/h的速度下剎車距離就會上下浮動10幾公尺,

在上面rt排程的情況, 可以看到最大的週期間隔13ms, 而不是嚴格的10ms.

造成這個3ms的原因有很多, 包括核心不支援搶占等等.

而rt-linux補丁, 就是為了解決這些原因而產生的.

上車繼續執行測試程式(rt排程)

跑了5分鐘, 其**現的最大延遲為10.7ms

[ info] [1551434073.434294415]: dt: now 10284.000000 max 10701.000000
rt-linux補丁可以解決預設linux下毫秒級的排程誤差

上文研究迴圈週期間隔所針對的都是排程上的實時性.

對實時性而言, 像process時間也要考慮起來, 這針對的是程式執行上的實時性.

一些影響程式實時性的點:

i/o阻塞

多執行緒同步阻塞

其他......

這裡不再詳細描述, 有興趣可看以下參考:

上文兩者都做到確定後, 就可以計算任務的deadline.

以下兩條命令, 可以看程式主動/被動施放cpu的次數.

sar -w 1 3

pidstat -w

嵌入式Linux實時效能優化

1 引言 分析了linux的實時性,針對其在實時應用中的技術障礙,在參考了與此相關研究基礎上,從三方面提出了改善linux實時效能的改進措施。為提高嵌入式應用響應時間精度,提出兩種細化linux時鐘粒度方法 為增強系統核心對實時任務的響應能力,採用插入搶占點和修改核心法增強linux核心的可搶占性 ...

一些優秀的實時開發社群

stack overflow 全球最受程式設計師歡迎的開發社群之一,而且也是內容最豐富的社群之一。官方 reddit 很有個性的社群,在該 上可以提交一些你感興趣的topic,也可以和其他人討論一些開發問題和當前的it熱點,程式設計開發板塊只是它其中的一小部分 官方 google communiti...

實時系統的一些理論資料

rt linux 部分的中斷處理部分讀到一句話 因此它不會影響那些不通過 軟體的實時中斷,保證了rt linux的實時性。這個實時中斷是個啥?和普通中斷在實現機制上有啥區別?接著看下面的文章 明白了,實際這個東西純粹是個概念,至於說實現上有什麼不同,首先系統架構不一樣了,看文中圖,在此基礎上看發出中...