linux上的任务集和未知线程
我的公司刚刚推出了一个软件API,它可以生成一个监控线程(启用时)。此监视线程非常有用,但是我们希望在Linux中将其锁定到核心0。然而,我不能以正常的方式使用任务集linux上的任务集和未知线程,linux,multithreading,pthreads,Linux,Multithreading,Pthreads,我的公司刚刚推出了一个软件API,它可以生成一个监控线程(启用时)。此监视线程非常有用,但是我们希望在Linux中将其锁定到核心0。然而,我不能以正常的方式使用任务集 # taskset -c 2,3 12345 因为我不知道监视线程的PID。我问过供应商是否有可能将线程的PID输出到日志文件或类似文件中,他们说“我们将对此进行调查”,这意味着没有 所以我的问题是,如何从外部找到此监视线程的PID,以便我可以设置它的任务?看看libnuma中的numactl。看起来您可以使用它来设置核心关联策
# taskset -c 2,3 12345
因为我不知道监视线程的PID。我问过供应商是否有可能将线程的PID输出到日志文件或类似文件中,他们说“我们将对此进行调查”,这意味着没有
所以我的问题是,如何从外部找到此监视线程的PID,以便我可以设置它的任务?看看libnuma中的numactl。看起来您可以使用它来设置核心关联策略,并让它在该策略已生效的情况下为您启动程序 我没有详细阅读手册页,但我怀疑启动的程序可以通过进行相关的系统调用来覆盖该策略,如果它最初是这样写的。但我可以想象,除非程序本身没有做出这样的决定,否则你可以将整个过程限制在你喜欢的任何核心 因此,也许您可以在限制为核心0的numactl下运行程序。然后,当第三方库启动其线程时(可能您正在调用某种库初始化例程,该例程本身会生成监视器线程),您可以进行自己的系统调用,以放松从numactl继承的核心关联策略 然而,我同意Basile Starynkevitch的观点-你必须有一些非常特殊的情况,然后才有必要在核心亲和力上乱搞。根据我的经验,只有当程序中有大量线程真正影响内存系统,并且还解决了内存亲和力的问题(这是libnuma可以做的其他事情)时,才能获得一些东西。Intel和AMD的硬件非常好,您必须非常努力地改进Linux调度程序的决策
您还可以考虑PrimeTrpRT内核补丁,您可以预先打包ReHATH-MRG或CLSNS科学Linux。它很好地使Linux中的调度在最大和平均上下文切换时间方面更加一致。我建议这样做是因为尽管您没有这样说,但我感觉您真正想要的是让其他线程的调度更可靠、更一致。PREEMPT\u RT在这方面做得很好。
为什么要将线程锁定到核心0?您不信任内核调度器的具体原因是什么?并且线程没有唯一的pid,而是唯一的tid(请参阅Linux特定的系统调用)