题 如何将进程移动到核心或将进程专用于处理器?


我有一台Intel E5620处理器。我用过 cat /proc/[pid]/stat 确定上次运行该进程的处理器(第39个字段)。如何确保流程专用于处理器(我有8个可用)或更好,我如何将流程专用于核心(我有4个)?


5
2017-10-06 17:45




你为什么要这样做?如今,大多数操作系统中的CPU调度远远优于钝器 CPU C is only available to process P 作业类型。 - voretaq7
@ voretaq7:因为我需要做一些专门的处理。我正在将一个PowerPC应用程序移植到linux。以前它被安置在VME机箱中。 - Brian
您是否需要将进程绑定到处理器(也可能被其他程序使用),或者您是否希望将处理器专用于进程(因此没有其他进程可以访问该CPU)?然后再次 - 为什么 你想这样做吗? (什么是“专用处理”?为什么不能将它从CPU转移到CPU?) - voretaq7
@ voretaq7:因为我有一个从PCIe消耗200MB / s数据的进程,我需要非常快地使用它。我不希望那个处理器上有其他人。 - Brian
请参阅下面的答案。正如@MikeyB所指出的那样,你不应该试图超越调度程序 - 有正确的方法可以确保你在需要时总是有CPU周期,并且它们使调度程序适合你,而不是对你不利。 - voretaq7


答案:


基于你对MikeyB的答案的评论,你试图以错误的方式解决这个问题恕我直言 -

numactl 和 taskset 将您的进程锁定到CPU,但他们不会保留 其他 处理掉那个CPU。
如果在您的流程需要时其他人在该CPU上,您将不得不等待。

更好的解决方案是设置您的流程' nice 重要的东西会导致它积极地抓住他的CPU(类似于-20),如果仍然不够,那么将你的过程设置为 realtime priority  使用rtprio,让调度程序执行必须执行的操作,以确保您的进程在请求它们时始终具有CPU周期。

正如MikeyB所指出的那样,试图超越调度程序通常是一个坏主意。让它做它设计的目的,并以正确的方式询问CPU周期(nice 价值和 rtprio)。


6
2017-10-06 18:10



nice 是一个好主意,但我有通过rc.local运行的进程。不知道怎么做 su root用于确保在启动时某些实例中的进程以最高值运行。我想我应该问另一个问题。 - Brian
我在RHEL5.3安装上没有看到rtprio。这有RPM吗? - Brian


numactl 允许您将进程绑定到核心或物理CPU以及强制内存分配策略。

通常,这不是必需的。不要试图超越调度程序。


4
2017-10-06 17:54



我需要通过2.4 GHz处理器上的PCIe插槽消耗200MB / s的数据。我需要能够非常快速地使用它并控制进程运行的位置。 - Brian
啊,在这种情况下,这是一个非常明智的用例。好样的! - MikeyB


如果你安装了它,你可以使用 包括taskset 命令例如

taskset -c 2 -p 2345 

在cpu 2上运行进程2345


3
2017-10-06 17:51





man taskset  - 它拥有您需要的一切


0
2017-10-06 17:50





要将进程PID 12345绑定到第一个处理器,请尝试以下操作:

# taskset -p 0x00000001 12345

0
2017-10-06 17:54



我越来越 execvp: No such file or directory failed to execute -p - Brian
对不起,我错过了订单。更新。 - quanta
嗯,这里的答案似乎有效: superuser.com/questions/240996/... - Brian