jian9158101 发表于 2015-01-20 17:20

请问:如何将CPU1上面所有任务全部移到CPU0上来运行?

如题,
       请问如何将CPU1上面所有任务全部移到CPU0上来运行?有什么OpenSource的Tool吗?

Tinnal 发表于 2015-01-20 19:57

回复 1# jian9158101

“所有”指的范围有多大?
内核的服务线程算吗?


用户态Taskset命令有可以用呀。cgroup 的cpuset子系统也可以用。


   

jian9158101 发表于 2015-01-21 09:25

对,包括内核线程跟用户进程,我来试试看哦,谢谢

jian9158101 发表于 2015-01-21 09:31

我的CPU是双核的,当我用echo 0 > /sys/devices/system/cpu/cpu1/online将CPU1 Down掉后,用TOP查看状态发现所有的CPU内核线程原本在CPU1上的,都移到了CPU0,而原本在CPU1的用户进程则全部睡眠
我在想有什么办法可以将用户进程也全部移到CPU0上,然后在Down掉CPU1,用taskset貌似只能一个一个的设定比较不方便
回复 2# Tinnal


   

jian9158101 发表于 2015-01-21 16:00

自己顶下:))求达人帮忙~

humjb_1983 发表于 2015-01-21 17:20

jian9158101 发表于 2015-01-21 09:31 static/image/common/back.gif
我的CPU是双核的,当我用echo 0 > /sys/devices/system/cpu/cpu1/online将CPU1 Down掉后,用TOP查看状态发现 ...
貌似会自动迁移到其它cpu的。你看看其它进程当前运行的核是哪一个?这些进程默认就是S状态吧?

瀚海书香 发表于 2015-01-21 19:46

回复 4# jian9158101

我的CPU是双核的,当我用echo 0 > /sys/devices/system/cpu/cpu1/online将CPU1 Down掉后,用TOP查看状态发现所有的CPU内核线程原本在CPU1上的,都移到了CPU0,而原本在CPU1的用户进程则全部睡眠
我在想有什么办法可以将用户进程也全部移到CPU0上,然后在Down掉CPU1,用taskset貌似只能一个一个的设定比较不方便

你确定CPU1的用户进程睡眠了?cpu offline的时候是不区分用户进程的,所有的进程都会迁移到其他CPU上的。

echo "0" > /sys/devices/system/cpu/cpu1/online 对应的内核代码如下:

static SYSDEV_ATTR(online, 0644, show_online, store_online);

store_online-->cpu_down-->_cpu_down-->__cpu_notify-->....
                                                          -->__stop_machine-->stop_cpus-->__stop_cpus-->stop_machine_cpu_stop-->take_cpu_down-->__cpu_disable-->native_cpu_disable-->cpu_disable_common....

jian9158101 发表于 2015-01-22 11:37

回复 6# humjb_1983
1. 看kernel doc下面的cpu-hotplug说是会自动迁移的~
2. 是S状态,比较top -b dump出来的所有task状态,有些用户进程迁移到了CPU0,有些没有,内核线程也是


   

jian9158101 发表于 2015-01-22 11:38

回复 7# 瀚海书香
确定啊,看了下cat /proc/interrupts,只显示CPU0


   

humjb_1983 发表于 2015-01-22 12:19

jian9158101 发表于 2015-01-22 11:37 static/image/common/back.gif
回复 6# humjb_1983
1. 看kernel doc下面的cpu-hotplug说是会自动迁移的~
2. 是S状态,比较top -b dump出 ...
结果发来看看吧,谢谢!
页: [1] 2 3
查看完整版本: 请问:如何将CPU1上面所有任务全部移到CPU0上来运行?