CN112948318B - 一种Linux操作系统下基于RDMA的数据传输方法及装置 - Google Patents
一种Linux操作系统下基于RDMA的数据传输方法及装置 Download PDFInfo
- Publication number
- CN112948318B CN112948318B CN202110255647.9A CN202110255647A CN112948318B CN 112948318 B CN112948318 B CN 112948318B CN 202110255647 A CN202110255647 A CN 202110255647A CN 112948318 B CN112948318 B CN 112948318B
- Authority
- CN
- China
- Prior art keywords
- memory space
- address
- data
- space address
- mode 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
- G06F15/17306—Intercommunication techniques
- G06F15/17331—Distributed shared memory [DSM], e.g. remote direct memory access [RDMA]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种Linux操作系统下基于RDMA的数据传输方法及装置,根据待数据传输的进程,确定进程对应的用户态内存空间地址;将用户态内存空间地址与内核态内存空间地址均映射到同一物理内存空间地址中;启动进程将待传输数据写入到用户态内存空间地址,生成数据包并通过网卡发送至远端服务器;构建本地事件,获取写入待传输数据的第一应用程序对应的第一通信标识码;向第一应用程序发送数据传输完成信息;本发明不再需要将数据复制到内核态,可以直接进行数据的接收和发送,减少数据复制,进而减少数据传输时间,增加传输效率。
Description
技术领域
本发明属于通信技术领域,尤其涉及一种Linux操作系统下基于RDMA的数据传输方法及装置。
背景技术
远程直接内存访问技术(Remote Direct MemoryAccess,RDMA)是一种直接存储器访问技术,它将数据直接从一台计算机的内存传输到另一台计算机,通过使网络适配器直接在应用程序内存间传输数据,不再需要在应用程序内存与操作系统缓冲区之间复制数据。这种传输不需要中央处理器、CPU缓存或上下文交换参与,并且传输可与其他系统操作并行。当应用程序执行RDMA读取或写入请求时,应用程序数据直接传输到网络,从而减少延迟并实现快速的消息传输。
当RDMA技术在Linux操作系统中运行时,由于Linux内核态内存地址和用户态内存地址是相互独立的,所以,发送数据时需要进行数据拷贝(内核态内存地址与用户态内存地址之间互相进行数据拷贝)。例如,当需要传输某个数据时,需要用户态准备好用户态内存空间,内核态将数据从内核态内存空间复制到用户态内存空间,最后用户态再将数据传输出去。
在进行数据拷贝的过程中,既要进行内存地址的转换,还要进行数据的复制,所以,会导致数据传输时间增加,降低传输效率。
发明内容
本发明的目的是提供一种Linux操作系统下基于RDMA的数据传输方法及装置,减少数据传输时间,增加传输效率。
本发明采用以下技术方案:一种Linux操作系统下基于RDMA的数据传输方法,包括以下步骤:
根据待数据传输的进程,确定进程对应的用户态内存空间地址;
将用户态内存空间地址与内核态内存空间地址均映射到同一物理内存空间地址中;
启动进程将待传输数据写入到用户态内存空间地址,生成数据包并通过网卡发送至远端服务器;
构建本地事件,获取写入待传输数据的第一应用程序对应的第一通信标识码;
向第一应用程序发送数据传输完成信息。
进一步地,将用户态内存空间地址与内核态内存空间地址均映射到同一物理内存空间地址中包括:
将用户态内存空间地址映射到物理内存空间地址,且将内核态内存空间地址映射到同一物理内存空间地址;
或者,将用户态内存空间地址映射到内核态内存空间地址,再将内核态内存空间地址映射到物理内存地址;
或者,将内核态内存空间地址映射到用户态内存空间地址,在将用户态内存空间地址映射到物理内存地址。
进一步地,该方法还包括:
当内核态内存空间地址接收到数据时,获取该数据在内核态内存空间地址中的偏移位和大小位;
将偏移位和大小位发送至用户态的应用程序;
用户态的应用程序根据偏移位和大小位在用户态内存空间地址中读取数据;
在内核态内存空间地址中删除数据。
进一步地,确定进程对应的用户态内存空间地址还包括:
申请固定大小的内存空间,并注册给网卡的DMA,作为内核态内存空间地址;
构建连接报文并发送至远端服务器;连接报文包括内核态内存空间地址的起始地址和终止地址、本端服务器在数据传输网络中的唯一标识、以及本端应用程序的通信标识码;
接收远端服务器发来的连接报文并解析,得到远端服务器注册给网卡的DMA的内核态内存空间地址的起始地址和终止地址、以及远端服务器应用程序的通信标识码。
进一步地,数据包包括本端服务器注册给网卡的DMA的内核态内存空间地址的第一起始地址、远端服务器注册给其网卡的DMA的内核态内存空间地址的第二起始地址、待传输数据的起始地址相对于第一起始地址的第一偏移量、待传输数据的起始地址相对于第二起始地址的第二偏移量、待传输数据的大小位、本端服务器中写入待传输数据的第一应用程序的第一通信标识码和远端服务器读取待传输数据的第二应用程序的第二通信标识码。
进一步地,生成数据包并通过网卡发送至远端服务器之后还包括:
远端服务器的网卡接收数据包;
解析数据包,获取第二通信标识码、第二偏移量和数据长度,并构建远端事件;
根据远端事件将数据包发送至第二应用程序;
第二应用程序解析数据包,获取第二偏移量和数据长度接收待传输数据。
本发明的另一种技术方案:一种Linux操作系统下基于RDMA的数据传输装置,包括以下步骤:
确定模块,用于根据待数据传输的进程,确定进程对应的用户态内存空间地址;
映射模块,用于将用户态内存空间地址与内核态内存空间地址均映射到同一物理内存空间地址中;
写入模块,用于启动进程将待传输数据写入到用户态内存空间地址,生成数据包并通过网卡发送至远端服务器;
构建模块,用于构建本地事件,获取写入待传输数据的第一应用程序对应的第一通信标识码;
发送模块,用于向第一应用程序发送数据传输完成信息。
进一步地,将用户态内存空间地址与内核态内存空间地址均映射到同一物理内存空间地址中包括:
将用户态内存空间地址映射到物理内存空间地址,且将内核态内存空间地址映射到同一物理内存空间地址;
或者,将用户态内存空间地址映射到内核态内存空间地址,再将内核态内存空间地址映射到物理内存地址;
或者,将内核态内存空间地址映射到用户态内存空间地址,在将用户态内存空间地址映射到物理内存地址。
本发明的另一种技术方案:一种Linux操作系统下基于RDMA的数据传输装置,包括存储器、处理器以及存储在存储器中并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述的一种Linux操作系统下基于RDMA的数据传输方法。
本发明的另一种技术方案:一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现上述的一种Linux操作系统下基于RDMA的数据传输方法。
本发明的有益效果是:本发明通过进程找出要使用的用户状态内存空间地址,再将该用户态内存空间地址与内核态内存空间地址映射到同一物理内存空间地址中,使得在用户态状态下即可直接调用内核态内存空间地址中的数据,不再需要将数据复制到内核态,可以直接进行数据的接收和发送,减少数据复制,进而减少数据传输时间,增加传输效率。
附图说明
图1为本发明实施例一种Linux操作系统下基于RDMA的数据传输方法的流程图;
图2为本发明实施例中地址映射方法的示意图;
图3为本发明实施例中地址映射方法的流程图;
图4为本发明实施例中数据发送流程的流程图;
图5为本发明实施例中数据接收流程的流程图;
图6为本发明实施例中进行位与操作的流程图;
图7为本发明另一实施例一种Linux操作系统下基于RDMA的数据传输装置的结构示意图;
图8本发明另一实施例一种Linux操作系统下基于RDMA的数据传输装置的结构示意图。
具体实施方式
下面结合附图和具体实施方式对本发明进行详细说明。
本发明公开了一种Linux操作系统下基于RDMA的数据传输方法,如图1所示,包括以下步骤:步骤S110、根据待数据传输的进程,确定进程对应的用户态内存空间地址;步骤S120、将用户态内存空间地址与内核态内存空间地址均映射到同一物理内存空间地址中;步骤S130、启动进程将待传输数据写入到用户态内存空间地址,生成数据包并通过网卡发送至远端服务器;步骤S140、构建本地事件,获取写入待传输数据的第一应用程序对应的第一通信标识码;步骤S150、向第一应用程序发送数据传输完成信息。
本发明通过进程找出要使用的用户状态内存空间地址,再将该用户态内存空间地址与内核态内存空间地址映射到同一物理内存空间地址中,使得在用户态状态下即可直接调用内核态内存空间地址中的数据,不再需要将数据复制到内核态,可以直接进行数据的接收和发送,减少数据复制,进而减少数据传输时间,增加传输效率。
为了更好的理解本发明的方法,首先定义以下术语:
双边操作:send和recv;
单边操作:put和get;
双边操作:指的是发起端发送消息给接收端,是两边的CPU都需要操作,两边的接口也都知道对端操作完成与否。
单边操作:指的是消息通信时,只有一端CPU参与操作,只有操作端参与控制,当然,发起端可以通过注册远端事件(即向远端线程上报事件),当远端操作完成后可以报消息给对端应用进行操作。
Send操作:就是发送数据给远端;
Recv操作:就是从远端接收数据;
Put操作:就是将本地的数据,通过调用远端的网卡的DMA,直接将数据写入到对应的预先分配的内存中。
Get操作:就是将远端的数据,通过调用远端的网卡的DMA,读取预先分配的指定的内存中的数据,然后将数据发送到本端的预先分配的指定的内存中来。
交换背板:指的是以太网中的二层交换机。
NICID:指的是高速网卡在一个交换背板下的全局唯一ID。
通常在Linux操作系统中,用户态内存空间地址每个进程都是独立存在地址空间,内核地址是所有进程共享的,并且用户态内存空间地址和内核态内存空间地址相互隔离,用户态和内核态地址空间不可以直接进行相互访问。
在本发明中主要是提供将高速网卡内核驱动使用的物理内存映射到用户态。用户态读写内存,就不需要将数据复制到内核态,而只需要通知高速网卡驱动,读写完成即可。
进行地址映射的方法可以有三种:
一、将用户态内存空间地址映射到物理内存空间地址,且将内核态内存空间地址映射到同一物理内存空间地址;
二、将用户态内存空间地址映射到内核态内存空间地址,再将内核态内存空间地址映射到物理内存地址;
三、将内核态内存空间地址映射到用户态内存空间地址,在将用户态内存空间地址映射到物理内存地址。
在本发明实施例中采用的是上述第三种地址映射方法,如图2所示,将进程3的用户态内存空间地址(即图中的地址空间)和内核态的内存空间地址均指向从下数第三个物理内存块中,这样,当需要进行收发数据时,用户态的应用程序可以直接根据用户态内存空间地址调动物理内存中的数据。从而,不再需要将内核态内存空间地址复制到用户态的内存空间地址中。减少用户态和内核态之间的数据复制,减少数据传输路径,从而提高网卡性能。
上述的映射方法的映射过程如图3所示,首先用户态用用程序初始化,以及高速网卡初始化;然后,用户态的应用程序的进程启动高速网卡驱动。高速网卡启动后,高速网卡驱动会在内核态下为该告诉网卡申请内存,并注册给网卡DMA。用户态进程向内核态高速网卡驱动进行内存映射;内核态高速网卡驱动将注册给网卡的DMA内存映射到用户态,得到user_addr,用户态应用程序收到user_addr,记录备用。
在上述的映射过程中,用户态和内核态记录数据结构如表1和表2所示,其中,表1为用户态应用程序使用的数据结构,表2为内核态高速网卡驱动使用的数据结构。
表1
表2
其中,在用户态应用程序使用的数据结构中,devfd用来与内核态高速网卡交互的接口;user_addr表示高速网卡DMA内存映射到进程用户态地址。在内核态高速网卡驱动使用的数据结构中,devfd用来与用户态应用程序交互的接口;dma_addr表示高速网卡的DMA内存地址。
在本发明实施例中,具体的数据发送流程如图4所示:
用户态程序需要发送数据;将数据写入到映射到用户态的内存中,从偏移位offset处开始写入,写入的数据大小位len;通过devfd(用户态数据结构中的)通知高速网卡发送数据到远端;高速网卡收到发送数据完成后通知用户态应用程序数据发送完成。
至于用户态通知内核态发送数据的数据结构如表3所示,其中,User_to_kernel表示用户态通知内核态发送数据的数据结构,devfd用来识别具体是那个高速网卡;offset用来指明数据是DMA内存偏移offset开始;len用来指明本次数据发送的数据大小。
表3
在本发明的一个实施例中,当内核态内存空间地址接收到数据时,获取该数据在内核态内存空间地址中的偏移位和大小位;将偏移位和大小位发送至用户态的应用程序;用户态的应用程序根据偏移位和大小位在用户态内存空间地址中读取数据;在内核态内存空间地址中删除数据。
更为具体的,确定进程对应的用户态内存空间地址还包括以下步骤:
申请固定大小的内存空间,并注册给网卡的DMA,作为内核态内存空间地址;构建连接报文并发送至远端服务器;连接报文包括内核态内存空间地址的起始地址和终止地址、本端服务器在数据传输网络中的唯一标识、以及本端应用程序的通信标识码;接收远端服务器发来的连接报文并解析,得到远端服务器注册给网卡的DMA的内核态内存空间地址的起始地址和终止地址、以及远端服务器应用程序的通信标识码。
作为一种具体的实现形式,在本实施例中,内存管理采用以下方法:
通过申请一个大内存作为内存池(即内存空间),再通过内存状态位图管理内存空间的使用情况,然后,当数据发送使用完整内存空间后,同步内存状态位图信息,来判断内存块是否可以继续使用。
具体步骤:获取用于注册给网卡的内存空间,并根据内存空间构建第一内存状态位图;根据第一内存状态位图,获取待存储数据在内存空间中的存储位置信息;当待存储数据存储至内存空间后,更新第一内存状态位图;当内存空间存满数据时,获取远端服务器的第二内存状态位图;比较第一内存状态位图和第二内存状态位图,根据比较结果更新第一内存状态位图;根据更新后的第一内存状态位图,删除内存空间中的存储数据。
本发明将注册给网卡的内存空间分为若干个内存块,并根据内存块的数量构建对应的内存状态位图,进而通过内存状态位图来表示每个内存块的存储状态,并且还可以结合远端服务器的内存状态位图来释放本端内存空间,进而减少了内存的申请和释放次数,优化了内存使用机制,提升了服务器的运行效率。
在一个通信网络中,可以在每个服务器上均应用该方法,为每个服务器的网卡构建内存池和对应的内存状态位图,进而方便管理内存。在本实施例中,内存池是真实进行RDMA传输数据的多个数据块组成。内存状态位图:每个内存池一个位图,内存池中的每个数据块(即内存块)对应位图中的一个位。为了方便描述,本实施例中内存状态位图中每一位均为一个二进制数字,1代表该位对应的内存块已经被占用,0代表该位对应的内存块为可用。
另外,关于每个服务器中的内存空间和内存状态位图对应关系,下面举例说明通过位图引索找到内存地址的方法。当位图引索index=2;内存池起始地址位:addr=0x1;内存池内存块大小:size=4;则位图index对应的内存地址destAddr=addr+(index*size)结果为0x9。
在本发明实施例中,获取用于注册给网卡的内存空间的一种方法为:根据内存块的预定空间大小、以及预定的内存块数量,计算内存空间的大小;根据内存空间的大小确定内存空间的起始地址和结束地址。根据内存块的预定空间大小和内存块的数量可以使得将内存池均匀分割,这样可以方便构建与内存池对应的内存状态位置,以方便内存池的管理和使用。
当构建内存池之后,根据内存空间构建内存状态位图包括:根据内存块的数量构建与内存空间对应的内存状态位图;其中,内存状态位图的位数等于内存块的数量。初始化内存状态位图。
申请内存流程如为:假设申请内存块大小为size,内存块个数为len的内存池,并初始化内存池。构建len位的位图,并将位图中每一位的值均初始化为0,表示该内存池中所有内存块均为空,可以用来存放数据。
当有本端事件发生时,需要向内存空间中存储数据时,从第一内存状态位图的起始位开始搜索,直至找到第一个状态为闲置的位;将该第一个状态为闲置的位对应的存储块的起始地址作为待存储数据在内存空间中的起始存储地址。
也就是说,首先从内存状态位图中找出第一个值为0的位,如果没有找到值为0的位,则向远端服务器发送请求,获取其的第二内存管理位图,再将远端服务器的第二内存状态位图和本端服务器的第一内存管理位图按位与运算,最后将得到的结果覆盖本端服务器的第一内存状态位图。
另外,如果从本端服务器的内纯状态位图中找到了值为0的位,则返回这个位的引索,就是内存池中的相同引索的数据块地址即可,将待存储数据以该数据块为起始数据块进行存储。
当有待存储数据需要存储时,首先从内存状态位图中找到第一个值为0的位,即第3位,这就表示在内存池中第3个数据块为空,可以存储数据,所以,将待存储数据存储到该数据块中。当该数据块存满后,如果待存储数据为存完,则重复选择下一个空的数据块,继续存储,假设该待存储数据需要3个数据块进行存储,则该待存储数据在本内存池中的存储数据块序号分别为3、4、5。
另外,在网卡不需要存储数据时,即为内存空间闲置状态,该过程中会收到事件信息,该类事件信息是随着put操作或get操作而产生的。当网卡的事件线程收到事件后,需要先判断该事件是远端事件还是本端事件。
当事件为远端事件时,提取远端事件的报文,从报文中获取到该事件在本端服务器中对应的应用程序的socketid,进而将事件信息通报到对应的应用程序,即向远端事件对应的应用程序(本端服务器的应用程序)发送通知,通知的内容为应用程序在内存空间中获取数据。当应用程序接收到通知时,用户可知有新的消息,则会前往内存池中对应的数据块读取数据,读取数据的方式有多种,可以为读取完数据不进行保存,也可以是读取数据过程中将数据保存到硬件存储设备中。不管是数据不保存还是已经保存,在本端服务器中,检测到应用程序获取数据后,将第一内存状态位图中与该数据对应的位的状态更新为闲置,即释放该事件对应的内存池的内存空间,已备后续其他应用程序进行使用。
另外,当事件为本端事件时,不进行操作,则表示本段服务器在进行put或get操作,然而,不管是put操作,还是get操作,对本端的内存池均不会影响,因此,不进行任何操作即可。
在本实施例中,当内存池的存储空间数据存满后,此时内存状态位图会显示全1位图。这种情况下,会发生在两个场景下,即数据存储过程中或者是数据存储之前,但是不管哪种情况,只要获取到内存状态位图的值为全1,则需要进行内存释放过程。
内存释放过程是先获取远端服务器的第二内存状态位图,再比较第一内存状态位图和所述第二内存状态位图,根据比较结果更新第一内存状态位图,最后根据更新后的第一内存状态位图,删除内存空间中的存储数据。
具体的,本实施例还给出了一种具体的比较形式,比如,比较第一内存状态位图和第二内存状态位图时,将第一内存状态位图与第二内存状态位图中序数相同的位的状态进行位与运算。通过进行位与运算可以将相互进行通信的服务器之间的冗余数据消除,达到内存数据释放的效果。
如图5所示,左侧为本端的第一内存状态位图和远端的第二内存状态位图,由图可知,第一内存状态位图已经存满数据,第二内存状态位图中仅有第8个数据块存储有数据,其与数据块均为空,则表明第1-7个数据块中的数据已使用完成,不需要在进行保存,因此,进行位与运算后,第一内存状态位图中1-7位均为0,第8位为1。进而,根据第一内存状态位图更新内存池,释放第1-7个数据块,保留第8个内存池的数据块。至此,即完成了内存释放过程。
本实施例使用内存池机制,减少内存反复申请和释放;使用位图和内存池的数据块引索绑定,提高内存分配速度;并且本端事件不释放内存,远端事件释放内存,来解决踩内存问题(即内存重叠)。进而本发明提高了CPU和内存的控制效率,通过位图,控制大片内存,可以快速引索内存,通过俩端的位图按位与来解决持续发送数据带来的内存复用问题,大大提高了内存复用和分配的效率。
具体的数据接收流程如图6所示,收到发送数据过来的消息后,其存放在高速网卡的DMA内存中,偏移位offset,大小位len,这是可以根据进程来获取到的。接着,通知用户态应用程序从用户态地址开始偏移offset,读取数据大小len;用户态进程读取完成后通知内核态读取完成。具体的,内核态通知用户态接收数据的数据结构如下表4所示,其中,devfd用来识别具体是那个高速网卡;offset用来指明数据是user_addr内存偏移offset开始;len用来指明本次数据接收的数据大小。
表4
在本发明实施例中,作为一种具体的实现形式,数据包包括本端服务器注册给网卡的DMA的内核态内存空间地址的第一起始地址、远端服务器注册给其网卡的DMA的内核态内存空间地址的第二起始地址、待传输数据的起始地址相对于第一起始地址的第一偏移量、待传输数据的起始地址相对于第二起始地址的第二偏移量、待传输数据的大小位、本端服务器中写入待传输数据的第一应用程序的第一通信标识码和远端服务器读取待传输数据的第二应用程序的第二通信标识码。
在本发明的另一实施例中,生成数据包并通过网卡发送至远端服务器之后,远程服务器的处理过程具体为:远端服务器的网卡接收数据包;解析数据包,获取第二通信标识码、第二偏移量和数据长度,并构建远端事件;根据远端事件将数据包发送至第二应用程序;第二应用程序解析数据包,获取第二偏移量和数据长度接收待传输数据。
如上,对本发明的一种Linux操作系统下基于RDMA的数据传输方法进行了说明,通过如上说明可知,本发明通过将高速网卡的DMA内存直接映射到应用程序可操作的地址空间,直接进行数据接收和发送,减少数据复制,以提高通信性能。
本发明的另一实施例还公开了一种Linux操作系统下基于RDMA的数据传输装置,如图7所示,包括:
确定模块210,用于根据待数据传输的进程,确定进程对应的用户态内存空间地址;映射模块220,用于将用户态内存空间地址与内核态内存空间地址均映射到同一物理内存空间地址中;写入模块230,用于启动进程将待传输数据写入到用户态内存空间地址,生成数据包并通过网卡发送至远端服务器;构建模块240,用于构建本地事件,获取写入待传输数据的第一应用程序对应的第一通信标识码;发送模块250,用于向第一应用程序发送数据传输完成信息。
在该实施例中,将用户态内存空间地址与内核态内存空间地址均映射到同一物理内存空间地址中包括:
将用户态内存空间地址映射到物理内存空间地址,且将内核态内存空间地址映射到同一物理内存空间地址;或者,将用户态内存空间地址映射到内核态内存空间地址,再将内核态内存空间地址映射到物理内存地址;或者,将内核态内存空间地址映射到用户态内存空间地址,在将用户态内存空间地址映射到物理内存地址。
需要说明的是,上述模块之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功模块,以完成以上描述的全部或者部分功能。实施例中的各功能模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能模块的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。上述系统中模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本发明的另一实施例还公开了一种Linux操作系统下基于RDMA的数据传输装置,包括存储器31、处理器32以及存储在存储器31中并可在处理器32上运行的计算机程序33,如图8所示,处理器执行计算机程序时实现上述的一种Linux操作系统下基于RDMA的数据传输方法。
本发明另一实施例还公开了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现上述的一种Linux操作系统下基于RDMA的数据传输方法。
计算机可读介质至少可以包括:能够将计算机程序代码携带到拍照装置/终端设备的任何实体或装置、记录介质、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、电载波信号、电信信号以及软件分发介质。例如U盘、移动硬盘、磁碟或者光盘等。在某些司法管辖区,根据立法和专利实践,计算机可读介质不可以是电载波信号和电信信号。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
Claims (6)
1.一种Linux操作系统下基于RDMA的数据传输方法,其特征在于,包括以下步骤:
根据待数据传输的进程,确定所述进程对应的用户态内存空间地址;
将所述用户态内存空间地址与内核态内存空间地址均映射到同一物理内存空间地址中;
启动所述进程将待传输数据写入到用户态内存空间地址,生成数据包并通过网卡发送至远端服务器;
构建本地事件,获取写入所述待传输数据的第一应用程序对应的第一通信标识码;
向所述第一应用程序发送数据传输完成信息;
确定所述进程对应的用户态内存空间地址包括:
申请固定大小的内存空间,并注册给网卡的DMA,作为所述内核态内存空间地址;
构建连接报文并发送至远端服务器;所述连接报文包括所述内核态内存空间地址的起始地址和终止地址、本端服务器在数据传输网络中的唯一标识、以及本端应用程序的通信标识码;
接收远端服务器发来的连接报文并解析,得到远端服务器注册给网卡的DMA的内核态内存空间地址的起始地址和终止地址、以及远端服务器应用程序的通信标识码;
所述数据包包括本端服务器注册给网卡的DMA的内核态内存空间地址的第一起始地址、远端服务器注册给其网卡的DMA的内核态内存空间地址的第二起始地址、所述待传输数据的起始地址相对于所述第一起始地址的第一偏移量、所述待传输数据的起始地址相对于第二起始地址的第二偏移量、所述待传输数据的大小位、本端服务器中写入所述待传输数据的第一应用程序的第一通信标识码和远端服务器读取所述待传输数据的第二应用程序的第二通信标识码;
将所述用户态内存空间地址与内核态内存空间地址均映射到同一物理内存空间地址中包括:
将所述用户态内存空间地址映射到所述物理内存空间地址,且将所述内核态内存空间地址映射到同一所述物理内存空间地址;
或者,将所述用户态内存空间地址映射到所述内核态内存空间地址,再将所述内核态内存空间地址映射到物理内存地址;
或者,将所述内核态内存空间地址映射到所述用户态内存空间地址,在将所述用户态内存空间地址映射到物理内存地址。
2.如权利要求1所述的一种Linux操作系统下基于RDMA的数据传输方法,其特征在于,该方法还包括:
当所述内核态内存空间地址接收到数据时,获取该数据在所述内核态内存空间地址中的偏移位和大小位;
将所述偏移位和大小位发送至用户态的应用程序;
用户态的所述应用程序根据所述偏移位和大小位在所述用户态内存空间地址中读取数据;
在所述内核态内存空间地址中删除所述数据。
3.如权利要求1所述的一种Linux操作系统下基于RDMA的数据传输方法,其特征在于,生成数据包并通过所述网卡发送至远端服务器之后还包括:
所述远端服务器的网卡接收所述数据包;
解析所述数据包,获取所述第二通信标识码、第二偏移量和数据长度,并构建远端事件;
根据所述远端事件将所述数据包发送至所述第二应用程序;
所述第二应用程序解析所述数据包,获取所述第二偏移量和数据长度接收所述待传输数据。
4.一种Linux操作系统下基于RDMA的数据传输装置,其特征在于,包括以下步骤:
确定模块,用于根据待数据传输的进程,确定所述进程对应的用户态内存空间地址;
映射模块,用于将所述用户态内存空间地址与内核态内存空间地址均映射到同一物理内存空间地址中;
写入模块,用于启动所述进程将待传输数据写入到用户态内存空间地址,生成数据包并通过网卡发送至远端服务器;
构建模块,用于构建本地事件,获取写入所述待传输数据的第一应用程序对应的第一通信标识码;
发送模块,用于向所述第一应用程序发送数据传输完成信息;
确定所述进程对应的用户态内存空间地址包括:
申请固定大小的内存空间,并注册给网卡的DMA,作为所述内核态内存空间地址;
构建连接报文并发送至远端服务器;所述连接报文包括所述内核态内存空间地址的起始地址和终止地址、本端服务器在数据传输网络中的唯一标识、以及本端应用程序的通信标识码;
接收远端服务器发来的连接报文并解析,得到远端服务器注册给网卡的DMA的内核态内存空间地址的起始地址和终止地址、以及远端服务器应用程序的通信标识码;
所述数据包包括本端服务器注册给网卡的DMA的内核态内存空间地址的第一起始地址、远端服务器注册给其网卡的DMA的内核态内存空间地址的第二起始地址、所述待传输数据的起始地址相对于所述第一起始地址的第一偏移量、所述待传输数据的起始地址相对于第二起始地址的第二偏移量、所述待传输数据的大小位、本端服务器中写入所述待传输数据的第一应用程序的第一通信标识码和远端服务器读取所述待传输数据的第二应用程序的第二通信标识码;
将所述用户态内存空间地址与内核态内存空间地址均映射到同一物理内存空间地址中包括:
将所述用户态内存空间地址映射到所述物理内存空间地址,且将所述内核态内存空间地址映射到同一所述物理内存空间地址;
或者,将所述用户态内存空间地址映射到所述内核态内存空间地址,再将所述内核态内存空间地址映射到物理内存地址;
或者,将所述内核态内存空间地址映射到所述用户态内存空间地址,在将所述用户态内存空间地址映射到物理内存地址。
5.一种Linux操作系统下基于RDMA的数据传输装置,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至3任一项所述的一种Linux操作系统下基于RDMA的数据传输方法。
6.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至3任一项所述的一种Linux操作系统下基于RDMA的数据传输方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110255647.9A CN112948318B (zh) | 2021-03-09 | 2021-03-09 | 一种Linux操作系统下基于RDMA的数据传输方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110255647.9A CN112948318B (zh) | 2021-03-09 | 2021-03-09 | 一种Linux操作系统下基于RDMA的数据传输方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112948318A CN112948318A (zh) | 2021-06-11 |
CN112948318B true CN112948318B (zh) | 2022-12-06 |
Family
ID=76228568
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110255647.9A Active CN112948318B (zh) | 2021-03-09 | 2021-03-09 | 一种Linux操作系统下基于RDMA的数据传输方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112948318B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112954068B (zh) * | 2021-03-09 | 2022-09-27 | 西安奥卡云数据科技有限公司 | 一种基于rdma的数据传输方法及装置 |
CN113746897A (zh) * | 2021-07-28 | 2021-12-03 | 浪潮电子信息产业股份有限公司 | 一种文件传输方法、装置、设备及存储介质 |
CN113395359B (zh) * | 2021-08-17 | 2021-10-29 | 苏州浪潮智能科技有限公司 | 基于远程直接内存访问的文件币集群数据传输方法、系统 |
CN113923167B (zh) * | 2021-09-16 | 2024-05-03 | 深圳致星科技有限公司 | 联邦学习中数据传输优化方法 |
CN114265713A (zh) * | 2021-12-15 | 2022-04-01 | 阿里巴巴(中国)有限公司 | Rdma事件管理方法、装置、计算机设备及存储介质 |
CN114201317B (zh) * | 2021-12-16 | 2024-02-02 | 北京有竹居网络技术有限公司 | 数据传输方法、装置、存储介质及电子设备 |
CN114401232A (zh) * | 2021-12-27 | 2022-04-26 | 中国电信股份有限公司 | 一种数据传输方法、装置、电子设备及存储介质 |
CN114363428B (zh) * | 2022-01-06 | 2023-10-17 | 齐鲁空天信息研究院 | 基于socket的数据传递方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106487896A (zh) * | 2016-10-14 | 2017-03-08 | 北京百度网讯科技有限公司 | 用于处理远程直接内存访问请求的方法和装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2006112659A1 (en) * | 2005-04-19 | 2006-10-26 | Lg Electronics Inc. | Method and apparatus for providing network address of a gate device of a local network |
US11119939B2 (en) * | 2017-08-21 | 2021-09-14 | Alibaba Group Holding Limited | Methods and systems for memory management of kernel and user spaces |
CN107579892A (zh) * | 2017-08-29 | 2018-01-12 | 郑州云海信息技术有限公司 | 一种基于RapidIO协议和RDMA技术的通信方法 |
CN108062253A (zh) * | 2017-12-11 | 2018-05-22 | 北京奇虎科技有限公司 | 一种内核态与用户态的通信方法、装置及终端 |
CN109981480A (zh) * | 2017-12-27 | 2019-07-05 | 华为技术有限公司 | 一种数据传输方法及第一设备 |
CN111240853B (zh) * | 2019-12-26 | 2023-10-10 | 天津中科曙光存储科技有限公司 | 一种节点内大块数据双向传输方法及系统 |
-
2021
- 2021-03-09 CN CN202110255647.9A patent/CN112948318B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106487896A (zh) * | 2016-10-14 | 2017-03-08 | 北京百度网讯科技有限公司 | 用于处理远程直接内存访问请求的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112948318A (zh) | 2021-06-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112948318B (zh) | 一种Linux操作系统下基于RDMA的数据传输方法及装置 | |
CN106874128B (zh) | 数据传输方法及装置 | |
US7707337B2 (en) | Object-based storage device with low process load and control method thereof | |
CN114780458A (zh) | 数据处理的方法和存储系统 | |
US20040093454A1 (en) | USB endpoint controller flexible memory management | |
CN112632069B (zh) | 哈希表数据存储管理方法、装置、介质和电子设备 | |
CN107329704A (zh) | 一种缓存镜像方法及控制器 | |
CN116431530B (zh) | 一种cxl内存模组、内存的处理方法及计算机系统 | |
CN110554911A (zh) | 内存访问与分配方法、存储控制器及系统 | |
CN113238856B (zh) | 一种基于rdma的内存管理方法及装置 | |
CN115470156A (zh) | 基于rdma的内存使用方法、系统、电子设备和存储介质 | |
CN111881104A (zh) | 一种nfs服务器及其数据写入方法、装置和存储介质 | |
CN114036077B (zh) | 数据处理方法及相关装置 | |
CN117492661A (zh) | 数据写入方法、介质、装置和计算设备 | |
CN116955219B (zh) | 一种数据镜像方法、装置、主机及存储介质 | |
US20210223991A1 (en) | System including an application processor and a data storage device providing data | |
CN107577733B (zh) | 一种数据复制的加速方法及系统 | |
CN115586943B (zh) | 一种智能网卡虚拟机脏页的硬件标记实现方法 | |
CN112954068B (zh) | 一种基于rdma的数据传输方法及装置 | |
CN115687185A (zh) | 基于mmap内存映射的手持端低功耗数据采集方法 | |
EP4261671A1 (en) | Data access method and related device | |
CN114327248A (zh) | 存储节点、存储设备及网络芯片 | |
US20060143378A1 (en) | Information processing apparatus and control method for this information processing apparatus | |
CN112015672A (zh) | 一种存储系统中数据处理方法、装置、设备及存储介质 | |
CN112003860B (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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 710000 Room 1202, 12th Floor, Cultural Creation Building, Yaodian Street Office, Qinhan New Town, Xixian New District, Xi'an, Shaanxi Applicant after: Xi'an Okayun Data Technology Co.,Ltd. Address before: No.6-2, Changxin Industrial Park, east section of Tiangong 1st Road, banxinzhuang village, ZhouLing street, Qinhan new town, Xixian New District, Xi'an City, Shaanxi Province, 710000 Applicant before: Xi'an Okayun Data Technology Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |