关于LINUX上中断在各个CPU之间的负载平衡问题
时间:2007-06-29
来源:互联网
看帖子
http://linux.chinaunix.net/bbs/thread-753474-1-1.html
说4个CPU有严重的不平衡问题。因为无条件实验,
LZ也不在回贴。所以请有兴趣的来参加实验和讨论。
作者: 思一克 发布时间: 2007-06-29
作者: albcamus 发布时间: 2007-06-29
作者: 思一克 发布时间: 2007-06-29
好。我想应该问题在于KERNEL而不是NAT(iptables). 所以发这里了
没用。
[root@localhost 21]# cat /proc/cmdline
ro root=LABEL=/ vga=0x31B acpi_irq_balance
[root@localhost 21]# grep eth0 /proc/interrupts
21: 19341 0 IO-APIC-fasteoi libata, eth0
eth0和libata中断还是全送到了CPU 0, CPU 1一个也没收到。 我机器上是Pentium D双核CPU。
[root@localhost 21]# cat /proc/irq/21/smp_affinity
00000003
这个值是我写入的, 两颗cpu的bitmap位都被置1以允许21号中断, 但还是只送到cpu 0
作者: albcamus 发布时间: 2007-06-29
作者: 思一克 发布时间: 2007-06-29
你cat /proc/interrupts的结果是什么?
[root@localhost Documentation]# cat /proc/interrupts CPU0 CPU1 0: 358 0 IO-APIC-edge timer 1: 2 0 IO-APIC-edge i8042 8: 8099 0 IO-APIC-edge rtc 9: 0 0 IO-APIC-fasteoi acpi 12: 4 0 IO-APIC-edge i8042 14: 33 0 IO-APIC-edge ide0 16: 88855 0 IO-APIC-fasteoi HDA Intel, fglrx 17: 22918 0 IO-APIC-fasteoi uhci_hcd:usb1, ehci_hcd:usb5 18: 0 0 IO-APIC-fasteoi uhci_hcd:usb2 19: 0 0 IO-APIC-fasteoi uhci_hcd:usb3, Ensoniq AudioPCI 20: 0 0 IO-APIC-fasteoi uhci_hcd:usb4 21: 32170 0 IO-APIC-fasteoi libata, eth0 NMI: 0 0 LOC: 234999 203989 ERR: 0 MIS: 0 |
贫富悬殊很严重啊
作者: albcamus 发布时间: 2007-06-29
关于LINUX上中断在各个CPU之间的负载平衡问题
看帖子
http://linux.chinaunix.net/bbs/thread-753474-1-1.html
说4个CPU有严重的不平衡问题。因为无条件实验,
LZ也不在回贴。所以请有兴趣的来参加实验 ...
??我觉得是正常的啊,linux默认是将网卡给一个cpu的own的啊,所以你所有的网卡中断都会发给那个CPU。
要改也很容易的,只要修改APIC的RT表就行了。我不太清楚linux提供的接口函数是什么,但apic.c文件或许展现出一些线索。
作者: zx_wing 发布时间: 2007-06-29
/proc/irq/IRQ#/smp_affinity specifies which target CPUs are permitted
for a given IRQ source. It's a bitmask of allowed CPUs. It's not allowed
to turn off all CPUs, and if an IRQ controller does not support IRQ
affinity then the value will not change from the default 0xffffffff.
Here is an example of restricting IRQ44 (eth1) to CPU0-3 then restricting
the IRQ to CPU4-7 (this is an 8-CPU SMP box):
[root@moon 44]# cat smp_affinity
ffffffff
[root@moon 44]# echo 0f > smp_affinity
[root@moon 44]# cat smp_affinity
0000000f
[root@moon 44]# ping -f h
PING hell (195.4.7.3): 56 data bytes
...
--- hell ping statistics ---
6029 packets transmitted, 6027 packets received, 0% packet loss
round-trip min/avg/max = 0.1/0.1/0.4 ms
[root@moon 44]# cat /proc/interrupts | grep 44:
44: 0 1785 1785 1783 1783 1
1 0 IO-APIC-level eth1
[root@moon 44]# echo f0 > smp_affinity
[root@moon 44]# ping -f h
PING hell (195.4.7.3): 56 data bytes
..
--- hell ping statistics ---
2779 packets transmitted, 2777 packets received, 0% packet loss
round-trip min/avg/max = 0.1/0.5/585.4 ms
[root@moon 44]# cat /proc/interrupts | grep 44:
44: 1068 1785 1785 1784 1784 1069 1070 1069 IO-APIC-level eth1
[root@moon 44]#
他说的这种情况在我机器上完全无效, 无论如何设置smp_affinity, 还是都送到了cpu 0
作者: albcamus 发布时间: 2007-06-29
只要修改APIC的RT表就行了
是ioapic的irq route table吧? 看了/proc下没有, /sys/devices/system/下有ioapic、lapic和irqrouter目录, 但进去只有空目录
猜测改写/proc/irq/<number>/smp_affinity文件,就是影响ioapic的RT表的──但不知为何,我机器上不好使
[ 本帖最后由 albcamus 于 2007-6-29 11:46 编辑 ]
作者: albcamus 发布时间: 2007-06-29
是ioapic的irq route table吧? 看了/proc下没有, /sys/devices/system/下有ioapic、lapic和irqrouter目录, 但进去只有空目录
猜测改写/proc/irq/<number>/smp_affinity文件,就是影响ioapic ...
是这个表。我不清楚在linux下有什么接口可以改它,但既然在/sys有,那就应该有相应的driver。
不太清楚linux里这部分,只能提供一点线索
作者: zx_wing 发布时间: 2007-06-29
作者: 思一克 发布时间: 2007-06-29
密切关注!
作者: augustusqing 发布时间: 2007-06-29
是这个表。我不清楚在linux下有什么接口可以改它,但既然在/sys有,那就应该有相应的driver。
不太清楚linux里这部分,只能提供一点线索
已经很感谢了

作者: albcamus 发布时间: 2007-06-29
http://www.ibm.com/developerwork ... ernelint/index.html
我想在测试中还应该有一个叫做irqbalance东西吧.
[ 本帖最后由 wysilly 于 2007-6-29 13:22 编辑 ]
作者: wysilly 发布时间: 2007-06-29
看看这篇线索文章,然后达人解释一下吧.
http://www.ibm.com/developerwork ... ernelint/index.html
我想在测试中还应该有一个叫做irqbalance东西吧.
作者: 思一克 发布时间: 2007-06-29
双网卡,双cpu,刚好一个cpu管一个nic。
双网卡,4cpu好像不太好平衡。所以就又要看irqbalance的实现方式了。
作者: wysilly 发布时间: 2007-06-29
你看:2个网卡2个CPU,eth1没有接网线,eth0基本上还是平衡的。
]# cat /proc/interrupts
CPU0 CPU1
0: 1218847937 40 IO-APIC-edge timer
2: 0 0 XT-PIC cascade
8: 0 1 IO-APIC-edge rtc
14: 66 1 IO-APIC-edge ide0
16: 0 0 IO-APIC-level uhci_hcd
18: 0 0 IO-APIC-level uhci_hcd
19: 0 0 IO-APIC-level uhci_hcd
23: 13 1 IO-APIC-level ehci_hcd
26: 9935950 1 IO-APIC-level ioc0
48: 12783533 46127059 IO-APIC-level eth0
49: 4903874 1 IO-APIC-level eth1
NMI: 0 0
LOC: 1065696911 1065696910
ERR: 0
MIS: 0
对啊,对啊。就是这个问题,与中断密切相关,要想了解为什么不平衡,不就要了解平衡原理吗?
双网卡,双cpu,刚好一个cpu管一个nic。
双网卡,4cpu好像不太好平衡。所以就又要看irqbalance的实现方式了。
作者: 思一克 发布时间: 2007-06-29
CPU0 CPU1
169: 645187653 0 IO-APIC-level eth1
177: 1186 34171661 IO-APIC-level eth2
225: 3552116787 3976669860 IO-APIC-level uhci_hcd:usb4, eth0
3个网卡,2cpu,我就让eth0由irqbalance来自动平衡.
eth1绑在cpu0上, cpu1绑eth2,这样效率高,irqbalance来自动平衡,效率差点。
作者: wysilly 发布时间: 2007-06-29
关于LINUX上中断在各个CPU之间的负载平衡问题
看帖子
http://linux.chinaunix.net/bbs/thread-753474-1-1.html
说4个CPU有严重的不平衡问题。因为无条件实验,
LZ也不在回贴。所以请有兴趣的来参加实验 ...
在SMP多处理机上是负载不平衡是比较普遍的一种现象, 我也遇到了. 而且也想了一些办法, 不过还是没有成功.
我以前也发过这样的贴子. 当时我的分析如下:
其实irq_balance()虽然可以平衡多个CPU上面的中断数量,但是它仍然不能完全解决CPU负载不平衡的一些问题.
我分析了一下原因,因为中断是发向了一个CPU,而网络中断的下半部是仍软中断来实现的,而软中断会有CPU亲合的问题,就是说你在哪个CPU上触发了这个网卡硬中断,那么这个CPU也会去执行这个硬中断后来的软中断,所以说如果我的网络是1000M的环境的话,那么我的那个触发中断的CPU就会非常繁忙,而另外一个CPU就不会那么繁忙,就会出现了负载不平衡的问题.
而irq_balance()只能是平衡CPU上面的中断的数量,而并不能平衡CPU的负载情况.
而进程的load_balance()也不能很好地解决这个问题,因为软中断是一个进程,load_balance()是将繁忙的CPU上面的进程拉到当前的CPU上面来执行. 但它是不能将正在执行的软中断的进程给拉过来的.
不过后来没有做这方面的内容了. 所以也就没有怎么关心. 不过有一篇论文是关于这个方面的. 虽然比较老了, 但是也许还是有用.
贡献出来, 希望能对大家有一点帮助.

Linux SMP网络体系性能分析.pdf (263.79 KB)
Linux SMP网络体系性能分析
作者: scutan 发布时间: 2007-06-29
没用。
# cat /proc/cmdline
ro root=LABEL=/ vga=0x31B acpi_irq_balance
# grep eth0 /proc/interrupts
21: 19341 0 IO-APIC-fasteoi libata, eth0
eth0和libata中断还是全 ...
我也是像您这样写过的, 不过写了之后过不了一会儿时间又回到了以前的状态.
当时把我郁闷得...
作者: scutan 发布时间: 2007-06-29
作者: 思一克 发布时间: 2007-06-29
首先,运行irqbalance, 确保CPU中断的分配基本平衡(cat /proc/interrupts可看),然后再研究LOAD的平衡问题.
我是手动将/proc/irq/<ID>/smp_affinity中的值改为全1, 之后还是不行.
而且发现这个/proc/irq/目录下面的smp_affinity中的值除了几个中断号之后,其它的全都是只有一位为1. 其余位全为0.
0: 23432940 23447916 23446701 23445441 23445463 23445286 23445460 23445256 IO-APIC-edge timer
8: 0 0 1 0 0 0 1 1 IO-APIC-edge rtc
9: 0 0 0 0 0 0 0 0 IO-APIC-level acpi
14: 0 0 0 0 0 0 0 0 IO-APIC-edge libata
15: 18 3358877 19 839610 839918 21 24 1679740 IO-APIC-edge ide1
98: 15 18 21 11 5 15 15 18 IO-APIC-level uhci_hcd:usb1, uhci_hcd:usb3, ehci_hcd:usb5
106: 0 0 0 0 0 0 0 0 IO-APIC-level uhci_hcd:usb2, uhci_hcd:usb4
122: 2573686 0 0 0 0 0 0 0 PCI-MSI eth1
177: 3662 50581 1355 58219 45692 1435 1328 24886 IO-APIC-level aacraid
NMI: 0 0 0 0 0 0 0 0
LOC: 187551733 187551731 187555704 187555703 187554928 187554927 187555782 187555658
ERR: 0
MIS: 0
而此时每个CPU上面的ksoftirqd的这个线程都运行着的. 但是对于某些中断, 仍然是不能很好地进行平均分配.
作者: scutan 发布时间: 2007-06-29
看你内核中变量irqbalance_disabled的值是什么,是0吗?
我是手动将/proc/irq/<ID>/smp_affinity中的值改为全1, 之后还是不行.
而且发现这个/proc/irq/目录下面的smp_affinity中的值除了几个中断号之后,其它的全都是只有一位为1. 其余位全为0.
...
作者: 思一克 发布时间: 2007-06-29
可gdb /boot/vmlinux /proc/kcore
print 出内核变量看。
作者: 思一克 发布时间: 2007-06-29
还有,physical_balance 的数值是什么?
可gdb /boot/vmlinux /proc/kcore
print 出内核变量看。
我gdb /boot/vmlinux中
print physical_balance 出现了下面的语句, 仿佛是没有这个变量. 另外一个变量也是同样的. 望指教.
No symbol table is loaded. Use the "file" command.
作者: scutan 发布时间: 2007-06-30



作者: shdnzwy 发布时间: 2007-06-30
你的IRQ(NIC)平衡问题实验有效果?
作者: 思一克 发布时间: 2007-07-02
我是说可以一个cpu绑一个nic,如以下。
CPU0 CPU1
169: 645187653 0 IO-APIC-level eth1
177: 1186 34171661 IO-APIC-level eth2
225: 3552116787 397666 ...
如何实现 一个 cpu 绑一个 nic 呢 请问
66: 3274166999 0 0 0 PCI-MSI eth0
74: 3156380137 0 0 0 PCI-MSI eth1
uname
Linux cn-pek1-gateway 2.6.18 #1 SMP Fri Jan 5 18:55:35 CST 2007 i686 i686 i386 GNU/Linux
作者: 5iwww 发布时间: 2007-07-02
SMP机器无法将网络程序在内核的负荷在任何时刻都平均分配到多个CPU上。
最好的情况就是将一个NIC绑定到一个CPU。如果CPU个数大于NIC,其余的2个CPU将空闲。
作者: 思一克 发布时间: 2007-07-11
我在LINUX 2。13 SMP已经做好了将一块网卡的IRQ在2个CPU之间平衡切换,多个CPU也一样,找最少的那个使用。多个网卡也应该可以。
改动的是文件arch/i386/kernel/io_apic.c.
不用用户空间的irqbalance,
实际上, 如果你有2个NIC, 2个CPU,现有程序也可以分担到2个CPU,不过切换周期很长。
虽然可以分配,但是
网络负载无法直接利用SMP。同一个时刻, 一个NIC中断还是在一个CPU运行。但SMP还是应该快,因为另一个NIC现在没有使用的CPU可以负责用户程序。间接地提高了速度。
我实验好了后会将对io_apic.c的改动贴出来。
作者: 思一克 发布时间: 2007-07-12
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28