linux内核杂记(7)-进程调度(2)
1、進程調度的效果應如同系統具備一個理想中的完美多任務處理器,每個進程 能獲得1/n 個處理器時間,n指可運行進程數量。
2、調度時進程搶占會帶來一定的代價,換入與換出進程消耗,緩存效率等。CFS考慮了這類額外消耗,確保系統性能不受損失。
3、CFS允許每個進程運行一段時間 、循環輪轉、選擇運行最少的進程 作為下一個運行進程。
4、在所有可運行進程總 數基礎 上計算出一個進程應運行多久,nice作為進程 獲得的處理器運行比的權重 ,高的nice值低處理器使用權重。‘
5、每個進程 按其權重 在全部可運行進程中占比例的時間片來運行,為計算 準確的時間 版 ,為無限小調度周期的近似值設立目標 延遲,越小的調度周期(目標延遲)越帶來好的交互性。
6、為引入每個進程獲得的時間 片底線稱為最小粒度,默認為1ms。每個進程最少獲得1ms運行時間。
7、相關代碼在kernel/sched_fair.c中
8、CFS維護每個進程運行時間記賬,使用調度器實體結構,定義在<linux/sched.h>中的struct_sched_entity,追蹤進程運行記賬,調度器實體結構作為一個名為se的成員變量,嵌入在進程描述符struct task_struct內。
9、虛擬實時 。vruntime變量存放進程的虛擬運行時間 ,該 時間 經過 所有可運行進程總數的標準化:
(1)以ns為單位
(2)記錄程序運行了多長 時間 和應再運行多久。
(3)kernel/sched_fair.c的update_curr()實現記賬功能,它計算 當前進程執行時間 ,存放在變量delta_exec變量后,傳遞給__update_curr(),根據當前可運行進程 總數對傳遞過來的運行時間 進行加權計算。最后將上述權重值與當前運行進程的vruntime相加,
10、CFS調度算法核心:選擇具有最小vruntime的任務,利用紅黑樹組織可運行進程隊列,并迅速找到最小vruntime
總結
以上是生活随笔為你收集整理的linux内核杂记(7)-进程调度(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot整合minio最新版
- 下一篇: access开发精要(10)-筛选