原帖由 思一克 于 2007-6-29 11:19 发表于 3楼
好。我想应该问题在于KERNEL而不是NAT(iptables). 所以发这里了
原帖由 思一克 于 2007-6-29 11:27 发表于 5楼
你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 |
原帖由 思一克 于 2007-6-29 11:04 发表于 1楼
关于LINUX上中断在各个CPU之间的负载平衡问题
看帖子
http://linux.chinaunix.net/bbs/thread-753474-1-1.html
说4个CPU有严重的不平衡问题。因为无条件实验,
LZ也不在回贴。所以请有兴趣的来参加实验 ...
SMP IRQ affinity, started by Ingo Molnar <mingo@redhat.com>
/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]#
原帖由 zx_wing 于 2007-6-29 11:38 发表于 7楼
只要修改APIC的RT表就行了
原帖由 albcamus 于 2007-6-29 11:42 发表于 9楼
是ioapic的irq route table吧? 看了/proc下没有, /sys/devices/system/下有ioapic、lapic和irqrouter目录, 但进去只有空目录
猜测改写/proc/irq/<number>/smp_affinity文件,就是影响ioapic ...
原帖由 zx_wing 于 2007-6-29 11:49 发表于 10楼
是这个表。我不清楚在linux下有什么接口可以改它,但既然在/sys有,那就应该有相应的driver。
不太清楚linux里这部分,只能提供一点线索
原帖由 wysilly 于 2007-6-29 13:20 发表于 14楼
看看这篇线索文章,然后达人解释一下吧.
http://www.ibm.com/developerwork ... ernelint/index.html
我想在测试中还应该有一个叫做irqbalance东西吧.
原帖由 wysilly 于 2007-6-29 13:29 发表于 16楼
对啊,对啊。就是这个问题,与中断密切相关,要想了解为什么不平衡,不就要了解平衡原理吗?
双网卡,双cpu,刚好一个cpu管一个nic。
双网卡,4cpu好像不太好平衡。所以就又要看irqbalance的实现方式了。
原帖由 思一克 于 2007-6-29 11:04 发表于 1楼
关于LINUX上中断在各个CPU之间的负载平衡问题
看帖子
http://linux.chinaunix.net/bbs/thread-753474-1-1.html
说4个CPU有严重的不平衡问题。因为无条件实验,
LZ也不在回贴。所以请有兴趣的来参加实验 ...
263.79 KB, 下载次数: 872
原帖由 albcamus 于 2007-6-29 11:24 发表于 4楼
没用。
# 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中断还是全 ...
原帖由 思一克 于 2007-6-29 19:33 发表于 21楼
首先,运行irqbalance, 确保CPU中断的分配基本平衡(cat /proc/interrupts可看),然后再研究LOAD的平衡问题.
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7
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
原帖由 scutan 于 2007-6-29 19:52 发表于 22楼
我是手动将/proc/irq/<ID>/smp_affinity中的值改为全1, 之后还是不行.
而且发现这个/proc/irq/目录下面的smp_affinity中的值除了几个中断号之后,其它的全都是只有一位为1. 其余位全为0.
...
原帖由 思一克 于 2007-6-29 21:19 发表于 24楼
还有,physical_balance 的数值是什么?
可gdb /boot/vmlinux /proc/kcore
print 出内核变量看。
原帖由 wysilly 于 2007-6-29 13:44 发表于 18楼
我是说可以一个cpu绑一个nic,如以下。
CPU0 CPU1
169: 645187653 0 IO-APIC-level eth1
177: 1186 34171661 IO-APIC-level eth2
225: 3552116787 397666 ...
原帖由 wheelz 于 2007-7-15 14:37 发表
我觉得不能盲目地平衡各个CPU的中断,因为这还涉及到很多hot cache的问题,比如conntrack entry的cache,盲目地把中断分布到不同的CPU上,不见得有很好的效率。
对于tcp报文来说,还有一个报文顺序的问题,容易 ...
原帖由 albcamus 于 2007-7-16 09:30 发表
周末看代码, 发现linux内核并没有在每次任务切换时更新local APIC的TPR寄存器, 而ia32手册上恰恰是这样期望的,并且说否则就可能导致中断都送往同一个CPU
会不会是这个问题? 我觉得这个问题是「中断相关 ...
原帖由 思一克 于 2007-7-16 16:14 发表
你说的APIC的问题我不清楚。
CUP负载不平衡是中断的问题,不是网络或相关程序(比如IPTABLES)的问题。
中断平衡了,CPU负载就平衡了。
原帖由 scutan 于 2007-6-29 18:54 发表
在SMP多处理机上是负载不平衡是比较普遍的一种现象, 我也遇到了. 而且也想了一些办法, 不过还是没有成功.
我以前也发过这样的贴子. 当时我的分析如下:
其实irq_balance()虽然可以平衡多个CPU上面的 ...
原帖由 思一克 于 2007-9-17 10:18 发表
我下工夫研究了一周。
得到了很不好的结论:网络底层程序(包括IPTALBES)本质上无法利用SMP
1)用IPRBALANCE。完全可以BALANCE到各CPU上(比如多少时间调整一次),但同一个时刻只能在一个CPU上。CPU的负 ...
原帖由 思一克 于 2007-6-29 11:04 发表
关于LINUX上中断在各个CPU之间的负载平衡问题
看帖子
http://linux.chinaunix.net/bbs/thread-753474-1-1.html
说4个CPU有严重的不平衡问题。因为无条件实验,
LZ也不在回贴。所以请有兴趣的来参加实验 ...
to 斑竹,sisi8408等各位,
认真的,你们谁有条件帮做做测试。无论是肯定的还是否定的结果都要,真实就可以。
还要有简单的测试方法和结果数据。
测试主要就是在iptables,大流量下的效果。
如果这东西真能有些用处,我会在程序头将做测试工作的人(name, email, date)一一列出在上面。
如果证明无用被抛弃,那么就算大家尽义务了。
THANKS
原帖由 sisi8408 于 2007-10-10 01:49 发表
你大爷的, i cough,
俺敬仰的seeker,说这样不负责任的话,俺就再cough。
不自信?你的那么漂亮的工作,不就没人测么,你着哪门子急?
有一些暇疵就放弃?说不过去呀。
俺回京就去找你。
原帖由 sisi8408 于 2007-9-23 13:33 发表
seeker did really nice job in BH way,
and local_bh_disable is too stronger,
btw, rx_softirq is driven by timer conditionally,
and scheduled by kthread,
so, it sounds nicer to ask linux comple ...
原帖由 思一克 于 2007-10-10 16:51 发表
to sisi8408,
我说的"too strong" 就是你说的"local_bh_disable is too stronger"
你说的对。 后来的我将范围缩小了。
原帖由 albcamus 于 2007-6-29 11:35 发表
[root@localhost Documentation]# cat /proc/interrupts
CPU0 CPU1
0: 358 0 IO-APIC-edge timer
1: 2 0 IO-APIC-edge i8042
...
原帖由 wenaideyu 于 2007-12-4 15:17 发表
内核中Enable Kernel Irq balancing选项选上了吗,我在2.6.20下测试过,选上该项后,然后修改/proc/irq/??/smp_affinity,
就可以实现负载均衡了,如果不选则CPU不会进行中断的负载均衡的,哪怕你在/proc/irq/ ...
原帖由 platinum 于 2007-12-18 23:13 发表
网卡驱动收到以太帧后通过接口函数 netif_receive_skb() 交到上层
seeker 兄的做法是在 ip_rcv() 里做文章,添加了特殊调度来实现的,但这样对桥模式是无效的
现在想到一个问题,能否直接把调度直接做在 neti ...
原帖由 du2050 于 2007-12-20 13:57 发表
看的不太仔细,问一句:
skb_queue不做长度限制么?大压力下skb_queue里没处理过来的skb会来越多,内存没了系统崩掉。
其实我也做过类似的东西,不过是用kernel therad做的并行。其实我觉得从性能角度来看, ...
原帖由 思一克 于 2007-7-13 14:28 发表
以下是arch/i386/kernel/io_apic.c的补丁。在1个NIC,2个CPU和 2个NIC, 2个CPU上都平衡的很好。多个CPU也应该可以很好地平衡。但是我没有测试。
--- io_apic.c 2007-07-13 13:24:57.000000000 + ...
skb是NIC driver分配的,要在netif_recv_skb处理里释放
skb_queue如果入队速度比出队快,内存用的就越来越 ...
blowingwind 发表于 2010-07-21 23:09
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |