Process
實時優先級的改變沒有明顯的效果
我們試圖在帶有 Raspbian 的樹莓派上使用軟體 PWM 獲得最佳結果。我們製作了一個 Python 腳本,在 GPIO 引腳上啟動 PWM,並用示波器觀察結果。
它做得不好,延遲是不能接受的。
之後,我們將軟體 PWM 程序的實時優先級設置為 99,並將調度更改為實時循環,然後再更改為 fifo(1865 是程序 pid)。
sudo chrt -f -p 99 1865 sudo chrt -r -p 99 1865
它的行為與優先級更改之前相同。
所有其他程序都以非實時優先級執行。然而,定時器和 USB 每秒大約有 3000 次中斷。
在這個問題中,答案是:
… vanilla 核心處理實時優先級,這使它們比普通任務具有更高的優先級,並且這些任務通常會執行,直到它們自願讓出 CPU
任何想法為什麼優先級的改變沒有明顯的效果?實時優先級是否會影響程序在中斷時會發生什麼?
我沒有產生明顯的效果,因為該程序在使用者空間中執行,並且在使用者空間中的其他程序的上下文中被賦予了實時優先級。
然而,核心空間仍然載入了中斷,當其他程序獲得他們的(小)處理器時間份額時,它們可能已經啟動了一個系統呼叫,結果遷移到核心空間,我們程序的實時優先級在這裡沒什麼意思。
中斷都發生在核心空間中,因此也不受實時優先級的影響。