免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 思一克
打印 上一主题 下一主题

关于LINUX上中断在各个CPU之间的负载平衡问题 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2007-06-29 19:33 |只看该作者
首先,运行irqbalance, 确保CPU中断的分配基本平衡(cat /proc/interrupts可看),然后再研究LOAD的平衡问题.

论坛徽章:
0
22 [报告]
发表于 2007-06-29 19:52 |只看该作者
原帖由 思一克 于 2007-6-29 19:33 发表于 21楼  
首先,运行irqbalance, 确保CPU中断的分配基本平衡(cat /proc/interrupts可看),然后再研究LOAD的平衡问题.



我是手动将/proc/irq/<ID>/smp_affinity中的值改为全1, 之后还是不行.
而且发现这个/proc/irq/目录下面的smp_affinity中的值除了几个中断号之后,其它的全都是只有一位为1. 其余位全为0.


           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


而此时每个CPU上面的ksoftirqd的这个线程都运行着的. 但是对于某些中断, 仍然是不能很好地进行平均分配.

论坛徽章:
0
23 [报告]
发表于 2007-06-29 21:11 |只看该作者
那你的/proc/interrupts看,也不是平衡的?
看你内核中变量irqbalance_disabled的值是什么,是0吗?


原帖由 scutan 于 2007-6-29 19:52 发表于 22楼  



我是手动将/proc/irq/<ID>/smp_affinity中的值改为全1, 之后还是不行.
而且发现这个/proc/irq/目录下面的smp_affinity中的值除了几个中断号之后,其它的全都是只有一位为1. 其余位全为0.



...

论坛徽章:
0
24 [报告]
发表于 2007-06-29 21:19 |只看该作者
还有,physical_balance 的数值是什么?

可gdb /boot/vmlinux    /proc/kcore
print 出内核变量看。

论坛徽章:
0
25 [报告]
发表于 2007-06-30 14:15 |只看该作者
原帖由 思一克 于 2007-6-29 21:19 发表于 24楼  
还有,physical_balance 的数值是什么?

可gdb /boot/vmlinux    /proc/kcore
print 出内核变量看。



我gdb /boot/vmlinux中
print physical_balance 出现了下面的语句, 仿佛是没有这个变量. 另外一个变量也是同样的. 望指教.
No symbol table is loaded.  Use the "file" command.

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52
26 [报告]
发表于 2007-06-30 22:28 |只看该作者
高人……学习了

论坛徽章:
0
27 [报告]
发表于 2007-07-02 09:51 |只看该作者
to albcamus,

你的IRQ(NIC)平衡问题实验有效果?

论坛徽章:
0
28 [报告]
发表于 2007-07-02 10:45 |只看该作者
原帖由 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 ...



如何实现  一个 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

论坛徽章:
0
29 [报告]
发表于 2007-07-11 17:25 |只看该作者
初步结论:

SMP机器无法将网络程序在内核的负荷在任何时刻都平均分配到多个CPU上。

最好的情况就是将一个NIC绑定到一个CPU。如果CPU个数大于NIC,其余的2个CPU将空闲。

论坛徽章:
0
30 [报告]
发表于 2007-07-12 15:54 |只看该作者
进展实验:

我在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的改动贴出来。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP