我有一台 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
答案3
numactl
允许您将进程绑定到核心或物理 CPU 以及强制内存分配策略。
通常,这是没有必要的。不要再试图智胜调度程序了。
答案4
要将进程 PID 12345 绑定到第一个处理器,请尝试以下操作:
# taskset -p 0x00000001 12345