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

Weitere ähnliche Inhalte

Was ist angesagt?

コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話Yuta Shimada
 
TIME_WAITに関する話
TIME_WAITに関する話TIME_WAITに関する話
TIME_WAITに関する話Takanori Sejima
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能Kohei Tokunaga
 
トピックブランチとは
トピックブランチとはトピックブランチとは
トピックブランチとはnakajima_yuji
 
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門Preferred Networks
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来についてshinjiigarashi
 
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48Preferred Networks
 
トランザクション入門
トランザクション入門 トランザクション入門
トランザクション入門 Kumazaki Hiroki
 
A critique of ansi sql isolation levels 解説公開用
A critique of ansi sql isolation levels 解説公開用A critique of ansi sql isolation levels 解説公開用
A critique of ansi sql isolation levels 解説公開用Takashi Kambayashi
 
PythonによるOPC-UAの利用
PythonによるOPC-UAの利用PythonによるOPC-UAの利用
PythonによるOPC-UAの利用Kioto Hirahara
 
Unity and WebSockets
Unity and WebSocketsUnity and WebSockets
Unity and WebSocketsJosh Glover
 
ホモトピー型理論入門
ホモトピー型理論入門ホモトピー型理論入門
ホモトピー型理論入門k h
 
コンセプトから理解するGitコマンド
コンセプトから理解するGitコマンドコンセプトから理解するGitコマンド
コンセプトから理解するGitコマンドktateish
 
UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編hdais
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Akihiro Suda
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safeKumazaki Hiroki
 
キャッシュコヒーレントに囚われない並列カウンタ達
キャッシュコヒーレントに囚われない並列カウンタ達キャッシュコヒーレントに囚われない並列カウンタ達
キャッシュコヒーレントに囚われない並列カウンタ達Kumazaki Hiroki
 

Was ist angesagt? (20)

コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
 
TIME_WAITに関する話
TIME_WAITに関する話TIME_WAITに関する話
TIME_WAITに関する話
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
トピックブランチとは
トピックブランチとはトピックブランチとは
トピックブランチとは
 
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
 
Java8でRDBMS作ったよ
Java8でRDBMS作ったよJava8でRDBMS作ったよ
Java8でRDBMS作ったよ
 
トランザクション入門
トランザクション入門 トランザクション入門
トランザクション入門
 
A critique of ansi sql isolation levels 解説公開用
A critique of ansi sql isolation levels 解説公開用A critique of ansi sql isolation levels 解説公開用
A critique of ansi sql isolation levels 解説公開用
 
PythonによるOPC-UAの利用
PythonによるOPC-UAの利用PythonによるOPC-UAの利用
PythonによるOPC-UAの利用
 
Unity and WebSockets
Unity and WebSocketsUnity and WebSockets
Unity and WebSockets
 
ホモトピー型理論入門
ホモトピー型理論入門ホモトピー型理論入門
ホモトピー型理論入門
 
コンセプトから理解するGitコマンド
コンセプトから理解するGitコマンドコンセプトから理解するGitコマンド
コンセプトから理解するGitコマンド
 
UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
 
キャッシュコヒーレントに囚われない並列カウンタ達
キャッシュコヒーレントに囚われない並列カウンタ達キャッシュコヒーレントに囚われない並列カウンタ達
キャッシュコヒーレントに囚われない並列カウンタ達
 

Completely Fair Scheduler (CFS)