如果能在linux作業系統上實現自主設計的排程演算法,那麼現在實時領域的研究或許還有意義吧。
基於linux作業系統,調整排程演算法的方法大致分為兩種:
- 小調:調整Linux核心提供的14個排程器引數。在Linux核心中,當前定義了五個排程策略:NORMAL(CFS)、FIFO、RR、BATCH、IDLE 。
- SCHED_NORMAL(CFS) 這是Linux核心的預設排程策略。CFS的目的是最大化整體CPU利用率,併為所有任務提供公平的CPU資源。
-
SCHED_FIFO 這是一個固定優先順序排程策略,每個任務以1到99的優先順序值執行,並且是按高優先順序順序搶佔並執行CPU的策略。
-
SCHED_RR 這基本上與SCHED_FIFO的操作相同,但每個任務都有一個時間量子值,這是執行的最長時間。當時間量子過期時,任務以輪詢方式切換到下一個任務。
-
SCHED_BATCH 此策略適用於批處理作業。透過避免被其他任務搶佔,我們可以執行一個任務更長時間,比其他策略更好地利用硬體快取;但是,這對於互動式任務效果不佳。
-
SCHED_IDLE 此策略以非互動方式執行,類似於SCHED_BATCH。但是,與SCHED_BATCH不同,當其他程序處於空閒狀態時,可以執行SCHED_IDLE。
可以透過Linux提供的schedtool工具/sysctl命令更改這些策略的有關引數,如latency_ns, migration_cost_ns, rt_period_us, rt_runtime_us, cfs_bandwidth_slice_us等。
- 大調:如何部署實驗室設計的排程演算法到現有的應用程式和作業系統中,一些Google的工程師構建了一個名為ghOSt的框架,該框架可以實現不同的排程策略,並將它們部署到Linux核心中,以方便使用者更容易地使用。
具體可參考文章:Humphries J T, Natu N, Chaugule A, et al. ghost: Fast & flexible user-space delegation of linux scheduling[C]//Proceedings of the ACM SIGOPS 28th Symposium on Operating Systems Principles. 2021: 588-604.
github開原始碼:
ghOSt kernel code. https://github.com/google/ghost-kernel
ghOSt userspace code. https://github.com/google/ghost-userspace