网络设备轮询设计与实现

网络设备轮询设计与实现

ID:38798701

大小:120.00 KB

页数:17页

时间:2019-06-19

网络设备轮询设计与实现_第1页
网络设备轮询设计与实现_第2页
网络设备轮询设计与实现_第3页
网络设备轮询设计与实现_第4页
网络设备轮询设计与实现_第5页
资源描述:

《网络设备轮询设计与实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、网络设备轮询设计与实现--BSD操作系统核心新技术作者:xie_minix(谢小荣)1.1引言polling(轮询)技术是一种在一定时间内不断的探测目标,以获取目标在满足条件后进行相应处理的技术。从大多数情况来讲,这种技术并没有以中断为代表的技术先进。但是在一些特定场合,如主机作为一个大型的网关,并且流量巨大,选用轮询技术还是比较合适的。本文是针对FreeBSD操作系统及其代码来进行分析其设计思路和实现过程。目前BSD类操作系统中只有FreeBSD4.10和FreeBSD5.3以上版本才加入了对轮询的支持,NetBSD和Open

2、BSD还未实现。作为大多数防火墙首选的操作系统OpenBSD到是应该实现轮询技术。在《TCP/IP详解》第二卷中,书中作者曾经提到过该技术,而且好象冯.杰克布森已经在一些实验中实现过。直到不久前我们才看到这些代码在FreeBSD中实现,要知道在核心中加入一项新的技术工作量是非常之大,轮询代码不但是要在核心中增加一些代码文件,而且把所有网卡驱动程序都要进行大量相应的改动。我们以VIARhine(威盛的莱因型芯片,通常的DLINK530TX网卡使用的芯片)的驱动程序if_vr.c和他的头文件if_vrreg.h(后面具体涉及到硬件驱

3、动程序的代码都以vr代码做实例分析)来简单讲述代码的一些改动。A.XX_softc结构中的改动:XX是代表各芯片的简称,本文使用的是vr芯片代码,所以是vr_softc结构。在结构的最后部分,增加了以下代码:#ifdefDEVICE_POLLINGintrxcycles;#endif以上代码出现在源代码if_vrreg.h中的第472行中。DEVICE_POLLING是由核心配置决定。如果核心配置文件中加入了该定义,则在#ifdef和#endif行之间的代码将编译进核心。也就是说,所有的支持POLLING的代码都应该在#ifde

4、fDEVICE_POLLING定义之下和#endif之上。图中的rxcycles变量是用来存放在核心进入vr驱动程序时,POLLING要求驱动程序的底半部分(即读出和写入)进行多少次的循环。B.在连接该设备驱动程序到设备程序链表时的一些改动:任何以太网络设备在探测到该设备存在后(xx_probe函数,xx在这是代表芯片在系统中的简称),紧接着执行设备链入函数(xx_attach),他的工作主要是进行硬件的一些初始化(中断的分配、网卡缓存的内存映射等等)和ifnet结构的初始化。#ifdefDEVICE_POLLINGifp->i

5、f_capabilities

6、=IFCAP_POLLING;#endif上图是if_vr.c中的第742行中关于对POLLING支持时候的一段代码。if_capabilities成员是用来判断网卡支持性能的成员。比如对VLAN技术的支持,POLLING技术的支持等标志都是放在此成员中。1.2代码介绍所有的轮询代码主体在1个C文件和各支持轮询的网络设备驱动程序中,以及一些相关的支撑文件。图1-1中没有列出所有的网络设备驱动程序。文件说明net/if_var.hpci/if_vrreg.h申明一些函数修改ifnet结构以支持轮询ke

7、rn/kern_poll.ckern/kern_clock.cnet/netisr.cpci/if_vr.c…轮询的核心部分代码一段定时调用kern_poll.c中轮询代码网络软中断代码网络设备驱动程序(基于vr芯片的卡)其他的网络设备驱动程序图1-1本文包含的文件1.2.1全局变量从第106行开始,都是POLLING相关的全局变量.首先是建立一SYSCTL树的节点.下图中的SYSCTL_NODE宏代表在父节点_kern下建立一个_kern_polling节点.SYSCTL_NODE(_kern,OID_AUTO,polling

8、,CTLFLAG_RW,0,"Devicepollingparameters");下图中的变量全部可用sysctl来查看,大部分都可以调整设置.这些全局变量都是使用宏SYSCTL_UINT把他们加入到_kern_polling节点下,成为该节点的叶子.之所以这样,是因为可以通过用户区来调整这些参数.staticu_int32_tpoll_burst=5;------kern_poll.cstaticu_int32_tpoll_each_burst=5;staticu_int32_tpoll_burst_max=150;stati

9、cu_int32_tpoll_in_idle_loop=0;u_int32_tpoll_in_trap;staticu_int32_tuser_frac=50;staticu_int32_treg_frac=20;staticu_int32_tshort_tic

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。