Linux kernel 防止linux内核将线程迁移到其他CPU的任何方法

Linux kernel 防止linux内核将线程迁移到其他CPU的任何方法,linux-kernel,pthreads,Linux Kernel,Pthreads,有没有办法防止linux内核将线程迁移到其他CPU? 使用hwloc(它反过来使用pthread_setaffinity_np),我将线程绑定到内核。然而,有时我看到内核启动了昂贵的迁移任务。有什么方法可以阻止内核这样做吗?我在hwloc/pthreads库中没有找到任何标志,将kernel/sched_nr_migrate设置为0也没有导致所需的行为。 非常感谢您的任何建议。谢谢您可以设置进程(而不是线程)的CPU亲和力,据我所知,内核会尽全力做到这一点。如果希望某个特定进程生成的所有线程都在

有没有办法防止linux内核将线程迁移到其他CPU? 使用hwloc(它反过来使用pthread_setaffinity_np),我将线程绑定到内核。然而,有时我看到内核启动了昂贵的迁移任务。有什么方法可以阻止内核这样做吗?我在hwloc/pthreads库中没有找到任何标志,将kernel/sched_nr_migrate设置为0也没有导致所需的行为。
非常感谢您的任何建议。谢谢

您可以设置进程(而不是线程)的CPU亲和力,据我所知,内核会尽全力做到这一点。如果希望某个特定进程生成的所有线程都在同一个CPU上运行,那么这是一个可接受的解决方案

以下是IBM的一篇文章,它提供了一些额外的背景和特定的系统调用:


有没有人有证据表明这样的功能在任何应用程序中都是一种优势?如果线程X准备就绪,它绑定到的内核已经很忙,并且还有另一个内核空闲,那么操作系统应该怎么做?不运行它?迁移另一个线程?我看不出有什么好处?也许你可以看看利布努马。不确定是否可以在非NUMA拱门中使用。@jrw:您解决过这个问题吗?我在短期线程中看到了类似的问题,这些线程似乎在生命周期开始时就被迁移了,这会降低性能。