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

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

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

答案1

根据你对 MikeyB 的回答的评论,你试图以错误的方式解决这个问题,恕我直言——

numactl都会taskset将进程锁定到 CPU,但它们不会保持其他进程占用该 CPU。
如果当您的进程需要该 CPU 时,其他进程正在使用该 CPU,则您必须等待。

一个更好的解决方案是将你的进程的值设置nice为某个值,使其积极地抢占 CPU(例如 -20),如果这仍然不够,将你的进程设置为realtime priority 使用 rtprio,并让调度程序执行其必须执行的操作,以确保您的进程在需要时始终具有 CPU 周期。

正如 MikeyB 指出的那样,试图智胜调度程序通常是一个坏主意。让它做它应该做的事情,并以正确的方式请求 CPU 周期(nice值和rtprio)。

答案2

如果你已经安装了,你可以使用任务集命令例如

taskset -c 2 -p 2345 

在 CPU 2 上运行进程 2345

答案3

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

通常,这是没有必要的。不要再试图智胜调度程序了。

答案4

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

# taskset -p 0x00000001 12345

相关内容