我正在試驗SCHED_FIFO
,我看到一些意外的行爲。我使用的服務器有12個禁用超線程的內核。所有可配置中斷已設置爲在CPU 0上運行。實時使用Linux實時調度優先級(SCHED_FIFO和SCHED_RR)?
我的程序啓動時使用pthreads庫創建一個線程,用於執行較低優先級的任務,而不更改CPU關聯設置爲核心0的調度策略。然後,父線程將其CPU使用sched_setscheduler()
與pid零和優先級1,然後開始運行非阻塞循環,將核心3與其自己的調度策略關聯到SCHED_FIFO
。
程序本身運行良好。但是,如果我在程序運行期間嘗試再次登錄服務器,終端無響應,直到我停止執行程序。這就像調度器試圖在與實時過程相同的核心上運行其他進程。
- 我錯過了什麼?
- 調度程序是否仍會嘗試在運行實時進程的內核上運行其他進程?如果是這樣,有沒有辦法來防止這種情況?
- 將在父級中將調度策略設置爲
sched_setscheduler()
是否會更改以前創建的子級的行爲?
在此先感謝。
感謝回覆。你說得對,文檔說sched_setscheduler()爲進程設置調度策略,而不是線程。但是,在閱讀此回覆之後,我使用ps運行了一些測試,併爲線程正確設置了策略。這促使我運行一些進一步的測試。最明顯的問題之一是程序運行時登錄需要很長時間。它絕對看起來像新登錄的bash會話最初設置爲運行實時進程的cpu。 – digby280