CN101296157A - 多网卡协同通信方法 - Google Patents

多网卡协同通信方法 Download PDF

Info

Publication number
CN101296157A
CN101296157A CNA2007100277175A CN200710027717A CN101296157A CN 101296157 A CN101296157 A CN 101296157A CN A2007100277175 A CNA2007100277175 A CN A2007100277175A CN 200710027717 A CN200710027717 A CN 200710027717A CN 101296157 A CN101296157 A CN 101296157A
Authority
CN
China
Prior art keywords
data
file
signal lamp
resource
communication method
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.)
Pending
Application number
CNA2007100277175A
Other languages
English (en)
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.)
Beijing Normal University Zhuhai
Original Assignee
Beijing Normal University Zhuhai
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 Beijing Normal University Zhuhai filed Critical Beijing Normal University Zhuhai
Priority to CNA2007100277175A priority Critical patent/CN101296157A/zh
Publication of CN101296157A publication Critical patent/CN101296157A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Computer And Data Communications (AREA)

Abstract

本发明公开了一种多网卡协同通信方法,各网卡通信进程间通过文件映射对象来分配和访问同一个共享内存块。本发明的方法采用共享内存允许两个或多个进程共享一个给定的存储区,数据不需要来回复制,可看作是最快的一种进程间通信机制。共享内存是通过直接操作内存映射文件来进行的,而内存映射文件又是进行单机数据共享的最低层机制,而命名管道、基于消息的通信机制等几种数据交换方式在低层都是通过内存映射文件来进行的。因此使用共享内存可以以较小的开销获取较高的性能,是进行大数据量数据快速交换的最佳方案。这个方法可以实现所谓的“零拷贝”。

Description

多网卡协同通信方法
技术领域
本发明涉及网络通信和网络测量技术,尤其涉及一种多网卡协同通信方法。
背景技术
目前在网络通信和网络测量技术中,要测量多个网段的流量和性能数据,可每个网段都放置一台监测主机(或称探针),对于监测网段比较分散的情况是可以的。如果是在中心机房,已经将各网段的流量汇聚在一起,就可以通过一台主机安装多块网卡监测不同的网段。而多台主机之间的互联通过交换机、集线器或者路由器这样的网络连接设备。如果需要一台主机同时监测多各不同的局域网,或者多台分立主机通过一台多网卡的主机互联,就需要在一台主机上安装多个网卡,然后通过该主机实现对各不同局域网的监测,或者通过该主机实现其他主机之间的通信。
如果要求一台主机上同时执行多个指定任务,比如要同时对多个网段进行流量采集与统计分析,然后把这些分析结果发送到另外指定的服务器上。要实现同一台主机上不同网卡之间的通信,通常采用的方法有两种:(1)基于TCP/IP协议的SOCKET机制;(2)命名管道技术。
对于第一种方法,基于TCP/IP协议的SOCKET机制下,每一个网卡收到一个数据包即通过TCP/IP协议栈操作产生一次系统调用,系统调用次数多,十分浪费系统的资源。
对于第二种方法,管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是单独构成一种文件系统,并且只存在于内存中。对管道的读写相当于对文件的读写,但是管道是半双工的,数据只能向一个方向流动。如果需要进行双向通信,则需要建立两个管道。命名管道提供了一个路径名与之关联,并以FIFO(First In First Out先进先出)的存储形式保存在当前文件系统中。这样,即使与FIFO创建进程不存在亲缘关系的进程,只要可以访问该路径,就能彼此通过FIFO相互通信(即在能访问该路径的进程和FIFO创建进程之间)。由于FIFO严格遵循先进先出,对管道及FIFO的读总是从开始处返回数据,对它们的写则把数据添加到末尾。
发明内容
针对现有技术的缺点,本发明的目的是提供一种多网卡协同通信方法,解决多网卡通信进程间大数据量数据交换缓慢、资源浪费的问题。
为了实现上述目的,本发明的技术方案为:一种多网卡协同通信方法,各网卡通信进程间通过文件映射对象来分配和访问同一个共享内存块。
所述通信进程包括发送进程和接收进程,由发送进程负责向接收进程发送数据,文件映射对象由发送进程或接收进程创建和关闭,并且指定一个唯一的名字供接收进程使用,接收进程直接通过这个唯一指定的名字打开此文件映射对象,并完成对数据的接收。
所述文件映射对象的创建和关闭包括如下步骤:
(1)通过操作系统内部函数创建一个内存映射文件对象;
(2)创建成功则通过文件映像函数将此文件映射对象的视图映射进地址空间,同时得到此映射视图的首址;
(3)如果创建不成功,则返回错误码;
(4)通知接收进程内存文件映射对象的视图已经打开。
任何通信进程都可以查看内存映射文件对象是否已经创建,然后再对其进行操作。
数据的发送和接收包括如下步骤:
(1)先判断共享内存中数据的新旧,如果数据是新的,说明数据还没有被取走过,这时就休眠返回;如果数据是旧的,将数据从发送进程写到共享内存中,创建一个新的进程,专门负责取走数据,该进程不断检查共享内存中是否有新数据可取,如果有新数据,则及时从共享内存中取走数据;
(2)当数据传输结束,即将退出程序时,需要将映射进来的内存文件映射对象视图卸载和资源的释放等处理。
它还在内存中设定一个信号灯标志,通信进程可以根据该信号灯标志判定是否能够访问某些共享资源,同时可根据要求允许某些进程修改该信号灯标志。
对所述信号灯标志的处理过程包括:
(1)网卡进程在需要进行通信的时候,首先查看信号灯标志是否创建。如果没有创建的话,即创建一个信号灯标志,并对其进行初始化并赋初值,该初值代表可申请资源的数量。
(2)每个信号灯标志都有一个值以用来表示当前该信号灯标志所代表的共享资源可用数量,如果一个网卡通信进程接收另一个网卡的发送数据,就要向其申请共享资源,那么就从其信号灯值中减去要申请的数目,如果当前没有足够的可用资源,进程睡眠等待或立即返回,其他网卡通信进程根据数据传输要求,也可对信号灯值进行增加和减小。
对信号灯值进行增加和减小的过程为:首先查看可申请资源的数量,如果资源的数量大于零,即1时,程序先把资源值减1,再对共享内存进行操作,操作完了就要释放资源,也就是把资源值加1,如果查看可申请资料的数量小于或等于零的话,说明共享内存在被其他进程所操作,这时候进程睡眠等待。
与现有技术相比,本发明的方法采用共享内存允许两个或多个进程共享一个给定的存储区,数据不需要来回复制,可看作是最快的一种进程间通信机制。共享内存是通过直接操作内存映射文件来进行的,而内存映射文件又是进行单机数据共享的最低层机制,而命名管道、基于消息的通信机制等几种数据交换方式在低层都是通过内存映射文件来进行的。因此使用共享内存可以以较小的开销获取较高的性能,是进行大数据量数据快速交换的最佳方案。这个方法可以实现所谓的“零拷贝”。
附图说明
图1是本发明的多网卡协同通信方法应用环境示意图。
图2是网卡进程的工作流程示意图。
具体实施方式
请参阅图1,本发明的多网卡协同通信方法应用于于一台通用计算机或嵌入式系统。在计算机主板上或嵌入式系统专用板卡上安装多块网卡(数量的限制受制于主板或嵌入式系统可扩展口的数量)。多块网卡根据实际需求可同时接入到不同的被监测网段或需要连通的计算机系统。
根据本发明的多网卡协同通信方法,在Windows或Linux操作系统下,任何一个进程不允许读取、写入或是修改另一个进程的数据(包括变量、对象和内存分配等),但是在某个进程内创建的文件映射对象的视图却能够为多个其他进程所映射,这些进程共享的是物理存储器的同一个页面。任何想要访问该数据的进程都必须在本进程的地址空间新增一块内存区域,用来映射存放共享数据的物理内存页面。因此,当一个进程将数据写入此共享文件映射对象的视图时,其他进程可以立即获取数据变更情况。为了进一步提高数据交换的速度,采用了由系统页文件支持的内存映射文件而直接在内存区域使用,显然这种共享内存的方式是完全可以满足在多网卡通信进程间进行大数据量数据快速传输任务要求。
下面给出在两个相互独立的网卡通信进程间通过文件映射对象来分配和访问同一个共享内存块的设计方法。多个网卡通信的实现机制类同。
由发送进程负责向接收进程发送数据,文件映射对象由发送进程创建和关闭,并且指定一个唯一的名字供接收进程使用。接收进程直接通过这个唯一指定的名字打开此文件映射对象,并完成对数据的接收。另外,接收进程也可以创建文件映射对象。
流程如下:
1.通过操作系统内部函数创建一个内存映射文件对象。
2.创建成功则通过文件映像函数将此文件映射对象的视图映射进地址空间,同时得到此映射视图的首址。
3.如果创建不成功,则返回错误码。
4.通知接收进程内存文件映射对象的视图已经打开。(注:任何进程都可以查看内存映射文件对象是否已经创建,然后再对其进行操作)
5.数据传送。即将数据从发送进程写到共享内存中。创建一个新的进程,专门负责取走数据。该进程不断检查共享内存中是否有数据可取,如果有数据,则及时从共享内存中取走数据。
6.共享内存释放。当数据传输结束,即将退出程序时,需要将映射进来的内存文件映射对象视图卸载和资源的释放等处理。
在多个网卡同时通过内存共享方式通信时,涉及到共享资源访问机制的问题,所以还需要控制进程间的竞争问题。
请参阅图2,本发明的方法还进一步提供了对进程间共享资源访问控制机制,其在内存中设定一个信号灯标志,进程可以根据该标志判定是否能够访问某些共享资源,同时,可根据要求,允许某些进程可以修改该标志。信号灯强调共享资源,只要共享资源可用,其他进程同样可以修改信号灯的值。对信号灯的操作流程是:
1、创建信号灯。网卡进程在需要进行通信的时候,首先查看信号灯是否创建。如果没有创建的话,即创建一个信号灯,并对其进行初始化。初始化的重要工作即赋初值,这个初值其实就是可申请资源的数量,程序中这个值就是1。
2、信号灯值操作。每个信号灯都有一个值,可以用来表示当前该信号灯代表的共享资源可用数量。如果一个网卡通信进程接收另一个网卡的发送数据,就要向其申请共享资源,那么就从其信号灯值中减去要申请的数目,如果当前没有足够的可用资源,进程可以睡眠等待,也可以立即返回。其他网卡通信进程根据数据传输要求,也可对信号灯值进行增加和减小。在本技术实现中,首先查看可申请资源的数量,如果资源的数量大于零,即1时,程序先把资源值减1,再对共享内存进行操作,操作完了就要释放资源,也就是把资源值加1。如果查看可申请资料的数量小于或等于零的话,说明共享内存在被其他进程所操作,这时候进程睡眠等待。
经实际测试,使用共享内存在处理多网卡通信进程间大数据量数据的快速交换时表现出了良好的性能,在数据可靠性等方面要远远高于基于消息和命名管道的实现方式,达到了很好的效果。

Claims (8)

1、一种多网卡协同通信方法,其特征在于,各网卡通信进程间通过文件映射对象来分配和访问同一个共享内存块。
2、如权利要求1所述的多网卡协同通信方法,其特征在于,所述通信进程包括发送进程和接收进程,由发送进程负责向接收进程发送数据,文件映射对象由发送进程或接收进程创建和关闭,并且指定一个唯一的名字供接收进程使用,接收进程直接通过这个唯一指定的名字打开此文件映射对象,并完成对数据的接收。
3、如权利要求2所述的多网卡协同通信方法,其特征在于,所述文件映射对象的创建和关闭包括如下步骤:
(1)通过操作系统内部函数创建一个内存映射文件对象;
(2)创建成功则通过文件映像函数将此文件映射对象的视图映射进地址空间,同时得到此映射视图的首址;
(3)如果创建不成功,则返回错误码;
(4)通知接收进程内存文件映射对象的视图已经打开。
4、如权利要求3所述的多网卡协同通信方法,其特征在于,任何通信进程都可以查看内存映射文件对象是否已经创建,然后再对其进行操作。
5、如权利要求2所述的多网卡协同通信方法,其特征在于,数据的发送和接收包括如下步骤:
(1)先判断共享内存中数据的新旧,如果数据是新的,说明数据还没有被取走过,这时就休眠返回;如果数据是旧的,将数据从发送进程写到共享内存中,创建一个新的进程,专门负责取走数据,该进程不断检查共享内存中是否有新数据可取,如果有新数据,则及时从共享内存中取走数据;
(2)当数据传输结束,即将退出程序时,需要将映射进来的内存文件映射对象视图卸载和资源的释放等处理。
6、如权利要求1所述的多网卡协同通信方法,其特征在于,它还在内存中设定一个信号灯标志,通信进程可以根据该信号灯标志判定是否能够访问某些共享资源,同时可根据要求允许某些进程修改该信号灯标志。
7、如权利要求6所述的多网卡协同通信方法,其特征在于,对所述信号灯标志的处理过程包括:
(1)网卡进程在需要进行通信的时候,首先查看信号灯标志是否创建。如果没有创建的话,即创建一个信号灯标志,并对其进行初始化并赋初值,该初值代表可申请资源的数量。
(2)每个信号灯标志都有一个值以用来表示当前该信号灯标志所代表的共享资源可用数量,如果一个网卡通信进程接收另一个网卡的发送数据,就要向其申请共享资源,那么就从其信号灯值中减去要申请的数目,如果当前没有足够的可用资源,进程睡眠等待或立即返回,其他网卡通信进程根据数据传输要求,也可对信号灯值进行增加和减小。
8、如权利要求7所述的多网卡协同通信方法,其特征在于,对信号灯值进行增加和减小的过程为:首先查看可申请资源的数量,如果资源的数量大于零,即1时,程序先把资源值减1,再对共享内存进行操作,操作完了就要释放资源,也就是把资源值加1,如果查看可申请资料的数量小于或等于零的话,说明共享内存在被其他进程所操作,这时候进程睡眠等待。
CNA2007100277175A 2007-04-26 2007-04-26 多网卡协同通信方法 Pending CN101296157A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNA2007100277175A CN101296157A (zh) 2007-04-26 2007-04-26 多网卡协同通信方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNA2007100277175A CN101296157A (zh) 2007-04-26 2007-04-26 多网卡协同通信方法

Publications (1)

Publication Number Publication Date
CN101296157A true CN101296157A (zh) 2008-10-29

Family

ID=40066182

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA2007100277175A Pending CN101296157A (zh) 2007-04-26 2007-04-26 多网卡协同通信方法

Country Status (1)

Country Link
CN (1) CN101296157A (zh)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102693397A (zh) * 2011-03-23 2012-09-26 腾讯科技(深圳)有限公司 一种扫描文件的方法和装置
CN104063375A (zh) * 2013-03-18 2014-09-24 深圳市腾讯计算机系统有限公司 管道通讯的方法和装置
WO2014183556A1 (zh) * 2013-05-17 2014-11-20 华为终端有限公司 应用程序的处理方法和装置
CN105450709A (zh) * 2014-09-01 2016-03-30 杭州海康威视系统技术有限公司 一种视频云存储系统中的数据热替换方法和系统
CN106708825A (zh) * 2015-07-29 2017-05-24 腾讯科技(深圳)有限公司 一种数据文件处理方法及系统
US10084647B2 (en) 2013-10-23 2018-09-25 Hewlett Packard Enterprise Development Lp Data forwarding to server via virtual network card or to external network via network interface, based on fusion descriptor
US10313962B2 (en) 2013-09-26 2019-06-04 Huawei Technologies Co., Ltd. Data packet processing method, network traffic management method, apparatus, and system
CN110086571A (zh) * 2019-04-10 2019-08-02 广州华多网络科技有限公司 一种数据发送及接收的方法、装置及数据处理系统
CN112241329A (zh) * 2020-09-28 2021-01-19 深圳市商汤科技有限公司 识别引擎的监控方法、装置、设备及存储介质
CN112269655A (zh) * 2020-10-15 2021-01-26 北京百度网讯科技有限公司 内存映射文件清理方法、装置、电子设备及存储介质
US11119931B1 (en) * 2019-09-18 2021-09-14 Facebook Technologies, Llc Data pipeline for microkernel operating system

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102693397A (zh) * 2011-03-23 2012-09-26 腾讯科技(深圳)有限公司 一种扫描文件的方法和装置
CN104063375A (zh) * 2013-03-18 2014-09-24 深圳市腾讯计算机系统有限公司 管道通讯的方法和装置
WO2014183556A1 (zh) * 2013-05-17 2014-11-20 华为终端有限公司 应用程序的处理方法和装置
US11576114B2 (en) 2013-09-26 2023-02-07 Huawei Technologies Co., Ltd. Data packet processing method, network traffic management method, apparatus, and system
US10313962B2 (en) 2013-09-26 2019-06-04 Huawei Technologies Co., Ltd. Data packet processing method, network traffic management method, apparatus, and system
US10084647B2 (en) 2013-10-23 2018-09-25 Hewlett Packard Enterprise Development Lp Data forwarding to server via virtual network card or to external network via network interface, based on fusion descriptor
CN105450709A (zh) * 2014-09-01 2016-03-30 杭州海康威视系统技术有限公司 一种视频云存储系统中的数据热替换方法和系统
CN105450709B (zh) * 2014-09-01 2019-07-19 杭州海康威视系统技术有限公司 一种视频云存储系统中的数据热替换方法和系统
CN106708825A (zh) * 2015-07-29 2017-05-24 腾讯科技(深圳)有限公司 一种数据文件处理方法及系统
CN106708825B (zh) * 2015-07-29 2019-09-27 腾讯科技(深圳)有限公司 一种数据文件处理方法及系统
CN110086571A (zh) * 2019-04-10 2019-08-02 广州华多网络科技有限公司 一种数据发送及接收的方法、装置及数据处理系统
US11119931B1 (en) * 2019-09-18 2021-09-14 Facebook Technologies, Llc Data pipeline for microkernel operating system
CN112241329B (zh) * 2020-09-28 2021-08-24 深圳市商汤科技有限公司 识别引擎的监控方法、装置、设备及存储介质
CN112241329A (zh) * 2020-09-28 2021-01-19 深圳市商汤科技有限公司 识别引擎的监控方法、装置、设备及存储介质
CN112269655A (zh) * 2020-10-15 2021-01-26 北京百度网讯科技有限公司 内存映射文件清理方法、装置、电子设备及存储介质
CN112269655B (zh) * 2020-10-15 2023-01-13 北京百度网讯科技有限公司 内存映射文件清理方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
CN101296157A (zh) 多网卡协同通信方法
TWI770358B (zh) 主機系統及其方法和加速模組
US20230367711A1 (en) Systems and methods for scalable and coherent memory devices
US8706837B2 (en) System and method for managing switch and information handling system SAS protocol communication
US7664909B2 (en) Method and apparatus for a shared I/O serial ATA controller
US9092426B1 (en) Zero-copy direct memory access (DMA) network-attached storage (NAS) file system block writing
US20190370043A1 (en) Cooperative memory management
CN106104500B (zh) 存储数据的方法和设备
CN100462947C (zh) 用于实现卸载发起方功能的方法和系统
CN106598480B (zh) 具有接口控制机制的电子系统及其操作方法
CN103051687B (zh) 一种将应用业务部署到云存储虚拟机的系统及方法
EP3382557B1 (en) Method and apparatus for persistently caching storage data in a page cache
US20080126509A1 (en) Rdma qp simplex switchless connection
CN103294610B (zh) 可重复使用的内容可寻址存储
US20130097339A1 (en) Communication with input/output system devices
US10620841B2 (en) Transfer of object memory references in a data storage device
CN105653396B (zh) 备份系统及其备份方法
CN109460183B (zh) 具有页位图的高效事务表
US20060206666A1 (en) System and method for remotely accessible local virtual storage
TW202101951A (zh) 輕量橋接器電路以及用於多實體功能模擬的方法及物品
CN100405295C (zh) 用于提供原地执行功能的系统和方法
CN104516687A (zh) 一种Linux块设备的Windows远程映射方法
CN113515236A (zh) 协同存储架构
CN110515540B (zh) 一种拓扑硬盘的方法及装置
US8171178B2 (en) Scaling of small computer system interface input output (SCSI I/O) referrals

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C12 Rejection of a patent application after its publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20081029