资源预览内容
第1页 / 共30页
第2页 / 共30页
第3页 / 共30页
第4页 / 共30页
第5页 / 共30页
第6页 / 共30页
第7页 / 共30页
第8页 / 共30页
第9页 / 共30页
第10页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
NAPII 是 Linnux 上采用用的一种种提高网网络处理理效率的的技术,它它的核心心概念就就是不采采用中断断的方式式读取数数据,而而代之以以 POOLL 的方法法来轮询询数据,类类似于底底半方式式(boottoom-hhalff 的处处理模式式);但但是目前前在 LLinuux 的的 NAAPI 工作效效率比较较差,本本文在分分析 NNAPII 的同同时,提提供了一一种高效效的改善善方式供供大家参参考。前言言:NAAPI 是 LLinuux 上上采用的的一种提提高网络络处理效效率的技技术,它它的核心心概念就就是不采采用中断断的方式式读取数数据,而而代之以以首先采采用中断断唤醒数数据接收收的服务务程序,然然后 PPOLLL 的方方法来轮轮询数据据,(类类似于底底半(bbotttom-hallf)处处理模式式);从从我们在在实验中中所得到到的数据据来看,在在随着网网络的接接收速度度的增加加,NIIC 触触发的中中断能做做到不断断减少,目目前 NNAPII 技术术已经在在网卡驱驱动层和和网络层层得到了了广泛的的应用,驱驱动层次次上已经经有 EE10000 系系列网卡卡,RTTL81139 系列网网卡,33c500X 系系列等主主流的网网络适配配器都采采用了这这个技术术,而在在网络层层次上,NNAPII 技术术已经完完全被应应用到了了著名的的 neetiff_rxx 函数数中间,并并且提供供了专门门的 PPOLLL 方法法-pproccesss_baackllog 来处理理轮询的的方法;根据实实验数据据表明采采用NAAPI技技术可以以大大改改善短长长度数据据包接收收的效率率,减少少中断触触发的时时间;由由于 RRTL881399CP 是一种种应用比比较广泛泛的网络络适配器器,所以以本文以以其为例例,说明明了NAAPI技技术在网网络适配配器上的的应用和和基本原原理。但是是 NAAPI 存在一一些比较较严重的的缺陷:而对于于上层的的应用程程序而言言,系统统不能在在每个数数据包接接收到的的时候都都可以及及时地去去处理它它,而且且随着传传输速度度增加,累累计的数数据包将将会耗费费大量的的内存,经经过实验验表明在在 Liinuxx 平台台上这个个问题会会比在 FreeeBSSD 上上要严重重一些;另外采采用 NNAPII 所造造成的另另外一个个问题是是对于大大的数据据包处理理比较困困难,原原因是大大的数据据包传送送到网络络层上的的时候耗耗费的时时间比短短数据包包长很多多(即使使是采用用 DMMA 方方式),所所以正如如前面所所说的那那样,NNAPII 技术术适用于于对高速速率的短短长度数数据包的的处理,在在本文的的末尾提提出了 NAPPI 的的改善方方法,和和实验数数据。使用用 NAAPI 先决条条件:驱动动可以继继续使用用老的 2.44 内核核的网络络驱动程程序接口口,NAAPI 的加入入并不会会导致向向前兼容容性的丧丧失,但但是 NNAPII 的使使用至少少要得到到下面的的保证:A. 要使使用 DDMA 的环形形输入队队列(也也就是 rinng_ddma,这这个在 2.44 驱动动中关于于 Ettherrnett 的部部分有详详细的介介绍),或或者是有有足够的的内存空空间缓存存驱动获获得的包包。B. 在发发送/接接收数据据包产生生中断的的时候有有能力关关断 NNIC 中断的的事件处处理,并并且在关关断 NNIC 以后,并并不影响响数据包包接收到到网络设设备的环环形缓冲冲区(以以下简称称 rxx-riing)处处理队列列中。NAAPI 对数据据包到达达的事件件的处理理采用轮轮询方法法,在数数据包达达到的时时候,NNAPII 就会会强制执执行deev-polll 方方法。而而和不象象以前的的驱动那那样为了了减少包包到达时时间的处处理延迟迟,通常常采用中中断的方方法来进进行。应当当注意的的是,经经过测试试如果 DECC Tuulipp 系列列(DEE21xx4x芯芯片)以以及 NNatiionaal SSemii 的部部分网卡卡芯片,的的测试表表明如果果把从前前中断处处理的部部分都改改换用设设备的 POLLL 方方法去执执行,那那么会造造成轻微微的延迟迟,因此此在进行行 MIII(介介质无关关)的操操作上就就需要一一些小小小的诀窍窍,详见见 miii_cchecck_mmediia的函函数处理理流程,本本文不做做详细讨讨论。在下下面显示示的例子子表示了了在 881399 中如如何把处处理过程程放在 devv 的 polll 方方法中,把把所有的的原来中中断应该该处理的的过程放放在了 POLLL 方方法里面面,篇幅幅起见,我我们只介介绍接收收的 PPOLLL 方法法。在下下面的 81339CPP 驱动动程序介介绍中表表明了可可以把在在中断程程序中所所做的任任何事情情放在 POLLL 方方法中去去做,当当然不同同的 NNIC 在中断断中所要要处理的的状态和和事件是是不一样样的。对于于所有的的 NIIC 设设备,以以下两种种类型的的 NIIC 接接收事件件寄存器器响应机机制: CCOR 机制:当用户户程序读读状态/事件寄寄存器,读读完成的的时候寄寄存器和和NICC的rxx-riing中中表示的的状态队队列将被被清零,nnatssemii 和 sunnbmaac 的的 NIIC 会会这样做做,在这这种情况况下,必必须把 NICC 所有有以前的的中断响响应的处处理部分分都移动动到 PPOLLL 方法法中去。 CCOW 机制:用户程程序写状状态寄存存器的时时候,必必须对要要写的位位先写 1 清清 0,如如下面要要介绍的的 81139CCP 就就是这样样的类型型,大多多数的 NICC 都属属于这种种类型,而而且这种种类型对对 NAAPI 响应得得最好,它它只需要要把接收收的数据据包处理理部分放放置在 POLLL 方方法中,而而接收事事件的状状态处理理部分放放在原先先的中断断控制程程序中,我们等等下将要要介绍的的 81139CCP 类类型网卡卡就是属属于这种种类型。 C 有防防止 NNIC 队列中中排队的的数据包包冲突的的能力。当关关断发送送/接收收事件中中断的时时候,NNAPII 将在在 POOLL 中被调调用处理理,由于于 POOLL 方法的的时候,NNIC 中断已已经不能能通知包包到达,那那么这个个时候在在如果在在完成轮轮询,并并且中断断打开以以后,会会马上有有一个 NICC 中断断产生,从从而触发发一次 POLLL 事事件,这这种在中中断关断断时刻到到达的包包我们称称为rrotttingg;这这样就会会在 PPOLLL 机制制和 NNIC 中断之之间产生生一个竞竞争,解解决的方方法就是是利用网网卡的接接收状态态位,继继续接收收环形队队列缓冲冲 rxx-riing 中的数数据,直直到没有有数据接接收以后后,才使使能中断断。锁定定和防冲冲突机制制:- 1.SSMP 的保证证机制:保证同同时只有有一个处处理器调调用网络络设备的的 POOLL 方法,因因为我们们将在下下面看到到同时只只有一个个处理器器可以对对调用 nettif_rx_schheduule 挂在 POLLL 队队列中的的 NIIC 设设备调用用POLLL 方方法。- 2. 网络核核心层(nnet corre)调调用设备备驱动程程序使用用循环方方式发送送数据包包,在设设备驱动动层接收收数据包包的时候候完全无无锁的接接收,而而网络核核心层则则同样要要保证每每次只有有一个处处理器可可以使用用软中断断处理接接收队列列。- 3. 在多个个处理器器对 NNIC 的 rrx-rringg 访问问的时刻刻只能发发生在对对循环队队列调用用关闭(cclosse)和和挂起(ssusppendd)方法法的时候候(在这这个时刻刻会试图图清除接接收循环环队列)- 4. 数据同同步的问问题(对对于接收收循环队队列来说说),驱驱动程序序是不需需要考虑虑的网络络层上的的程序已已经把这这些事情情做完了了。- 5. 如果没没有把全全部的部部分交给给 POOLL 方法处处理,那那么 NNIC 中断仍仍然需要要使能,接接收链路路状态发发生变化化和发送送完成中中断仍然然和以前前的处理理步骤一一样,这这样处理理的假设设是接收收中断是是设备负负载最大大的的情情况,当当然并不不能说这这样一定定正确。下面面的部分分将详细细介绍在在接收事事件中调调用设备备的 PPOLLL 方法法。 NAAPI 提供的的重要函函数和数数据结构构和函数数:核心心数据结结构:sttrucct ssofttnett_daata 结构内内的字段段就是 NICC 和网网络层之之间处理理队列,这个结结构是全全局的,它它从 NNIC中中断和 POLLL 方方法之间间传递数数据信息息。其中中包含的的字段有有:sttrucct ssofttnett_daatainntthhrotttlee;/*为 11 表示示当前队队列的数数据包被被禁止*/inntcnng_lleveel;/*表示示当前处处理器的的数据包包处理拥拥塞程度度*/inntavvg_bblogg;/*某个处处理器的的平均拥拥塞度*/sttrucct ssk_bbufff_heeadiinpuut_ppkt_queeue;/*接接收缓冲冲区的ssk_bbufff队列*/sttrucct llistt_heead polll_llistt;/*POLLL设备备队列头头*/sttrucct nnet_devvicee ouutpuut_qqueuue; /*网网络设备备发送队队列的队队列头*/sttrucct ssk_bbufffcommpleetioon_qqueuue; /*完完成发送送的数据据包等待待释放的的队列*/sttrucct nnet_devviceebacckloog_ddev;/*表表示当前前参与PPOLLL处理的的网络设设备*/;核心心 APPI:1 neetiff_rxx_sccheddulee(deev) 这个个函数被被中断服服务程序序调用,将将设备的的 POOLL 方法添添加到网网络层次次的 PPOLLL 处理理队列中中去,排排队并且且准备接接收数据据包,在在使用之之前需要要调用 nettif_rx_resscheedulle_pprepp,并且且返回的的数为 1,并并且触发发一个 NETT_RXX_SOOFTIIRQ 的软中中断通知知网络层层接收数数据包。2. neetiff_rxx_sccheddulee_prrep(devv) 确定定设备处处于运行行,而且且设备还还没有被被添加到到网络层层的 PPOLLL 处理理队列中中,在调调用 nnetiif_rrx_sscheedulle之前前会调用用这个函函数。3 neetiff_rxx_coomplletee(deev) 把当当前指定定的设备备从 PPOLLL 队列列中清除除,通常常被设备备的 PPOLLL 方法法调用,注注意如果果在 PPOLLL 队列列处于工工作状态态的时候候是不能能把指定定设备清清除的,否否则将会会出错。如何何在81139CCP使用用NAPPI:从 POLLL 方方法的本本质意义义上来说说就在于于尽量减减少中断断的数目目,特别别在于大大量的小小长度的的数据包包的时候候,减少少中断,
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号