Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2033143
  • 博文数量: 369
  • 博客积分: 10093
  • 博客等级: 上将
  • 技术积分: 4271
  • 用 户 组: 普通用户
  • 注册时间: 2005-03-21 00:59
文章分类

全部博文(369)

文章存档

2013年(1)

2011年(2)

2010年(10)

2009年(16)

2008年(33)

2007年(146)

2006年(160)

2005年(1)

分类: LINUX

2007-02-08 23:59:35

CPU的频率之争到目前为止应该暂且告一段落,下一个竞争的目标是什么呢?大家应该有所觉察:多核CPU。可是操作系统和应用程序为多核CPU准备好了么?

这段时间测试一个SMP系统的网络吞吐量,发现大多数情况下只有一个CPU负载较重,另外一个CPU的负载几乎为0,查看他们对中断的响应情况,前者几乎响应了所有的网络中断请求。

因为Linux内核在处理网络数据包的过程中引入了软中断,所以硬中断只是将skb挂在响应此中断的CPU的软中断软网络设备(softnet)上,然后唤醒此CPU的软中断处理例程处理skb,所以响应此中断的CPU要处理所有网络数据包,负载当然很大。

能够在多个CPU之间均衡分配硬件中断,试图达到SMP系统CPU负载均衡的目的,启用此守护进程之后,IRQ的分配确实趋向平衡。仔细考虑,任何一个时间都只是有一个CPU在响应中断,那么IRQBalance所能做到的也无非就是在多个CPU之间均衡负载,这对于提升性能几乎是于事无补的。可实际的测试结果表明,IRQ的均衡确实提高了网络的吞吐量,一定是我漏掉了什么条件。再思之,对于网络包的接收中断是分硬中断和软中断两步处理的,其中硬中断的处理速度较软中断要迅速得多,我上面的考量只是对于硬中断有效,当网络负载比较大的情况下,软网络设备上肯定会积压很多数据包需要处理,而这时如果将数据包通过IRQ的均衡平均分配到多个CPU的软中断设备上,其后续的软中断处理的压力也会均分,网络吞吐量能不增加么?如果网卡的中断过于频繁,致使CPU大部分时间都在响应其硬中断而无暇他顾,此时中断机制相比轮询就是弊大于利了,一些人也许会考虑启用Linux的NAPI,这确实是个不错的主意,实际也能提高性能,不过这点儿提升只是杯水车薪而已,采用SMP系统或者是多核CPU加上IRQBalance才能大幅度提高网络的吞吐量。既然两者都能提升性能,为何不兼用之?这还得从NAPI的原理说起,目前的NAPI实现为:当网络流量特别大时,网卡将被关联到某个CPU的软中断上下文中,然后关闭其硬件中断,由接收软中断用轮询的方式从网卡取走数据包并处理之。如果SMP系统只有一块网卡流量较大,而它由于NAPI的缘故被关联到某一个CPU,并关闭了硬中断,这个时候发生的情况就合单CPU无异了,SMP系统的优势并没得到充分发挥。所以,在某种情况下两者是鱼和熊掌的关系--不可兼得,具体的取舍还要综合各方面因素具体分析。但是如果网卡首先成为了系统的瓶颈,那么两者也就都不能奏效了,你可以选择购买更高速率的网卡,或者是采用网卡bonding技术。

讨论到这里,基本就可以收场了。可当我读IRQBalance的文档时发现它所考虑的问题要比我多得多,比如说它的另外一个目的--节省功耗、均衡时的Cache命中率,以及更深层次的系统结构等。

不得不感叹:事物是普遍联系的。

参考资料:
  1. Linux/Documentation/IRQ-affinity.txt
  2. NAPI 技术在 Linux 网络驱动上的应用和完善
阅读(5050) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

xiaosuo2009-01-06 14:57:34

SMP和多核对Linux来说是一样的,都是对称多处理,除了调度器看来有些差别。

chinaunix网友2008-12-29 14:50:23

请问你使用smp和irqbalance以后到底cpu的利用率提高了没啊?你的前后文好像不一致了啊!"采用SMP系统或者是多核CPU加上IRQBalance才能大幅度提高网络的吞吐量。既然两者都能提升性能,为何不兼用之?" 单独的smp不能提升性能吧???