我有一個用調度策略SCHED_OTHER(0)和優先級爲120(默認優先級,頂部顯示PR爲20)的用戶空間進程。它在沒有任何系統調用或等待的情況下運行一個無限的while(1)循環。它與特定的CPU相關聯,比如說:1.Linux用戶空間和內核空間調度
在內核空間中,我有一個內核線程,它也使用默認調度參數策略:SCHED_NORMAL(0)和優先級120)。它進入睡眠狀態調用wait_event_interruptible()。一個irq線程以1ms的週期發生,喚醒內核線程。內核線程沒有綁定到任何CPU。
在內核線程與用戶空間進程在同一CPU上進行調度的情況下,雖然喚醒調用完成,但它不會喚醒。如果內核線程安排在其他免費的CPU上,它會被喚醒。只有當內核定時器中斷髮生並且ksoftirq線程被調度並且在退出時才調度內核線程。因此,內核線程不會按預期在1ms內喚醒一次。
我希望通過搶佔用戶空間進程來喚醒內核線程。這沒有發生。有人可以幫我解決這裏發生的事情嗎?
順便說一句,如果我將內核線程的調度更改爲SCHED_FIFO並給予RT優先級,它工作正常。