我想禁用 3 个 CPU 核心并在单个核心上运行我的处理器。我使用过命令:maxcpus=1
。但在此之后我执行了这个命令ls /sys/devices/system/cpu
。依然显示cpu0,cpu1,cpu2,cpu3
。
我也尝试过:echo 0 > /sys/devices/system/cpu3/online
但出现以下错误:no such file or directory
。
答案1
作为帕特里克在评论中指出,你的路径/sys
错误了。
echo 0 > /sys/devices/system/cpu/cpu3/online
如果您想关闭除以下之外的所有 CPU cpu0
:
for x in /sys/devices/system/cpu/cpu[1-9]*/online; do
echo 0 >"$x"
done
在 shell 提示符下键入maxcpus=1
没有任何效果。更准确地说,它将变量设置为该 shell 中的maxcpus
值1
,这没有任何其他效果。您可以通过传递maxcpus
参数来设置启动时的 CPU 数量内核参数。为此,您必须更改引导加载程序配置(例如更改 U-Boot 中的内核命令行)。
答案2
你不一定关或者禁用核心。
你会用中央处理器组和任务集
http://man7.org/linux/man-pages/man7/cpuset.7.html
cpuset 定义了 CPU 和内存节点的列表......
cpuset 文件系统是内核 cpuset 机制的伪文件系统接口,用于控制进程的处理器放置和内存放置。它通常安装在/dev/cpuset。
在内核编译为内置 cpuset 支持的系统上,所有进程都附加到 cpuset,并且 cpuset 始终存在。如果系统支持 cpuset,那么它将在文件 /proc/filesystems 中具有条目 nodev cpuset。通过安装 cpuset 文件系统(请参阅下面的示例部分),管理员可以配置系统上的 cpuset,以控制该系统上进程的处理器和内存布局。默认情况下,如果系统上的 cpuset 配置未修改,或者 cpuset 文件系统甚至未挂载,则 cpuset 机制虽然存在,但对系统的行为没有影响。
系统的CPU包括进程可以在其上执行的所有逻辑处理单元,包括包内的多个处理器核和处理器核内的超线程(如果存在)。内存节点包括所有不同的主内存组;小型和 SMP 系统通常只有一个内存节点,其中包含系统的所有主内存,而 NUMA(非均匀内存访问)系统则具有多个内存节点。
简而言之,如果您有 1 个 6 核 cpu,您将配置 cpusets 并在中央处理器组仅在一个核心上配置,例如核心#3。如果它是一个并行进程,它将全部限制在该一个核心上,这样,如果您在只定义了一个核心的给定 cpuset 中启动 4 个进程,那么这 4 个进程中的每一个都会在核心 #3 上获得 25% 的 cpu 利用率。
在此基础上,通常会发生的是中央处理器组配置为使得
- 例如,在 200+ 核心系统中,cpusetA 是核心 0..60(无论它们位于何处),cpusetB 是核心 61..70; cpusetC 的核心数为 71..80;等等,但是管理员/架构师选择配置。
- cpusetA 分配给某些用户和/或特定软件程序; cpusetB分配给不同的用户/程序;等等。
- 用户启动一个作业(进程),该作业(进程)会请求氮核心...在给定的 cpuset 内,现在这些多个(并行)进程是受限的到给定的 cpuset。而对于那些氮并行仅限于给定的 cpuset,每个进程都会/应该利用处理器亲和力或者CPU亲和力因此这些并行进程不会在 cpuset 内的不同核心上发生冲突。