CN108228476B - 一种数据获取方法及装置 - Google Patents
一种数据获取方法及装置 Download PDFInfo
- Publication number
- CN108228476B CN108228476B CN201711404772.1A CN201711404772A CN108228476B CN 108228476 B CN108228476 B CN 108228476B CN 201711404772 A CN201711404772 A CN 201711404772A CN 108228476 B CN108228476 B CN 108228476B
- Authority
- CN
- China
- Prior art keywords
- data
- target address
- rdma
- target
- 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
- 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
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Bus Control (AREA)
Abstract
本发明提供了数据获取方法及装置。该方法包括:第一端以RDMA SEND操作方式向第二端发送数据读取请求,该数据读取请求中携带有数据标识,以使第二端根据数据标识查找目标数据;第一端接收第二端以RDMA WRITE操作方式发出的数据写入请求,该数据写入请求中携带有目标数据和第一目标地址;第一端按照第一目标地址,将目标数据写入第一端的内存中,进而完成了使用RDMA WRITE操作方式实现数据读取过程。使用本申请所提供的方法,不再需要经过多次的两端交互,而是通过更少的交互次数来完成了数据的读取,提高了数据读取的效率。
Description
技术领域
本发明涉及通信领域,具体而言,涉及数据获取方法及装置。
背景技术
互联网技术的实现离不开网络数据的收发,相关技术中,智能设备在进行网络数据的收发时,需要由CPU进行主导,也就是,在进行网络数据收发时需要由CPU将接收到的数据写到内存中,或者将内存中的数据发出。
但随着收发数据量的增大,这种由CPU进行主导的数据收发方式过度的占用了CPU的资源,使得CPU运行缓慢,这影响了CPU整体的性能,同时也拖缓了数据收发的速度。针对该种情况,出现了一些解决方案,RDMA(Remote Direct Memory Access,远程内存直接访问)技术就是其中的一种。
使用RDMA技术进行数据收发时不经过CPU,RDMA硬件设备可以通过DMA(directmemory access,内存直接访问)技术直接访问指定的内存地址,以将本地内存中的数据写到对端的内存中,或者将对端内存中的数据写到本地内存中,进而完成了数据的读取和发送。
RDMA技术中常见的操作方式有RDMA SEND(reomote direct memory accesssend,RDMA发送)、RDMA READ(remote direct memory access read,RDMA读取)、RDMAWRITE(remote direct memory access write,RDMA写入),其中,RDMA SEND操作方式用于发送小块、零散的数据,RDMA READ操作方式和RDMA WRITE操作方式,则用于传输连续、大块的数据。
使用RDMA READ操作方式实现数据读取时,需要数据收发的两端进行多次交互,导致了数据发送的效率过低。
发明内容
本发明实施例的目的在于提供数据获取方法。
第一方面,本发明实施例提供了一种数据获取方法,该方法包括:
第一端以RDMA SEND操作方式向第二端发送数据读取请求,所述数据读取请求中携带有数据标识,以使第二端根据数据标识查找目标数据;
第一端接收第二端以RDMA WRITE操作方式发出的数据写入请求,所述数据写入请求中携带有目标数据和第一目标地址;
第一端按照第一目标地址,将目标数据写入第一端的内存中;第一目标地址指向了第一端的内存中的一段内存空间。
第二方面,本发明实施例还提供了一种数据获取方法,该方法包括:
第二端接收第一端以RDMA SEND操作方式发出的数据读取请求;所述数据读取请求中携带有数据标识;
第二端根据数据标识查找目标数据;
第二端以RDMA WRITE操作方式向第一端发送数据写入请求,所述数据写入请求中携带有目标数据和第一目标地址,以使第一端按照第一目标地址,将目标数据写入第一端的内存中;第一目标地址指向了第一端的内存中的一段内存空间。
第三方面,本发明实施例还提供了一种数据获取装置,数据获取装置设置于第一端中,数据获取装置包括第一发送模块、第一接收模块和写入模块,其中:
第一发送模块,用于以RDMA SEND操作方式向第二端发送数据读取请求,所述数据读取请求中携带有数据标识,以使第二端根据数据标识查找目标数据;
第一接收模块,用于接收第二端以RDMA WRITE操作方式发出的数据写入请求,所述数据写入请求中携带有目标数据和第一目标地址;
写入模块,用于按照第一目标地址,将目标数据写入第一端的内存中;第一目标地址指向了第一端的内存中的一段内存空间。
第四方面,本发明实施例还提供了一种数据获取装置,数据获取装置设置于第二端中,数据获取装置包括第二发送模块、查找模块和第二发送模块,其中:
第二端接收第一端以RDMA SEND操作方式发出的数据读取请求;所述数据读取请求中携带有数据标识;
第二端根据数据标识查找目标数据;
第二端以RDMA WRITE操作方式向第一端发送数据写入请求,所述数据写入请求中携带有目标数据和第一目标地址,以使第一端按照第一目标地址,将目标数据写入第一端的内存中;第一目标地址指向了第一端的内存中的一段内存空间。
本发明实施例提供的一种数据获取方法,第一端在以RDMASEND操作方式向第二端发送数据读取请求后,第二端根据读取数据请求中所携带的数据标识来查找目标数据,进而以RDMA WRITE操作方式向第一端发送携带有目标数据和存储目标数据的数据写入请求,而后,第一端按照第一目标地址将目标数据存储到第一端的内存中,进而完成了使用RDMAWRITE操作方式实现数据读取。使用本申请所提供的方法,不再需要经过多次的两端交互,而是通过更少的交互次数来完成了数据的读取,提高了数据读取的效率。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了相关技术中,使用RDMA READ操作方式读取数据的时序图;
图2示出了本发明实施例所提供的以第一端为执行主体的数据获取方法的基本流程图。
图3示出了本发明实施例所提供的以第二端为执行主体的数据获取方法的基本流程图。
图4示出了本发明实施例所提供的数据获取方法中,具体实例的系统架构图。
具体实施方式
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,示出了现有RDMA技术中使用RDMA READ操作方式读取数据的时序图。如图1所示,网络交互系统包括第一网络设备和第二网络设备,第一网络设备包括第一RDMA模块和第一网卡,第二网络设备包括第二RDMA模块和第二网卡。第一RDMA模块和第二RDMA模块均运行RDMA应用程序。在该系统环境下,使用RDMA READ操作方式读取数据的流程如下:
步骤1,第一RDMA模块向第一网卡发出RDMA SEND请求,该请求中携带有第一RDMA模块期望获取的目标数据的数据标识;
步骤2,第一网卡对步骤1中的RDMA SEND请求中携带的数据标识进行数据封装,并将封装后得到的数据包发送给第二网卡;
步骤3,第二网卡解析步骤2中的数据包,将解析后的数据内容(即,数据标识)进行缓存并通知第二RDMA模块读取解析后的数据内容;
步骤4,第二RDMA模块根据读取到的数据标识在第二RDMA模块所在设备的第二内存中查找对应的目标数据,如果未查找到,则在第二RDMA模块所在设备的第二硬盘中查找对应的目标数据,并将目标数据读取到第二RDMA模块所在设备的第二内存中,之后,执行步骤5;如果查找到,则执行步骤5;
步骤5,第二RDMA模块向第二网卡发出RDMA SEND请求,该请求中携带有第二目标地址,第二目标地址标识了目标数据在第二内存中的位置;
步骤6,第二网卡对步骤5中的RDMA SEND请求中携带的经二目标地址进行数据封装,并将封装后得到的数据包发送给向第一网卡;
步骤7,第一网卡解析步骤6中的数据包,将解析后的数据内容(即,第二目标地址)进行缓存并通知第一RDMA模块读取解析后的数据内容;
步骤8,第一RDMA模块读取第二目标地址后,向第一网卡发送RDMA READ请求,该请求中携带有第一目标地址和第二目标地址;第一目标地址标识了第一RDMA模块期望将目标数据在第一内存中的位置;第一内存是第一RDMA模块所在网络设备中的内存;
步骤9,第一网卡对步骤8中的RDMA READ请求中携带的第一目标地址和第二目标地址进行数据封装,并将封装后得到的数据包发送给向第二网卡;
步骤10,第二网卡解析步骤9中的数据包,依据解析后的第二目标地址获取对应的目标数据,并对第一目标地址和目标数据进行数据封装,将封装后得到的数据包发送给第一网卡;
步骤11,第一网卡解析步骤10中的数据包,将解析后得到的目标数据写入第一内存;
步骤12,第一网卡通知第一RDMA模块数据接收完成;
步骤13,第一RDMA模块向第一网卡发送RDMA SEND请求,该请求中携带数据接收完成信息;
步骤14,第一网卡对步骤13中的RDMA SEND请求中携带的数据接收完成信息进行数据封装,并将封装后得到的数据包发送给第二网卡;
步骤15,第二网卡解析步骤14中的数据包,将解析后的数据内容(即,数据接收完成信息)进行缓存并通知第二RDMA模块读取解析后的数据内容;
步骤16,第二RDMA模块读取到数据接收完成信息后,将目标数据所占用的内存空间释放掉。
基于上述工作流程,本申请发明人发现,使用RDMA READ操作方式读取数据的过程效率不够高,这主要体现在,第一网络设备需要与第二网络设备进行2次数据包交互才能获得目标数据在第二网络设备上的内存地址。并且,在网络质量不好的时候,采用上述方案进行数据读取的时间过长,使得系统整体的性能下降。
针对该种情况,本申请提供了一种数据获取方法,如图2所示,以第一端为执行主体进行说明,该方法包括如下步骤:
S101,第一端以RDMA SEND操作方式向第二端发送数据读取请求,该数据读取请求中携带有数据标识,以使第二端根据数据标识查找目标数据;
S102,第一端接收第二端以RDMA WRITE操作方式发出的数据写入请求,该数据写入请求中携带有目标数据和第一目标地址;
S103,第一端按照第一目标地址,将目标数据写入第一端的内存中;第一目标地址指向了第一端的内存中的一段内存空间。
其中,第一端和第二端均是一种网络端,该网络端能够接入指定的网络(如局域网和广域网)。该网络端中应当包含有能够运行RDMA应用程序的载体和能够执行发送操作的网卡,上述步骤S101-S103通常是在RDMA应用程序和网卡的配合下完成的。具体的,第一端和第二端可以指服务器、PC等能够接入互联网的设备。
步骤S101中,第一端中运行的RDMA应用程序控制第一端中的网卡以RDMA SEND操作方式将数据标识向第二端发送。数据标识的作用是区分目标数据与其他的数据,具体而言,数据标识可以是某一种特征符号,比如目标数据的属性值、数据名、文件名+地址偏移,或者是某个块设备的逻辑地址(如共有50个块设备,则逻辑地址指的是块设备的编号)等。第二端在接收到数据标识之后,便需要采用数据查找的方式来找到目标数据。某种情况下,第二端查找目标数据的过程可以分为两种情况,第一种情况,第二内存(第二端中的内存)中已经存在有目标数据,则第二端直接将目标数据封装到数据写入请求中进行发送即可;第二种情况,第二内存中没有目标数据,此时则需要第二端依据数据标识在数据存储器(如硬盘、块设备)中查找目标数据,并将目标数据读取到第二内存中,而后,第二端再将目标数据封装到数据写入请求中进行发送。
步骤S102中,第一端中的网卡接收数据写入请求,并从数据写入请求中解析出目标数据和第一目标地址。而后,在步骤S103中第一端中的网卡不需要经过第一端中运行的RDMA应用程序,直接将目标数据写入到第一端的内存中,从而第一端可以通过“由第二端直接执行RDMA WRITE操作方式”来从第二端读取数据。
通常情况下,在第一端接收目标数据前,第一端中所运行的RDMA应用程序需要在其内存(第一内存)中申请一段用于写入目标数据的第一内存空间,该第一内存空间的地址便是第一目标地址。具体的,第一目标地址描述的是第一内存中的一段内存空间的位置属性,该段第一内存空间用于写入数据标识所对应的目标数据。
受协议的影响,第二端在将目标数据封装到数据写入请求中的时候,第二端需要知晓应当将目标数据写到第一内存中的哪个位置上,即需要知晓第一目标地址。第二端知晓第一目标地址的方式有两种,第一种是第一端向第二端发送过来的第一目标地址,比如第一端可以将第一目标地址携带在数据读取请求中向第二端发送(即,第一目标地址是由第一端向第二端发送的,该第一目标地址所对应的第一内存空间可以是第一端的RDMA应用程序在步骤S101执行前/执行时临时申请的);第二种是,第一目标地址是预先存储在第二端中的。
当然,在步骤S103执行完成后,通常还会有后续步骤,比如第二端以RDMA WRITE操作方式将数据写入第一端的内存中时,第一端的RDMA应用程序是不感知的,因而第二端需要向第一端发送通告数据传输完成的消息,以让第一端的RDMA应用程序感知到数据传输完成。并且第二端的RDMA应用程序还会释放目标数据所占用的第二内存中的空间。本段所说的后续步骤属于附加的改善型操作,与本方案的解决问题并无必然的关系。
又比如,步骤S103之后,第一端还可以继续对已经写到第一内存中的目标数据进行操作,比如将目标数据写入到硬盘中,并将第一内存中的目标数据删除,或者是使用第一内存中的目标数据执行其他操作。
与以第一端为执行主体的方法相对应的,如图3所示,本申请还提供了一种以第二端为执行主体的数据获取方法,该方法包括如下步骤:
步骤S201,第二端接收第一端以RDMA SEND操作方式发出的数据读取请求;该数据读取请求中携带有数据标识;
步骤S202,第二端根据数据标识查找目标数据;
步骤S203,第二端以RDMA WRITE操作方式向第一端发送数据写入请求,该数据写入请求中携带有目标数据和第一目标地址,以使第一端按照第一目标地址,将目标数据写入第一端的内存中;第一目标地址指向了第一端的内存中的一段内存空间。
对于步骤S201-步骤S203的解释说明可以参照对步骤S101-S103的说明,此处不再赘述。
本申请所提供的方法,第一端使用RDMA WRITE操作方式完成数据读取的过程中,第一端和第二端只需要进行更少量的交互,而后,第一端便可以将数据直接写入内存中,相较于相关技术中的工作方式而言,减少了两端的交互次数,提高了数据读取效率。某种情况下,提高了数据读取的速度,减少了数据读取失败的概率。
如前文中的说明,第二端知晓第一目标地址的方式有两种,对应的,第一种情况下,步骤S203中,第一目标地址是第一端发送给第二端的,例如,可以是第一端将第一目标地址携带在数据读取请求中发送给第二端的。第二种情况下,步骤S203中,第一目标地址是预存在第二端中的。
不论第一目标地址以何种形式被第二端所获知,第一端都应先申请,以预留出第一内存空间来写入目标数据。下面提供三种进行第一内存空间申请的方式:
第一种,本申请所提供的方法还包括:
第一端在系统启动的过程中,申请预留出第一内存空间(此时如果执行本申请所提供的方法的RDMA应用程序尚未运行,可以由其他已启动的程序进行申请,比如可以由系统启动程序进行申请);
第二种,本申请所提供的方法还包括:
第一端在RDMA应用程序启动时,申请预留出第一内存空间(执行本申请所提供的方法的程序可能不只有进行数据读写的一个功能,还可能会有其他功能,因此,可以在该程序启动时进行申请,以再后续的使用过程中直接进行数据的收发);执行该步骤的可以是RDMA应用程序本身,也可以是其他监控类型的程序。
第三种,本申请所提供的方法还包括:
第一端在执行步骤S101之前或者执行步骤S101的同时申请预留出第一内存空间。
上述三种申请预留出第一内存空间的方式相比,第一种方式能够保证申请预留空间足够早,这样能够保证申请到足够多的内存进行数据的接收,同时也能够保证第一时间执行本申请所提供的方法,但第一种方式过早的占用了预留的内存,可能对其他程序的运行造成阻碍。进而第一种方式更适合于对于数据接收时间更为严格的环境下使用。
第三种方式能够做到使用时才申请第一内存空间,不会过早的占用内存,但可能在申请时,内存空间已经不足的问题。第二种方式则考虑了第一种方式和第三种方式的优缺点,是一种折中的方案。
实际使用中,通常不只是第一端需要向第一内存申请空间,以存放目标数据,第二端也需要向位于第二端中的第二内存申请空间,以便于第二端的RDMA应用程序能够将数据从硬盘读取到第二内存中。比如当第二端的内存中没有目标数据时,第二端的RDMA应用程序需要将目标数据从硬盘中写入到第二端的内存(第二内存)中,而后第二端中的网卡才能够从第二内存中直接读取到目标数据。
也就是,步骤S202可以按照如下步骤执行:
步骤2021,第二端的RDMA应用程序在硬盘中查找目标数据;
步骤2022,第二端的RDMA应用程序将在硬盘中查找到的目标数据写入到第二端的第二内存空间中。
进而,在第二端的RDMA应用程序将目标数据从硬盘读取到第二内存中之前,第二端还需要提前申请预留第二内存中指定的内存空间(第二内存空间),以存放目标数据,该第二内存空间的地址也就是第二目标地址。
具体使用时,第二端可能不止一次向第一内存空间中写数据,因此,如果反复的进行写操作,则可能会将之前写入的数据覆盖掉,进而为了避免数据被覆盖,针对上述第一目标地址是预存在第二端中的情况,第二端应当在每次写入前后记录第一内存空间的使用情况信息,以便第二端清楚的知晓应当将数据写在第一内存中的哪个空间,即空闲空间。
进而,本申请所提供的方法还包括:
第二端根据使用情况信息确定第一目标地址;使用情况信息表明第二端曾经以RDMA WRITE操作方式向第一端发送数据写入请求中所携带的目标地址的使用情况。
也就是,第二端可以通过其内部存储的使用情况信息,自行确定哪些地址是可以写入的,哪些地址是不可以写入的。如果第二端曾经向第一端的指定位置写入过数据的话,如果这些数据尚未失效,则这些位置的地址不可以作为第一目标地址。
如前文中的说明,使用情况信息反映了第一内存中哪些位置是空闲的,即哪些位置是可以写入数据的。通常,可以写入数据的位置上是没有数据的(第二端未向该位置写入过数据),或者是可以写入数据的位置上的数据已经失效(如数据写入时间超过预定的阈值,其中数据写入时间指的是第二端最后一次向该位置写入数据的时刻与当前时刻的差值)。
进而,第一目标地址所对应的内存空间是未写入过数据的空间,或,第一目标地址所对应的内存空间中所写入的数据已经超过时效。
即,第二端应当使用没有写入过数据的内存空间,或者记录有超过时效的数据的内存空间。
随着第二端向第一内存空间中写入数据的增加,如果第一端一直不释放第一内存空间的数据,则会使得可以使用的空闲空间越来越少,进而导致第二端无法正常的向第一内存空间中写数据。针对该种情况,第一端也应当及时的释放第一内存空间,在释放第一内存空间后,第一端应当向第二端发送相应的告知信息,以使第二端及时的向释放掉的第一内存空间标记为空闲空间。
也就是,本申请所提供的方法还包括:
第一端以RDMA SEND操作方式向第二端发送已释放内存空间信息,以使第二端根据已释放内存空间信息对使用情况信息进行更新。
相对应的,第二端在接收到已释放内存空间信息后,则根据已释放内存空间信息对使用情况信息进行更新。
按照上述方式,第二端进行及时的更新后,就能够使得后续的写操作更为便利。其中,已释放内存空间信息所指向的内存空间是属于第一内存空间中的。已释放内存空间信息可以是在步骤S101中,第一端通过将其携带在数据读取请求中发送给第二端的,也可以是第一端通过其他步骤向第二端发送的。
具体的,已释放内存空间信息可以有两种存在形式,第一种是释放内存空间信息记录了已经释放(指数据被抹除或已经失效)的第一内存空间的具体地址;第二种是释放内存空间信息仅仅是一个符号,该符号标识了第一端和第二端预约好的第一内存空间已经完全释放完毕,即第一内存空间的任何位置都可以写入数据。
下面,以两个具体的实例来说明本申请所提供的方法。
实例1,一种数据读取方法,作用于使用RDMA WRITE操作方式进行数据读写的系统,如图4所示,该系统包括第一端和第二端,第一端包括第一RDMA模块、第一网卡和第一内存;第二端包括第二RDMA模块、第二网卡和第二内存;其中,第一RDMA模块和第二RDMA模块均运行RDMA应用程序;第一内存分别与第一RDMA模块和第一网卡连接;第二内存分别与第二RDMA模块和第二网卡连接;第一网卡和第二网卡通过有线/无线的方式连接。
该方法如下:
步骤1,第一端的系统在启动时,由系统启动程序申请预留第一内存的第一内存空间,并将第一内存空间的第一目标地址写入第一内存的指定字段;
步骤2,第一RDMA模块在启动运行后,从第一内存的指定字段中读取第一目标地址;
步骤3,第一RDMA模块向第一网卡发出RDMA SEND请求,该请求中携带有第一RDMA模块期望获取的目标数据的数据标识和用于存储目标数据的第一目标地址,第一目标地址指向了第一内存中的一段内存空间;
步骤4,第一网卡对步骤3中的RDMA SEND请求中携带的数据标识和第一目标地址进行数据封装,并将封装后得到的数据包(即,数据读取请求)发送给向第二网卡;
步骤5,第二网卡解析步骤4中的数据包,将解析后的数据内容(即,数据标识和第一目标地址)进行缓存并通知第二RDMA模块读取解析后的数据内容;
步骤6,第二RDMA模块根据读取到的数据标识查找对应的目标数据,并将目标数据读取到第二内存中;
步骤7,第二RDMA模块向第二网卡发出RDMA WRITE请求,该请求中携带有第一目标地址和第二目标地址,第二目标地址标识了目标数据在第二内存中的位置;
步骤8,第二网卡依据第二目标地址读取对应的目标数据,并对目标数据和第一目标地址进行数据封装;
步骤9,第二网卡向第一网卡发送步骤8中封装得到的数据包(即,数据写入请求);
步骤10,第一网卡将接收到的数据包中所携带的目标数据按照第一目标地址写入到第一内存中;
步骤11,第二网卡将步骤8中封装得到的数据包发送给第一网卡后,通知第二RDMA模块数据传输完成;
步骤12,第二RDMA模块向第二网卡发送RDMA SEND请求,并将目标数据所占用的内存空间释放掉,更新使用情况信息,该请求中携带数据传输完成信息;
步骤13,第二网卡对步骤12中的RDMA SEND请求中携带的数据传输完成信息进行数据封装,并将封装后得到的数据包发送给第一网卡;
步骤14,第一网卡解析步骤13中的数据包,将解析后的数据内容(即,数据传输完成信息)进行缓存并通知第一RDMA模块读取解析后的数据内容,以使第一RDMA模块知晓本次数据读取任务已完成。
实例2,仍以图4所示的系统为例,该数据读取方法如下:
前置步骤1,第一RDMA模块在RDMA应用程序启动时,申请预留第一内存中的第一内存空间,该第一内存空间用于存储目标数据,以及将第一内存空间所对应的可使用地址(可使用地址中包含有第一目标地址)向第二RDMA模块发送;
前置步骤2,第二RDMA模块在RDMA应用程序启动时,申请预留第二内存中的第二内存空间,该第二内存空间用于存储目标数据;
步骤1,第一RDMA模块向第一网卡发出RDMA SEND请求,该请求中携带有第一RDMA模块期望获取的目标数据的数据标识和表明第一内存空间已经释放完毕的已释放标识;
步骤2,第一网卡对步骤1中的RDMA SEND请求中携带的数据标识和已释放标识进行数据封装,并将封装后得到的数据包(即,数据读取请求)发送给第二网卡;
步骤3,第二网卡解析步骤2中的数据包,将解析后的数据内容(即,数据标识和已释放标识)进行缓存并通知第二RDMA模块读取解析后的数据内容;
步骤4,第二RDMA模块根据读取到的数据标识查找对应的目标数据,并将目标数据读取到第二内存中,以及根据读取到的已释放标识更新使用情况信息;
步驟5,第二RDMA模块根据使用情况信息从可使用地址中选择一个地址作为第一目标地址;
步骤6,第二RDMA模块向第二网卡发出RDMA WRITE请求,该请求中携带有第一目标地址和第二目标地址,第二目标地址标识了目标数据在第二内存中的位置;其中,第一目标地址是预存在第二RDMA模块所在设备的内存中的;
步骤7,第二网卡依据第二目标地址读取对应的目标数据,并对目标数据和第一目标地址进行数据封装;
步骤8,第二网卡向第一网卡发送步骤7中封装得到的数据包(即,数据写入请求);
步骤9,第一网卡将接收到的数据包中所携带的目标数据按照第一目标地址写入到第一内存中;
步骤10,第二网卡将步骤7中封装得到的数据包发送给第一网卡后,通知第二RDMA模块数据传输完成;
步骤11,第二RDMA模块向第二网卡发送RDMA SEND请求,并将目标数据所占用的内存空间释放掉,更新使用情况信息,该请求中携带数据传输完成信息;
步骤12,第二网卡对步骤11中的RDMA SEND请求中携带的数据传输完成信息进行数据封装,并将封装后得到的数据包发送给第一网卡;
步骤13,第一网卡解析步骤12中的数据包,将解析后的数据内容(即,数据传输完成信息)进行缓存并通知第一RDMA模块读取解析后的数据内容,以使第一RDMA模块知晓本次数据读取任务已完成。
与上述方法相对应的,本申请还提供了一种数据获取装置,该装置用于执行上述以第一端为执行主体的方法,该数据获取装置设置于第一端中,数据获取装置包括第一发送模块、第一接收模块和写入模块,其中:
第一发送模块,用于以RDMA SEND操作方式向第二端发送数据读取请求,该数据读取请求中携带有数据标识,以使第二端根据数据标识查找目标数据;
第一接收模块,用于接收第二端以RDMA WRITE操作方式发出的数据写入请求,该数据写入请求中携带有目标数据和第一目标地址;
写入模块,用于按照第一目标地址,将目标数据写入第一端的内存中;第一目标地址指向了第一端的内存中的一段内存空间
优选的,所述第一目标地址是由第一端向第二端发送的;
或,第一目标地址是预先存储在第二端中的。
优选的,该装置还包括:
第一申请模块,用于在第一端的系统启动的过程中,申请预留第一目标地址所对应的第一内存空间;
或,
第二申请模块,用于在RDMA应用程序在启动时,申请预留出第一内存空间。
优选的,该装置,还包括:
第三发送模块,用于以RDMA SEND操作方式向第二端发送已释放内存空间信息,以使第二端根据已释放内存空间信息对使用情况信息进行更新,所述使用情况信息表明第二端曾经以RDMA WRITE操作方式向第一端发送数据写入请求中所携带的目标地址的使用情况。
与上述方法相对应的,本申请还提供了一种数据获取装置,该装置用于执行上述以第二端为执行主体的方法,数据获取装置设置于第二端中,数据获取装置包括第二发送模块、查找模块和第二发送模块,其中:
第二接收模块,用于接收第一端以RDMA SEND操作方式发出的数据读取请求;该数据读取请求中携带有数据标识;
查找模块,用于根据数据标识查找目标数据;
第二发送模块,用于以RDMA WRITE操作方式向第一端发送数据写入请求,所述数据写入请求中携带有目标数据和第一目标地址,以使第一端按照第一目标地址,将目标数据写入第一端的内存中;第一目标地址指向了第一端的内存中的一段内存空间
优选的,所述第一目标地址是由第一端向第二端发送的;
或,第一目标地址是预先存储在第二端中的。
优选的,该装置还包括:
确定模块,用于根据使用情况信息确定第一目标地址;所述使用情况信息表明第二端曾经以RDMA WRITE操作方式向第一端发送数据写入请求中所携带的目标地址的使用情况。
优选的,该装置还包括:
更新模块,用于在接收到第一端以RDMA SEND操作方式发送的已释放内存空间信息后,则根据已释放内存空间信息对使用情况信息进行更新。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (10)
1.一种数据获取方法,其特征在于,包括:
第一端以远程内存直接访问发送RDMA SEND操作方式向第二端发送数据读取请求,所述数据读取请求中携带有数据标识,以使第二端根据数据标识查找目标数据;
第一端接收第二端以远程内存直接访问写入RDMA WRITE操作方式发出的数据写入请求,所述数据写入请求中携带有目标数据和第一目标地址;
第一端按照第一目标地址,将目标数据写入第一端的内存中;第一目标地址指向了第一端的内存中的一段内存空间;
所述第一目标地址是由第一端向第二端发送的;
或,第一目标地址是预先存储在第二端中的。
2.根据权利要求1所述的方法,其特征在于,还包括:
第一端在系统启动的过程中,申请预留第一目标地址所对应的第一内存空间;
或,
第一端在RDMA应用程序启动时,申请预留第一目标地址所对应的第一内存空间。
3.根据权利要求1所述的方法,其特征在于,还包括:
第一端以RDMA SEND操作方式向第二端发送已释放内存空间信息,以使第二端根据已释放内存空间信息对使用情况信息进行更新,所述使用情况信息表明第二端曾经以RDMAWRITE操作方式向第一端发送数据写入请求中所携带的目标地址的使用情况。
4.一种数据获取装置,其特征在于,数据获取装置设置于第一端中,数据获取装置包括第一发送模块、第一接收模块和写入模块,其中:
第一发送模块,用于以远程内存直接访问发送RDMA SEND操作方式向第二端发送数据读取请求,所述数据读取请求中携带有数据标识,以使第二端根据数据标识查找目标数据;
第一接收模块,用于接收第二端以远程内存直接访问写入RDMA WRITE操作方式发出的数据写入请求,所述数据写入请求中携带有目标数据和第一目标地址;
写入模块,用于按照第一目标地址,将目标数据写入第一端的内存中;第一目标地址指向了第一端的内存中的一段内存空间;所述第一目标地址是由第一端向第二端发送的;
或,第一目标地址是预先存储在第二端中的。
5.根据权利要求4所述的数据获取装置,其特征在于,还包括:
第一申请模块,用于在第一端的系统启动的过程中,申请预留第一目标地址所对应的第一内存空间;
或,
第二申请模块,用于在RDMA应用程序启动时,申请预留出第一内存空间。
6.根据权利要求4所述的数据获取装置,其特征在于,还包括:
第三发送模块,用于以RDMA SEND操作方式向第二端发送已释放内存空间信息,以使第二端根据已释放内存空间信息对使用情况信息进行更新,所述使用情况信息表明第二端曾经以RDMA WRITE操作方式向第一端发送数据写入请求中所携带的目标地址的使用情况。
7.一种数据获取方法,其特征在于,包括:
第二端接收第一端以远程内存直接访问发送RDMA SEND操作方式发出的数据读取请求;所述数据读取请求中携带有数据标识;
第二端根据数据标识查找目标数据;
第二端以远程内存直接访问写入RDMA WRITE操作方式向第一端发送数据写入请求,所述数据写入请求中携带有目标数据和第一目标地址,以使第一端按照第一目标地址,将目标数据写入第一端的内存中;第一目标地址指向了第一端的内存中的一段内存空间;
所述第一目标地址是由第一端向第二端发送的;
或,第一目标地址是预先存储在第二端中的。
8.根据权利要求7所述的方法,其特征在于,还包括:
第二端根据使用情况信息确定第一目标地址;所述使用情况信息表明第二端曾经以RDMA WRITE操作方式向第一端发送数据写入请求中所携带的目标地址的使用情况;
所述方法还包括:
第二端在接收到第一端以RDMA SEND操作方式发送的已释放内存空间信息后,则根据已释放内存空间信息对使用情况信息进行更新。
9.一种数据获取装置,其特征在于,数据获取装置设置于第二端中,数据获取装置包括第二发送模块、查找模块和第二发送模块,其中:
第二接收模块,用于接收第一端以RDMA SEND操作方式发出的数据读取请求;所述数据读取请求中携带有数据标识;
查找模块,用于根据数据标识查找目标数据;
第二发送模块,用于以RDMA WRITE操作方式向第一端发送数据写入请求,所述数据写入请求中携带有目标数据和第一目标地址,以使第一端按照第一目标地址,将目标数据写入第一端的内存中;第一目标地址指向了第一端的内存中的一段内存空间;所述第一目标地址是由第一端向第二端发送的;
或,第一目标地址是预先存储在第二端中的。
10.根据权利要求9所述的装置,其特征在于,还包括:
确定模块,用于根据使用情况信息确定第一目标地址;所述使用情况信息表明第二端曾经以RDMA WRITE操作方式向第一端发送数据写入请求中所携带的目标地址的使用情况;
所述的装置还包括:
更新模块,用于在接收到第一端以RDMA SEND操作方式发送的已释放内存空间信息后,则根据已释放内存空间信息对使用情况信息进行更新。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711404772.1A CN108228476B (zh) | 2017-12-22 | 2017-12-22 | 一种数据获取方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711404772.1A CN108228476B (zh) | 2017-12-22 | 2017-12-22 | 一种数据获取方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108228476A CN108228476A (zh) | 2018-06-29 |
CN108228476B true CN108228476B (zh) | 2021-02-09 |
Family
ID=62647836
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711404772.1A Active CN108228476B (zh) | 2017-12-22 | 2017-12-22 | 一种数据获取方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108228476B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111400213B (zh) * | 2019-09-29 | 2022-02-18 | 杭州海康威视系统技术有限公司 | 传输数据的方法、装置及系统 |
CN113422793A (zh) * | 2021-02-05 | 2021-09-21 | 阿里巴巴集团控股有限公司 | 数据传输方法、装置、电子设备及计算机存储介质 |
CN112954068B (zh) * | 2021-03-09 | 2022-09-27 | 西安奥卡云数据科技有限公司 | 一种基于rdma的数据传输方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103645994A (zh) * | 2013-11-05 | 2014-03-19 | 华为技术有限公司 | 一种数据处理方法及设备 |
CN105518611A (zh) * | 2014-12-27 | 2016-04-20 | 华为技术有限公司 | 一种远程直接数据存取方法、设备和系统 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7917597B1 (en) * | 2006-11-02 | 2011-03-29 | Netapp, Inc. | RDMA network configuration using performance analysis |
CN103929415B (zh) * | 2014-03-21 | 2018-03-06 | 华为技术有限公司 | Rdma下数据读写的方法、装置和网络系统 |
CN105893323A (zh) * | 2016-05-23 | 2016-08-24 | 华为技术有限公司 | 一种读数据的方法及设备 |
CN107241404B (zh) * | 2017-05-31 | 2020-05-29 | 郑州云海信息技术有限公司 | 一种消息收发的方法、装置及系统 |
-
2017
- 2017-12-22 CN CN201711404772.1A patent/CN108228476B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103645994A (zh) * | 2013-11-05 | 2014-03-19 | 华为技术有限公司 | 一种数据处理方法及设备 |
CN105518611A (zh) * | 2014-12-27 | 2016-04-20 | 华为技术有限公司 | 一种远程直接数据存取方法、设备和系统 |
Non-Patent Citations (1)
Title |
---|
"Exploiting application buffer reuse to improve MPI small message transfer protocols over RDMA-enabled networks";Mohammad J.Rashti,Ahmad Afsahi;《Cluster Computing》;20110603;第345-356页 * |
Also Published As
Publication number | Publication date |
---|---|
CN108228476A (zh) | 2018-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108228476B (zh) | 一种数据获取方法及装置 | |
CN106919494B (zh) | 安卓应用日志的实现方法和装置 | |
CN103593147A (zh) | 一种数据读取的方法及装置 | |
CN107329704B (zh) | 一种缓存镜像方法及控制器 | |
CN103595790A (zh) | 设备远程访问的方法、瘦客户端和虚拟机 | |
CN109951494B (zh) | 仿真数据处理方法、装置、仿真设备及存储介质 | |
KR20170010810A (ko) | 플래시 메모리 내에 데이터를 판독/기록하기 위한 방법, 장치 및 사용자 장비 | |
CN113596010B (zh) | 一种数据处理方法、装置、节点设备及计算机存储介质 | |
CN106330788B (zh) | 报文分片传输方法和装置 | |
CN103986779A (zh) | 一种应用数据传输方法、装置及终端设备 | |
CN109983749B (zh) | 计算设备和提高数据传递速度的方法 | |
CN107608630B (zh) | 数据读写方法及装置 | |
CN111930305A (zh) | 数据的存储方法和装置、存储介质、电子装置 | |
CN108664208B (zh) | 基于flash存储器的文件追加写操作方法及装置 | |
CN111431952B (zh) | 消息推送方法、装置及系统,计算机存储介质和电子设备 | |
CN109274721B (zh) | 一种基于虚拟磁盘映射的LAN-free传输方法及系统 | |
CN110019347A (zh) | 一种区块链的数据处理方法、装置及终端设备 | |
CN111309471B (zh) | 数据处理方法、装置及分布式系统 | |
CN103106140A (zh) | 智能显示设备测试信息显示方法 | |
CN107615259B (zh) | 一种数据处理方法及系统 | |
CN113360095B (zh) | 硬盘数据管理方法、装置、设备及介质 | |
CN108287793A (zh) | 响应消息的缓冲方法及服务器 | |
CN101917474B (zh) | 文件的下载方法、系统及装置 | |
CN110045929B (zh) | 一种挂载点管理方法及相关装置 | |
CN111625502A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |