カーネルバージョン2.4-20を使用しており、カーネルモードでアクティブユーザー数をカウントする必要があります。目標はスケジューラーを変更することです、従って私達はスケジュール()機能を変更するsched.cにあります。カーネル内のアクティブユーザー数をカウントする方法
私たちが行うことは、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;
}
}
基本的にはリストにユニークユーザーを追加しています。しかし、我々はランダムな結果を得る。この問題を解決する具体的な方法はありますか?
ありがとうございます。
「ランダムな結果」とはどういう意味ですか? – ArjunShankar
最初にgoodness()関数でユーザーを数えましたが、そこには絶対に任意の数値がありました(同時に4人のユーザーが実行していても、結果として1ユーザーを取得できました)。 sched()では一貫した値があるようですが、sched()が頻繁に実行されるので、サンプルを取る必要があります(5000回に1回)。私は現在のアクティブなユーザーを保持するフィールドがカーネルにないと思いますか?そうでない場合、それらを数える最善の方法は何ですか?お返事をありがとうございます。 –
ご清聴ありがとうございます。私はこれに対する答えを知らない。私の意図は、その質問が完全にはっきりしていないことを指摘することでした。これを質問に編集することをお勧めします。がんばろう! – ArjunShankar