【发布时间】:2012-03-02 03:35:37
【问题描述】:
我现在正在研究Linux的调度器。关于CPU核心亲和力,我想知道以下几点:
1) 每个进程(线程)如何固定到一个内核上?
有一个系统调用sched_setaffinity 来更改执行进程的核心亲和性。但是在内部,当一个进程(或线程)生成时,默认的 Linux 调度程序是如何将进程(线程)分配给特定的内核的呢?我修改了sched_setaffinity 系统调用以转储有关从一个核心移动到另一个核心的任务的信息。
printk(KERN_INFO "%d %d %ld %lu %s\n", current->pid, current->tgid,
current->state, current->cpus_allowed,
current->comm);
/var/log/messages 中似乎没有上述信息的转储。所以默认调度程序以不同的方式固定每个进程,但我不知道如何。
2) 是否可以通过PID或其他信息获取核心ID?
这就是我想在 Linux 内核中实现的。在task_struct 中,有一个名为cpus_allowed 的成员。但这是设置亲和力的掩码,而不是核心 ID。我想检索一个数据,该数据标识正在运行指定进程的核心。
谢谢,
【问题讨论】: