在Linux的四核处理器上禁用cpu核


14

我想禁用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


在那里你把它是不明maxcpus=1 条命令?您是否将该字符串grub.cfg作为启动选项?(请更新您的问题,而不要在评论中回答)。
Anthon 2014年

我在Linux OS上使用飞思卡尔IMx6 sabreauto板。我在终端仿真器“ gtkterm”上执行了命令
user3818847 2014年

使用此命令echo 0> / sys / devices / system / cpu3 / online,我可以看到cpu3关闭。现在我想知道的是,我应该重新启动系统以使更改生效,还是可以不重新启动就继续进行
user3818847 2014年

AFAIK,您应该将maxcpus = 1指定为内核的参数(即,当您在grub中时)。编辑“ / etc / defaults / grub”以将其添加到内核参数,运行“ update-grub”并重新引导。这将使事情持久化,即Linux启动时只有一个CPU。
Anthon 2014年

2
@ user3818847您正在使用什么发行版?修改启动参数(通过maxcpus=1)因发行版而异。同样,/sys您所拥有的路径就是错误的路径,正确的路径是/sys/devices/system/cpu/cpu3/online
Patrick

Answers:


28

正如帕特里克(Patrick)在评论中指出的那样,您/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

maxcpus=1在shell提示符下键入无效。更准确地说,它将变量设置为该外壳中maxcpus的值1,这没有任何其他作用。您可以通过maxcpus作为内核参数传递来设置启动时的CPU数量。为此,您必须更改引导加载程序配置(例如,更改U-Boot中的内核命令行)。


感谢您的建议。它与您建议的命令一起使用
user3818847

这至少是特定于内核的。我正在运行3.6.6内核,没有这样的文件。您改为使用single /sys/devices/system/cpu/online./offlinefiles来控制所有核心。
丹尼尔·格里斯康

@Gilles-有没有办法知道打开core和关闭需要多少时间?
Chetan Arvind Patil

@ChetanArvindPatil时间。我认为,如果所涉及的代码尚未在L2缓存中,那么时间将由RAM访问控制,否则,将由关闭内核的时间决定,但这在很大程度上取决于CPU和OS。
吉尔(Gilles)'所以

1
@Xofo当内核关闭内核时,该内核正在运行内核代码,因此该时刻该内核上未安排任何线程。内核关闭后,不再在该内核上调度线程。我不知道如果线程的相似性将其限制为一组全都关闭的内核,会发生什么。
吉尔(Gilles)“所以,别再邪恶了”,

1

您不必关闭禁用内核。

您将使用cpusetstaskset

http://man7.org/linux/man-pages/man7/cpuset.7.html

cpuset定义了CPU和内存节点的列表。

cpuset文件系统是内核cpuset机制的伪文件系统接口,用于控制处理器的处理器位置和进程的内存位置。它通常安装在/ dev / cpuset。

在内核编译为内置支持cpusets的系统上,所有进程都附加到cpuset,并且cpusets始终存在。如果系统支持cpuset,则它将在文件/ proc / filesystems中具有条目nodev cpuset。通过安装cpuset文件系统(请参见下面的示例部分),管理员可以在系统上配置cpuset,以控制该系统上处理器和进程的内存位置。默认情况下,如果未修改系统上的cpuset配置,或者甚至没有安装cpuset文件系统,则cpuset机制(尽管存在)对系统的行为没有影响。

系统的CPU包括可以在其上执行进程的所有逻辑处理单元,包括(如果存在)程序包中的多个处理器内核和处理器内核中的超线程。内存节点包括所有不同的主内存;小型和SMP系统通常只有一个内存节点,其中包含系统的所有主内存,而NUMA(非统一内存访问)系统具有多个内存节点。

简而言之,如果您有1个具有6个内核的cpu,则可以配置cpuset,并在仅配置一个内核的cpuset中启动您的进程,例如说3号内核。如果这是一个并行进程,则将全部限制在一个内核中,这样,如果您在给定的cpuset中启动了仅定义了一个内核的4个进程,则这4个进程中的每个进程在3号内核上都将获得25%的cpu利用率。

在此基础上,通常发生的情况是配置了cpuset

  • 例如,在200+内核系统中,cpusetA是0..60内核,无论它们位于何处,cpusetB都是61..70内核;cpusetC是核心71..80;依此类推,但是管理员/建筑师选择配置。
  • cpusetA被分配给某些用户和/或特定的软件程序;cpusetB被分配给不同的用户/程序;等等。
  • 用户在给定的cpuset中启动了一个作业(进程),该请求将请求N个内核,而现在,这些多个(并行)进程被限制在给定的cpuset中。对于限于一个给定cpuset的N个并行处理,每个进程将/应该使用处理器亲和力cpu亲和力,因此这些并行进程不会在cpuset内的不同内核上运行。

还:https : //linux.die.net/man/1/taskset

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.