且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

RH442-7 调度域和CPU集之二

更新时间:2022-10-01 11:04:57

 一、进程的affinity

1.   均衡cpu的访问时间

l  默认情况下,进程被抢占后,进程会被放置在期待队列里,当活动队列为空时,会将过期队列里的进程重新调度到活动队列了。这样会导致运行队列的不均衡。

l  为保证队列的均衡,默认情况下,当所有cpu都在忙时, 每100ms轮询一次;当cpu空闲时,每1ms轮询一次。

l  查看指定进程运行队列信息

#watch -n .5 ‘ps axo comm,pid,psr | grep program_name’

 

[root@station9 ~]# watch -n .5 'ps axo comm,pid,psr|grep sshd'   

Every 0.5s: ps axo comm,pid,psr|grep sshd                                                  Fri Aug 19 14:11:18 2011

sshd             9105   2

sshd             9496   2

2.   绑定进程到指定的CPUTunning process affinity to with taskset

l  将进程绑定到1个或多个CPU

taskset -pc cplist pid

 

[root@station9 rh442]# taskset -p 3258

pid 3258's current affinity mask: f

#显示sshd所用cpu mask,按照前面的计算方法,affinity mask= f,对应的应该是0~3颗即所用cpu

 

[root@station9 rh442]# taskset -pc 1,2 3258

pid 3258's current affinity list: 0-3

pid 3258's new affinity list: 1,2

#3258进程绑定到cpu1上,即第12cpu

 

[root@station9 rh442]# taskset -p 3258  

pid 3258's current affinity mask: 2

#显示affinity mask6,对应cpu12+cpu24)。

 

l  将系统限制(绑定)到指定的1个或多个CPU

内核参数:

isolcpus=cpu number,...cpu number

 

[root@station9 ~]# vim /etc/grub.conf

#boot=/dev/sda

default=1

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title Red Hat Enterprise Linux Server (2.6.18-194.el5debug)

        root (hd0,0)

        kernel /vmlinuz-2.6.18-194.el5debug ro root=/dev/VolGroup00/LogVol00 rhgb quiet isolcpus=0,1

        initrd /initrd-2.6.18-194.el5debug.img

title Red Hat Enterprise Linux Server (2.6.18-194.el5PAE)

        root (hd0,0)

#如此系统启动后将只使用到第01CPU,以后所有进程均只能用到这两个CPU,其他未绑定的CPU将可通过taskset绑定进程来使用。

 

二、Hot-plugging CPUS(热插拔CPU

1.   逻辑支持热插拔的CPU

l  查看cpu信息

#grep processor /proc/cpuinf

[root@station9 ~]# grep processor /proc/cpuinfo

processor       : 0

processor       : 1

processor       : 2

processor       : 3

l  查看利用cpu的中断

#cat /proc/interrupts

[root@station9 ~]# cat /proc/interrupts

           CPU0       CPU1       CPU2       CPU3      

  0:   97378222      21518      21524      21505    IO-APIC-edge  timer

  1:          0          1          1          1    IO-APIC-edge  i8042

  8:          0          2          1          0    IO-APIC-edge  rtc

  9:          0          0          0          0   IO-APIC-level  acpi

 12:          1          2          0          1    IO-APIC-edge  i8042

 74:          0          0          0          0   IO-APIC-level  uhci_hcd:usb4

 82:        154        139    1933584    1933582   IO-APIC-level  ehci_hcd:usb1, uhci_hcd:usb2

 90:         11         12          8         14   IO-APIC-level  uhci_hcd:usb3

 98:          0          0          0          0   IO-APIC-level  ahci

162:      10077          0          0     110568         PCI-MSI  eth0

177:       1353       1324      24477      24492   IO-APIC-level  ioc0

NMI:          0          0          0          0

LOC:   97437746   97437752   97437747   97437753

ERR:          0

MIS:          0

 

l  动态关闭CPU

#echo 0 > /sys/devices/system/cpu/cpu_number/online

[root@station9 cpu1]# echo 0 > /sys/devices/system/cpu/cpu1/online

[root@station9 cpu1]# cat /proc/cpuinfo |grep processor

processor       : 0

processor       : 2

processor       : 3

#默认有些CPU是不能被关闭的,如系统默认所用CPU0

 

l  重新启动CPU

#echo 1 > /sys/devices/system/cpu/cpu_number/online

[root@station9 cpu1]# echo 1 > /sys/devices/system/cpu/cpu1/online

[root@station9 cpu1]# cat /proc/cpuinfo |grep processor

processor       : 0

processor       : 1

processor       : 2

processor       : 3

 

2.   物理上热插拔CPU

l  像启动用CPU等一些CPU是不能被热插拔的

l  必须Bios支持CPU热插拔

l  NUMA系统适用

l  可以从/proc/cpuinf查看CPU动态信息

l  文档kernel-doc-*/Documentation/cpu-hotplug.txt


本文转自netsword 51CTO博客,原文链接:http://blog.51cto.com/netsword/643260