【问题标题】:set thread affinity in a linux kernel module在 linux 内核模块中设置线程亲和性
【发布时间】:2013-08-06 12:31:37
【问题描述】:

正如大多数 C 程序员所知道的那样,libc 为线程 cpu 亲和性调整提供了一个不可移植的函数 (pthread_attr_setaffinity_np())。但是,我真的不知道在实现内核模块时如何做到这一点。任何提及或重定向到一些真实示例的答案都会很有帮助。

【问题讨论】:

  • 您能否更详细地解释一下:您想更改某个现有线程的亲和性还是从您的内核模块生成一个具有给定亲和性的新线程?你想以这种方式完成什么?这些信息可以帮助这里的专家为您解答。
  • 抱歉,回答延迟。我想做的是在不同的内核上分别建立两个线程,这样我就可以对缓存一致性问题进行一些测量。为了使我的测量精确,我需要添加内联程序集,但我还必须禁用抢占。为此,我必须有一个用于该任务的 linux 内核模块。但是,对于这样的模块,libc 库是不可见的,因此我想查看哪个函数更改了 THREAD 的亲和力,而不是 LKM 中的 PROCESS。我希望这现在很清楚......

标签: kernel-module setthreadaffinitymask


【解决方案1】:

您可以使用 kthread_bind() 函数。

【讨论】:

    【解决方案2】:

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

    您可以在我的this 问题的回答中获得一个使用 kthreads 的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      • 2020-09-07
      • 1970-01-01
      • 2019-10-22
      相关资源
      最近更新 更多