以下は、v3.5.4のリアルタイム実行キュー構造です。
struct rt_rq {
struct rt_prio_array active;
unsigned int rt_nr_running;
#if defined CONFIG_SMP || defined CONFIG_RT_GROUP_SCHED
struct {
int curr; /* highest queued rt task prio */
#ifdef CONFIG_SMP
int next; /* next highest */
#endif
} highest_prio;
#endif
#ifdef CONFIG_SMP
unsigned long rt_nr_migratory;
unsigned long rt_nr_total;
int overloaded;
struct plist_head pushable_tasks;
#endif
int rt_throttled;
u64 rt_time;
u64 rt_runtime;
/* Nests inside the rq lock: */
raw_spinlock_t rt_runtime_lock;
#ifdef CONFIG_RT_GROUP_SCHED
unsigned long rt_nr_boosted;
struct rq *rq;
struct list_head leaf_rt_rq_list;
struct task_group *tg;
#endif
};
一部のデータメンバーが何を表すのかは理解しましたが、次のデータメンバーについては完全にはわかりません。
a)rt_nr_migratory
:(私は思う)他のCPUにプッシュできるタスクの数をカウントするためのカウンターです
b)pushable_tasks
は、実行するものがない場合に他の実行キューにプッシュできるタスクのリストです。
上記のエントリが間違っている場合は、訂正してください。
c)、、、、:rt_throttled
これrt_time
の使用法rt_runtime
がわかりません。rt_nr_total
rt_nr_boosted
struct rq *rq;
また、グループスケジューリングが存在する場合にのみ必要な理由もあります。私はその重要性が何であるかを意味します。