- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
- LCLCBD与传统开腹取石术在治疗老年胆道结石合并感染中疗效对比分析.doc
- LCMB899产品显示故障分析和解决方案.doc
- LCMSMS法分析人体内25羟基维生素D2和25羟基维生素D3浓度系统综述.doc
- LCP内固定治疗老年骨质疏松肱骨近端粉碎性骨折临床应用研究.doc
- LCOS光引擎亮度理论分析与估计.doc
- LCP微创治疗胫骨中下段骨折临床疗效分析.doc
- LCT联合HPV检测在宫颈癌前病变诊断中应用价值观察.doc
- LC―MSMS 法测定乌苯美司及甲氨蝶呤在临床药物相互作用中应用.doc
- LC―MSMS法测定人血浆中多粘菌素E浓度分析方法建立.doc
- LC―MSMS法测定大鼠血浆中阿霉素药物浓度及应用.doc
文档评论(0)