一种网卡实现双协议栈切换的方法

文档序号:7661223阅读:303来源:国知局
专利名称:一种网卡实现双协议栈切换的方法
技术领域
本发明涉及通信领域多网络应用技术,更具体地涉及网卡实现多网络协 议栈切换的方法。
背景技术
随着网络技术的普及和应用越来越广泛,某种具体特殊的应用可能需 要具有某些特定功能的协议栈来支持,并且在应用需求的不断变化和更新 中,网络协议栈的功能也需要不停地修改和变化。因此在很多网络应用中, 譬如典型地软交换上的应用,由于操作系统自带的网络协议栈满足了通用性导致了不能满目某些具有特殊要求的应用,以及因源码的不开;^文性导致了不 能对协议栈进行修改和定制,因此,开发通信软件的商家往往不会使用操作 系统自带的网络协议栈来开发自己网络应用程序,而是自己开发新的协议 栈,在自己的协议栈上面去开发网络应用程序,这样可以针对具体的应用而 使网络协议栈为上层提供特殊的服务。但是由于考虑到成本问题,商家自己 开发的协议栈往往是针对具体的应用,没有集成对应用程序和驱动程序的调 试、分析及统计等功能,这个时候又需要操作系统自带的网络协议栈来完成 这些功能。因此在开发中往往需要用到多个网络协议栈,而使用多个协议栈 时协议栈之间的切换速度便成了亟待解决的问题。因为,如果两个协议栈之 间切换的速度过慢,则会导致在双协议栈切换时出现丢包问题,从而不能满 足上层应用程序的需求。而要解决这个问题则需要下层网卡和网卡驱动的支 持。网卡(NIC, Network Interface Card),也称"网络适配器",它是连接 计算机与网络的硬件设备。无论是双绞线连接、同轴电缆连接,还是光纤连 接,都必须借助网卡才能实现数据通信。网卡的主要工作原理是整理计算机 上发往网线上的数据,并将数据分解为适当大小的数据包之后向网络上发 送。每块网卡都有一个唯一的网络节点地址,通常称为MAC地址(物理地 址),它是网卡生产厂家在生产时烧入ROM中的,且保证该地址绝对不会 重复。人们日常使用的网卡都是以太网网卡。目前网卡按其传输速度可分为 IOM网卡、10/100M自适应网卡以及千兆(1000M)网卡。如果只是作为 一般用途,如日常办公等,比较适合使用10M网卡和10/100M自适应网 卡两种。如果应用于服务器等产品领域,就要选择千兆级的网卡。目前针对双协议栈切换的研究不多,主要的研究集中在ipv4/ipv6双协 议栈的研究上。现有的网卡实现双协议栈切换的过程如图l所示,首先是停 止当前设备驱动的使用,然后是释放一些与当前使用的协议栈相关的资源, 并重新启动设备驱动以支持新的协议栈。这个切换过程的优点是具有通用 性,不会出错,且代码量小。但其最主要的缺点就是将整个网卡驱动停止后 又重新启动了一遍,多次操作了网卡芯片的寄存器,耗时非常大,导致协议 栈切换期间出现丟包现象,故不能满足上层应用的需要。发明内容本发明所要解决的技术问题是提供一种网卡实现双协议栈切换的方法, 支持多协议栈的快速切换,从而能够避免在协议栈切换过程中出现数据丟包现象。为了解决上述技术问题,本发明提供了 一种网卡实现双协议栈切换的方 法,应用于网卡的驱动,该方法包括如下步骤(a) 将双协议栈切换与网卡驱动的相关点抽象成切换重点;(b) 进行双协议栈切换时,仅针对双协议栈将切换重点中的不同点切换过来。进一步地,步骤(a)切换重点包括中断处理机制、内存分配和释放 机制以及连接的建立方式;步骤(b)切换重点的不同点切换包括(bl)挂接新协议栈的中断处理函数,以将接收到的包上送给新协议栈处理;(b2)更换接收緩冲区内存,包括将原协议栈的接收緩冲区内存释放,
以及为新协议栈申请分配内存,并且将新协议栈内存地址写入到4妄收緩冲区的描述符中;(b3 )根据新协议栈的需要进行连接的建立方式的切换。进一步地,步骤(bl)挂接通过将中断函数指针指向新协议栈的中断处 理函数完成;步骤(b2)先保存原协议栈的接收緩冲区的内存地址,然后将 预先分配好的内存地址写入到接收緩冲区的描述符中,等协议栈切换完成后 释放原协议栈的接收緩冲区的内存;步骤(b3 )先判断当前连接的建立方式 是否满足新协议栈进行通信的要求,满足则保持当前连接建立的方式;不满 足则按照需求重新建立连接。进一步地,在步骤(bl)前还包括步骤预先为中断处理函凄史定义中断 函数指针;在步骤(b2)前还包括步骤预先分配接收緩冲区的内存。进一步地,中断处理的方式包括中断延时处理或中断绝对定时处理。进一步地,网卡驱动在接收包后上传给协议栈时采用零拷贝才几制。进一步地,连接的建立方式包括自动协商连接的建立或强制连接的建立。与现有技术相比,由于本发明在双协议栈的切换过程中,釆用了仅仅切 换两种协议栈不同之处的方式,保留了两种协议栈的共同的地方,因此大大 缩减了两种协议栈切换的时间,从而保证了在协议栈切换过程中不会出现丢 包及连接中断等现象。


图1为现有的网卡实现双协议栈切换方法的流程图;图2为采用本发明千兆网卡实现双协议栈切换方法一实施例的流程图。
具体实施方式
本发明提供了 一种网卡实现双协议栈切换的方法,其关键点就是把双协
议栈切换和网卡驱动的相关点抽象成切换重点,主要包括(1)中断处理 机制,即通过改变中断函数指针来挂接新协议栈的中断处理函数;(2)内 存分配和释放机制,即接收緩冲区内存的更换,包括切换前协议栈接收緩沖 区内存的释放,以及切换后协议栈内存分配的申请,并且将其地址写入到接 收緩冲区的描述符中;(3)连接的建立方式,即在切换时判断当前连接的 建立方式是否满足切换后的协议栈的通信,满足则保持当前连接的建立方 式;不满足才按需求重新建立连接。这样,每次协议栈切换时不需要重复整 个驱动重新加载到协议栈的过程,而只是将切换重点中的不同点切换过来, 从而大大缩减了切换的时间。并且,在切换的过程中,能够顺利地将收到的 每个包上送给协议栈处理,从而避免出现数据丢包现象。下面结合具体实施例和附图对本发明上述技术方案作进一步详细的说明。本发明的网卡实现双协议栈切换的方法,通过将双协议栈和网卡驱动相 关点抽象成切换重点,而在协议栈切换时,仅针对协议栈就这些重点的不同 点进行切换,达到加速切换的目的。(1)中断处理机制及中断处理函数切换的实现由于接收的包要上传给不同的协议栈,不同的协议处理包的接口肯定不 一样,所以中断后处理函数肯定不一样。协议栈切换首要解决的问题就是切 换中断处理函数。在网卡芯片控制器内部寄存器中,对中断产生的条件有多种设置方式,时器的含义是指在网卡芯片通过DMA接收到一个包后,不会立即产生一个 中断,而是延迟一个预先定义好的时间后,如果还没有下一个包到来,则产 生中断,如果在定义的时间之内又接收了一个包,则又延迟产生中断。中断 绝对定时器的含义就是在接收到第一个包后,即使一直连续不断的接收到 包,但定义的绝对定时器时间到达后,立即产生一个中断。通过两种中断条 件的组合,避免了每收到一个包就产生一个中断而导致效率不高的问题,以 及接收到了包但不能够及时上送给协议栈处理的问题。但是,不同的协议栈可能对网卡驱动收到的包处理的流程不一样,需要 将包上送给不同的协议栈。这里所谓切换(或挂接)中断处理函数,可以预 先为中断处理函数定义一个函数指针,在切换协议栈时,将这个中断函数指 针指向新的协议栈的中断处理函数,这样切换中断处理函数的耗时将会很 短。(2 )内存分配和释放机制及接收緩冲区内存切换的实现的协议栈在接收包使用不同的内存分配机制,比如vxworks操作自己的网络 协议栈就^使用了 mBlk结构池、clBlk结构池和簇緩冲区池结构来组织包的4妄 收和上传,而在另外一些协议栈中,在接收时它可能用的是自己的内存分配 和释放方式,从而使得在切换协议栈时,对接收緩冲区中内存的释放等也要 重新切换。这里,所谓零拷贝(Zero-Copy)机制其基本思想是数据包从网络设 备到用户程序空间传递的过程中,尽量避免数据拷贝。亦即在从接收緩冲区 传送到协议栈的过程中,传输的是数据包的内存地址,而不是数据包的内容。千兆网卡是通过DMA传输机制将数据从网卡芯片的FIFO接收数据区 传输到内存的,然后在CPU的控制下,将内存中的数据上传给协议栈处理。 所以在内存中要预先定义一个接收緩冲区供网卡DMA读取,由于在上送给 协议栈时,采用了零拷贝机制,而不同的协议栈可能对緩沖区内存分配的方 式不一样,因此在切换协议栈时要切换接收緩冲的内存区。为了加速接收緩沖区内存的切换,可以采取一种预先分配接收緩冲区内 存机制和延迟释放原协议栈内存的机制,切换时先保存原协议栈的接收緩沖 区的内存区地址,然后直接将预先分配好的内存区地址写入到接收緩冲区描 述符中,等整个协议栈切换完成后再释放原协议栈内存,这样大大减少了接 收緩冲区内存切换的时间。(3)连接的建立方式及切换连接方式的实现各种协议栈建立连接的方式可能会不一样,有的协议栈可能要求是自 动协商连接,有的可能要求是强制连接,还有的可能是要求从EEPROM读 取数据建立连接等等。所以,应根据协议栈的需要,如果需要改变建立连接
的方式,则连接的建立方式也需要切换。Intel82546千兆网卡芯片有两种建立连接的方式, 一种是自动协商连接, 主要是通过芯片自动检测对等方的连接速度,通信模式和流控方式从而确定 己方连接速度是10M、 100M还是1000M,通信方式是半双工还是全双工, 以及流控的方式等。另外一种是强制连接方式,就是说己方将连接速度和通 信方式根据自己的需要强制设置成规定范围内的参数,从而根据这些参数建 立连接。还有一种方式就是将建立连接的方式(譬如自动协商连接或强制连 接)参数写入到EEPROM中去,通过读EEPROM的凄t据来确定建立哪种方 式的连接。建立连接由于涉及到对网卡芯片的才喿作,耗时比较长,所以在协 议栈切换时首先要判断当前的连接方式是否满足切换后的协议栈进行通信 的要求,如果满足,就不需要切换连接方式;否则,才按照需求重新建立连 接。这里的优化主要是将系统启动后默认建立自动协商机制的连接,然后在 切换协议栈时,根据判断自动协商机制是否满足当前需要切换的协议栈,来 确定是否切换连接的建立方式,这样切换协议栈时基本上就不需要重新建立 连接,从而避免了最大耗时的工作,保证了切换时间锐减,从而避免丢包的 现象。总体说来,在协议栈切换时需要切换的重点就在上迷三个方面。其中 (1)和(2)的切换主要是针对内存的一些操作,与芯片硬件的4喿作关系不 大,消耗的时间非常少,时间的消耗主要花费在(3)上,即连^l妄建立方式 的切换。而对于大多数协议栈切换并不需要改变连接的建立方式。因此,如 果能够在协议栈切换时,根据判断当前的连接方式满足切换后的协议栈的通 信与否,确定是否需要重新建立连接。这样,切换协议栈时基本上就可以尽 可能地避免重新建立连接,由此规避了最大耗时的工作,从而大大缩减了两 种协议栈切换的时间。图2表示了本实施例千兆网卡实现双协议栈切换的方法的流程图,该流 程以千兆网卡实现双协议栈切换为例,其并非用于说明本发明仅限于此,而 只是以此为例来表述清楚本发明的技术方案。该流程包括以下步-骤201:关中断;202:更换接收緩冲区内存,主要包括切换前协议栈接收緩冲区内存的
释放和切换后协议栈内存分配的申请,并且将其地址写入到接收緩沖区的描述符中;203:挂接新协议栈的中断处理函数,主要通过将中断函数指针指向该 中断处理函数实施;204:开中断;205:判断当前建立连接的方式是否满足新协议栈的要求,即是否需要 改变建立连接的方式?若是,则执行步骤206;若否则结束切换流程;206:根据新协议栈的需求建立新的连接方式,结束流程。综上所述,采用本发明方法,应用于网卡驱动支持双协议栈的快速切换, 通过将两种协议栈切换与网卡驱动的相关点抽象成切换重点,使得在双协议 栈切换时仅仅需要切换该切换重点中不同的地方,而不需要整个驱动重新加 载一遍,从而达到了减少双协议切换时间的目的,使得根据不同的需要将不 同的包送往不同的协议栈进行处理成为了现实。当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。譬如,本发明同样适用于其它网卡产品的驱动,以及本发明还适用于多 种协议栈之间的切换。
权利要求
1、一种网卡实现双协议栈切换的方法,应用于所述网卡的驱动,所述方法包括如下步骤(a)将所述双协议栈切换与所述网卡驱动的相关点抽象成切换重点;(b)进行所述双协议栈切换时,仅针对所述双协议栈将所述切换重点中的不同点切换过来。
2、 按照权利要求1所述的方法,其特征在于,步骤(a)所述切换重点 包括中断处理机制、内存分配和释放机制以及连接的建立方式;步骤(b) 所述切换重点的不同点切换包括(bl)挂接新协议栈的中断处理函数,以将接收到的包上送给所述新协 议栈处理;(b2)更换接收緩沖区内存,包括将原协议栈的接收緩冲区内存释放, 以及为所述新协议栈申请分配内存,并且将所述新协议栈内存地址写入到接 收緩冲区的描述符中;(b3 )根据所述新协议栈的需要进行所述连接的建立方式的切换。
3、 按照权利要求2所述的方法,其特征在于,步骤(bl)所述挂接通 过将中断函数指针指向所述新协议栈的中断处理函数完成;步骤(b2)先保 存所述原协议栈的接收緩冲区的内存地址,然后将预先分配好的内存地址写 入到所述接收緩冲区的描述符中,等所述协议栈切换完成后释;^文所述原协议 栈的所述接收緩冲区的内存;步骤(b3)先判断当前连接的建立方式是否满 足所述新协议栈进行通信的要求,满足则保持所述当前连接建立的方式;不 满足则按照需求重新建立连接。
4、 按照权利要求3所述的方法,其特征在于,在步骤(bl)前还包括 步骤预先为所述中断处理函数定义所述中断函数指针;在步骤(b2)前还 包括步骤预先分配接收緩冲区的所述内存。
5、 按照权利要求2所述的方法,其特征在于,所述中断处理的方式包 括中断延时处理或中断绝对定时处理。
6、 按照权利要求2所述的方法,其特征在于,所述网卡驱动在接收包 后上传给所述协议栈时采用零拷贝机制。
7、 按照权利要求2所述的方法,其特征在于,所述连接的建立方式包 括自动协商连接的建立或强制连接的建立。
全文摘要
一种网卡实现双协议栈切换的方法,其关键是把协议栈切换和网卡驱动的相关点抽象成切换重点,包括1)中断处理机制,即通过改变中断函数指针来挂接新协议栈的中断处理函数;2)内存分配和释放机制,即更换接收缓冲区内存,包括切换前协议栈接收缓冲区内存的释放,以及切换后协议栈内存分配的申请,并且将其地址写入到接收缓冲区的描述符中;3)连接的建立方式,即在切换时判断当前连接的建立方式是否满足切换后的协议栈的通信,满足则保持当前连接的建立方式;不满足才按需求重新建立连接。这样,每次协议栈切换只是将切换重点中的不同点切换过来,从而加速了切换。
文档编号H04L12/02GK101150412SQ20071015146
公开日2008年3月26日 申请日期2007年10月18日 优先权日2007年10月18日
发明者勤 任, 磊 杨, 田云操 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1