CN112532585A - 一种进程间报文传输的方法、设备及介质 - Google Patents
一种进程间报文传输的方法、设备及介质 Download PDFInfo
- Publication number
- CN112532585A CN112532585A CN202011205179.6A CN202011205179A CN112532585A CN 112532585 A CN112532585 A CN 112532585A CN 202011205179 A CN202011205179 A CN 202011205179A CN 112532585 A CN112532585 A CN 112532585A
- Authority
- CN
- China
- Prior art keywords
- message
- memory space
- virtual memory
- address
- state virtual
- 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
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
- H04L69/162—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields involving adaptations of sockets based mechanisms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/30—Definitions, standards or architectural aspects of layered protocol stacks
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
Abstract
本说明书提供一种进程间报文传输的方法、设备及介质,所述方法包括:预先分配的物理内存,并将该物理内存分别映射到内核态进程和应用进程,得到两者分别对应的虚拟内存空间,在传输报文时,发送报文的进程确定需要发送的报文在其对应的虚拟内存空间中的缓存地址,并根据发送报文的进程对应的虚拟内存空间的起始地址和该缓存地址,确定报文的地址偏移量,并将该偏移量通过Socket机制,发送给接收报文的进程,接收报文的进程根据接收的偏移量,和接收报文的进程对应的虚拟内存空间的起始地址,通过其对应的虚拟内存空间,从物理内存中获取该报文。在本说明书实施例中,在报文传输过程中,减少了拷贝次数,提升了报文传输效率。
Description
技术领域
本说明书涉及计算机应用技术领域,尤其涉及一种进程间报文传输的方法、设备及介质。
背景技术
在网络设备收发与处理报文的过程中,在操作系统(一般是linux)层面上往往会运行3种进程,分别是用于收发报文的网卡驱动进程、用于对报文进行网络协议层面处理的协议栈进程以及用于对报文进行应用层面处理的应用进程。其中,网卡驱动进程与协议栈进程之间需要进行报文传输,协议栈进程与应用进程之间需要进行报文传输。
在实际应用中,网卡驱动进程与协议栈进程是基于内核态运行的,应用进程是基于用户态运行的。
然而,基于内核态运行的进程与基于用户态运行的进程通常是基于Socket机制进行报文传输的,在进行报文传输时,会涉及到对报文的多次拷贝操作,此操作需要一定的时间开销,会降低报文传输效率。
发明内容
为克服现有技术中存在的报文传输效率低的问题,本说明书提供了一种进程间报文传输的方法、设备及介质。
根据本说明书实施例的第一方面,提供一种进程间报文传输的方法,将网络设备的部分物理内存空间映射到网卡驱动进程与协议栈进程之间共享的地址空间,得到内核态虚拟内存空间,以及将所述部分物理内存空间映射到应用进程的地址空间,得到用户态虚拟内存空间;所述协议栈进程属于内核态进程,所述方法包括:
所述网卡驱动进程接收报文,并将所述报文写入所述内核态虚拟内存空间;
所述协议栈进程对所述报文处理后,基于所述报文在所述内核态虚拟内存空间中的缓存地址与所述内核态虚拟内存空间的起始地址,确定地址偏移量;
所述协议栈进程基于套接字Socket机制,将所述地址偏移量传输给所述应用进程;
所述应用进程基于所述地址偏移量与所述用户态虚拟内存空间的起始地址,确定所述报文在所述用户态虚拟内存空间中的缓存地址,并基于确定的缓存地址获取所述报文。
根据本说明书实施例的第二方面,提供一种进程间报文传输的方法,将网络设备的部分物理内存空间映射到网卡驱动进程与协议栈进程之间共享的地址空间,得到内核态虚拟内存空间,以及将所述部分物理内存空间映射到应用进程的地址空间,得到用户态虚拟内存空间;所述协议栈进程属于内核态进程,所述方法包括:
所述应用进程对报文处理完成后,将所述处理完成后的报文写入所述用户态虚拟内存空间;
所述应用进程基于所述报文在所述用户态虚拟内存空间中的缓存地址与所述用户态虚拟内存空间的起始地址,确定地址偏移量;
所述应用进程基于套接字Socket机制,将所述地址偏移量传输给所述协议栈进程;
所述协议栈程基于所述地址偏移量与所述内核态虚拟内存空间的起始地址,确定所述报文在所述内核态虚拟内存空间中的缓存地址,并基于确定的缓存地址获取所述报文并对所述报文进行处理;
在协议栈进程对所述报文处理完成后,网卡驱动进程通过所述内核态虚拟内存空间,获取并发送所述报文。
根据本说明书实施例的第三方面,提供一种网络设备,将网络设备的部分物理内存空间映射到网卡驱动进程与协议栈进程之间共享的地址空间,得到内核态虚拟内存空间,以及将所述部分物理内存空间映射到应用进程的地址空间,得到用户态虚拟内存空间;
所述网络设备在运行时:
所述网卡驱动进程接收报文,并将所述报文写入所述内核态虚拟内存空间;
所述协议栈进程对所述报文处理后,基于所述报文在所述内核态虚拟内存空间中的缓存地址与所述内核态虚拟内存空间的起始地址,确定地址偏移量;
所述协议栈进程基于套接字Socket机制,将所述地址偏移量传输给所述应用进程;
所述应用进程基于所述地址偏移量与所述用户态虚拟内存空间的起始地址,确定所述报文在所述用户态虚拟内存空间中的缓存地址,并基于确定的缓存地址获取所述报文。
根据本说明书实施例的第四方面,提供一种网络设备,将网络设备的部分物理内存空间映射到网卡驱动进程与协议栈进程之间共享的地址空间,得到内核态虚拟内存空间,以及将所述部分物理内存空间映射到应用进程的地址空间,得到用户态虚拟内存空间;
所述网络设备在运行时:
所述应用进程对报文处理完成后,将所述处理完成后的报文写入所述用户态虚拟内存空间;
所述应用进程基于所述报文在所述用户态虚拟内存空间中的缓存地址与所述用户态虚拟内存空间的起始地址,确定地址偏移量;
所述应用进程基于套接字Socket机制,将所述地址偏移量传输给所述协议栈进程;
所述协议栈程基于所述地址偏移量与所述内核态虚拟内存空间的起始地址,确定所述报文在所述内核态虚拟内存空间中的缓存地址,并基于确定的缓存地址获取所述报文并对所述报文进行处理;
在协议栈进程对所述报文处理完成后,网卡驱动进程通过所述内核态虚拟内存空间,获取并发送所述报文。
根据本说明书实施例的第五方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时,实现本说明书实施例第一或第二方面任一方面所述的进程间报文传输的方法。
本说明书实施例中,预先分配的物理内存,并将该物理内存分别映射到内核态进程和应用进程,得到两者分别对应的虚拟内存空间,在传输报文时,发送报文的进程确定需要发送的报文在其对应的虚拟内存空间中的缓存地址,并根据发送报文的进程对应的虚拟内存空间的起始地址和该缓存地址,确定报文的地址偏移量,并将该偏移量通过Socket机制,发送给接收报文的进程,接收报文的进程根据接收的偏移量,和接收报文的进程对应的虚拟内存空间的起始地址,通过其对应的虚拟内存空间,从物理内存中获取该报文。在本说明书实施例中,虽然仍是通过Socket进行通信,但是在通信过程中,减少了拷贝次数,提升了报文传输效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书一起用于解释本说明书的原理。
图1是本说明书根据一示例性实施例示出的一种进程间的报文传输方法的流程图。
图2是本说明书根据一示例性实施例示出的一种进程间的报文传输方法的应用场景图。
图3是本说明书根据一示例性实施例示出的另一种进程间的报文传输方法的流程图。
图4是本说明书根据一示例性实施例示出的另一种进程间的报文传输方法的应用场景图。
图5是本说明书实施例执行进程间的报文传输方法的程序所在网络设备的一种硬件结构图。
具体实施方式
在网络设备中,用于收发报文的网卡驱动进程,和用于对报文进行网络协议层面处理的协议栈进程一般运行在内核态,而用于对报文进行应用业务层面处理的应用进程一般运行在用户态,而为了完成接收报文,对报文进行网络协议层面的处理,对报文进行应用层面的处理,对处理完成的报文进行网络协议层封装和发送报文这一整个流程,运行在用户态的应用进程,与运行在内核态的协议栈进程之间,需要进行通信,传输报文。
在现有技术中,同一网络设备的协议栈进程和应用进程之间一般通过Socket机制进行报文传输。在网卡驱动进程接收了报文,经过协议栈进程处理后,协议栈进程通过Socket机制向应用进程传输数据的过程,一般是协议栈先将经过网络协议处理的报文拷贝至临时buffer,然后协议栈将报文的缓存于buffer的地址,通过网卡驱动进程和协议栈进程之间已经建立的Socket,将该地址传输给应用进程,应用进程再根据所接收的地址,从临时buffer中将报文拷贝到应用进程的buffer。在应用进程对报文处理完成,经协议栈处理后,通过网卡驱动进程发送的过程,一般是,应用进程获取处理完成的报文在应用进程buffer中的存储地址,并通过应用进程和协议栈进程之间已经建立的Socket,将该地址传输给协议栈进程,协议栈进程在获取该地址后,从应用进程的buffer中,将该报文拷贝至临时buffer,在协议栈进程对报文处理完成后,网卡驱动进程将该报文从临时buffer拷贝至内核态的缓存区,并将报文发送出去。
显然,在上述过程中,不论是从协议栈进程向应用进程拷贝报文,还是从应用进程向协议栈进程拷贝报文,均涉及了两次拷贝过程。而拷贝过程需要一定的时间开销,在报文较大时,这一定的时间开销将会影响网络设备内部传输和处理报文的效率。
本说明书实施例中,预先分配的物理内存,并将该物理内存分别映射到内核态进程和应用进程,得到两者分别对应的虚拟内存空间,在传输报文时,发送报文的进程确定需要发送的报文在其对应的虚拟内存空间中的缓存地址,并根据发送报文的进程对应的虚拟内存空间的起始地址和该缓存地址,确定报文的地址偏移量,并将该偏移量通过Socket机制,发送给接收报文的进程,接收报文的进程根据接收的偏移量,和接收报文的进程对应的虚拟内存空间的起始地址,通过其对应的虚拟内存空间,从物理内存中获取该报文。在本说明书实施例中,虽然仍是通过Socket进行通信,但是在通信过程中,减少了拷贝次数,提升了报文传输效率。
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
接下来对本说明书实施例进行详细说明。
如图1所示,图1是本说明书根据一示例性实施例示出的一种进程间的报文传输方法的流程图。为了实现图1所示的进程间的报文传输方法,需要预先将网络设备的部分物理内存空间映射到网卡驱动进程与协议栈进程之间共享的地址空间,得到内核态虚拟内存空间,以及将所述部分物理内存空间映射到应用进程的地址空间,得到用户态虚拟内存空间;所述协议栈进程属于内核态进程。
如图2所示,图2是本说明书根据一示例性实施例示出的一种进程间的报文传输方法的应用场景图。各个进程之间的传输关系,可以参考图2。
在网络设备中,同为内核态进程的网卡驱动进程和协议栈进程可以共享内存空间,同时,也可以共享地址空间。那么,将部分物理内存映射到网卡驱动进程和协议栈进程的共享地址空间,得到的内核态虚拟内存空间,是网卡驱动进程和协议栈进程都可以访问的虚拟内存空间。
映射的两个虚拟内存空间,它们的虚拟内存地址是不同的。虽然两个虚拟内存空间的地址不同,但是它们都指向同一个物理内存空间,所以,在一个虚拟内存空间写入或删除数据,在另一个虚拟内存空间中,也可以读取到对应的数据变化。
此外,在实现过程中,为了使得接收到的所有报文都可以直接存储于内核态虚拟内存空间中,可以在网卡初始化时,网卡驱动进程申请部分物理内存空间,并将部分物理内存空间映射到内核态的地址空间中,得到对应于内核态进程的内核态虚拟内存空间。在需要用到某个应用进程时,在该应用进程初始化时,将该部分物理内存空间映射到该应用进程的地址空间,得到用户态虚拟内存空间。
所述方法包括以下步骤:
步骤102,所述网卡驱动进程接收报文,并将所述报文写入所述内核态虚拟内存空间。
网卡驱动进程接收的报文,是外部设备向该网络设备发送的,需要该网络设备处理并转发的报文。内核态虚拟内存空间作为网卡驱动进程直接接收报文的缓存区,使得在实现该方法的时候,不用先将网卡驱动的报文从其他缓存区拷贝到内核态虚拟内存空间。将报文写入内核态虚拟内存空间,是为了在接下来的步骤中,应用进程也可以通过用户态虚拟内存空间,访问到该报文,方便应用进程读取报文。
步骤104,所述协议栈进程对所述报文处理后,基于所述报文在所述内核态虚拟内存空间中的缓存地址与所述内核态虚拟内存空间的起始地址,确定地址偏移量。
地址偏移量是将报文在内核态虚拟内存空间中的缓存地址,与内核态虚拟内存空间的起始地址相减得到的。虽然内核态虚拟内存空间和用户态虚拟内存空间是同一个物理空间映射得到的,但是两个虚拟内存空间由于映射的地址空间不同,那么同一个数据在两个虚拟内存空间中的缓存地址是不同的。如果发送方传输缓存在虚拟内存空间中的报文的虚拟缓存地址,接收方的进程由于无法读取其他进程的地址空间,将无法通过传输的地址读取到该报文,而由于两个虚拟内存空间对应于同一个物理内存空间,且是同步变化的,那么报文在两个虚拟内存空间中,相对于各自起始地址的地址偏移量是相同的,因此在传输过程中,需要确定并传输报文在虚拟内存空间中的地址偏移量。
其中,上述的计算地址偏移量的功能,是预先为Socket机制的发送函数添加第一计算功能,该计算用于将所述报文在所述内核态虚拟内存空间中的缓存地址与所述内核态虚拟内存空间的起始地址相减,得到地址偏移量。在需要向应用进程发送报文的时候,会调用该Socket机制的发送函数,计算地址偏移量,并向应用进程传输该地址偏移量。
系统在执行时,协议栈进程调用发送函数,先通过第一计算功能,获得了地址偏移量,后通过发送函数,将地址偏移量发送给了应用进程。
步骤106,所述协议栈进程基于套接字Socket机制,将所述地址偏移量传输给所述应用进程。
通过Socket机制的通信,是预先在网络子系统初始化时,建立一个用于在协议栈进程和用户态进程之间通信的Socket,并通过该预先建立的Socket,实现地址偏移量的发送。
步骤108,所述应用进程基于所述地址偏移量与所述用户态虚拟内存空间的起始地址,确定所述报文在所述用户态虚拟内存空间中的缓存地址,并基于确定的缓存地址获取所述报文。
步骤108是应用进程调用Socket机制的接收函数实现的,其中,预先为Socket机制的接收函数添加第二计算功能,用于将所述地址偏移量与所述用户态虚拟内存空间的起始地址相加,得到所述报文在所述用户态虚拟内存空间的缓存地址。
系统在执行时,应用进程先通过接收函数,获得了协议栈进程发送的地址偏移量,后调用接收函数,获得了报文在用户态虚拟内存空间的缓存地址。
进一步地,为了节省内存空间,在所述方法后,还包括以下步骤:
所述应用进程在对所述报文完成处理后,通过所述用户态虚拟内存空间释放所述报文占用的物理内存。
在处理完成后再释放报文所占用的内存空间的目的在于,在应用进程在处理过程中出现问题导致处理过程中的记录丢失时,还可以从用户态虚拟内存空间中读取到未处理的报文。
所述的释放过程是通过调用释放虚拟内存函数执行的,将该报文删除,并使得该报文原本占用的内存空间可以重新存入其他数据,在释放后,处理用户态虚拟内存空间中的内存得到了释放,内核态虚拟内存空间和物理内存空间中对应的数据都得到了释放。
与前述方法的实施例相对应,本说明书还提供了应用进程向协议栈进程传输报文的进程间的报文传输方法的实施例。
如图3所示,图3是本说明书根据一示例性实施例示出的另一种进程间的报文传输方法的流程图。为了实现如图3所示的方法,需要预先将网络设备的部分物理内存空间映射到网卡驱动进程与协议栈进程之间共享的地址空间,得到内核态虚拟内存空间,以及将所述部分物理内存空间映射到应用进程的地址空间,得到用户态虚拟内存空间;所述协议栈进程属于内核态进程。
如图4所示,图4是本说明书根据图3示出的实施例示出的一种进程间的报文传输方法的应用场景图。各个进程之间的传输关系,可以参考图4。
所述方法包括以下步骤:
步骤302,所述应用进程对报文处理完成后,将所述处理完成后的报文写入所述用户态虚拟内存空间;
步骤304,所述应用进程基于所述报文在所述用户态虚拟内存空间中的缓存地址与所述用户态虚拟内存空间的起始地址,确定地址偏移量;
步骤306,所述应用进程基于套接字Socket机制,将所述地址偏移量传输给所述协议栈进程;
步骤308,所述协议栈程基于所述地址偏移量与所述内核态虚拟内存空间的起始地址,确定所述报文在所述内核态虚拟内存空间中的缓存地址,并基于确定的缓存地址获取所述报文并对所述报文进行处理;
步骤310,在协议栈进程对所述报文处理完成后,网卡驱动进程通过所述内核态虚拟内存空间,获取并发送所述报文。
进一步地,在发送和接收过程中,需要分别调用Socket机制的发送函数和接收函数,为了计算并发送,地址偏移量,需要预先为Socket机制的发送函数添加第一计算功能,用于将所述报文在所述用户态虚拟内存空间中的缓存地址与所述用户态虚拟内存空间的起始地址相减,得到地址偏移量;预先为Socket机制的接收函数添加第二计算功能,用于将所述地址偏移量与所述内核态虚拟内存空间的起始地址相加,得到所述报文在所述内核态虚拟内存空间的缓存地址。
进一步地,为了节省内存空间,在网卡驱动进程向外发送报文后,还需要执行以下步骤:
所述网卡驱动进程在发送所述报文后,通过所述内核态虚拟内存空间释放所述报文占用的物理内存。
此外,在某些现有技术中,协议栈进程并不是在内核态运行,而是在用户态运行,在这种情况下,现有技术中,为了实现内核态进程与用户态进程的报文传输,Socket是介于网卡驱动进程和协议栈进程之间的。具体来说,现有技术中,网卡驱动进程和协议栈进程传输报文的过程中的拷贝过程如下:在网卡驱动进程接收报文,向协议栈传输的时,需要网卡驱动进程将接收的报文先从网卡驱动进程的buffer拷贝到临时buffer,再通过预先建立的Socket,向协议栈进程传输报文在临时buffer中的缓存地址,协议栈进程接收到缓存地址后,将该报文从临时buffer中拷贝到协议栈对应的buffer中,处理后通过用户态进程之间传输数据的方法(可以是管道、信号、Socket和共享内存),将该报文传输给应用进程处理;在应用进程处理完报文,传输给协议栈后,协议栈先对报文进行网络协议封装,再将该报文拷贝到临时buffer中,并将该报文在临时buffer中的缓存地址,通过预先建立的Socket,将该缓存地址发送给网卡驱动进程,网卡驱动进程通过该缓存地址,从临时buffer中将该报文拷贝到网卡驱动进程的buffer中,并通过网卡驱动进程将报文发出。
在网卡驱动进程向用户态进程传输报文时,将网络设备的部分物理内存空间映射到网卡驱动进程的地址空间,得到内核态虚拟内存空间,以及将所述部分物理内存空间映射到协议栈进程的地址空间,得到用户态虚拟内存空间;所述协议栈进程属于用户态进程,所述方法包括:
所述网卡驱动进程接收所述报文,并将所述报文写入所述内核态虚拟内存空间;
所述网卡驱动进程基于所述报文在所述内核态虚拟内存空间中的缓存地址与所述内核态虚拟内存空间的起始地址,确定地址偏移量;
所述网卡驱动进程基于Socket机制,将所述地址偏移量传输给所述协议栈进程;
所述协议栈进程基于所述地址偏移量与所述用户态虚拟内存空间的起始地址,确定所述报文在所述用户态虚拟内存空间中的缓存地址,并基于确定的缓存地址获取所述报文。
在协议栈进程向内核态进程传输报文时,将网络设备的部分物理内存空间映射到网卡驱动进程的地址空间,得到内核态虚拟内存空间,以及将所述部分物理内存空间映射到协议栈进程的地址空间,得到用户态虚拟内存空间;所述协议栈进程属于用户态进程,所述方法包括:
所述协议栈进程针对处理后的报文,基于所述报文在所述用户态虚拟内存空间中的缓存地址与所述用户态虚拟内存空间的起始地址,确定地址偏移量;
所述协议栈进程基于套接字Socket机制,将所述地址偏移量传输给所述网卡驱动进程;
所述网卡驱动进程基于所述地址偏移量与所述内核态虚拟内存空间的起始地址,确定所述报文在所述内核态虚拟内存空间中的缓存地址,并通过所述第一虚拟内存空间获取并发送所述报文。
本说明书还公开了一种网络设备,将网络设备的部分物理内存空间映射到网卡驱动进程与协议栈进程之间共享的地址空间,得到内核态虚拟内存空间,以及将所述部分物理内存空间映射到应用进程的地址空间,得到用户态虚拟内存空间;
所述网络设备在运行时:
所述网卡驱动进程接收报文,并将所述报文写入所述内核态虚拟内存空间;
所述协议栈进程对所述报文处理后,基于所述报文在所述内核态虚拟内存空间中的缓存地址与所述内核态虚拟内存空间的起始地址,确定地址偏移量;
所述协议栈进程基于套接字Socket机制,将所述地址偏移量传输给所述应用进程;
所述应用进程基于所述地址偏移量与所述用户态虚拟内存空间的起始地址,确定所述报文在所述用户态虚拟内存空间中的缓存地址,并基于确定的缓存地址获取所述报文。
进一步地,所述网络设备在运行时还包括:
所述应用进程在对所述报文完成处理后,通过所述用户态虚拟内存空间释放所述报文占用的物理内存。
此外,本说明还公开了另一种网络设备,将网络设备的部分物理内存空间映射到网卡驱动进程与协议栈进程之间共享的地址空间,得到内核态虚拟内存空间,以及将所述部分物理内存空间映射到应用进程的地址空间,得到用户态虚拟内存空间;
所述网络设备在运行时:
所述应用进程对报文处理完成后,将所述处理完成后的报文写入所述用户态虚拟内存空间;
所述应用进程基于所述报文在所述用户态虚拟内存空间中的缓存地址与所述用户态虚拟内存空间的起始地址,确定地址偏移量;
所述应用进程基于套接字Socket机制,将所述地址偏移量传输给所述协议栈进程;
所述协议栈程基于所述地址偏移量与所述内核态虚拟内存空间的起始地址,确定所述报文在所述内核态虚拟内存空间中的缓存地址,并基于确定的缓存地址获取所述报文并对所述报文进行处理;
在协议栈进程对所述报文处理完成后,网卡驱动进程通过所述内核态虚拟内存空间,获取并发送所述报文。
如图5所示,图5示出了实施例网络设备的一种硬件结构图,该设备可以包括:处理器510、存储器520、输入/输出接口530、通信接口540和总线550。其中处理器510、存储器520、输入/输出接口530和通信接口540通过总线550实现彼此之间在设备内部的通信连接。
处理器510可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器520可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器520可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器520中,并由处理器510来调用执行。
输入/输出接口530用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口540用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线550包括一通路,在设备的各个组件(例如处理器310、存储器320、输入/输出接口530和通信接口540)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器510、存储器520、输入/输出接口530、通信接口540以及总线550,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述的进程间报文传输的方法。该方法至少包括:
网卡驱动进程接收报文,并将所述报文写入所述内核态虚拟内存空间;
所述协议栈进程对所述报文处理后,基于所述报文在所述内核态虚拟内存空间中的缓存地址与所述内核态虚拟内存空间的起始地址,确定地址偏移量;
所述协议栈进程基于套接字Socket机制,将所述地址偏移量传输给所述应用进程;
所述应用进程基于所述地址偏移量与所述用户态虚拟内存空间的起始地址,确定所述报文在所述用户态虚拟内存空间中的缓存地址,并基于确定的缓存地址获取所述报文。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本领域技术人员在考虑说明书及实践这里申请的发明后,将容易想到本说明书的其它实施方案。本说明书旨在涵盖本说明书的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本说明书的一般性原理并包括本说明书未申请的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本说明书的真正范围和精神由下面的权利要求指出。
应当理解的是,本说明书并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本说明书的范围仅由所附的权利要求来限制。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。
Claims (10)
1.一种进程间的报文传输方法,其特征在于,将网络设备的部分物理内存空间映射到网卡驱动进程与协议栈进程之间共享的地址空间,得到内核态虚拟内存空间,以及将所述部分物理内存空间映射到应用进程的地址空间,得到用户态虚拟内存空间,所述方法包括:
所述网卡驱动进程接收报文,并将所述报文写入所述内核态虚拟内存空间;
所述协议栈进程对所述报文处理后,基于所述报文在所述内核态虚拟内存空间中的缓存地址与所述内核态虚拟内存空间的起始地址,确定地址偏移量;
所述协议栈进程基于套接字Socket机制,将所述地址偏移量传输给所述应用进程;
所述应用进程基于所述地址偏移量与所述用户态虚拟内存空间的起始地址,确定所述报文在所述用户态虚拟内存空间中的缓存地址,并基于确定的缓存地址获取所述报文。
2.如权利要求1所述的方法,其特征在于,预先为Socket机制的发送函数添加第一计算功能,用于将所述报文在所述内核态虚拟内存空间中的缓存地址与所述内核态虚拟内存空间的起始地址相减,得到地址偏移量;预先为Socket机制的接收函数添加第二计算功能,用于将所述地址偏移量与所述用户态虚拟内存空间的起始地址相加,得到所述报文在所述用户态虚拟内存空间的缓存地址。
3.如权利要求1所述的方法,其特征在于,所述方法还包括:
所述应用进程在对所述报文完成处理后,通过所述用户态虚拟内存空间释放所述报文占用的物理内存。
4.一种进程间的报文传输方法,其特征在于,将网络设备的部分物理内存空间映射到网卡驱动进程与协议栈进程之间共享的地址空间,得到内核态虚拟内存空间,以及将所述部分物理内存空间映射到应用进程的地址空间,得到用户态虚拟内存空间,所述方法包括:
所述应用进程对报文处理完成后,将所述处理完成后的报文写入所述用户态虚拟内存空间;
所述应用进程基于所述报文在所述用户态虚拟内存空间中的缓存地址与所述用户态虚拟内存空间的起始地址,确定地址偏移量;
所述应用进程基于套接字Socket机制,将所述地址偏移量传输给所述协议栈进程;
所述协议栈程基于所述地址偏移量与所述内核态虚拟内存空间的起始地址,确定所述报文在所述内核态虚拟内存空间中的缓存地址,并基于确定的缓存地址获取所述报文并对所述报文进行处理;
在协议栈进程对所述报文处理完成后,网卡驱动进程通过所述内核态虚拟内存空间,获取并发送所述报文。
5.如权利要求4所述方法,其特征在于,预先为Socket机制的发送函数添加第一计算功能,用于将所述报文在所述用户态虚拟内存空间中的缓存地址与所述用户态虚拟内存空间的起始地址相减,得到地址偏移量;预先为Socket机制的接收函数添加第二计算功能,用于将所述地址偏移量与所述内核态虚拟内存空间的起始地址相加,得到所述报文在所述内核态虚拟内存空间的缓存地址。
6.如权利要求4所述的方法,其特征在于,所述方法还包括:
所述网卡驱动进程在发送所述报文后,通过所述内核态虚拟内存空间释放所述报文占用的物理内存。
7.一种网络设备,其特征在于,将网络设备的部分物理内存空间映射到网卡驱动进程与协议栈进程之间共享的地址空间,得到内核态虚拟内存空间,以及将所述部分物理内存空间映射到应用进程的地址空间,得到用户态虚拟内存空间;
所述网络设备在运行时:
所述网卡驱动进程接收报文,并将所述报文写入所述内核态虚拟内存空间;
所述协议栈进程对所述报文处理后,基于所述报文在所述内核态虚拟内存空间中的缓存地址与所述内核态虚拟内存空间的起始地址,确定地址偏移量;
所述协议栈进程基于套接字Socket机制,将所述地址偏移量传输给所述应用进程;
所述应用进程基于所述地址偏移量与所述用户态虚拟内存空间的起始地址,确定所述报文在所述用户态虚拟内存空间中的缓存地址,并基于确定的缓存地址获取所述报文。
8.如权利要求7所述网络设备,其特征在于,所述网络设备在运行时还包括:
所述应用进程在对所述报文完成处理后,通过所述用户态虚拟内存空间释放所述报文占用的物理内存。
9.一种网络设备,其特征在于,将网络设备的部分物理内存空间映射到网卡驱动进程与协议栈进程之间共享的地址空间,得到内核态虚拟内存空间,以及将所述部分物理内存空间映射到应用进程的地址空间,得到用户态虚拟内存空间;
所述网络设备在运行时:
所述应用进程对报文处理完成后,将所述处理完成后的报文写入所述用户态虚拟内存空间;
所述应用进程基于所述报文在所述用户态虚拟内存空间中的缓存地址与所述用户态虚拟内存空间的起始地址,确定地址偏移量;
所述应用进程基于套接字Socket机制,将所述地址偏移量传输给所述协议栈进程;
所述协议栈程基于所述地址偏移量与所述内核态虚拟内存空间的起始地址,确定所述报文在所述内核态虚拟内存空间中的缓存地址,并基于确定的缓存地址获取所述报文并对所述报文进行处理;
在协议栈进程对所述报文处理完成后,网卡驱动进程通过所述内核态虚拟内存空间,获取并发送所述报文。
10.一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时,实现如权利要求1至6中任一项所述的进程间的报文传输方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011205179.6A CN112532585A (zh) | 2020-11-02 | 2020-11-02 | 一种进程间报文传输的方法、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011205179.6A CN112532585A (zh) | 2020-11-02 | 2020-11-02 | 一种进程间报文传输的方法、设备及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112532585A true CN112532585A (zh) | 2021-03-19 |
Family
ID=74979311
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011205179.6A Pending CN112532585A (zh) | 2020-11-02 | 2020-11-02 | 一种进程间报文传输的方法、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112532585A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113098955A (zh) * | 2021-03-30 | 2021-07-09 | 山东英信计算机技术有限公司 | 一种数据传输方法、装置、设备及计算机可读存储介质 |
CN114077480A (zh) * | 2022-01-19 | 2022-02-22 | 维塔科技(北京)有限公司 | 一种主机与虚拟机共享内存方法、装置、设备及介质 |
CN115334156A (zh) * | 2021-04-26 | 2022-11-11 | 深信服科技股份有限公司 | 报文的处理方法、装置、设备、存储介质 |
CN115460470A (zh) * | 2022-08-19 | 2022-12-09 | 武汉烽火技术服务有限公司 | 组播数据转发方法、装置、设备及可读存储介质 |
CN118138558A (zh) * | 2024-05-08 | 2024-06-04 | 珠海星云智联科技有限公司 | 基于直接内存访问的报文发包方法、计算机设备及介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102402487A (zh) * | 2011-11-15 | 2012-04-04 | 北京天融信科技有限公司 | 一种零拷贝接收报文的方法和系统 |
WO2016078313A1 (zh) * | 2014-11-20 | 2016-05-26 | 中兴通讯股份有限公司 | 数据写入方法及装置 |
CN107729159A (zh) * | 2017-09-29 | 2018-02-23 | 华为技术有限公司 | 一种共享内存的地址映射方法及装置 |
CN109561105A (zh) * | 2018-12-29 | 2019-04-02 | 江苏博智软件科技股份有限公司 | 一种基于报文零拷贝方式的高性能报文捕获发送平台 |
CN109710544A (zh) * | 2017-10-26 | 2019-05-03 | 杭州华为数字技术有限公司 | 内存访问方法、计算机系统以及处理装置 |
-
2020
- 2020-11-02 CN CN202011205179.6A patent/CN112532585A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102402487A (zh) * | 2011-11-15 | 2012-04-04 | 北京天融信科技有限公司 | 一种零拷贝接收报文的方法和系统 |
WO2016078313A1 (zh) * | 2014-11-20 | 2016-05-26 | 中兴通讯股份有限公司 | 数据写入方法及装置 |
CN105677597A (zh) * | 2014-11-20 | 2016-06-15 | 中兴通讯股份有限公司 | 数据写入方法及装置 |
CN107729159A (zh) * | 2017-09-29 | 2018-02-23 | 华为技术有限公司 | 一种共享内存的地址映射方法及装置 |
CN109710544A (zh) * | 2017-10-26 | 2019-05-03 | 杭州华为数字技术有限公司 | 内存访问方法、计算机系统以及处理装置 |
CN109561105A (zh) * | 2018-12-29 | 2019-04-02 | 江苏博智软件科技股份有限公司 | 一种基于报文零拷贝方式的高性能报文捕获发送平台 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113098955A (zh) * | 2021-03-30 | 2021-07-09 | 山东英信计算机技术有限公司 | 一种数据传输方法、装置、设备及计算机可读存储介质 |
CN115334156A (zh) * | 2021-04-26 | 2022-11-11 | 深信服科技股份有限公司 | 报文的处理方法、装置、设备、存储介质 |
CN114077480A (zh) * | 2022-01-19 | 2022-02-22 | 维塔科技(北京)有限公司 | 一种主机与虚拟机共享内存方法、装置、设备及介质 |
CN115460470A (zh) * | 2022-08-19 | 2022-12-09 | 武汉烽火技术服务有限公司 | 组播数据转发方法、装置、设备及可读存储介质 |
CN115460470B (zh) * | 2022-08-19 | 2024-03-26 | 烽火通信科技股份有限公司 | 组播数据转发方法、装置、设备及可读存储介质 |
CN118138558A (zh) * | 2024-05-08 | 2024-06-04 | 珠海星云智联科技有限公司 | 基于直接内存访问的报文发包方法、计算机设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112532585A (zh) | 一种进程间报文传输的方法、设备及介质 | |
US8332866B2 (en) | Methods, systems, and apparatus for object invocation across protection domain boundaries | |
US10116746B2 (en) | Data storage method and network interface card | |
US10062137B2 (en) | Communication between integrated graphics processing units | |
CN114595186A (zh) | 一种多核处理器的核间通信方法、通信装置 | |
CN109753347A (zh) | 一种实现驱动的系统及方法 | |
CN117692416B (zh) | 网络报文处理方法、装置、计算机设备和存储介质 | |
CN112256460A (zh) | 进程间通信方法、装置、电子设备及计算机可读存储介质 | |
CN111881104A (zh) | 一种nfs服务器及其数据写入方法、装置和存储介质 | |
CN115827506A (zh) | 数据写入方法、数据读取方法、装置、处理核和处理器 | |
CN111600812A (zh) | 一种报文的处理方法、处理装置、可读介质和系统 | |
CN117453582A (zh) | 数据传输方法、设备及存储介质 | |
CN116402673A (zh) | 数据处理方法、系统、计算设备和存储介质 | |
CN108563492B (zh) | 数据获取方法、虚拟机以及电子设备 | |
CN116489177A (zh) | 一种基于块存储的io访问方法、装置、电子设备及介质 | |
CN114564241B (zh) | 硬件设备的访问方法、装置、计算机设备和存储介质 | |
CN115334134A (zh) | 数据处理方法及系统 | |
CN114358936A (zh) | 一种基于微服务区块链的智能合约运行方法 | |
CN113296890A (zh) | 一种基于系统调用代理的安卓虚拟化方法及系统 | |
CN111314493A (zh) | 异构云存储系统的数据处理方法及其可读介质和系统 | |
KR20090128605A (ko) | 버스트 전송이 가능한 프로세서간 통신 장치, 프로세서간통신 장치를 포함하는 시스템 및 프로세서간 통신 장치를구동하기 위한 디바이스 드라이버 | |
KR20150048028A (ko) | 데이터 전송 관리 방법 | |
CN117762551A (zh) | 一种宿主机和虚拟机之间的通信方法、宿主机和虚拟机 | |
CN114489686B (zh) | 多云部署下的中间件解耦方法、装置和设备 | |
TW201317781A (zh) | 虛擬機器記憶體的分享方法與電腦系統 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210319 |
|
RJ01 | Rejection of invention patent application after publication |