CN100589393C - 一种网卡实现双协议栈切换的方法 - Google Patents
一种网卡实现双协议栈切换的方法 Download PDFInfo
- Publication number
- CN100589393C CN100589393C CN200710151461A CN200710151461A CN100589393C CN 100589393 C CN100589393 C CN 100589393C CN 200710151461 A CN200710151461 A CN 200710151461A CN 200710151461 A CN200710151461 A CN 200710151461A CN 100589393 C CN100589393 C CN 100589393C
- Authority
- CN
- China
- Prior art keywords
- protocol stack
- stack
- switching
- buffering area
- network interface
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Mobile Radio Communication Systems (AREA)
Abstract
一种网卡实现双协议栈切换的方法,其关键是把协议栈切换和网卡驱动的相关点抽象成切换重点,包括:1)中断处理机制,即通过改变中断函数指针来挂接新协议栈的中断处理函数;2)内存分配和释放机制,即更换接收缓冲区内存,包括切换前协议栈接收缓冲区内存的释放,以及切换后协议栈内存分配的申请,并且将其地址写入到接收缓冲区的描述符中;3)连接的建立方式,即在切换时判断当前连接的建立方式是否满足切换后的协议栈的通信,满足则保持当前连接的建立方式;不满足才按需求重新建立连接。这样,每次协议栈切换只是将切换重点中的不同点切换过来,从而加速了切换。
Description
技术领域
本发明涉及通信领域多网络应用技术,更具体地涉及网卡实现多网络协议栈切换的方法。
背景技术
随着网络技术的普及和应用越来越广泛,某种具体特殊的应用可能需要具有某些特定功能的协议栈来支持,并且在应用需求的不断变化和更新中,网络协议栈的功能也需要不停地修改和变化。因此在很多网络应用中,譬如典型地软交换上的应用,由于操作***自带的网络协议栈满足了通用性导致了不能满目某些具有特殊要求的应用,以及因源码的不开放性导致了不能对协议栈进行修改和定制,因此,开发通信软件的商家往往不会使用操作***自带的网络协议栈来开发自己网络应用程序,而是自己开发新的协议栈,在自己的协议栈上面去开发网络应用程序,这样可以针对具体的应用而使网络协议栈为上层提供特殊的服务。但是由于考虑到成本问题,商家自己开发的协议栈往往是针对具体的应用,没有集成对应用程序和驱动程序的调试、分析及统计等功能,这个时候又需要操作***自带的网络协议栈来完成这些功能。因此在开发中往往需要用到多个网络协议栈,而使用多个协议栈时协议栈之间的切换速度便成了亟待解决的问题。因为,如果两个协议栈之间切换的速度过慢,则会导致在双协议栈切换时出现丢包问题,从而不能满足上层应用程序的需求。而要解决这个问题则需要下层网卡和网卡驱动的支持。
网卡(NIC,Network Interface Card),也称“网络适配器”,它是连接计算机与网络的硬件设备。无论是双绞线连接、同轴电缆连接,还是光纤连接,都必须借助网卡才能实现数据通信。网卡的主要工作原理是整理计算机上发往网线上的数据,并将数据分解为适当大小的数据包之后向网络上发送。每块网卡都有一个唯一的网络节点地址,通常称为MAC地址(物理地址),它是网卡生产厂家在生产时烧入ROM中的,且保证该地址绝对不会重复。人们日常使用的网卡都是以太网网卡。目前网卡按其传输速度可分为10M网卡、10/100M自适应网卡以及千兆(1000M)网卡。如果只是作为一般用途,如日常办公等,比较适合使用10M网卡和10/100M自适应网卡两种。如果应用于服务器等产品领域,就要选择千兆级的网卡。
目前针对双协议栈切换的研究不多,主要的研究集中在ipv4/ipv6双协议栈的研究上。现有的网卡实现双协议栈切换的过程如图1所示,首先是停止当前设备驱动的使用,然后是释放一些与当前使用的协议栈相关的资源,并重新启动设备驱动以支持新的协议栈。这个切换过程的优点是具有通用性,不会出错,且代码量小。但其最主要的缺点就是将整个网卡驱动停止后又重新启动了一遍,多次操作了网卡芯片的寄存器,耗时非常大,导致协议栈切换期间出现丢包现象,故不能满足上层应用的需要。
发明内容
本发明所要解决的技术问题是提供一种网卡实现双协议栈切换的方法,支持多协议栈的快速切换,从而能够避免在协议栈切换过程中出现数据丢包现象。
为了解决上述技术问题,本发明提供了一种网卡实现双协议栈切换的方法,应用于网卡的驱动,该方法包括如下步骤:
(a)将双协议栈切换与网卡驱动的相关点抽象成切换重点;
(b)进行双协议栈切换时,仅针对双协议栈将切换重点中的不同点切换过来。
进一步地,步骤(a)切换重点包括:中断处理机制、内存分配和释放机制以及连接的建立方式;步骤(b)切换重点的不同点切换包括:
(b1)挂接新协议栈的中断处理函数,以将接收到的包上送给新协议栈处理;
(b2)更换接收缓冲区内存,包括:将原协议栈的接收缓冲区内存释放,以及为新协议栈申请分配内存,并且将新协议栈内存地址写入到接收缓冲区的描述符中;
(b3)根据新协议栈的需要进行连接的建立方式的切换。
进一步地,步骤(b1)挂接通过将中断函数指针指向新协议栈的中断处理函数完成;步骤(b2)先保存原协议栈的接收缓冲区的内存地址,然后将预先分配好的内存地址写入到接收缓冲区的描述符中,等协议栈切换完成后释放原协议栈的接收缓冲区的内存;步骤(b3)先判断当前连接的建立方式是否满足新协议栈进行通信的要求,满足则保持当前连接建立的方式;不满足则按照需求重新建立连接。
进一步地,在步骤(b1)前还包括步骤:预先为中断处理函数定义中断函数指针;在步骤(b2)前还包括步骤:预先分配接收缓冲区的内存。
进一步地,中断处理的方式包括中断延时处理或中断绝对定时处理。
进一步地,网卡驱动在接收包后上传给协议栈时采用零拷贝机制。
进一步地,连接的建立方式包括自动协商连接的建立或强制连接的建立。
与现有技术相比,由于本发明在双协议栈的切换过程中,采用了仅仅切换两种协议栈不同之处的方式,保留了两种协议栈的共同的地方,因此大大缩减了两种协议栈切换的时间,从而保证了在协议栈切换过程中不会出现丢包及连接中断等现象。
附图说明
图1为现有的网卡实现双协议栈切换方法的流程图;
图2为采用本发明千兆网卡实现双协议栈切换方法一实施例的流程图。
具体实施方式
本发明提供了一种网卡实现双协议栈切换的方法,其关键点就是把双协议栈切换和网卡驱动的相关点抽象成切换重点,主要包括:(1)中断处理机制,即通过改变中断函数指针来挂接新协议栈的中断处理函数;(2)内存分配和释放机制,即接收缓冲区内存的更换,包括切换前协议栈接收缓冲区内存的释放,以及切换后协议栈内存分配的申请,并且将其地址写入到接收缓冲区的描述符中;(3)连接的建立方式,即在切换时判断当前连接的建立方式是否满足切换后的协议栈的通信,满足则保持当前连接的建立方式;不满足才按需求重新建立连接。这样,每次协议栈切换时不需要重复整个驱动重新加载到协议栈的过程,而只是将切换重点中的不同点切换过来,从而大大缩减了切换的时间。并且,在切换的过程中,能够顺利地将收到的每个包上送给协议栈处理,从而避免出现数据丢包现象。
下面结合具体实施例和附图对本发明上述技术方案作进一步详细的说明。
本发明的网卡实现双协议栈切换的方法,通过将双协议栈和网卡驱动相关点抽象成切换重点,而在协议栈切换时,仅针对协议栈就这些重点的不同点进行切换,达到加速切换的目的。
(1)中断处理机制及中断处理函数切换的实现
由于接收的包要上传给不同的协议栈,不同的协议处理包的接口肯定不一样,所以中断后处理函数肯定不一样。协议栈切换首要解决的问题就是切换中断处理函数。
在网卡芯片控制器内部寄存器中,对中断产生的条件有多种设置方式,最常用的是采取中断延迟定时器和中断绝对定时器的组合方式。中断延迟定时器的含义是指在网卡芯片通过DMA接收到一个包后,不会立即产生一个中断,而是延迟一个预先定义好的时间后,如果还没有下一个包到来,则产生中断,如果在定义的时间之内又接收了一个包,则又延迟产生中断。中断绝对定时器的含义就是在接收到第一个包后,即使一直连续不断的接收到包,但定义的绝对定时器时间到达后,立即产生一个中断。通过两种中断条件的组合,避免了每收到一个包就产生一个中断而导致效率不高的问题,以及接收到了包但不能够及时上送给协议栈处理的问题。
但是,不同的协议栈可能对网卡驱动收到的包处理的流程不一样,需要将包上送给不同的协议栈。这里所谓切换(或挂接)中断处理函数,可以预先为中断处理函数定义一个函数指针,在切换协议栈时,将这个中断函数指针指向新的协议栈的中断处理函数,这样切换中断处理函数的耗时将会很短。
(2)内存分配和释放机制及接收缓冲区内存切换的实现
由于网卡驱动在接收包后上传给协议栈时采用了零拷贝机制,如果不同的协议栈在接收包使用不同的内存分配机制,比如vxworks操作自己的网络协议栈就使用了mBlk结构池、clBlk结构池和簇缓冲区池结构来组织包的接收和上传,而在另外一些协议栈中,在接收时它可能用的是自己的内存分配和释放方式,从而使得在切换协议栈时,对接收缓冲区中内存的释放等也要重新切换。
这里,所谓零拷贝(Zero-Copy)机制其基本思想是:数据包从网络设备到用户程序空间传递的过程中,尽量避免数据拷贝。亦即在从接收缓冲区传送到协议栈的过程中,传输的是数据包的内存地址,而不是数据包的内容。
千兆网卡是通过DMA传输机制将数据从网卡芯片的FIFO接收数据区传输到内存的,然后在CPU的控制下,将内存中的数据上传给协议栈处理。所以在内存中要预先定义一个接收缓冲区供网卡DMA读取,由于在上送给协议栈时,采用了零拷贝机制,而不同的协议栈可能对缓冲区内存分配的方式不一样,因此在切换协议栈时要切换接收缓冲的内存区。
为了加速接收缓冲区内存的切换,可以采取一种预先分配接收缓冲区内存机制和延迟释放原协议栈内存的机制,切换时先保存原协议栈的接收缓冲区的内存区地址,然后直接将预先分配好的内存区地址写入到接收缓冲区描述符中,等整个协议栈切换完成后再释放原协议栈内存,这样大大减少了接收缓冲区内存切换的时间。
(3)连接的建立方式及切换连接方式的实现
各种协议栈建立连接的方式可能会不一样,有的协议栈可能要求是自动协商连接,有的可能要求是强制连接,还有的可能是要求从EEPROM读取数据建立连接等等。所以,应根据协议栈的需要,如果需要改变建立连接的方式,则连接的建立方式也需要切换。
Intel82546千兆网卡芯片有两种建立连接的方式,一种是自动协商连接,主要是通过芯片自动检测对等方的连接速度,通信模式和流控方式从而确定己方连接速度是10M、100M还是1000M,通信方式是半双工还是全双工,以及流控的方式等。另外一种是强制连接方式,就是说己方将连接速度和通信方式根据自己的需要强制设置成规定范围内的参数,从而根据这些参数建立连接。还有一种方式就是将建立连接的方式(譬如自动协商连接或强制连接)参数写入到EEPROM中去,通过读EEPROM的数据来确定建立哪种方式的连接。建立连接由于涉及到对网卡芯片的操作,耗时比较长,所以在协议栈切换时首先要判断当前的连接方式是否满足切换后的协议栈进行通信的要求,如果满足,就不需要切换连接方式;否则,才按照需求重新建立连接。这里的优化主要是将***启动后默认建立自动协商机制的连接,然后在切换协议栈时,根据判断自动协商机制是否满足当前需要切换的协议栈,来确定是否切换连接的建立方式,这样切换协议栈时基本上就不需要重新建立连接,从而避免了最大耗时的工作,保证了切换时间锐减,从而避免丢包的现象。
总体说来,在协议栈切换时需要切换的重点就在上述三个方面。其中(1)和(2)的切换主要是针对内存的一些操作,与芯片硬件的操作关系不大,消耗的时间非常少,时间的消耗主要花费在(3)上,即连接建立方式的切换。而对于大多数协议栈切换并不需要改变连接的建立方式。因此,如果能够在协议栈切换时,根据判断当前的连接方式满足切换后的协议栈的通信与否,确定是否需要重新建立连接。这样,切换协议栈时基本上就可以尽可能地避免重新建立连接,由此规避了最大耗时的工作,从而大大缩减了两种协议栈切换的时间。
图2表示了本实施例千兆网卡实现双协议栈切换的方法的流程图,该流程以千兆网卡实现双协议栈切换为例,其并非用于说明本发明仅限于此,而只是以此为例来表述清楚本发明的技术方案。该流程包括以下步骤:
201:关中断;
202:更换接收缓冲区内存,主要包括切换前协议栈接收缓冲区内存的释放和切换后协议栈内存分配的申请,并且将其地址写入到接收缓冲区的描述符中;
203:挂接新协议栈的中断处理函数,主要通过将中断函数指针指向该中断处理函数实施;
204:开中断;
205:判断当前建立连接的方式是否满足新协议栈的要求,即是否需要改变建立连接的方式?若是,则执行步骤206;若否则结束切换流程;
206:根据新协议栈的需求建立新的连接方式,结束流程。
综上所述,采用本发明方法,应用于网卡驱动支持双协议栈的快速切换,通过将两种协议栈切换与网卡驱动的相关点抽象成切换重点,使得在双协议栈切换时仅仅需要切换该切换重点中不同的地方,而不需要整个驱动重新加载一遍,从而达到了减少双协议切换时间的目的,使得根据不同的需要将不同的包送往不同的协议栈进行处理成为了现实。
当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的普通技术人员当可根据本发明做出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
譬如,本发明同样适用于其它网卡产品的驱动,以及本发明还适用于多种协议栈之间的切换。
Claims (6)
1、一种网卡实现双协议栈切换的方法,应用于所述网卡的驱动,所述方法包括如下步骤:
(a)将所述双协议栈切换与所述网卡驱动的相关点抽象成切换重点,所述切换重点包括:中断处理机制、内存分配和释放机制以及连接的建立方式;
(b)进行所述双协议栈切换时,不需要重复整个驱动重新加载到协议栈的过程,仅针对所述双协议栈将所述切换重点中的不同点切换过来,所述双协议栈将所述切换重点中的不同点切换过来的所述步骤包括:
(b1)挂接新协议栈的中断处理函数,以将接收到的包上送给所述新协议栈处理;
(b2)更换接收缓冲区内存,包括:将原协议栈的接收缓冲区内存释放,以及为所述新协议栈申请分配内存,并且将所述新协议栈内存地址写入到接收缓冲区的描述符中;
(b3)根据所述新协议栈的需要进行所述连接的建立方式的切换。
2、按照权利要求1所述的方法,其特征在于,步骤(b1)所述挂接通过将中断函数指针指向所述新协议栈的中断处理函数完成;步骤(b2)先保存所述原协议栈的接收缓冲区的内存地址,然后将预先分配好的内存地址写入到所述接收缓冲区的描述符中,等所述协议栈切换完成后释放所述原协议栈的所述接收缓冲区的内存;步骤(b3)先判断当前连接的建立方式是否满足所述新协议栈进行通信的要求,满足则保持所述当前连接建立的方式;不满足则按照需求重新建立连接。
3、按照权利要求2所述的方法,其特征在于,在步骤(b1)前还包括步骤:预先为所述中断处理函数定义所述中断函数指针;在步骤(b2)前还包括步骤:预先分配接收缓冲区的所述内存。
4、按照权利要求1所述的方法,其特征在于,所述中断处理的方式包括中断延时处理或中断绝对定时处理。
5、按照权利要求1所述的方法,其特征在于,所述网卡驱动在接收包后上传给所述协议栈时采用零拷贝机制。
6、按照权利要求1所述的方法,其特征在于,所述连接的建立方式包括:自动协商连接的建立或强制连接的建立。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200710151461A CN100589393C (zh) | 2007-10-18 | 2007-10-18 | 一种网卡实现双协议栈切换的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200710151461A CN100589393C (zh) | 2007-10-18 | 2007-10-18 | 一种网卡实现双协议栈切换的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101150412A CN101150412A (zh) | 2008-03-26 |
CN100589393C true CN100589393C (zh) | 2010-02-10 |
Family
ID=39250765
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200710151461A Expired - Fee Related CN100589393C (zh) | 2007-10-18 | 2007-10-18 | 一种网卡实现双协议栈切换的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100589393C (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI703835B (zh) * | 2019-01-25 | 2020-09-01 | 中華電信股份有限公司 | 用於虛擬機網路卡之供裝監控系統及方法 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101640665B (zh) * | 2008-07-28 | 2012-08-22 | 联想(北京)有限公司 | 网络过滤驱动中间层实现网卡远程唤醒的计算机和方法 |
CN102215148B (zh) * | 2010-04-09 | 2014-12-17 | 瑞昱半导体股份有限公司 | 具有自动协商机制的网络装置及相关方法 |
CN105763336B (zh) * | 2016-02-04 | 2019-04-09 | 天津市英贝特航天科技有限公司 | 单一网卡的多种网络协议切换方法及切换装置 |
CN107438070B (zh) * | 2017-07-28 | 2020-12-04 | 上海联影医疗科技股份有限公司 | 一种协议配置方法及装置 |
CN110391999B (zh) * | 2018-04-18 | 2022-12-16 | 海能达通信股份有限公司 | 一种数据通信方法及*** |
CN110891073B (zh) * | 2019-12-30 | 2021-06-25 | 西安电子科技大学 | 一种用于移动通信核心网的多协议栈通信方法 |
-
2007
- 2007-10-18 CN CN200710151461A patent/CN100589393C/zh not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI703835B (zh) * | 2019-01-25 | 2020-09-01 | 中華電信股份有限公司 | 用於虛擬機網路卡之供裝監控系統及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101150412A (zh) | 2008-03-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100589393C (zh) | 一种网卡实现双协议栈切换的方法 | |
CN101114867B (zh) | 一种多信道同步传输的方法及*** | |
CN102014067B (zh) | 一种报文分片发送的方法、装置和网络设备 | |
EP1841162A2 (en) | Method and system for an OS virtualization-aware network interface card | |
US20040233924A1 (en) | Dynamic memory allocation between inbound and outbound buffers in a protocol handler | |
CN102571996B (zh) | Ip地址分配方法、装置以及网络*** | |
CN112769905B (zh) | 一种基于numa架构的飞腾平台下高性能网卡性能优化方法 | |
CN106034084A (zh) | 一种数据传输方法及装置 | |
CN101046786A (zh) | 一种实现高效dma传输的dma控制器及传输方法 | |
CN102273179A (zh) | 一种终端批量升级方法及装置 | |
WO2013056671A1 (zh) | 一种单卡多待终端、适配模块及sim卡访问方法 | |
CN108959136A (zh) | 基于spi的数据传输加速装置、***及数据传输方法 | |
CN102185770A (zh) | 基于多核架构的批量式报文收发方法 | |
CN101052031B (zh) | 苹果计算机与无线通讯终端进行数据交互的方法 | |
JP2009118482A (ja) | 移動通信システムのリンク二重化装置及び方法 | |
CN101452430A (zh) | 多处理器之间的通信方法与包括多处理器的通信装置 | |
US7107345B2 (en) | Method for managing socket in mobile communication system | |
CN101938297A (zh) | 蓝牙链路的数据传输方法及蓝牙主设备 | |
CN104486187B (zh) | 一种动态同步的can通讯设备和方法 | |
CN106375240B (zh) | 一种多网口间以太网报文转发方法及*** | |
CN102497318A (zh) | 一种混合端口类型的网卡实现***和方法 | |
EP1919145A3 (en) | Storage system and communication bandwidth control method | |
EP2017740B1 (en) | Method for data transfer between host and device | |
CN112351089B (zh) | 一种虚拟机与加速器间的数据传输方法、***及装置 | |
CN111245794B (zh) | 数据传输方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20100210 Termination date: 20171018 |