我有一个 Linux 二进制文件,如果它发现系统中的 CPU 数量超过 n 个,它就会崩溃。如果我使用“maxcpus”内核参数启动并限制可见 CPU 的数量,我可以让它运行,但我更希望有某种方式来限制每个进程的 CPU 数量。这在 Linux 中可行吗?我正在运行内核 5.19。
更新:
我找到了一种不使用内核参数的方法。您只需将要禁用的 CPU 的零写入 /sys/devices/system/cpu/cpuX 即可。以下是可以执行此操作的 shell 脚本:
#!/bin/sh
# Disable CPUs 8-15 on a 16 core machine:
for i in {8..15};
do echo 0 | sudo tee /sys/devices/system/cpu/cpu${i}/online
done
我知道这在技术上不是基于每个进程的,但至少可以在系统运行时启用/禁用 CPU,而无需重新启动。这对我来说很有效。
答案1
您首先需要尝试使用 Linuxtaskset
命令来运行您的进程。还有其他方法,但这是您要找的方法。
查看命令行选项任务集.. 具体来说,-c
您可以指定希望进程能够访问哪些特定 CPU 的参数。
例如:
我想让它numnutz
在核心 0、2 和 3 上运行
$ taskset -c 0,2,3 numnutz
这可能会解决您的困境。如果可以的话请告诉我。:)