Linuxのスケジューラはランキューには赤黒木を使っていて〜というところは見聞きしたことありますが、実際にどんなデータを使っていて、それらの関係は?と思ったので調べてみました。
スケジューラに関連する構造体はこれらのものがあります。
- struct sched_class
- struct sched_entity
- struct sched_rt_entity
- struct sched_dl_entity
- struct cfs_rq
- struct rt_rq
- struct dl_rq
- struct rq
これらのうち、struct sched_classとstruct rqを除いたものたちはスケジューリングクラスに関連するものです。 Linuxのスケジューラはプロセスに対してスケジューリングポリシーを設定することができます。これはsched_setscheduler(2)にて行うことができます。 例えば、通常のプロセスの場合はSCHED_OTHERがスケジューリングポリシーとして設定され、この場合はスケジューリングクラスはstruct sched_entityとstruct cfs_rqが使われます。これらはCompletely Fair Schedulingクラスです。 rtがつくものはリアルタイムスケジューリングクラス、dlがつくものはdead lineスケジューリングクラスです。
で、これらを絵にしてみたのがこちらです。
コードを見た限り、struct sched_dl_entityとstruct sched_dl_rqは関連がなかったです。cfsとrtはランキューへのポインタを持ってましたが。
キューがどうなっているかを見てみると、cfsのランキュー(struct cfs_rq)は赤黒木で、rb_leftmostが次に動くプロセスだなってのがわかりますね。
344 struct cfs_rq { 345 struct load_weight load; 346 unsigned int nr_running, h_nr_running; 347 348 u64 exec_clock; 349 u64 min_vruntime; 350 #ifndef CONFIG_64BIT 351 u64 min_vruntime_copy; 352 #endif 353 354 struct rb_root tasks_timeline; 355 struct rb_node *rb_leftmost; 356
struct rt_rqのほうはというと、struct rt_prio_arrayという構造体があり、
440 /* Real-Time classes' related field in a runqueue: */ 441 struct rt_rq { 442 struct rt_prio_array active; 443 unsigned int rt_nr_running;
優先度毎のリストで管理されてるようです。
126 /* 127 * This is the priority-queue data structure of the RT scheduling class: 128 */ 129 struct rt_prio_array { 130 DECLARE_BITMAP(bitmap, MAX_RT_PRIO+1); /* include 1 bit for delimiter */ 131 struct list_head queue[MAX_RT_PRIO]; 132 };
pick_next_rt_entity()がrt_rqのactive変数からsched_rt_entityの要素を取り出しているので、このstruct rt_prio_arrayがリアルタイムスケジューリングクラスのランキューでしょうね。
最後にDeadline Schedulingクラスを。struct dl_rqを見ると先頭に赤黒木の構造体があって、要素的にcfsと同じっぽいですね。
480 /* Deadline class' related fields in a runqueue */ 481 struct dl_rq { 482 /* runqueue is an rbtree, ordered by deadline */ 483 struct rb_root rb_root; 484 struct rb_node *rb_leftmost;
( ´ー`)フゥー...
Professional Linux Kernel Architecture
- 作者: Wolfgang Mauerer
- 出版社/メーカー: Wrox
- 発売日: 2010/03/11
- メディア: Kindle版
- この商品を含むブログを見る