一、进程的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. 绑定进程到指定的CPU(Tunning 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上,即第1、2颗cpu上
[root@station9 rh442]# taskset -p 3258
pid 3258's current affinity mask: 2
#显示affinity mask=6,对应cpu1(2)+cpu2(4)。
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)
#如此系统启动后将只使用到第0、1号CPU,以后所有进程均只能用到这两个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