如何从Linux内核模式设置进程的亲和性?

6
如何在内核模块中设置进程的CPU亲和性?在用户模式下,有一个系统调用sched_setaffinity,但我正在寻找内核模式的等效方法。
在Linux内核代码中,也有一个名为sched_setaffinity的函数。它从sys_sched_setaffinity函数中调用,该函数由system_call调用。从表面上看,这是我想要使用的函数。但是,它与系统调用具有相同的名称让我有些不安。
但众所周知,最好的做法就是尝试一下。所以我试了一下,我的模块编译通过了。然而,当我尝试加载模块时,它抱怨说名称sched_setaffinity未定义。

不确定是否有任何区别,您想设置用户空间进程还是kthread的亲和性? - Ciro Santilli OurBigBook.com
1个回答

3

sched_setaffinity 没有对模块进行导出。

如果你修改 /usr/src/linux/kernel/sched.c,你可以使得 sched_setaffinity 对模块进行导出。

 long sched_setaffinity(pid_t pid, const struct cpumask *in_mask)
 {
...
 }
+EXPORT_SYMBOL_GPL(sched_setaffinity);

好像就是这样了。由于我正在处理的内容的性质,修改内核是不可行的。还是非常感谢。 - Mike Mu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接