RH442-7 调度域和CPU集之一

 调度域(sched domains)和CPU集(cpusets)

一、 内核时间(kernel time)

1.   时钟类型

l  RTC (Real time clock):真实时间(BIOS硬件时间,用于稳定系统时间,不受操作系统影响,保证系统重启后时间的稳定)

l  TSC(time stamp counter):时间戳计时器(用于系统的更新(注册到ntp中等),比RTC更精确。

l  APIC(Advaced Programmable Interrupt Controller):高级可编程中断控制器,可编程时钟

l  PIC(Programmable Interrupt counter):可编程中断计数器

#PIC通常使用IRQ 0的中断号

#默认频率 standard1000HZ1 tick is 1ms,每1毫秒嘀哒一次)

              Kernel-xen250HZ 1 tick 4ms,每4毫秒嘀哒一次)

 

2.   调整系统(CPU)时钟(嘀哒)频率(系统所用时钟都采用嘀哒机制)

l  内核启动参数

tick_devider=value 

#内核启动参数,写在/etc/grub.confkernel行。仅用于X86X86_64Xen中不可使用.

l  value值和对应频率:

  2 = 500 HZ

4 = 250 HZ

5 = 200  HZ

10 = 100 HZ

#value值高则会降低cpu的频率,减小cpu负载开销

3.   调CPU速度

未使用的CPU时钟会增加系统能量的消耗,可在不影响系统性能的情况下,调整cpu时钟。

l  开启/etc/init.d/cpuspeed服务,通过系统自动调整

[root@station9 ~]# /etc/init.d/cpuspeed start

#默认系统会自动启动此服务, kernel-xen不适用

l  修改配置文件/etc/sysconfig/cpuspeed,配置{MAX,MIN}_SPEED,CPU的最大和最小速度

[root@station9 ~]# vim /etc/sysconfig/cpuspeed

MAX_SPEED=

MIN_SPEED=

 

二、 IRQ的均衡机制(IRQ balancing)

IRQ硬件的中断总是优先与进程的优先级。

1.   查看当前IRQ信息

l  procinfo

[root@station9 ~]# procinfo

Linux 2.6.18-194.el5PAE ([email protected]) (gcc 4.1.2 20080704 ) #1 4CPU [station9.(none)]

 

Memory:      Total        Used        Free      Shared     Buffers     

Mem:       4151768      854020     3297748           0      168964

Swap:      8385920           0     8385920

 

Bootup: Thu Aug 18 11:48:29 2011    Load average: 0.02 0.02 0.00 1/141 9777

 

user  :       0:01:30.53   0.0%  page in :        0

nice  :       0:00:30.21   0.0%  page out:        0

system:       0:00:50.16   0.0%  swap in :        0

idle  :   3d 22:20:16.70  99.9%  swap out:        0

steal :       0:00:00.00   0.0%

uptime:      23:35:57.11         context : 45141770

 

irq  0:  84964173 timer                 irq 74:         0 uhci_hcd:usb4       

irq  1:         3 i8042                 irq 82:   3371860 ehci_hcd:usb1, uhci_

irq  3:         5                       irq 90:        45 uhci_hcd:usb3       

irq  4:         4                       irq 98:         0 ahci                

irq  8:         3 rtc                   irq154:         1                      

irq  9:         0 acpi                  irq162:    100856 0          0     100

irq 12:         4 i8042                 irq177:     49130 ioc0                

l  cat /proc/interrupts

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

           CPU0       CPU1       CPU2       CPU3      

  0:   84971583      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    1687180    1687187   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:         22          0          0     100959         PCI-MSI  eth0

177:       1353       1324      23233      23239   IO-APIC-level  ioc0

NMI:          0          0          0          0

LOC:   85031712   85031718   85031713   85031719

ERR:          0

MIS:          0

2.   irqbalance

l  irqbalance主要功能:

可以合理的调配使用各个CPU核心,特别是对于目前主流多核心的CPU,简单的说就是能够把压力均匀的分配到各个CPU核心上,对提升性能有很大的帮助。
   
irqbalance 用于优化中断分配,它会自动收集系统数据以分析使用模式,并依据系统负载状况将工作状态置于 Performance mode 或 Power-save mode。
    处于 Performance mode 时,irqbalance 会将中断尽可能均匀地分发给各个 CPU core,以充分利用 CPU 多核,提升性能。
    处于 Power-save mode 时,irqbalance 会将中断集中分配给第一个 CPU,以保证其它空闲 CPU 的睡眠时间,降低能耗。

irqbalance默认每10s会移动一次IRQ,即重新分配一次IRQ信息,将其分配给指定的CPU。

l  开启irqbalance机制

[root@station9 ~]# /etc/init.d/irqbalance start

[root@station9 ~]# chkconfig irqbalance on

#系统默认会启动该服务,配置文件/etc/sysconfig/irqbalance

 

3.   IRQ Affinity(绑定硬件中断IRQ到指定 CPU

l  关闭irqbalance服务

手动绑定 IRQ 到 CPU 之前需要先停掉 irqbalance 这个服务,irqbalance用来自动绑定和平衡 IRQ

[root@station9 ~]# /etc/init.d/irqbalance stop

[root@station9 ~]# chkconfig irqbalance off

 

l  echo cpu_mask > /proc/irq/<interrupt_number>/smp_affinity

       #为保证系统重启生效需set smp_affinity for every IRQ in /etc/rc.local

    [root@station9 proc]# more interrupts    

           CPU0       CPU1       CPU2       CPU3      

162:         22          0          0     109470         PCI-MSI  eth0

  #只截取了eth0的信息,处理eth0中断的主要是cpu3(即第4CPU  [root@station9 ~]# echo 1 >/proc/irq/162/smp_affinity  

#eth0绑定到cpu0(第1CPU上)

 

[root@station9 ~]# more /proc/interrupts |grep eth0

            CPU0       CPU1       CPU2       CPU3      

162:        388          0          0     109470         PCI-MSI  eth0

 #显示处理eth0中断的变成cpu0

 

l  cpu_masksmp_affinity计算

/proc/irq/162/smp_affinity” 中的 ”1“ 是怎么来的,这其实是个二进制数字,代表 000000100000001 代表 CPU0 的话,00000010 就代表 CPU0, “echo 1 > /proc/irq/162/smp_affinity” 的意思就是说把 162中断绑定到 00000001CPU0)上。所以各个 CPU 用二进制和十六进制表示就是:

               Binary       Hex   #个人计算方法
    CPU 0    00000001         1   
20次方
    CPU 1    00000010         2   
21次方
    CPU 2    00000100         4   
22次方
    CPU 3    00001000         8   
23次方

 

如果我想把 IRQ 绑定到 CPU2 上就是 000001004

[root@station9 ~]# echo "4" > /proc/irq/162/smp_affinity

 

如果我想把 IRQ 同时平衡到 CPU0 CPU2 上就是 0000000100000100000001015 20次方+22次方=5

[root@station9 ~]# echo "5" > /proc/irq/162/smp_affinity

你可能感兴趣的:(休闲,rhca,cpu_mask计算,调整CPU速度,绑定IRQ到CPU)