2013-08-05 28 views
5

由于大多数C程序员都知道libc为线程cpu关联性调优(pthread_attr_setaffinity_np())提供了非可移植函数。但是,我不知道的是在实现内核模块时如何实现这一点。任何提及或重定向到某些实例的答案都会很有帮助。在Linux内核模块中设置线程关联

+0

能否请你详细解释一下:你想改变一些现有线程的亲和性,或者从你的内核模块产生一个给定的亲和力的新线程?你想以这种方式完成什么?这些信息可能会帮助这里的专家给你答案。 – Eugene

+0

对不起,延迟的答案。我想要做的是在不同的内核上分别建立两个线程,以便对缓存一致性问题进行一些测量。为了使我的测量精确,我需要添加内联汇编,但我也必须禁用抢占。要做到这一点,我必须拥有一个用于该任务的Linux内核模块。然而,对于这样的模块,libc库是不可见的,因此我想看看哪个函数改变了THREAD的亲和性,而不是LKM中的PROCESS。我希望现在清楚... – user1533288

回答

3

您应该使用kthreads,它代表内核线程。要在指定的cpu上创建此类应用程序,您应该调用kthread_create_on_cpu()。它在include/linux/kthread.h中定义。线程将在睡眠状态下创建,因此您应该在其上调用wake_up_process()。就这样。

你可以在我的回答this问题中得到一个使用kthreads的例子。

0

您可以使用kthread_bind()函数。