CN101877666B - 基于零拷贝方式的多应用程序报文接收方法和装置 - Google Patents

基于零拷贝方式的多应用程序报文接收方法和装置 Download PDF

Info

Publication number
CN101877666B
CN101877666B CN2009102380095A CN200910238009A CN101877666B CN 101877666 B CN101877666 B CN 101877666B CN 2009102380095 A CN2009102380095 A CN 2009102380095A CN 200910238009 A CN200910238009 A CN 200910238009A CN 101877666 B CN101877666 B CN 101877666B
Authority
CN
China
Prior art keywords
buffering area
pointer register
area formation
application program
message
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.)
Active
Application number
CN2009102380095A
Other languages
English (en)
Other versions
CN101877666A (zh
Inventor
邵宗有
聂华
历军
李永成
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Dawning Information Industry Beijing Co Ltd
Dawning Information Industry Co Ltd
Original Assignee
Dawning Information Industry Beijing Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Dawning Information Industry Beijing Co Ltd filed Critical Dawning Information Industry Beijing Co Ltd
Priority to CN2009102380095A priority Critical patent/CN101877666B/zh
Publication of CN101877666A publication Critical patent/CN101877666A/zh
Application granted granted Critical
Publication of CN101877666B publication Critical patent/CN101877666B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Computer And Data Communications (AREA)

Abstract

本发明提供一种基于零拷贝方式的多应用程序报文接收方法和装置,其中接收方法包括以下步骤:在网卡驱动程序中申请连续内存空间作为报文接收的缓冲区队列;在网卡相关寄存器中设置一个缓冲区队列写指针寄存器和多个缓冲区队列读指针寄存器,每个缓冲区队列读指针寄存器对应一个应用程序;网卡接收报文,如果缓冲区队列未存储满则将报文存储在缓冲区队列,同时更新写指针寄存器;以及每个应用程序分别判断是否有要接收的报文存储在缓冲区队列中,如果有,则将报文从缓冲区队列中取走,同时网卡驱动程序更新应用程序对应的缓冲区队列读指针寄存器。本发明能够基于零拷贝方式,实现多个应用程序同时进行报文接收,明显降低了CPU的占有率。

Description

基于零拷贝方式的多应用程序报文接收方法和装置
技术领域
本发明涉及数据报文接收领域,尤其涉及一种基于零拷贝方式的多应用程序报文接收方法和装置。
背景技术
零拷贝(zero-copy)是指在某节点的网络报文收发过程中不会出现任何内存间的拷贝,发送时数据包由应用程序的用户缓冲区直接经过网络接口到达外部网络。现有的基于零拷贝方式的报文接收方法都是针对一个应用程序,如中国专利文献CN101150486A。该专利文献公开了一种零拷贝缓冲区队列网络数据接收的管理方法,包括如下操作步骤:A.在用户空间分配连续的内存作为报文的DMA缓冲区;B.在内核驱动中建立缓冲区的控制句柄;C.应用程序通过接口库映射控制句柄,实现对缓冲区的操作;D.接收报文时,驱动把满缓冲区的物理地址写入网卡,应用从满缓冲区队列取出一个填充了报文的缓冲区,发送报文内容后把缓冲区放入空缓冲区队列。该现有技术的问题是,不能支持多个应用程序接收数据报文。
发明内容
针对现有技术不能基于零拷贝方式进行多应用程序报文接收的问题,本发明的目的是提供一种能够基于零拷贝方式进行多应用程序报文接收的方法和装置。
为实现上述目的,根据本发明的一个方面,提供了一种基于零拷贝方式的多应用程序报文接收方法,包括下列步骤:在网卡驱动程序中申请连续内存空间作为报文接收的缓冲区队列;在网卡相关寄存器中设置一个缓冲区队列写指针寄存器和多个缓冲区队列读指针寄存器,每个缓冲区队列读指针寄存器对应一个应用程序;网卡接收报文并判断缓冲区队列是否已存储满,如果缓冲区队列未存储满则将报文存储在缓冲区队列,同时更新写指针寄存器;以及每个应用程序分别判断是否有要接收的报文存储在缓冲区队列中,如果有,则将报文从缓冲区队列中取走,同时网卡驱动程序更新应用程序对应的缓冲区队列读指针寄存器。
连续内存空间的首地址转换成物理地址存储到网卡相关寄存器,连续内存空间的大小也存储到网卡相关寄存器。
判断缓冲区队列是否已存储满是通过将写指针寄存器值与多个读指针寄存器值进行比较。
每个应用程序分别判断是否有要接收的报文存储在缓冲区队列是通过将应用程序对应的读指针寄存器值与写指针寄存器值进行比较。
连续内存空间的大小根据计算机的内存大小确定。
相应地,本发明提供一种基于零拷贝方式的多应用程序报文接收装置,包括:申请模块,用于在网卡驱动程序中申请连续内存空间作为报文接收的缓冲区队列;网卡相关寄存器模块,包括一个缓冲区队列写指针寄存器和多个缓冲区队列读指针寄存器,每个缓冲区队列读指针寄存器对应一个应用程序;报文存储模块,用于接收报文,并判断缓冲区队列是否已存储满,如果缓冲区队列未存储满则将报文存储在缓冲区队列,同时更新写指针寄存器;以及报文取走模块,用于判断每一个应用程序是否有要接收的报文存储在缓冲区队列,如果有,则将报文从缓冲区队列中取走,同时更新应用程序对应的读指针寄存器。
网卡相关寄存器模块还用于存储连续内存空间的转换成物理地址的首地址和连续内存空间的大小。
在报文存储模块中,判断缓冲区队列是否已存储满是通过将写指针寄存器值与多个读指针寄存器值进行比较。
在报文取走模块中,对每一个应用程序分别判断是否有要接收的报文存储在缓冲区队列是通过将应用程序对应的读指针寄存器值与写指针寄存器值进行比较。
在申请模块中,连续内存空间的大小根据计算机的内存大小确定。
借助本发明上述至少一个技术方案,通过网卡驱动程序和网卡共同维护报文缓冲区队列的信息,实现多个应用程序通过零拷贝方式接收数据报文,不需要进行同步、互斥操作,明显降低CPU的占有率。
附图说明
图1是本发明的基于零拷贝方式的多应用程序报文接收方法的流程图;
图2是本发明的基于零拷贝方式的多应用程序报文接收装置的结构示意图。
具体实施方式
参见图1所示,本实施例的一种基于零拷贝方式的多应用程序报文接收方法,包括下列步骤:
S110,在网卡驱动程序中申请连续内存空间作为报文接收的缓冲区队列;S120,在网卡相关寄存器中设置一个缓冲区队列写指针寄存器和多个缓冲区队列读指针寄存器,每个缓冲区队列读指针寄存器对应一个应用程序;S130,网卡接收报文并判断缓冲区队列是否已存储满,如果缓冲区队列未存储满则将报文存储在缓冲区队列,同时更新写指针寄存器;以及S140,每个应用程序分别判断是否有要接收的报文存储在缓冲区队列中,如果有,则将报文从缓冲区队列中取走,同时网卡驱动程序更新应用程序对应的缓冲区队列读指针寄存器。
在步骤S110中,申请的连续内存空间的大小需要根据计算机内存的大小确定,连续内存空间的大小可以是32MB、64MB或者其他不大于计算机内存大小的值。
在步骤S120中,网卡相关寄存器是64位大小的接收报文缓冲区首地址配置寄存器。网卡相关寄存器中包括一个缓冲区队列写指针寄存器和多个缓冲区队列读指针寄存器。缓冲区队列读指针寄存器有多个,是为了支持多个应用程序使用零拷贝方式接收数据报文,每个应用程序对应一个缓冲区队列读指针寄存器。
在步骤S130中,判断缓冲区队列是否已存储满的方法是将缓冲区队列写指针寄存器值与多个缓冲区队列读指针寄存器值进行比较,如果写指针寄存器数值加一不等于读指针寄存器数值,就说明缓冲区队列未存储满,网卡将接收到的报文存储在缓冲区队列中写指针寄存器数值所在的偏移地址上,同时更新写指针寄存器,所说的更新写指针寄存器是指将写指针寄存器加上报文的总长度后写到写指针寄存器。如果缓冲区队列已存储满,一种处理方法是网卡丢弃刚接收到的数据报文;另一种处理方法是让处理慢的应用程序放弃对已接收但未处理的数据报文的处理,将这些数据报文全部丢弃,以留出空间接收新的数据报文;这两种处理方法可以在加载网卡驱动程序时通过确定参数加以选择。
在步骤S140中,每一个应用程序分别判断是否有其要接收的报文存储在缓冲区队列是通过将其对应的读指针寄存器值与写指针寄存器值进行比较。如果读指针寄存器数值不等于写指针寄存器数值,就说明缓冲区队列存在该应用程序要接收的报文,将缓冲区队列中读指针寄存器所在的偏移地址作为报文头返回给该应用程序,该应用程序从缓冲区队列中取走报文,同时更新读指针寄存器,所说的更新读指针寄存器是指将读指针寄存器数值加上报文总长度后写到读指针寄存器。当所有的应用程序都从报文缓冲区队列中取走报文后,尾指针进行移动。
相应地,本发明的一种基于零拷贝方式的多应用程序报文接收装置,包括:申请模块210,用于在网卡驱动程序中申请连续内存空间作为报文接收的缓冲区队列;网卡相关寄存器模块220,包括一个缓冲区队列写指针寄存器和多个缓冲区队列读指针寄存器,每个缓冲区队列读指针寄存器对应一个应用程序;报文存储模块230,用于接收报文,并判断缓冲区队列是否已存储满,如果缓冲区队列未存储满则将报文存储在缓冲区队列,同时更新写指针寄存器;以及报文取走模块240,用于判断每一个应用程序是否有要接收的报文存储在缓冲区队列,如果有,则将报文从缓冲区队列中取走,同时更新应用程序对应的读指针寄存器。
在申请模块中210中,连续内存空间的大小根据计算机的内存大小确定,例如连续内存空间的大小可以是32MB、64MB或者其他不大于计算机内存大小的值。
网卡相关寄存器模块220还用于存储连续内存空间的转换成物理地址的首地址和连续内存空间的大小。
在报文存储模块230中,判断缓冲区队列是否已存储满是通过将写指针寄存器值与多个读指针寄存器值进行比较。如果写指针寄存器数值加一不等于读指针寄存器数值,就说明缓冲区队列未存储满,网卡将接收到的报文存储在缓冲区队列中写指针寄存器数值所在的偏移地址上,同时更新写指针寄存器,所说的更新写指针寄存器是指将写指针寄存器加上报文的总长度后写到写指针寄存器。
在报文取走模块240中,判断每一个应用程序是否有要接收的报文存储在缓冲区队列是通过将应用程序对应的读指针寄存器值与写指针寄存器值进行比较。如果读指针寄存器数值不等于写指针寄存器数值,就说明缓冲区队列存在该应用程序要接收的报文,将缓冲区队列中读指针寄存器所在的偏移地址作为报文头返回给该应用程序,该应用程序从缓冲区队列中取走报文,同时更新读指针寄存器,所说的更新读指针寄存器是指将读指针寄存器数值加上报文总长度后写到读指针寄存器。
在网卡相关寄存器模块220和报文取走模块240中,对多个应用程序使用程序号进行区分。
本发明通过网卡驱动程序和网卡共同维护报文缓冲区队列的信息,实现多个应用程序通过零拷贝方式接收数据报文,不需要进行同步、互斥操作,明显降低了CPU的占有率。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (6)

1.一种基于零拷贝方式的多应用程序报文接收方法,其特征在于,包括下列步骤:
在网卡驱动程序中申请连续内存空间作为报文接收的缓冲区队列;
在网卡相关寄存器中设置一个缓冲区队列写指针寄存器和多个缓冲区队列读指针寄存器,每个所述缓冲区队列读指针寄存器对应一个应用程序;
网卡接收报文并判断所述缓冲区队列是否已存储满,如果所述缓冲区队列未存储满则将报文存储在所述缓冲区队列,同时更新所述写指针寄存器;以及
每个所述应用程序分别判断是否有要接收的报文存储在所述缓冲区队列中,如果有,则将报文从所述缓冲区队列中取走,同时所述网卡驱动程序更新所述应用程序对应的所述缓冲区队列读指针寄存器,
其中,判断所述缓冲区队列是否已存储满是通过将所述写指针寄存器值与所述读指针寄存器值进行比较,如果所述写指针寄存器值加一不等于所述读指针寄存器值,则判断所述缓冲区队列未存储满,
其中,每个所述应用程序分别判断是否有要接收的报文存储在所述缓冲区队列是通过将所述应用程序对应的所述读指针寄存器值与所述写指针寄存器值进行比较,如果所述读指针寄存器值不等于所述写指针寄存器值,则判断所述缓冲区队列存在所述应用程序要接收的报文。
2.根据权利要求1所述的接收方法,其特征在于,所述连续内存空间的首地址转换成物理地址存储到所述网卡相关寄存器,所述连续内存空间的大小也存储到所述网卡相关寄存器。
3.根据权利要求1或2所述的接收方法,其特征在于,所述连续内存空间的大小根据计算机的内存大小确定。
4.一种基于零拷贝方式的多应用程序报文接收装置,其特征在于,包括:
申请模块,用于在网卡驱动程序中申请连续内存空间作为报文接收的缓冲区队列;
网卡相关寄存器模块,包括一个缓冲区队列写指针寄存器和多个缓冲区队列读指针寄存器,每个所述缓冲区队列读指针寄存器对应一个应用程序;
报文存储模块,用于接收报文,并判断所述缓冲区队列是否已存储满,如果所述缓冲区队列未存储满则将报文存储在所述缓冲区队列,同时更新所述写指针寄存器;以及
报文取走模块,用于判断每一个应用程序是否有要接收的报文存储在所述缓冲区队列,如果有,则将报文从所述缓冲区队列中取走,同时更新所述应用程序对应的所述读指针寄存器,
其中,在所述报文存储模块中,所述判断所述缓冲区队列是否已存储满是通过将所述写指针寄存器值与多个所述读指针寄存器值进行比较,如果所述写指针寄存器值加一不等于所述读指针寄存器值,则判断所述缓冲区队列未存储满,
其中,在所述报文取走模块中,所述对每一个应用程序分别判断是否有要接收的报文存储在所述缓冲区队列是通过将所述应用程序对应的所述读指针寄存器值与所述写指针寄存器值进行比较,如果所述读指针寄存器值不等于所述写指针寄存器值,则判断所述缓冲区队列存在所述应用程序要接收的报文。
5.根据权利要求4所述的接收装置,其特征在于,所述网卡相关寄存器模块还用于存储所述连续内存空间的转换成物理地址的首地址和所述连续内存空间的大小。
6.根据权利要求4所述的接收装置,其特征在于,在所述申请模块中,所述连续内存空间的大小根据计算机的内存大小确定。
CN2009102380095A 2009-11-13 2009-11-13 基于零拷贝方式的多应用程序报文接收方法和装置 Active CN101877666B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2009102380095A CN101877666B (zh) 2009-11-13 2009-11-13 基于零拷贝方式的多应用程序报文接收方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2009102380095A CN101877666B (zh) 2009-11-13 2009-11-13 基于零拷贝方式的多应用程序报文接收方法和装置

Publications (2)

Publication Number Publication Date
CN101877666A CN101877666A (zh) 2010-11-03
CN101877666B true CN101877666B (zh) 2013-05-08

Family

ID=43020134

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2009102380095A Active CN101877666B (zh) 2009-11-13 2009-11-13 基于零拷贝方式的多应用程序报文接收方法和装置

Country Status (1)

Country Link
CN (1) CN101877666B (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102088406A (zh) * 2010-12-17 2011-06-08 天津曙光计算机产业有限公司 一种采用轮询机制的高速报文发送方法
CN102098214A (zh) * 2010-12-17 2011-06-15 天津曙光计算机产业有限公司 一种采用轮询机制的高速报文接收方法
CN103136115B (zh) * 2011-11-23 2015-08-19 英业达集团(天津)电子技术有限公司 请求访问零拷贝高速缓存的方法及系统
CN102629240B (zh) * 2012-02-13 2015-04-22 上海创远仪器技术股份有限公司 一种串口通信方法与装置
CN102750245B (zh) * 2012-05-29 2015-11-18 中国人民解放军国防科学技术大学 报文接收方法、报文接收模块、装置及系统
CN102970244B (zh) * 2012-11-23 2018-04-13 上海寰创通信科技股份有限公司 一种多cpu核间负载均衡的网络报文处理方法
CN106385379A (zh) * 2016-09-14 2017-02-08 杭州迪普科技有限公司 报文缓存方法及装置
CN113676398B (zh) * 2021-08-26 2023-11-03 深信服科技股份有限公司 一种数据恢复方法、装置、设备及可读存储介质
CN114443322A (zh) * 2022-01-20 2022-05-06 Oppo广东移动通信有限公司 核间通信方法、装置、电子设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101150486A (zh) * 2007-11-15 2008-03-26 曙光信息产业(北京)有限公司 一种零拷贝缓冲区队列网络数据接收的管理方法
CN101317364A (zh) * 2007-01-09 2008-12-03 华为技术有限公司 一种实现业务板和主控板通信的装置和方法
CN101478472A (zh) * 2008-10-21 2009-07-08 北京闪联讯通数码科技有限公司 一种Socket数据传输处理方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101317364A (zh) * 2007-01-09 2008-12-03 华为技术有限公司 一种实现业务板和主控板通信的装置和方法
CN101150486A (zh) * 2007-11-15 2008-03-26 曙光信息产业(北京)有限公司 一种零拷贝缓冲区队列网络数据接收的管理方法
CN101478472A (zh) * 2008-10-21 2009-07-08 北京闪联讯通数码科技有限公司 一种Socket数据传输处理方法及装置

Also Published As

Publication number Publication date
CN101877666A (zh) 2010-11-03

Similar Documents

Publication Publication Date Title
CN101877666B (zh) 基于零拷贝方式的多应用程序报文接收方法和装置
CN102866971B (zh) 传输数据的装置、系统及方法
EP2849076B1 (en) Dma transmission method and system
US7975120B2 (en) Dynamic allocation of message buffers
CN109558344B (zh) 一种适用于网络传输的dma传输方法及dma控制器
CN101707565B (zh) 零拷贝网络报文发送、接收方法和装置
CN101150485A (zh) 一种零拷贝缓冲区队列网络数据发送的管理方法
CN107783727B (zh) 一种内存设备的访问方法、装置和系统
CN109564502B (zh) 应用于存储设备中的访问请求的处理方法和装置
US9015380B2 (en) Exchanging message data in a distributed computer system
JP2006513493A5 (zh)
CN101303685B (zh) 可提升通用序列总线储存设备的读写数据速率的方法
CN103577119B (zh) 用于下一代固态硬盘控制器中乱序传输数据的系统和方法
CN111538694B (zh) 一种用于网络接口支持多链接和重传的数据缓存方法
US20080225858A1 (en) Data transferring apparatus and information processing system
CN110046114B (zh) 基于pcie协议的dma控制器及dma数据传输方法
US7113516B1 (en) Transmit buffer with dynamic size queues
CN112181887A (zh) 数据传输方法及装置
JP5732806B2 (ja) データ転送装置及びデータ転送方法
CN115904259B (zh) 非易失性存储器标准NVMe指令的处理方法及相关装置
CN100557584C (zh) 用于对网络和存储器进行耦合的存储器控制器和方法
US20160085683A1 (en) Data receiving device and data receiving method
CN108228104B (zh) 数据传输方法及固态硬盘控制器
CN106776393B (zh) 一种无中断的串口数据接收方法和装置
CN101576865A (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
C53 Correction of patent of invention or patent application
CB02 Change of applicant information

Address after: 100193 Beijing, Haidian District, northeast Wang West Road, building 8, No. 36

Applicant after: Dawning Information Industry (Beijing) Co.,Ltd.

Address before: 100084 No. 6 South Road, Zhongguancun Academy of Sciences, Beijing, Haidian District

Applicant before: Dawning Information Industry (Beijing) Co.,Ltd.

C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20220727

Address after: 100089 building 36, courtyard 8, Dongbeiwang West Road, Haidian District, Beijing

Patentee after: Dawning Information Industry (Beijing) Co.,Ltd.

Patentee after: DAWNING INFORMATION INDUSTRY Co.,Ltd.

Address before: 100193 No. 36 Building, No. 8 Hospital, Wangxi Road, Haidian District, Beijing

Patentee before: Dawning Information Industry (Beijing) Co.,Ltd.