我們使用的是內核版本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;
}
}
這基本上是將唯一的用戶添加到列表。但是,我們得到隨機結果。有沒有解決這個問題的具體方法?
謝謝。
「隨機結果」是什麼意思? – ArjunShankar
起初我們把用戶計算在goodness()函數中,我們有絕對的任意數字(儘管我們有4個用戶同時運行,我們可以得到1個用戶作爲結果)。在sched()中,我們似乎有一致的值,但我們不確定,因爲sched()運行頻繁,所以我們需要抽取樣本(一次5000輪)。我猜在內核中沒有包含當前活動用戶的字段?如果沒有,最好的方法是什麼?感謝您的答覆。 –
謝謝澄清。我不知道這個答案。我的意圖是指出這個問題並不完全清楚。我建議編輯這個問題。祝你好運! – ArjunShankar