公司新上了一个8核的cpu,上面用xen虚拟了2个Windows。

但是通过各种配置,还是无法平衡cpu的压力。

大多都压在第一个cpu上。


下面是top的数据

Cpu0  : 20.6%us, 65.7%sy,  0.0%ni, 13.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu1  :  0.0%us,  0.0%sy,  0.0%ni, 96.2%id,  0.0%wa,  0.0%hi,  0.0%si,  3.8%st

Cpu2  :  1.0%us,  0.0%sy,  0.0%ni, 99.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu3  :  0.0%us,  0.0%sy,  0.0%ni, 99.0%id,  0.0%wa,  0.0%hi,  0.0%si,  1.0%st

Cpu4  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu5  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu6  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu7  :  1.0%us,  6.9%sy,  0.0%ni, 91.2%id,  0.0%wa,  0.0%hi,  0.0%si,  1.0%st


已经做了cpu和vcpu的绑定,但是效果不好

Name                              ID VCPUs   CPU State   Time(s) CPU Affinity

Domain2                         28     0     6   r--    2337.3 4-7

Domain2                         28     1     4   r--    2400.6 4-7

Domain2                         28     2     5   r--    2312.0 4-7


导致Windows断网等各种怪问题。






硬件中断发生频繁,是件很消耗 CPU 资源的事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能。现在的服务器上动不动就是多 CPU 多核、多网卡、多硬盘,如果能让网卡中断独占1个 CPU (core)、磁盘 IO 中断独占1个 CPU 的话将会大大减轻单一 CPU 的负担、提高整体处理效率。





 看看系统上的中断是怎么分配在 CPU 上的,很显然 CPU0 上处理的中断多一些:


# cat /proc/interrupts

           CPU0       CPU1

  0:  918926335          0    IO-APIC-edge  timer

  1:          2          0    IO-APIC-edge  i8042

  8:          0          0    IO-APIC-edge  rtc

  9:          0          0   IO-APIC-level  acpi

12:          4          0    IO-APIC-edge  i8042

14:    8248017          0    IO-APIC-edge  ide0

50:        194          0   IO-APIC-level  ohci_hcd:usb2

58:      31673          0   IO-APIC-level  sata_nv

90:    1070374          0         PCI-MSI  eth0

233:         10          0   IO-APIC-level  ehci_hcd:usb1

NMI:       5077       2032

LOC:  918809969  918809894

ERR:          0

MIS:          0