Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux上的任务集和未知线程_Linux_Multithreading_Pthreads - Fatal编程技术网

linux上的任务集和未知线程

linux上的任务集和未知线程,linux,multithreading,pthreads,Linux,Multithreading,Pthreads,我的公司刚刚推出了一个软件API,它可以生成一个监控线程(启用时)。此监视线程非常有用,但是我们希望在Linux中将其锁定到核心0。然而,我不能以正常的方式使用任务集 # taskset -c 2,3 12345 因为我不知道监视线程的PID。我问过供应商是否有可能将线程的PID输出到日志文件或类似文件中,他们说“我们将对此进行调查”,这意味着没有 所以我的问题是,如何从外部找到此监视线程的PID,以便我可以设置它的任务?看看libnuma中的numactl。看起来您可以使用它来设置核心关联策

我的公司刚刚推出了一个软件API,它可以生成一个监控线程(启用时)。此监视线程非常有用,但是我们希望在Linux中将其锁定到核心0。然而,我不能以正常的方式使用任务集

# 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特定的系统调用)