Completely Fair Scheduler (CFS)<br />twitter : @gokzy<br />1<br />
スケージューラーの使命<br />応答性のよいユーザエクスペリエンスの提供<br />応答時間を最小に<br />タイムスライスを効率的に割り当てる<br />全体のCPU使用率は最大に<br />相反する要求に答えねばならん<br />2<b...
O(1)スケジューラの問題点<br />公平性の確保が難しい<br />優先度別キューがあるため<br />対話型タスクの扱いがヒューリスティック<br />しかも計算に必要なコードが管理しにくい<br />カーネルがnice値の調整を行う<b...
そこで<br />Completely Fair Scheduler(CFS)<br />文字通り公平らしい<br />あらゆる関数に”fair”をつけ公正さを主張<br />もちろんファイル名にも : kernel/sched_fair.c<...
スケージューリングクラス<br />3つのスケジューリングクラスが存在<br />rt ->fair -> idle の順で実行される<br />fair_sched_classがキモ<br />5<br />
タスクへの割り当て時間の決定<br />6<br />
タスクが増えると困る<br />どんどんスライスされていく<br />コンテキストスイッチコストが増加<br />periodの修正が必要<br />7<br />
periodの修正<br />スケジュール時間の最小値が決まってる<br />sched_min_granularityという値<br />8<br />
割り当て順序の決定<br />vruntimeが最小のものを選ぶ<br />ランキューはvruntimeでソートされている<br />9<br />
vruntimeの求め方<br />10<br />仮想的なタスク動作時間<br />式で求める<br />niceを考慮する<br />しかし問題が…<br />
vruntimeによる選択の問題点<br />スリープ状態タスクのvruntime<br />寝ている間はvruntimeが増えず問題が<br />wakeupとsleepを繰り返されると<br />プリエンプションが頻発しコンテキストスイッチ...
スリープ状態タスクのvruntime<br />寝ている間はvruntimeが増えない<br />12<br />
起床時にvruntimeをいじる<br />13<br />起床したタスクのvruntimeは,実行可能状態のタスクの中で最小のvrutimeまで繰り上がる<br />
wakeupとsleepが頻繁に繰り返される<br />14<br />プリエンプションが頻発しコンテキストスイッチが増加<br />カレントタスクのvruntimeとの差が小さい場合はプリエンプションを遅延する<br />
プリエンプトしたタスクがすぐに寝ると<br />15<br />次に選ぶタスクは単純にvruntimeが小さいのでいいのか->否<br />直前に動いていたタスクのキャッシュが残っている<br />直前に動いていたタスクを選択する<br />改...
まとめ<br />タスクへの時間割り当ては<br />16<br />タスクの選択はvruntimeが最小のものを選ぶ<br />vruntimeは寝てるなどの条件で繰り上がったりする<br />キャシュとかも考慮している<br />割とヒュー...
参考<br />Linux Kernel Watch<br />http://www.atmarkit.co.jp/flinux/rensai/watch2009/watch09c.html<br />The Completly Fair Sc...
Upcoming SlideShare
Loading in …5
×

Completely Fair Scheduler (CFS)

2,741 views

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,741
On SlideShare
0
From Embeds
0
Number of Embeds
57
Actions
Shares
0
Downloads
50
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Completely Fair Scheduler (CFS)

  1. 1. Completely Fair Scheduler (CFS)<br />twitter : @gokzy<br />1<br />
  2. 2. スケージューラーの使命<br />応答性のよいユーザエクスペリエンスの提供<br />応答時間を最小に<br />タイムスライスを効率的に割り当てる<br />全体のCPU使用率は最大に<br />相反する要求に答えねばならん<br />2<br />
  3. 3. O(1)スケジューラの問題点<br />公平性の確保が難しい<br />優先度別キューがあるため<br />対話型タスクの扱いがヒューリスティック<br />しかも計算に必要なコードが管理しにくい<br />カーネルがnice値の調整を行う<br />より高いnice値が枯渇しないように<br />CPUのタイムシェアの計算が困難<br />3<br />
  4. 4. そこで<br />Completely Fair Scheduler(CFS)<br />文字通り公平らしい<br />あらゆる関数に”fair”をつけ公正さを主張<br />もちろんファイル名にも : kernel/sched_fair.c<br />4<br />
  5. 5. スケージューリングクラス<br />3つのスケジューリングクラスが存在<br />rt ->fair -> idle の順で実行される<br />fair_sched_classがキモ<br />5<br />
  6. 6. タスクへの割り当て時間の決定<br />6<br />
  7. 7. タスクが増えると困る<br />どんどんスライスされていく<br />コンテキストスイッチコストが増加<br />periodの修正が必要<br />7<br />
  8. 8. periodの修正<br />スケジュール時間の最小値が決まってる<br />sched_min_granularityという値<br />8<br />
  9. 9. 割り当て順序の決定<br />vruntimeが最小のものを選ぶ<br />ランキューはvruntimeでソートされている<br />9<br />
  10. 10. vruntimeの求め方<br />10<br />仮想的なタスク動作時間<br />式で求める<br />niceを考慮する<br />しかし問題が…<br />
  11. 11. vruntimeによる選択の問題点<br />スリープ状態タスクのvruntime<br />寝ている間はvruntimeが増えず問題が<br />wakeupとsleepを繰り返されると<br />プリエンプションが頻発しコンテキストスイッチ増加<br />プリエンプトしたタスクがすぐにsleepすると<br />次に選ぶタスクは単純にvruntimeが小さいのでいいのか->否<br />11<br />
  12. 12. スリープ状態タスクのvruntime<br />寝ている間はvruntimeが増えない<br />12<br />
  13. 13. 起床時にvruntimeをいじる<br />13<br />起床したタスクのvruntimeは,実行可能状態のタスクの中で最小のvrutimeまで繰り上がる<br />
  14. 14. wakeupとsleepが頻繁に繰り返される<br />14<br />プリエンプションが頻発しコンテキストスイッチが増加<br />カレントタスクのvruntimeとの差が小さい場合はプリエンプションを遅延する<br />
  15. 15. プリエンプトしたタスクがすぐに寝ると<br />15<br />次に選ぶタスクは単純にvruntimeが小さいのでいいのか->否<br />直前に動いていたタスクのキャッシュが残っている<br />直前に動いていたタスクを選択する<br />改善<br />
  16. 16. まとめ<br />タスクへの時間割り当ては<br />16<br />タスクの選択はvruntimeが最小のものを選ぶ<br />vruntimeは寝てるなどの条件で繰り上がったりする<br />キャシュとかも考慮している<br />割とヒューリスティックじゃね?<br />
  17. 17. 参考<br />Linux Kernel Watch<br />http://www.atmarkit.co.jp/flinux/rensai/watch2009/watch09c.html<br />The Completly Fair Scheduler<br />http://www.linuxfoundation.jp/jp_uploads/seminar20080709/lfjp2008.pdf<br />Linux カーネル 2.6 Completely Fair Scheduler の内側<br />http://www.ibm.com/developerworks/jp/linux/library/l-completely-fair-scheduler/index.html<br />17<br />

×