关于混合轮询

yayj 发表于 2005-11-29 19:33:46

混合轮询是一种适合于大量发出中断的高速I/O设备的工作模式。混合轮询将基于中断的处理方式转变为中断-轮询混合方式,在高负荷的情况下能够有效地提高系统的承载能力,并降低响应时间。

以下内容主要来自Luigi Rizzo(assisstant professor), Dipartimento di Ingegneria dell'Informazione of the Università di Pisa, Italy. 的文章。Luigi实现了FreeBSD中的polling。
---------------------------------------------------------------------------------
正如《操作系统》教科书上所说的,纯粹轮询方式不好(polling is bad)。
当然,并不是说轮询本身在任何情况下都不好。

FreeBSD中采用的DEVICE_POLLING不是纯粹轮询。当启用DEVICE_POLLING的时候,系统将网络设备的基于中断的处理替换为一 种混合的中断-轮询模式(简称“polling, 轮询”),在启用了轮询的网卡上,在每次时钟tick的等待循环中,以及(可选地,每次)系统调用时,将进行轮询。

此外,FreeBSD中的polling实现还允许精确地分配目态和管态的CPU周期比例。

由于减少了中断发生的次数,这可以节省一些时钟周期(我们知道,在发生中断时需要进行目态/管态,以及上下文的切换)。当网络繁忙时,网卡可以轻易地产生每秒钟数十甚至上百次的中断,并耗尽所有的CPU时间。

当然,更有用的特性(通过采用适当的控制算法)是,混合轮询允许管理员决定使用多大比例的CPU来处理设备操作。这样,即使在网络流量过大的情况下,用户 进程也不会饿死并最终导致“活锁(livelock)”,换言之,由于花费过多时间处理数据包而无法完成那些有用的(处理数据)工作,并最终只能把那些数 据包丢弃。

当然,混合轮询也有一些缺点。因为需要轮询网卡上的数据,因此在响应数据包时,将可能有微小的延迟(不超过1/HZ)。不过这通常并不是问题,在空闲的系 统上,轮询网卡数据将持续地进行,因此几乎没有任何延迟;而当系统忙时,额外的1ms延迟与由于其他处理造成的延迟相比,基本上可以忽略不计。

在繁忙的网络上运行的路由器或服务器上,如果可能发生由于网络流量造成的过载,则应该启用混合轮询。普通的*BSD和Linux都会由于没有启用混合轮询而发生活锁,更糟糕的是,吞吐量迅速下降到一个很低的水平。

此外,对于伪实时[pseudo-real-time]的工作站,也应采用混合轮询,因为这样调度器的行为将更容易预测。

在没有过载的服务器上,混合轮询不会带来明显的性能提升;当负载适中时,将有0-50%的性能提升,而在重负载的环境下,性能提升将比较明显。
---------------------------------------------------------------------------------

由于systm.h中对于DEVICE_POLLING与SMP的互斥限制,DEVICE_POLLING不能与SMP同时启用。但如果把那一行去掉,DEVICE_POLLING也可以在SMP上用(采用1个线程,尽管原则上SMP应该并行地处理中断)。



收藏: QQ书签 del.icio.us 订阅: Google 抓虾

最新评论

发表评论

* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 
 

分类小组论坛
杂谈, 娱乐、八卦, 文学、艺术, 体育, 旅游、同城, 象牙塔, 情感, 时尚、生活, 星座, 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定