多cpu负载均衡问题!!
前几天通过定制kernel-2.6.9-34.EL.src.rpm生成i686的源码,编译运行后发现cpu的负载很不均衡:
在高流量的情况下,通过top命令显示ksoftirqd/0负载占到70%,但其他ksoftirqd/1,ksoftirqd/2,ksoftirqd/3不会有任何负载。请各位高手多多指教。
# cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3
0: 3242773 0 0 0 IO-APIC-edge timer
1: 9 0 0 0 IO-APIC-edge i8042
3: 5 0 0 0 IO-APIC-edge serial
4: 83 0 0 0 IO-APIC-edge serial
8: 0 0 0 0 IO-APIC-edge rtc
9: 0 0 0 0 IO-APIC-level acpi
14: 13 0 0 0 IO-APIC-edge ide0
185: 189670 0 0 0 IO-APIC-level eth1
209: 186460 0 0 0 IO-APIC-level eth0
NMI: 0 0 0 0
LOC: 320712 320661 320665 320664
ERR: 0
MIS: 0
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
>而且对于softirq来说,它们是属于一个特殊情况,在linux中的策略是谁触发谁执行。所以它们并不会被迁移。
對,這一點我忘了,多謝提醒!
谢谢,各位。我再查查中断是如何向各个cpu的分发。
这个根本不是什么负载均衡的问题,ksoftirq/0它是做一个具体任务的,因为它的任务繁忙,所以它需要很多CPU,而ksoftirq/1这些软中断,是做其它任务的,由于它们没有事可做,所以不需要CPU。
负载均衡是对于各个CPU上的任务来说的,如果一个CPU上有10个任务,而某个CPU上却在执行idel,这是就要从繁忙CPU上迁移几个任务到空闲的CPU上。
如果有两个CPU,其中一个在不停地执行ksoftirq/0,而另外一个CPU没有任务,由于第一个CPU并没有其它任务,所以也不可能有任务迁移。
而且对于softirq来说,它们是属于一个特殊情况,在linux中的策略是谁触发谁执行。所以它们并不会被迁移。
好好看看linux调度,我觉得楼主对负载均衡的概念还没搞清楚,均衡的对象是什么都不知道,当然无法理解这些东西。
中断向各个cpu的分发, 有个irq affinity 和irq balance机制, 只记得ULK2上讲过, 都忘了。
任务的负载均衡, 是调度程序做的, 那些migration/x线程, 就是用来把任务从一个cpu迁移到另一个cpu上的。 具体到底是何种情况会触发迁移行为, 偶不懂, 知道的兄弟说一说吧!
是的,他们都在。跟这个有什么关系吗?
这个是中断情况, 不是任务负载; 你看migration/x这些内核线程在吗?