6

以下は、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_totalrt_nr_boosted

struct rq *rq;また、グループスケジューリングが存在する場合にのみ必要な理由もあります。私はその重要性が何であるかを意味します。

4

1 に答える 1

10

これは答えるのが難しい質問です。これは、実際には一度に6つほどの複雑な質問であるためです。したがって、これらの各部分を理解しやすくするために、これらの各フィールドがいつ追加されたかを調べました。コミットメッセージと、場合によっては各フィールドを導入したパッチを読むことで、それらが存在する理由をより深く理解できるはずです。

rt_nr_migratorycommit schedに追加されました:RT-balancecpu-weightを追加します。

pushable_taskscommit schedに追加されました:「pushable_tasks」リストを作成して、プッシュを1回の試行に制限します。

rt_throttledコミットスケジュールにrt_time追加されました:rt時間制限

rt_runtimecommit schedに追加されました:rt-group:smpbalancing

rt_nr_totalcommit sched_rtに追加されました:rtグループスケジューリングの過負荷バグを修正しました。

rt_nr_boostedcommit schedに追加されました:rt-group:PIを処理します。(ここでの「PI」は「優先順位の逆転」を意味すると思います。)

rqcommit schedに追加されました:rtgroupscheduling


以前git blameは各行がいつ導入されたかを調べていましたが、この場合、すべての作業が完了してからスケジューラのソースコードが2つの主要な再編成を経たため、かなり複雑になりました。したがって、を使用git blame sched.hすると、構造全体が一度に追加されたと表示されましたが、名前が付けられたコミットは、実際には構造がから移動されたときのものでしたsched.c。それから私はgit blame <commit>~ -- sched.cその変更の前にsched.cがどのように見えたかを見ていました。最後に、重要だと思われるコミットごとに、を使用して再確認しgit show <commit>ました。

于 2012-11-06T03:33:13.540 に答える