CN1298147C - 一种在组播数据包转发时实现减少内存占用空间的方法 - Google Patents
一种在组播数据包转发时实现减少内存占用空间的方法 Download PDFInfo
- Publication number
- CN1298147C CN1298147C CNB2003101038775A CN200310103877A CN1298147C CN 1298147 C CN1298147 C CN 1298147C CN B2003101038775 A CNB2003101038775 A CN B2003101038775A CN 200310103877 A CN200310103877 A CN 200310103877A CN 1298147 C CN1298147 C CN 1298147C
- Authority
- CN
- China
- Prior art keywords
- packet
- formation
- transmission
- describing word
- bag
- 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
Abstract
一种在组播数据包转发时实现减少内存占用空间的方法,特别是在组播数据包转发时,通过链表队列的改进实现减少内存占用空间的方法。其特征在于所述方法包括:在内存中只存有一份需要转发数据包的拷贝;在内存中只存在一条由包描述字连接而成的链表,各个发送队列的队列描述字通过头指针连接到该链表;在最后一个和该链表相连的队列发送结束后,将该数据包占用的空间归还给缓存(buffer)。使用本发明后,数据包实现零拷贝发送,而且各个队列发送线程的关联性很小,发送时不需要相互等待,大大提高了组播发送的效率。
Description
技术领域
本发明涉及一种在组播数据包转发时实现减少内存占用空间的方法,特别是在组播数据包转发时,通过链表队列的改进实现减少内存占用空间的方法。本发明适用于计算机软件技术领域,尤其是网络通信领域。
背景技术
随着宽带的发展,多媒体业务诸如:流媒体,视频会议和视频点播等,正在成为信息传送的重要组成部分。多媒体的相关服务需求的日益增长刺激了IP组播技术的普及和发展,成为新一代网络的不可缺少的关键技术。
从技术角度看,组播技术可以分为控制层面和数据层面。控制层面是指支持组播技术的各种协议,如IGMP,PIM-DM,PIM-SM,DVMRP等,由这些协议完成对组播组的管理和控制。数据层面是指组播数据包的转发。本发明主要涉及组播数据包的转发。
在以软件转发为主的系统中,组播包的转发是将每个组播包复制发送到相应的单板或端口。每次发送时,内存中都拷贝一份数据包。这种发送方法的效率是非常低的。
一个常见的系统框图如图1所示。
在数据包发送时,必然涉及到发送队列的设置过程。与本发明方法所特别相关的是对链表队列进行的改进。
为了更好的描述组播包的发送,需要先介绍一下使用链表发送单播包的过程。
在使用链表发送单播包时,由链表组成的各个发送队列之间是完全独立的,每一个队列使用各自私有的队列的描述字Queue Descriptor和队列中每个包的描述字Packet link。
队列的描述字包括Queue count,Head pointer,Tail pointer域,含义如下所列:
Queue count:是指当前队列中的待发送包的个数,也即是Packetlink的个数,称为计数器。
Head pointer:是指队列中第一个packet link的地址,称为头指针。
Tail pointer:是指对应队列中最后一个packet link的地址,称为尾指针。
队列中每个包的描述字,包括next address,packet info域,含义如下所列:
next address:是指下一个Packet link的地址。
Packet info:是指数据包的信息,一般用于描述包的长度,包的起始地址等信息。
链表的组织结构如图2所示。
在单播转发中,收到一个数据包,查找到包的出队列后,就要把数据包加入相应的队列,我们称为入队列。发送线程则是在队列中读取包的描述信息,按顺序发送,我们称为出队列。
入队列的处理流程如下:
第一步:程序查找到需要放置的出队列的队列号;
第二步:读出队列的队列描述字Queue Descriptor;
第三步:把需要添加的包的描述字Packet link添加到队列的最后,即修改队尾包描述字packet link中的下一个包描述字指针next address为需要入队的packet link的地址;
第四步:修改队列的描述字Queue Descriptor以反应新的变化,修改队列描述字中的尾指针tail pointer为需要入队的packet link地址;
第五步:将队列描述字中的计数器Queue Count加1。流程结束。
入队列的处理流程如图3所示。
出队列的处理流程如下:
第一步:读出制定队列的队列描述字Queue Descriptor;
第二步:判断队列描述字中的计数器Queue Count是否为0,如果为0出队列流程直接结束,如果不为0,将计数器Queue Count减1后继续执行第三步;
第三步:根据队列描述字中的头指针head pointer读取需要出队列的包描述字packet link;
第四步:修改队列描述字中的头指针head pointer为需要出队列的包描述字packet link的下一个包描述字,即需要出队列的包描述字packet link的next address。流程结束。
出队列的处理流程如图4所示。
上面介绍了单播的入队列和出队列的流程,对于以拷贝方式的组播发送,就是查找到多个队列号,拷贝数据包,加入到多个队列。而出队列的发送方式与单播包相同,只是重复发送。
这样使用拷贝方式的组播发送的入队列流程为:
第一步:查找一个出队列号,如果没有找到,则结束发送流程,如果找到,则进入第二步操作;
第二步:拷贝要发送的数据包;
第三步:按照单播的方式入队列,入队列操作完成后返回第一步。
组播包的入队列流程如图5所示。
这种方式的主要问题在于:
由于每一个队列发送完数据包后都将本队列中该包的包描述字Packet link出队列,并释放相应的存放数据包的内存空间。所以,多个队列就需要对数据包进行多次拷贝,并生成新的数据包描述字以添加到各个队列中。这样就占用了很多不必要的空间,同时也降低了程序的效率。
发明内容
本发明的目的是在现有代码和数据结构的基础上进行改进,提供一种在组播数据包转发时实现减少内存占用空间的方法,特别是在组播数据包转发时,通过链表队列的改进实现减少内存占用空间的方法,解决以拷贝方式实现的组播发送方式存在空间浪费和效率低下的问题。
本发明是这样实现的:
一种在组播数据包转发时实现减少内存占用空间的方法,其特征在于:
在内存中只存有一份需要转发数据包的拷贝;
在内存中只存在一条由包描述字连接而成的链表,各个发送队列的队列描述字通过头指针连接到该链表;
在最后一个和该链表相连的队列发送结束后,将该数据包占用的空间归还给缓存(buffer)。
所述由包描述字连接而成的链表是把需要入队列的组播包的包描述字加入到所有的队列中,并在包描述字中增加每个队列发送本数据包结束的标志位。
所述每个队列发送结束后判断一下所有的标志位,如果本次发送不是最后一次发送,就置一本队列发送结束标志,但不归还数据包的缓存,如果本次发送是最后一次发送,就归还数据包的缓存。
所述在包描述字中增加每个队列发送本数据包结束的标志位,是通过在包描述字的结构中增加发送数据包结束标志位图(Tx OK Bitmap域)实现的,即在每个队列发送结束后,需要判断和修改该域。
所述在组播数据包转发时实现减少内存占用空间的方法,包括组播数据包入队列、组播数据包出队列:
组播数据包入队列进一步包括如下步骤:
第一步:取得下一个出队列的队列号;
第二步:按照单播的方式入队列,不拷贝数据包和生成新的数据包描述字,不需要判断该数据包是否需要在这个队列中发送;
第三步:判断是否是最后一个出队列,如果不是则返回第一步,如果是则结束入队列,
组播数据包出队列进一步包括如下步骤:
第一步:按照单播的方式出队列,修改队列中指针的结构,修改队列描述字中的头指针,不释放出队列的数据包描述字的空间,不归还数据包的空间;
第二步:判断这个数据包是否需要在本队列发送,如果是则进行第三步,如果不是,则进行第四步;
第三步:发送本数据包;
第四步:读取该数据包描述字中的发送数据包结束标志位图,判断是不是最后一次发送,如果不是则在发送数据包结束标志位图中设置本队列发送结束标志位,如果是最后一次发送,则需要归还数据包所占的空间,释放该数据包描述字的空间。
使用本发明后,数据包实现零拷贝发送,而且各个队列发送线程的关联性很小,发送时不需要相互等待,大大提高了组播发送的效率。
附图说明
图1是基于CPU的组播转发系统框图;
图2是发送单播包的发送链表队列示意图;
图3是单播发送链表入队列流程图;
图4是单播发送链表出队列流程图;
图5是拷贝方式下组播发送的入链表队列流程图;
图6是改进后的组播队列数据包描述字结构图;
图7是改进后的组播发送链表队列示意图;
图8是改进后的多播发送链表入队列流程图;
图9是改进后的多播发送链表出队列流程图;
图10是应用本发明方法的一个具体实施实例的系统框图。
具体实施方式
本发明对组播入队列的方法进行改进,在内存中只有一份(或几份)数据包的拷贝,同时在内存中也只存在一条包描述字连接而成的链表,各个发送队列的队列描述字通过头指针head pointer连接到这条链表。发送数据包时,只有在最后一个和该链表相连的队列发送结束后,才将该数据包占用的空间归还给缓存(buffer)。这样会节省数据包的拷贝时间,提高组播的转发效率。
具体说来,就是把需要入队列的组播包的包描述字packet link加入到所有的队列中,而不管最终是否需要发送,并在包描述字packet link中增加每个队列发送本数据包结束的标志位,每个队列发送结束后判断一下所有的标志位,如果本次发送不是最后一次发送,就置一下本队列发送结束标志,但不归还数据包的缓存,如果本次发送是最后一次发送,就归还数据包的缓存。
对于图2的队列描述字Queue Descriptor结构基本不做改变,只是改变包描述字packet link的结构,其中,下一个包描述字号地址nextaddress和包信息packet info域的定义没有改变,新增加了发送数据包结束标志位图tx OK bitmap域,这个域在入队列时不需要填写。只有在每个队列发送结束后,需要判断和修改这个域。如图6所示。
经过修改以后的组播链表的组织结构发生了变化。
由链表组成的发送队列不再是完全独立的,每一个队列仍然使用各自私有的队列的描述字Queue Descriptor,但由每个包的描述字Packetlink组成的链表则是公用的,各个队列的描述字中的计数器QueueCount,头指针Head Pointer,尾指针Tail Pointer字段都是相同的,因为它们公用同一条队列。
组播的链表的组织结构如图7所示。
具体实施后,组播包入队列和出队列流程都需要进行具体的改动:
组播包入队列流程:
第一步:取得下一个出队列的队列号;
第二步:按照单播的发放入队列,并不需要数据包的拷贝和新的数据包描述字packet link的生成。这里并不需要判断这个包是否需要在这个队列中发送;
第三步:判断是否是最后一个出队列,如果不是则返回第一步,如果是则结束入队列流程。
组播包入队列的流程如图8所示。
组播包出队列流程:
第一步:按照单播的方式出队列,修改队列中指针的结构,修改队列描述字Queue Descriptor中的Head pointer头指针,但并不释放出队列的数据包描述字packet link的空间,也不归还数据包的空间;
第二步:判断这个包是否需要在本队列发送,如果是则进行第三步,如果不是,则进行第四步;
第三步:发送本数据包;
第四步:读取该包描述字packet link中的发送数据包结束标志位图Tx OK Bitmap,判断是不是最后一次发送,如果不是则在发送数据包结束标志位图Tx OK Bitmap中设置本队列发送结束标志位。如果是最后一次发送,则需要归还数据包所占的空间,释放该包描述字packet link的空间。
第五步:流程结束。
改进后的组播包出队列的流程如图9所示。
在本公司某型号的DSLAM产品中,需要在网络处理器上完成组播发送,主要是从上行以太网端口发送组播数据流到ADSL用户,由于是微码转发,需要重复发送。在使用本发明以前,数据包需要拷贝发送,发送的效率比较低。使用本发明后,数据包实现零拷贝发送,而且各个队列发送线程的关联性很小,发送时不需要相互等待,大大提高了组播发送的效率。
具体实施的系统框图如图10所示。
数据包从PHY/MAC芯片或交换芯片接收到网络处理器后,由接收引擎把数据包保存在缓存中交给协议处理引擎处理,在进行必要的协议处理,路由查找后,如果是组播包,就按照本发明把数据包加入到所有端口的发送队列,然后由发送引擎发送,并由最后一个发送结束的引擎归还缓存。
Claims (4)
1、一种在组播数据包转发时实现减少内存占用空间的方法,其特征在于:
在内存中只存有一份需要转发数据包的拷贝;
在内存中只存在一条由包描述字连接而成的链表,各个发送队列的队列描述字通过头指针连接到该链表;
在最后一个和该链表相连的队列发送结束后,将该数据包占用的空间归还给缓存;
所述由包描述字连接而成的链表是把需要入队列的组播数据包的包描述字加入到所有的队列中,并在包描述字中增加每个队列发送本数据包结束的标志位。
2、如权利要求1所述在组播数据包转发时实现减少内存占用空间的方法,其特征在于:
所述每个队列发送结束后判断一下所有的标志位,如果本次发送不是最后一次发送,就置一本队列发送结束标志,但不归还数据包的缓存,如果本次发送是最后一次发送,就归还数据包的缓存。
3、如权利要求1或2所述在组播数据包转发时实现减少内存占用空间的方法,其特征在于:
所述在包描述字中增加每个队列发送本数据包结束的标志位,是通过在包描述字的结构中增加发送数据包结束标志位图实现的,即在每个队列发送结束后,需要判断和修改该发送数据包结束标志位图。
4、如权利要求3所述在组播数据包转发时实现减少内存占用空间的方法,包括组播数据包入队列、组播数据包出队列:
组播数据包入队列进一步包括如下步骤:
第一步:取得下一个出队列的队列号;
第二步:按照单播的方式入队列,不拷贝数据包和生成新的数据包描述字,不需要判断该数据包是否需要在这个队列中发送;
第三步:判断是否是最后一个出队列,如果不是则返回第一步,如果是则结束入队列,
组播数据包出队列进一步包括如下步骤:
第一步:按照单播的方式出队列,修改队列中指针的结构,修改队列描述字中的头指针,不释放出队列的数据包描述字的空间,不归还数据包的空间;
第二步:判断这个数据包是否需要在本队列发送,如果是则进行第三步,如果不是,则进行第四步;
第三步:发送本数据包;
第四步:读取该数据包描述字中的发送数据包结束标志位图,判断是不是最后一次发送,如果不是则在发送数据包结束标志位图中设置本队列发送结束标志位,如果是最后一次发送,则需要归还数据包所占的空间,释放该数据包描述字的空间。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2003101038775A CN1298147C (zh) | 2003-11-18 | 2003-11-18 | 一种在组播数据包转发时实现减少内存占用空间的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2003101038775A CN1298147C (zh) | 2003-11-18 | 2003-11-18 | 一种在组播数据包转发时实现减少内存占用空间的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1545274A CN1545274A (zh) | 2004-11-10 |
CN1298147C true CN1298147C (zh) | 2007-01-31 |
Family
ID=34333359
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2003101038775A Expired - Fee Related CN1298147C (zh) | 2003-11-18 | 2003-11-18 | 一种在组播数据包转发时实现减少内存占用空间的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1298147C (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100426792C (zh) * | 2005-07-27 | 2008-10-15 | 华为技术有限公司 | 多播调度中缓存权重的处理方法 |
CN100459502C (zh) * | 2006-01-16 | 2009-02-04 | 北京速能数码网络技术有限公司 | 一种非对称跨网段多路数据流动态复制分发方法 |
CN102821045B (zh) * | 2012-08-03 | 2015-07-22 | 中兴通讯股份有限公司 | 多播报文复制方法及装置 |
CN104063452A (zh) * | 2014-06-24 | 2014-09-24 | 武汉烽火众智数字技术有限责任公司 | 一种共享队列的读写方法与装置 |
CN106375240B (zh) * | 2016-09-18 | 2019-09-20 | 深圳震有科技股份有限公司 | 一种多网口间以太网报文转发方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2002060132A1 (en) * | 2001-01-25 | 2002-08-01 | Crescent Networks, Inc. | Operation of a multiplicity of time sorted queues with reduced memory |
WO2002084959A1 (en) * | 2001-04-11 | 2002-10-24 | Chelsio Communications, Inc. | Non-blocking scalable switching fabric |
CN1411217A (zh) * | 2001-10-17 | 2003-04-16 | 华为技术有限公司 | 利用缓存技术提高ip报文转发速度的方法 |
US6601116B1 (en) * | 1998-07-26 | 2003-07-29 | Marvell Semiconductor Israel Ltd. | Network switch having descriptor cache and method thereof |
-
2003
- 2003-11-18 CN CNB2003101038775A patent/CN1298147C/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6601116B1 (en) * | 1998-07-26 | 2003-07-29 | Marvell Semiconductor Israel Ltd. | Network switch having descriptor cache and method thereof |
WO2002060132A1 (en) * | 2001-01-25 | 2002-08-01 | Crescent Networks, Inc. | Operation of a multiplicity of time sorted queues with reduced memory |
WO2002084959A1 (en) * | 2001-04-11 | 2002-10-24 | Chelsio Communications, Inc. | Non-blocking scalable switching fabric |
CN1411217A (zh) * | 2001-10-17 | 2003-04-16 | 华为技术有限公司 | 利用缓存技术提高ip报文转发速度的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN1545274A (zh) | 2004-11-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1232081C (zh) | 网络通信中组播报文的转发方法 | |
CN101030943A (zh) | 一种发送报文的方法和路由器 | |
CN1791054A (zh) | 一种虚拟路由器方式的虚拟专用网络的组播方法 | |
CN1777149A (zh) | 在三层交换机上实现组播转发的方法 | |
CN1921457A (zh) | 一种网络设备和基于多核处理器的报文转发方法 | |
CN1697354A (zh) | 用组播和单播协议可靠传输数据的方法及接收数据的主机 | |
CN1866845A (zh) | 一种组播转发表输出端口的虚拟标识方法 | |
CN1946054A (zh) | 一种高速数据流的传输方法、装置及数据交换设备 | |
CN1620010A (zh) | Vlan服务器 | |
CN1716905A (zh) | 虚拟路由器对应多点传送数据包中继装置 | |
CN1716904A (zh) | 一种基于多业务传输平台的组播实现方法 | |
CN101047633A (zh) | 一种实现多路径传输的方法、装置和系统 | |
CN1863142A (zh) | 给数据流提供不同的服务质量策略的方法 | |
CN1744574A (zh) | 组播报文穿越非组播网络的方法及其应用的网络系统 | |
CN1848807A (zh) | 一种组播业务实现方法 | |
CN101047614A (zh) | 一种IPv6网络环境中流传输路径建立方法和数据传输系统 | |
CN101051920A (zh) | 一种组播业务的实现方法和网络设备 | |
CN101079728A (zh) | 一种优化组管理协议的方法、服务器及系统 | |
CN101043387A (zh) | 远程镜像实现方法、远程监控设备及实现远程镜像的系统 | |
CN1298147C (zh) | 一种在组播数据包转发时实现减少内存占用空间的方法 | |
CN101052004A (zh) | Ip网络中基于虚拟分发网的多播传送方法 | |
CN1889448A (zh) | 指定源组播协议无关组播模式下跨虚拟局域网组播的方法和系统 | |
CN1741499A (zh) | 一种基于mac学习的虚拟电路交换方法 | |
CN1592250A (zh) | 一种流媒体数据多点传输方法 | |
CN1595879A (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: 20070131 Termination date: 20171118 |