Below is the structure of the real-time execution queue in version 3.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; #ifdef CONFIG_SMP int next; #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; 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 };
I realized that there are some data members, but I'm not quite sure about the following data members:
a) rt_nr_migratory : (I think) this is a counter to count how many tasks can be transferred to another processor
b) pushable_tasks is a list of tasks that can be moved to other execution queues if they have nothing to run.
Please correct me if I am mistaken regarding the above entries.
c) rt_throttled , rt_time , rt_runtime , rt_nr_total , rt_nr_boosted : I do not understand what this means.
Also why struct rq *rq; only required when group planning exists. I mean, what is its significance.
source share