9

カーネルバージョン2.4-20を使用しており、カーネルモードでアクティブユーザーの数をカウントする必要があります。目的はスケジューラーを変更することなので、sched.cでschedule()関数を変更します。

list_for_eachマクロでユーザーをカウントします。

list_for_each(tmp, &runqueue_head) {
    p = list_entry(tmp, struct task_struct, run_list);
    if (can_schedule(p, this_cpu)) {
        if (unique(p->uid)) add_new_user(p->uid);
        int weight = goodness(p, this_cpu, prev->active_mm);
        if (weight > c)
            c = weight, next = p;
    }
}

これは基本的にユニークユーザーをリストに追加することです。ただし、ランダムな結果が得られます。この問題を解決する具体的な方法はありますか?

ありがとうございました。

4

2 に答える 2

1

for_each_task マクロ内でユーザーをカウントしてみてください。これにより、I/O またはその他の理由でブロックされたタスクを持つユーザーがカウントされます。実行キューを使用する場合、インタラクティブなプロセスを実行するユーザーをカウントできることを保証できないため、これはより良い結果を提供するはずです。

于 2012-06-02T18:33:57.207 に答える
0

これは機能しますか?誰 | 誰 | awk ' {印刷 $1 }' | 並べ替え -ud

于 2012-06-04T19:18:44.180 に答える