CN100391200C - 一种数据传送方法 - Google Patents
一种数据传送方法 Download PDFInfo
- Publication number
- CN100391200C CN100391200C CNB2004101031249A CN200410103124A CN100391200C CN 100391200 C CN100391200 C CN 100391200C CN B2004101031249 A CNB2004101031249 A CN B2004101031249A CN 200410103124 A CN200410103124 A CN 200410103124A CN 100391200 C CN100391200 C CN 100391200C
- Authority
- CN
- China
- Prior art keywords
- memory
- bottom layer
- application module
- layer driving
- free memory
- 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
本发明公开了一种数据传送方法。本发明提供的方法,首先,根据传送的数据报大小,通用CPU的底层驱动在底层驱动和应用模块共享的存储空间内申请一定大小的空闲内存,当底层驱动接收到外部传送来的数据后,将数据拷贝到自身申请到的空闲内存中,然后将该内存的标识传送给应用模块。本发明避免了数据处理过程中的内存申请和释放过程,减少了内存管理的开销,虽然部分内存被长期占用,但是提高了系统的总体运行速率。
Description
技术领域
本发明涉及数据传输领域,具体涉及一种数据传送方法。
背景技术
目前,服务通用分组无线业务(GPRS,General Packet Radio Service)网络和外部网络之间的数据通信非常频繁,网关GPRS支持节点(GGSN,GatewayGPRS Support Node)设备是GPRS网络和外部网络之间的网关设备,它可以看成是可以访问GPRS网络内部所有移动用户的一个路由器网关。GGSN设备汇聚GPRS网络内部的用户数据再转发到外部网络或者将外部网络数据转发给GPRS内部用户,所以GGSN的数据转发能力将影响用户的上网速度。
GGSN设备需要完成用户上下文的创建、用户数据的转发、计费等功能。由于GGSN设备支持的用户数量很多,一般在几十万,甚至上百万,即使每个用户的数据流量都很小,但汇聚到GGSN设备上后数据流量也会很大,因此,对于GGSN设备来说,如何提供更多的服务又尽量小的影响现在的数据转发速度是一个亟待解决的问题。
通常,GGSN设备采用网络处理器(NP,Net Processor)处理转发数据,采用通用处理器(CPU,Central Processing Unit)控制数据的转发速度。NP和通用CPU之间要经过两次数据传送:NP和通用CPU的底层驱动之间以及通用CPU的底层驱动和通用CPU的应用模块之间。实际是通过NP-网络处理器支持(NPS,Net Processor Service)-控制节点(CP,Control Point)的过程实现的,CP是通用CPU在网络中所处的位置,NPS应用在通用CPU上,同时可以访问NP。
具体步骤如下:
步骤1:NPS将NP传来的数据拷贝到NP和CP共享的接收缓冲区(Rbuf,Receive Buffer)中。该过程可看作是NP和通用CPU的底层驱动之间的数据传送过程。
NP和CP共享Rbuf即为NP和CP都可以访问Rbuf。
在数据传送过程中,NPS向虚拟操作系统(VOS,Visual Operation System)发起内存申请,VOS在其管理的内存范围内根据内存页面查找空闲内存,即在一个内存空闲链表中查找空闲内存,查找到空闲内存后进行内存块的常规检查,包括该段地址是否被破坏等,最后VOS将内存的控制信息填入申请到的内存即Rbuf前面,实际申请内存将大于用户输入的内存大小。然后VOS将内存指针返回给申请者NPS。
Rbuf在数据到来之前必须预先申请好,否则,数据将会丢失。
步骤2:NPS将数据从Rbuf拷贝到支持多个分片处理的缓冲区(Mbuf,Multipartite Buffer)。
该过程可看作是通用CPU的底层驱动和通用CPU的应用模块之间的数据传送。
数据从Rbuf发送出去后,NPS向VOS发送Rbuf内存释放请求。同样,Mbuf在数据到来之前必须预先申请好,否则,数据将会丢失。
上层模块使用了Mbuf数据后,也要释放Mbuf。
采用这种方法进行数据转发,虽然NP与通用CPU的底层驱动之间的数据传送速度很快,但是由于频繁的申请和释放内存过程导致大量的通用CPU资源消耗,使得通用CPU的底层驱动到应用模块之间的数据传送速率降低,底层驱动和应用模块之间的数据传送速率就成为系统瓶颈。
发明内容
有鉴于此,本发明的主要目的在于提供一种数据传送方法,以避免数据处理过程中的内存申请和释放过程,实现提高数据传送效率的目的。
为达到上述目的,本发明的技术方案是这样实现的:
一种数据传送方法,该方法包括:
A、根据传送的数据报的大小,通用处理器的底层驱动在底层驱动和应用模块共享的存储空间内申请空闲内存;
B、底层驱动将外部发送来的数据拷贝到自身申请的空闲内存中,并将该内存的标识传送给应用模块,应用模块接收到内存标识后,根据此标识访问对应的内存。
所述步骤A在底层驱动申请空闲内存之后,进一步包括,应用模块在底层驱动和应用模块共享的存储空间内申请空闲内存,和,
所述步骤B之后进一步包括,应用模块对内存中的数据进行处理,之后,将该内存作为应用模块自身的空闲内存。
所述步骤B之后进一步包括,应用模块将自身申请的空闲内存标识交给底层驱动,底层驱动将该应用模块的空闲内存作为自身的空闲内存。
所述步骤A之后、步骤B之前进一步包括:
A1、底层驱动对其申请的空闲内存进行分块,并将分块后的空闲内存设置为空闲内存链表进行维护,和,
步骤B所述底层驱动将外部发送来的数据拷贝到的空闲内存为自身维护的空闲内存链表的第一个内存块。
所述步骤A1之后、步骤B之前进一步包括,底层驱动记录申请到的空闲内存的总存储空间,并顺序记录各内存块的存储空间,和,
所述步骤B之后进一步包括,底层驱动从总存储空间里减去步骤B所述存储数据的内存块的存储空间,底层驱动判断剩余的总存储空间是否小于预设值,若是,底层驱动给应用模块发送一个指令,应用模块接收到该指令后将自身的空闲内存标识交给底层驱动;否则,不作处理。
所述步骤A之后、步骤B之前进一步包括,应用模块对其申请的空闲内存进行分块,并将分块后的空闲内存设置为空闲内存链表进行维护,和,
所述应用模块取出其申请的空闲内存标识为其维护的空闲内存链表的第一个内存块的标识。
步骤B所述内存的标识为内存的指针或内存地址偏移。
与现有技术相比,本发明所提供的方法通过通用CPU的底层驱动在底层驱动和应用模块共享的存储空间内预先申请一定大小的空闲内存,底层驱动将外部发送来的数据首先拷贝到自身申请的空闲内存,然后将该存储有数据的内存的标识传送到应用模块,本发明避免了数据处理过程中的内存申请和释放过程,减少了内存管理的开销,虽然部分内存被长期占用,但是提高了系统的总体运行速率。
附图说明
图1为利用本发明实现NP和通用CPU之间数据转发的具体实施方式一的流程图;
图2为利用本发明实现通用CPU的底层驱动和应用模块之间数据传送的具体实施方式一的过程示意图;
图3为利用本发明实现NP和通用CPU之间数据转发的具体实施方式二的流程图。
具体实施方式
本发明的核心思想是:根据传送的数据报大小,通用CPU的底层驱动在底层驱动和应用模块共享的存储空间内申请一定大小的空闲内存;当底层驱动接收到外部传送来的数据后,将数据拷贝到自身申请到的空闲内存,然后将该内存的标识传送给应用模块。
在实际应用过程中,为了避免在底层驱动的空闲内存全部用完之后,外部传送来的数据因没有内存存储,从而导致数据传送失败情况的发生,因此,应用模块也可以预先在底层驱动和应用模块共享的存储空间内申请一定大小的内存,并且在每一次接收到底层驱动传送的数据后,或者每隔一段时间,或者在底层驱动的空闲内存就要用完时,将自身的空闲内存标识传送给底层驱动,底层驱动接收到这些空闲内存标识后,将与标识对应的空闲内存作为自身的空闲内存。
内存标识可以是表示内存位置的指针、地址偏移等,应用模块接收到底层驱动传送来的内存标识后,可根据此标识访问到对应的内存,从而对内存中的数据进行处理。
下面结合附图及具体实施方式一和具体实施方式二对本发明再作进一步详细的说明。
图1为利用本发明实现NP和通用CPU之间数据转发的具体实施方式一的流程图,如图1所示,其具体步骤如下:
步骤101:通用CPU的底层驱动和应用模块分别在他们共享的存储空间中预先申请一定大小的内存并对该内存进行分块,分块后的每块内存称为内存块,并将申请到的分块后的内存做成空闲内存链表进行维护。
由于NP和通用CPU之间的数据报交换大小一般在3096字节以内,所以可以将底层驱动和应用模块申请到的内存分为大小至少为3096字节的内存块,当然,也可以根据实际数据报传送的大小将内存块定为其他大小。
在这里,底层驱动和应用模块各自申请到的内存大小可不一样,他们对各自的内存分块后每个内存块的大小也可不相同。
步骤102:NP将数据发送给通用CPU的底层驱动。
步骤103:底层驱动从其空闲内存链表中取出第一个内存块D1,并将数据拷贝到D1中。
步骤104:底层驱动将D1的指针传送给应用模块。
步骤105:应用模块从其空闲内存链表中取出第一个内存块S1,将S1的指针交给底层驱动,底层驱动将S1作为自身维护的空闲内存链表尾。
S1的大小可与D1的大小相同,也可以不同。
在这里,底层驱动也可将S1作为自身维护的内存块的空闲内存链表头或空闲内存链表的其他位置。
另外,应用模块也可以每隔一段时间才从其自身维护的空闲内存链表中取出若干个空闲内存块的指针交给底层驱动,底层驱动接收到这些指针后,将与指针对应的内存块作为自身维护的空闲内存链表尾或空闲内存链表的其他位置。
步骤106:应用模块处理完D1中的数据后,将D1作为其维护的空闲内存链表尾。
在这里,应用模块也可将D1作为自身维护的内存块的空闲内存链表头或空闲内存链表的其他位置。
图2是利用本发明实现通用CPU的底层驱动和应用模块之间数据传送的具体实施方式一的过程示意图,图中的D1、D2、D3为底层驱动维护的空闲内存链表,S1、S2、S3为应用模块维护的空闲内存链表,图中的201与图1中的步骤103对应,图中的202、203与图1中的步骤105对应,图中的204与图1中的步骤106对应。从图2可以明显看出,数据从底层驱动传送到应用模块的过程,实际上是一个底层驱动的内存块D1和应用模块的内存块S1相互交换的过程。
图3为利用本发明实现NP和通用CPU之间数据转发的具体实施方式二的流程图,如图3所示,其具体步骤如下:
步骤301:通用CPU的底层驱动和应用模块分别在他们共享的存储空间中预先申请一定大小的内存并对该内存进行分块,分块后的每块内存称为内存块,并将申请到的分块后的内存做成空闲内存链表进行维护;同时,底层驱动记录自身申请到的空闲内存的总存储空间大小并从链表头到链表尾顺序记录每个内存块的大小。
步骤302:NP将数据发送给通用CPU的底层驱动。
步骤303:底层驱动从其空闲内存链表中取出第一个内存块D1,并将数1据拷贝到D1中。
步骤304:底层驱动将D1的指针传送给应用模块,同时,底层驱动从总存储空间中减去D1的存储空间,用得到的差值更新原来的总存储空间。
步骤305:底层驱动判断总存储空间是否小于预设值,若是,执行步骤306;否则,执行步骤307。
步骤306:底层驱动给应用模块发送一个指令,应用模块收到该指令后,从其空闲内存链表中取出若干个内存块的指针交给底层驱动,底层驱动将与指针对应的内存块作为自身维护的空闲内存链表尾。
在这里,底层驱动也可将内存块作为自身维护的内存块的空闲内存链表头或空闲内存链表的其他位置。
步骤307:应用模块处理完D1中的数据后,将D1作为自身维护的空闲内存。
在这里,应用模块可将D1作为自身维护的内存块的空闲内存链表尾、链表头或空闲内存链表的其他位置。
从以上过程可以看出,本发明方法在实现NP和通用CPU之间数据转发过程中,通过在通用CPU的底层驱动和应用模块中分别预先申请内存块构造空闲内存链表,底层驱动将外部传送来的数据拷贝到空闲内存中,然后传送到应用模块的过程,避免了内存申请、内存释放的过程,提高了底层驱动到应用模块的数据传送速率,从而达到了系统整体数据传送效率的提高。
本发明适用于任何已知大小的数据到通用CPU的传送。
以上所述仅为本发明的过程及方法实施例,并不用以限制本发明,凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (6)
1.一种数据传送方法,其特征在于,该方法包括:
A、根据传送的数据报的大小,通用处理器的底层驱动在底层驱动和应用模块共享的存储空间内申请空闲内存;
B、底层驱动将外部发送来的数据拷贝到自身申请的空闲内存中,并将该内存的标识传送给应用模块,应用模块接收到内存标识后,根据此标识访问对应的内存;
C、应用模块将自身申请的空闲内存标识交给底层驱动,底层驱动将该应用模块的空闲内存作为自身的空闲内存。
2.如权利要求1所述的方法,其特征在于,步骤A所述底层驱动在底层驱动和应用模块共享的存储空间内申请空闲内存之后,所述步骤B之前进一步包括,应用模块在底层驱动和应用模块共享的存储空间内申请空闲内存,和,
所述步骤B之后、所述步骤C之前进一步包括,应用模块对内存中的数据进行处理,之后,将该内存作为应用模块自身的空闲内存。
3.如权利要求1所述的方法,其特征在于,所述步骤A之后、步骤B之前进一步包括:
A1、底层驱动对其申请的空闲内存进行分块,并将分块后的空闲内存设置为空闲内存链表进行维护,和,
步骤B所述底层驱动将外部发送来的数据拷贝到的空闲内存为自身维护的空闲内存链表的第一个内存块。
4.如权利要求3所述的方法,其特征在于,所述步骤A1之后、步骤B之前进一步包括,底层驱动记录申请到的空闲内存的总存储空间,并顺序记录各内存块的存储空间,和,
所述步骤B之后、所述步骤C之前进一步包括,底层驱动从总存储空间里减去步骤B所述存储数据的内存块的存储空间,底层驱动判断剩余的总存储空间是否小于预设值,若是,底层驱动给应用模块发送一个指令,应用模块接收到该指令后执行步骤C;否则,应用模块不作处理。
5.如权利要求1所述的方法,其特征在于,所述步骤A之后、步骤B之前进一步包括,应用模块对其中请的空闲内存进行分块,并将分块后的空闲内存设置为空闲内存链表进行维护,和,
所述应用模块取出其申请的空闲内存标识为其维护的空闲内存链表的第一个内存块的标识。
6.如权利要求1所述的方法,其特征在于,步骤B所述内存的标识为内存的指针或内存地址偏移。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2004101031249A CN100391200C (zh) | 2004-12-31 | 2004-12-31 | 一种数据传送方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2004101031249A CN100391200C (zh) | 2004-12-31 | 2004-12-31 | 一种数据传送方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1801769A CN1801769A (zh) | 2006-07-12 |
CN100391200C true CN100391200C (zh) | 2008-05-28 |
Family
ID=36811538
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2004101031249A Expired - Fee Related CN100391200C (zh) | 2004-12-31 | 2004-12-31 | 一种数据传送方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100391200C (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102647251A (zh) * | 2012-03-26 | 2012-08-22 | 北京星网锐捷网络技术有限公司 | 数据传输方法及系统、发送端设备与接收端设备 |
CN111309258B (zh) | 2020-02-14 | 2021-10-15 | 苏州浪潮智能科技有限公司 | 一种b+树的存取方法、装置和计算机可读存储介质 |
CN112218104A (zh) * | 2020-09-03 | 2021-01-12 | 视联动力信息技术股份有限公司 | 一种数据传输方法、装置、终端设备和存储介质 |
CN113453276B (zh) * | 2021-05-18 | 2024-01-16 | 翱捷科技股份有限公司 | 一种提高lte终端上下行内存利用率的方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1347062A (zh) * | 2001-11-26 | 2002-05-01 | 北方交通大学 | 千兆ip网卡 |
US20030169759A1 (en) * | 2002-03-07 | 2003-09-11 | Mitsubishi Denki Kabushiki Kaisha | Communication device for processing data received from network |
CN1480857A (zh) * | 2003-06-05 | 2004-03-10 | 中国科学院计算技术研究所 | 双光口智能千兆以太网卡 |
-
2004
- 2004-12-31 CN CNB2004101031249A patent/CN100391200C/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1347062A (zh) * | 2001-11-26 | 2002-05-01 | 北方交通大学 | 千兆ip网卡 |
US20030169759A1 (en) * | 2002-03-07 | 2003-09-11 | Mitsubishi Denki Kabushiki Kaisha | Communication device for processing data received from network |
CN1480857A (zh) * | 2003-06-05 | 2004-03-10 | 中国科学院计算技术研究所 | 双光口智能千兆以太网卡 |
Non-Patent Citations (4)
Title |
---|
VxWorks下网卡驱动程序的开发. 高超,郝燕玲,吴润.微计算机信息(测控自动化),第20卷第9期. 2004 |
VxWorks下网卡驱动程序的开发. 高超,郝燕玲,吴润.微计算机信息(测控自动化),第20卷第9期. 2004 * |
嵌入式系统以太网驱动程序的设计方法. 全成斌,任秀丽等.小型微型计算机系统,第23卷第9期. 2002 |
嵌入式系统以太网驱动程序的设计方法. 全成斌,任秀丽等.小型微型计算机系统,第23卷第9期. 2002 * |
Also Published As
Publication number | Publication date |
---|---|
CN1801769A (zh) | 2006-07-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1698337B (zh) | 利用卸载单元处理tcp连接数据的方法 | |
CN103210619B (zh) | 用于电信网络应用的无锁和零拷贝消息传送方案 | |
CN104796337A (zh) | 一种转发报文的方法及装置 | |
CN101222428B (zh) | 用于在网络结构上发送数据包的方法、系统和硬件 | |
CN102549552B (zh) | 用于处理流感知网络节点中的数据分组的方法 | |
CN101304373B (zh) | 一种实现局域网内高效传输大块数据的方法及系统 | |
US20090083392A1 (en) | Simple, efficient rdma mechanism | |
CN102473115A (zh) | 用于高效数据处理的装置和方法 | |
CN102640471A (zh) | 多径通信的方法和装置 | |
CN100535886C (zh) | 一种节点之间的数据传输系统和装置及方法 | |
CN106598752B (zh) | 远程零拷贝方法 | |
CN103348641A (zh) | 单一调制解调器板上改进的多小区支持的方法和系统 | |
CN102473117A (zh) | 用于存储器管理和高效数据处理的装置和方法 | |
CN101257457A (zh) | 网络处理器复制报文的方法和网络处理器 | |
CN106034084A (zh) | 一种数据传输方法及装置 | |
US8194561B2 (en) | Packet relay device and method for transferring packet therein | |
CN101227388B (zh) | 操作计算机系统的方法和具有网络接口重发的计算机系统 | |
US11010165B2 (en) | Buffer allocation with memory-based configuration | |
CN102375789B (zh) | 一种通用网卡非缓存的零拷贝方法及零拷贝系统 | |
KR20070078347A (ko) | Ppp 멀티링크를 지원하는 시스템에서의 멀티캐스트트래픽 포워딩 장치 및 제어방법 | |
WO2022193530A1 (zh) | 一种区块链协议栈架构方法、系统、设备及存储介质 | |
CN113127139B (zh) | 一种基于数据面开发套件dpdk的内存分配方法和装置 | |
CN104572498A (zh) | 报文的缓存管理方法和装置 | |
CN100391200C (zh) | 一种数据传送方法 | |
CN104102550A (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 | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20080528 Termination date: 20121231 |