Hal*_*lci 9 linux kernel scheduler
我们使用的是内核版本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;
}
}
Run Code Online (Sandbox Code Playgroud)
这基本上是将唯一用户添加到列表中.但是,我们得到随机结果.有没有具体的方法来解决这个问题?
谢谢.
您可能想尝试计算 for_each_task 宏内的用户数量。这会导致对由于 I/O 或任何其他原因而被阻止的任务的用户进行计数。这应该提供更好的结果,因为如果您使用运行队列,您不能保证能够计算运行交互式进程的用户。