动态切换 Linux 使用的 CPU 数量

22
2011
# 作者: 投稿/转载 / 本文采用CC BY-NC-SA 2.5协议授权,转载请注明本文链接

由于要测试一些代码,其运行结果会受到多核并行的影响,所以希望能够调整使用的 CPU 数量。网络上之前看到的方法是在内核的启动参数上添加一个 maxcpus,但是如果这样的话每切换一次都要重启一次,是在太麻烦了。想想 Linux 应该是很强大的,所以可以动态修改 CPU 数量才对。

无意中看到 Linux 代码的 Documentation 文件夹下有个文件叫做 cpu-hotplug.txt,于是就看了一下,发现可以在 /sys/devices/system/cpu 看到代表各 CPU 的文件夹按照 cpuX 的命名方式,如 cpu0、cpu1、cpu2 等。这些文件夹里面有一个 online 文件,如果其值为0则禁用该 CPU,如果为1则启用该 CPU。注意,这里需要 root 权限哦。

因为我只要在单核和多核之间切换,所以我写了两个脚本放在 /usr/local/sbin 里面:

singlecore

#!/bin/bash
cpus_dir="/sys/devices/system/cpu"
for cpu in $(ls "$cpus_dir" | grep 'cpu[0-9]\+')
do
	cpu_online="$cpus_dir/$cpu/online"
	if [[ -e "$cpu_online" && $(cat $cpu_online) = 1 ]]
	then
		echo 0 > "$cpu_online"
	fi
done

multicore

#!/bin/bash
cpus_dir="/sys/devices/system/cpu" 
for cpu in $(ls "$cpus_dir" | grep 'cpu[0-9]\+')
do
	cpu_online="$cpus_dir/$cpu/online"
	if [[ -e "$cpu_online" && $(cat $cpu_online) = 0 ]]
	then
		echo 1 > "$cpu_online"
	fi
done

之后需要切换的时候,只要运行 sudo singlecore 或者 sudo multicore 就可以了~

顺便说一句,我当时在想,如果我禁用了所有的 CPU 会怎么样呢?结果发现 cpu0 是没有 online 文件的,也就是 Linux 至少保证一个 CPU 处于可用状态。

–感谢 upsuper 的投稿,原文:http://blog.upsuper.org/dynamic-modify-cpu-number/

投稿/转载

本文章来源于读者的投稿及经原作者授权转发的文章。[请到这里投稿原创文章 ! ]

More PostsWebsite

Follow Me:
Twitter

9 Responses to 动态切换 Linux 使用的 CPU 数量

Avatar

Eua

Firefox 7.0.1 Firefox 7.0.1 GNU/Linux GNU/Linux

十月 22nd, 2011 at 2:49 下午

呵呵,不错

Avatar

@树而雪与

Firefox 7.0.1 Firefox 7.0.1 GNU/Linux GNU/Linux

十月 22nd, 2011 at 5:04 下午

不错嘛 问一下只用一个CPU的时候是不是比用多个CPU时省电呢?64位系统能不能只用一个CPU呢?

Firefox 7.0.1 Firefox 7.0.1 Mac OS X 10.7 Mac OS X 10.7

upsuper Reply:

@@树而雪与, 是不是省电我就不了解了,因为我本来也不是为了省电……你可以试试。我这里用的系统就是64位的,肯定是没问题的啦。

Firefox 7.0.1 Firefox 7.0.1 GNU/Linux x64 GNU/Linux x64

luc Reply:

@upsuper, 请问你是为了什么禁用多核?谢谢。

Firefox 7.0.1 Firefox 7.0.1 Mac OS X 10.7 Mac OS X 10.7

upsuper Reply:

@luc, 这我不是一开始就写了么,我是为了测试一些代码啊……

Avatar

zhen

Firefox 7.0.1 Firefox 7.0.1 GNU/Linux GNU/Linux

十月 24th, 2011 at 8:59 上午

不错的脚本

Avatar

Terry

Google Chrome 17.0.932.0 Google Chrome 17.0.932.0 GNU/Linux x64 GNU/Linux x64

十一月 14th, 2011 at 6:09 上午

以前为了绕过一个Cisco VPN Client for Linux的bug也禁用过CPU的core。除了测试代码之外还真用不到;-)

Firefox 8.0.1 Firefox 8.0.1 Mac OS X 10.7 Mac OS X 10.7

upsuper Reply:

@Terry, 是啊……

Avatar

aden

Firefox 18.0 Firefox 18.0 Windows 7 Windows 7

一月 14th, 2013 at 11:02 上午

我在RHEL 6U2 OS下按照您的方法去操作,结果发现所有的Online文件都不让写,修改这些文件的权限并以root登陆后也不让写。所以没有办法实现关闭core的目的。

top