Linux中SMP网络代码并行化研究.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux中SMP网络代码并行化研究

Linux中SMP网络代码并行化研究   【摘 要】:研究了Linux 2.6内核中Bottom Half机制,特别是softirq的实现原理,做了概括性的总结。在此基础上深入分析了网络代码对Bottom Half机制的应用,研究表明Bottom Half机制在网络处理,特别是SMP下的网络处理中的应用能够较大地提高系统网络处理性能。   【关键词】:底半机制;软件中断;网络并行化;对称多处理器   中图分类号:TP316 文献标识码:A 文章编号:1002-6908(2008)0110051-02       在实际的操作系统中,硬件中断处理程序为了避免中断嵌套带来的设计复杂性,在中断服务程序运行期间通常需要关闭硬件中断[1]。如果长时间关闭硬件中断,会导致系统的可用性及效率下降,所以如何减小硬件中断服务程序的运行时间,将需要花费较多CPU运行周期并且不是很紧急的任务放到CPU相对空闲时来完成成为提高系统性能的关键技术之一,这种技术也称为Bottom Half[2]。另外,早期的Linux版本(如Linux 2.4)中,系统实现的Bottom Half机制仅仅考虑到了单核CPU的情况,所以Bottom Half机制是严格串行化(serialized)的[3],这很不利于SMP(Symmetric Multiprocessor)环境下充分地发挥多核CPU的效能。   Linux 2.6中的Bottom Half机制    从最初Linux 2.0内核中用BH技术[4]实现Bottom Half到Linux 2.6内核中Bottom Half[3]的实现可以说Bottom Half一共经历了三代,如表1所示。    Softirq、Tasklet、Work Queues这三种Linux2.6内核所支持的Bottom Half方式。它们的特点与区别如表2所示。    由于Tasklet是在Softirq基础上实现的,所以先讨论Softirq的实现原理,系统中,Softirq由一个统一的数据结构(软中断向量)来表示:    static struct softirq_action softirq_vec[32];   所以Linux2.6内核中软中断可以有32种,目前只定义了7种:   enum   {    HI_SOFTIRQ=0,    TIMER_SOFTIRQ,    NET_TX_SOFTIRQ,    NET_RX_SOFTIRQ,    BLOCK_SOFTIRQ,    TASKLET_SOFTIRQ,    SCHED_SOFTIRQ, …   };    其中的HI_SOFTIRQ和TASKLET_SOFTIRQ就是tasklet,软中断向量表中的每一个向量softirq_action,数据结构如下:   struct softirq_action   {    void (*action)(struct softirq_action *);    void *data;   };    *action表示软中断服务程序,data包含中断服务程序需要的参数。提出softirq到执行的整个过程如图1所示,想要使用softirq,可以首先把服务程序注册到软中断向量表中,需要其运行时可以提出softirq,最后系统会在适当的时候调用do_softirq()函数,这个函数会遍历整个软中断向量表,如果发现有中断被提出,就会调用action运行相应的服务程序。    系统中,有一个数据结构struct irq_cpustat_t,其中有一个__softirq_pending成员。如果是SMP(对称多处理器)系统,每个CPU都会维护一份struct irq_cpustat_t数据结构,即每个CPU都会有一个__softirq_pending成员,这个成员是一个32位的无符号整数,对应着32个软件中断,raise_softirq() 就是通过对__softirq_pending的相应位置位来达到提出中断的目的。而do_softirq() 就是通过依次检查__softirq_pending中的各个比特位得知相应的软件中断是否被提出,对提出的软中断,执行相应的软件中断服务程序action。      网络代码的并行化    系统初始化时会将NET_TX_SOFTIRQ和NET_RX_SOFTIRQ两种专用于网络处理的softirq注册到softirq_vec[32]当中:   open_softirq(NET_TX_SOFTIRQ, net_tx_action, NULL);   open_softirq(NET_RX_SOFTIRQ, net_rx_actio

文档评论(0)

3471161553 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档