以下是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;
只在有组调度时才需要。我的意思是它的意义是什么。