一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种内存数据排序方法及相关设备与流程

2022-11-23 11:02:48 来源:中国专利 TAG:


1.本发明涉及大数据处理技术领域,尤其涉及一种内存数据排序方法及相关设备。


背景技术:

2.spark是专为大规模数据处理而设计的一种快速通用的计算引擎,是目前应用最广泛的分布式计算框架,能够完成各种各样的运算,例如sql查询、文本处理、机器学习等,已被部署在了无数的数据中心中。
3.数据洗牌(shuffle)是spark应用的核心阶段,其主要包括数据映射(map)阶段和数据减少(reduce)阶段,上述两个阶段都将涉及对数据进行排序的操作,map阶段是对数据进行初步排序,reduce阶段则是对数据进行最终组合排序。目前,spark利用hashmap、sort、tungsten-sort等排序算法实现对数据排序,然而,不管是使用何种排序算法,spark集群中的计算节点在进行数据排序时都需要先从源地址读取数据至缓存,然后再将数据重新写入目的地址中,这样将大量占用计算节点的缓存资源和中央处理器(central processing unit,cpu)资源。此外,当数据的源地址和目的地址在远端时,还将大量占用远端直接内存访问(remote direct memory access,rdma)网络带宽。
4.因此,如何实现在数据洗牌过程中减少对计算节点的内存占用和cpu占用,以及减少对网络带宽的占用是目前亟待解决的问题。


技术实现要素:

5.本发明实施例公开了一种内存数据排序方法及相关设备,能够通过智能网卡实现数据排序,降低在数据排序过程中对计算节点的内存占用和cpu占用,提高数据排序效率,降低数据排序成本。
6.第一方面,本技术提供了一种内存数据排序方法,包括:网卡接收第一映射表,所述第一映射表包括多个源地址和多个目的地址的一一对应关系,所述多个源地址和所述多个目的地址均为内存地址,其中,所述多个目的地址指向内存的第一存储空间,所述第一存储空间是一段连续的存储空间;该网卡根据所述第一映射表从所述多个源地址读取数据,并将读取的数据写入对应的目的地址中。
7.在本技术实施例中,网卡通过接收第一映射表并根据该第一映射表中多个源地址和多个目的地址的对应关系将数据从源地址中读取并写入目的地址,这样将不再依赖计算设备从源地址中读取数据以及将数据重新写入目的地址,数据的读写操作将由网卡进行替代,从而可以减少对计算设备的内存占用和cpu占用,提高了计算设备的资源利用率和数据排序效率,降低了数据排序成本。
8.结合第一方面,在第一方面的一种可能的实现方式中,网卡从所述第一计算设备的第一处理器接收所述第一映射表。
9.在本技术实施例中,当生成第一映射表的计算设备与网卡在同一端时,网卡可以直接接收与该网卡直接连接的计算设备的处理器发送的第一映射表,然后根据第一映射表
中记录的地址对应关系完成对数据的读取和写入。
10.结合第一方面,在第一方面的一种可能的实现方式中,网卡从第二计算设备的第二网卡接收所述第一映射表,所述第一映射表是由所述第二设备的第二处理器生成。
11.在本技术实施例中,当生成第一映射表的计算设备与网卡不在同一端时,该网卡可以通过rdma方式接收计算设备发送的第一映射表,然后根据第一映射表中记录的地址对应关系完成对数据的读取和写入。
12.结合第一方面,在第一方面的一种可能的实现方式中,所述第一映射表中所述多个源地址对应的多个数据是按照第一顺序排列的,所述多个目的地址是按照所述第一顺序依次从所述第一存储空间中分配的。
13.在本技术实施例中,为了保证网卡写入的数据是全局有序的,计算设备在生成第一映射表时需要先对数据进行排序得到第一顺序,然后根据得到的第一顺序从第一存储空间中分配目的地址,建立源地址和目的地址的对应关系,这样可以保证网卡在根据第一映射表进行数据读写时,写入第一存储空间中的数据是全局有序的,从而最终完成对数据的排序。
14.结合第一方面,在第一方面的一种可能的实现方式中,所述第一顺序是根据所述多个数据对应的关键字确定的。
15.在本技术实施例中,计算设备基于多个数据对应的关键字确定第一顺序,从而可以提高对数据进行排序的效率。
16.第二方面,本技术提供了一种内存数据排序方法,包括:处理器生成第一映射表,并将所述第一映射表发送给网卡,其中,所述第一映射表包括多个源地址和多个目的地址的一一对应关系,所述多个源地址和所述多个目的地址均为内存地址,其中,所述多个目的地址指向内存的第一存储空间,所述第一存储空间是一段连续的存储空间;所述网卡根据所述第一映射表从所述多个源地址读取数据,并将读取的数据写入对应的目的地址中。
17.在本技术实施例中,处理器在生成第一映射表之后将其发送给网卡,由网卡根据第一映射表中记录的源地址和目的地址的对应关系从源地址中读取数据并将数据写入目的地址中,不需要处理器再进行数据的读写,这样可以减少对处理器的内存占用和cpu占用,提高处理器的资源利用率和数据排序效率。
18.结合第二方面,在第二方面的一种可能的实现方式中,所述处理器对所述多个源地址对应的多个数据进行排序,得到第一顺序;所述处理器根据所述第一顺序,从所述第一存储空间中依次为所述多个数据分配目的地址,并生成所述第一映射表。
19.结合第二方面,在第二方面的一种可能的实现方式中,所述第一顺序是根据所述多个数据对应的关键字确定的。
20.第三方面,本技术提供了一种网卡,包括:接收模块,用于接收第一映射表,所述第一映射表包括多个源地址和多个目的地址的一一对应关系,所述多个源地址和所述多个目的地址均为内存地址,其中,所述多个目的地址指向内存的第一存储空间,所述第一存储空间是一段连续的存储空间;存储模块,用于根据所述第一映射表从所述多个源地址读取数据,并将读取的数据写入对应的目的地址中。
21.结合第三方面,在第三方面的一种可能的实现方式中,所述接收模块,具体用于:从所述第一计算设备的第一处理器接收所述第一映射表。
22.结合第三方面,在第三方面的一种可能的实现方式中,所述接收模块,具体用于:从第二计算设备的第二网卡接收所述第一映射表,所述第一映射表是由所述第二设备的第二处理器生成。
23.结合第三方面,在第三方面的一种可能的实现方式中,所述第一映射表中所述多个源地址对应的多个数据是按照第一顺序排列的,所述多个目的地址是按照所述第一顺序依次从所述第一存储空间中分配的。
24.结合第三方面,在第三方面的一种可能的实现方式中,所述第一顺序是根据所述多个数据对应的关键字确定的。
25.第四方面,本技术提供了一种计算设备,包括:处理器,用于生成第一映射表,并将所述第一映射表发送给网卡,所述第一映射表包括多个源地址和多个目的地址的一一对应关系,所述多个源地址和所述多个目的地址均为内存地址,其中,所述多个目的地址指向内存的第一存储空间,所述第一存储空间是一段连续的存储空间;所述网卡,用于根据所述第一映射表从所述多个源地址读取数据,并将读取的数据写入对应的目的地址中。
26.结合第四方面,在第四方面的一种可能的实现方式中,所述处理器,用于:对所述多个源地址对应的多个数据进行排序,得到第一顺序;根据所述第一顺序,从所述第一存储空间中依次为所述多个数据分配目的地址,并生成所述第一映射表。
27.结合第四方面,在第四方面的一种可能的实现方式中,所述第一顺序是根据所述多个数据对应的关键字确定的。
28.第五方面,本技术提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,当所述计算机程序被处理器执行时,可以实现上述第一方面以及结合上述第一方面中的任意一种实现方式所提供的内存数据排序方法的流程。
29.第六方面,本技术提供了一种计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面以及结合上述第一方面中的任意一种实现方式所提供的内存数据排序方法。
30.第七方面,本技术提供了一种计算机程序产品,当其在计算机上运行时,使得计算机执行上述第二方面以及结合上述第二方面中的任意一种实现方式所提供的内存数据排序方法。
附图说明
31.为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
32.图1是本技术实施例提供的一种spark集群部署示意图;
33.图2是本技术实施例提供的一种数据排序场景的示意图;
34.图3是本技术实施例提供的一种指针结构的示意图;
35.图4是本技术实施例提供的一种指针排序结果的示意图;
36.图5是本技术实施例提供的另一种数据排序场景的示意图;
37.图6是本技术实施例提供的一种系统结构的示意图;
38.图7是本技术实施例提供的一种数据排序方法的流程示意图;
39.图8是本技术实施例提供的一种另一种数据排序场景的示意图;
40.图9是本技术实施例提供的另一种数据排序方法的流程示意图;
41.图10是本技术实施例提供的一种网卡的结构示意图;
42.图11是本技术实施例提供的一种服务器的结构示意图;
43.图12是本技术实施例提供的另一种网卡的结构示意图。
具体实施方式
44.下面结合附图对本技术实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。
45.首先,结合附图对本技术中所涉及的部分用语和相关技术进行解释说明,以便于本领域技术人员理解。
46.弹性分布式数据集(resilient distributed datasets,rdd)是spark提供的一个抽象概念,是一种有容错机制的特殊数据集合,可以分布在集群的节点上。rdd为一个分布式对象集合,本质上是一个只读的分区记录集合,每个rdd可以分成多个分区,每个分区就是一个数据集片段,一个rdd的不同分区可以保存到集群中的不同节点上,从而可以在集群中的不同节点上进行并行计算。
47.数据洗牌是指按照一定的规则对数据(例如rdd)进行处理,例如按照键值进行排序或按照其它规则对数据进行处理,在本技术实施例中,数据洗牌可以理解为对数据进行排序,其具体排序过程将在map阶段和reduce阶段进行,map阶段的排序将缓解reduce阶段的排序压力,加快reduce阶段的排序效率。
48.内存池(memory pool)是指在计算节点本地内存空间不足的情况下所使用的外部内存,也可以称为堆外内存,计算节点可以使用内存池中的远端内存进行map和reduce,从而最终完成数据的排序。值得说明的是,在本技术实施例中,内存池可以由专门的存储服务器组成,也可以由spark集群中的多个计算节点组成,例如spark集群包含三个计算节点,分别为a、b、c,每个计算节点提供2gb的内存以组成内存池,则内存池总共的存储空间为6gb,若计算节点a在进行数据排序时内存空间不足,则计算节点a可以使用内存池中的6gb内存完成数据排序,另外,计算节点b和计算节点c所提供的内存对于计算节点a来说为远端内存,计算节点a可以通过rdma方式进行访问。
49.全局虚拟地址(global virtual address,gva)是指计算节点所能利用的所有内存(包括内存池)中的地址,其对用户来说是透明的,即用户无感知该gva是计算节点自身提供的内存地址,还是远端计算节点提供的内存地址。
50.rdma通信协议是一种用于进行rdma操作的计算设备所遵循的一套协议规范,目前有三种支持rdma的通信协议,分别是无限带宽(infiniband,ib)协议、以太网(rdma over converged ethernet,roce)协议、因特网广域(internet wide area rdma protocal,iwarp)协议,这三种协议都可以使用同一套api来使用,但它们有着不同的物理层和链路层。在通过rdma进行通信时,会在发送节点的网卡中创建发送队列(send queue,sq),相应的会在接收节点的网卡中创建与该发送队列相对应的接收队列(receive queue,rq),发送队列和接收队列形成队列对(queue pair,qp),将所述队列的地址映射给应用的虚拟地址,应用即可直接通过所述qp将数据传输至所述接收节点的网卡中,进而可以将数据存储于接
收节点的内存中。
51.目前在大规模数据集情况下,spark集群中的计算节点本身的内存空间将不足以支持对数据进行排序,需要利用远端的内存池完成数据排序。如图1所示,其示出了一种spark集群部署示意图,spark池110包括多个计算节点,例如计算节点1110和计算节点1120,每个计算节点可以为一个物理服务器(如应用服务器、数据库服务器等),每个计算节点都插置了一个rdma网卡,该rdma网卡用于与其它计算节点进行通信,例如计算节点1110上插置了网卡1111,内存池120也包括多个计算节点,例如计算节点1210和计算节点1220,每个计算节点可以为一个物理服务器(如存储服务器),用于为spark池中的计算节点提供堆外内存,其每个计算节点上也都插置了一个rdma网卡,该rdma网卡用于与spark池110中的计算节点进行通信。需要说明的是,内存池120中的计算节点可以与spark池110中的计算节点完全相同,即对于同一个服务器来说,其既可以属于spark池110中的计算节点,同时也可以属于内存池120中的计算节点,当然,内存池120中的计算节点也可以与spark池110中的计算节点完全不同,内存池120中的计算节点由专门的存储服务器组成,或者是,内存池120中的计算节点与spark池110中的计算节点部分相同部分不同,本技术对此不作限定。
52.spark集群中的计算节点在利用内存池对rdd进行排序处理时,可以通过堆外内存算法,例如tungsten-sort算法完成数据排序。如图2所示,其示出了一种数据排序场景的示意图,服务器210插置了rdma网卡2110,服务器210包括java虚拟机(java virtual machine,jvm)2120,jvm2120包含操作系统21210和内存21220,服务器220也插置了rdma网卡2210,服务器220中包括cpu2220和内存2230。在jvm2120被触发对数据进行排序时,首先,jvm2120申请全局内存,生成全局内存元数据,元数据为描述实际数据的数据,用于描述实际数据的属性(特征)信息,如元数据可以是实际的文件名,同时,元数据还可以具有对应的标识,用于对该元数据进行标识,元数据以及其对应的标识可以构成键值对,每组键值对可以包括关键字(key)以及该key所对应的值(value),value即为元数据本身,key用于对元数据进行标识。当jvm2120解析发现数据所对应的全局内存地址在远端,例如在服务器220中时,则将通过rdma2110以及rdma2210以rdma单边写入的方式将待排序数据写入服务器220的内存2230中,在完成数据写入后生成指针数组并存入内存21220中,其中,指针指向一段连续的地址空间,可以利用数据的关键字的标识(id)等生成指针,指针的名称由rdd的分区号、页码号以及在页面中的偏移量组成,共占64比特,其中,分区号占24个高比特,页码号占中间的13比特,页面中的偏移量占27个低比特,如图3所示,jvm虚拟机的内存中存储了四个指针,分别为指针1、指针2、指针3和指针4,每个指针占64比特且结构相同,例如指针1所占用的64比特分别为24比特的分区号、13比特的页码号及27比特的在页面中的偏移量。然后,jvm2120利用tungsten-sort算法对指针名称进行排序,具体可以根据指针的标识(id)以从小到大的顺序进行排序,示例性的,jvm2120所生成的指针数组中包括四个指针,其初始顺序为指针4、指针1、指针2、指针3,现在根据指针的id从小到大进行排序,那么重新排序后则为指针1、指针2、指针3、指针4,在对指针名称排序完成后,具有相同分区号和页码号的数据将会被排列在一起,如图4所示,分区号为0的数据被排列在了一起,分区号为1及分区号为2的数据也被排列在了一起,这样整个rdd都是有序排列的,之后,jvm2120根据已排序后的指针顺序从内存2230中读取数据到内存21220中,然后将读取到内存21220中的数据再依次写入到内存2230中,在完成所有数据写入之后,则可以确保所写入的数据都是有序的,最后
jvm2120修改指针所指向的地址,例如之前指针1指向的数据为数据块1,其所占的地址为a,在数据重新写入后,数据块1所占的地址为b,那么则将指针1指向的地址修改为地址b,从而保证后续能够正确的通过指针操作数据块1中的数据。
53.可以理解,上述图2所示的场景为全局内存地址在远端的情况,当全局内存地址在本端时,其排序原理也是一致的。如图5所示,服务器500包括jvm510和内存520,jvm510包含操作系统5110和内存5120,在jvm510被触发对数据进行排序时,jvm510申请全局内存,生成全局内存元数据,当jvm510解析发现数据所对应的全局内存地址在本地,即在内存520中时,则将数据写入内存520中,并生成指针数组存入jvm510的内存5120中,然后使用tungsten-sort算法对指针名称进行排序,在完成排序之后,根据重新得到的指针顺序从内存520中读取数据到内存5120中,再将读取到的数据依次写入到内存520中,完成所有数据写入之后可以确保所写入的数据都是全局有序的,最后jvm510修改指针所指向的地址,至此完成数据的重新排序。
54.可以看出,在上述图2及图5所示的数据排序的过程中,需要从远端内存中读取数据到jvm中,之后又需要重新写入远端内存中,数据两次经过网络,这样将会占用较大的rdma网络带宽,此外,在进行数据排序时需要先将数据读取到jvm的内存,然后由jvm将数据再写入本端或远端内存,将大量占用计算节点的内存资源和cpu资源,导致计算节点的资源被浪费,数据排序效率不高。
55.基于上述,本技术提供了一种数据排序方法,在对指针名称排序之后生成一个地址映射表,该地址映射表记录了数据的源地址和目的地址之间的对应关系,通过将该地址映射表发送给网卡,由网卡从源地址中读取数据,并将数据写入目的地址中,而无需计算节点的cpu参与,从而减少对网络带宽的占用,以及对计算节点的内存和cpu占用,提高数据排序的效率。
56.本技术实施例的技术方案可以应用于任何需要堆外内存的大规模数据排序场景中,例如spark集群和内存池融合部署的场景,或spark集群和内存池分离部署的场景。
57.图6示出了本技术实施例的一种系统架构的示意图。如图6所示,该系统600包括:服务器610和网卡620,服务器610可以直接与网卡620连接或服务器610通过rdma网络与网卡620进行连接,服务器610包括硬件层6110和软件层6120,软件层6120包括客户操作系统6121、虚拟机管理器(virtual machine manager,vmm)6122等,硬件层6110包括一个或多个第一处理器6111(例如cpu、图形处理器(graphics processing unit,gpu)、神经网络处理器(neural-network processing unit,npu)等)、第一内存6112、芯片6113(例如根复合体(root complex,rc)芯片)等硬件,该网卡620可以是特殊应用集成电路(application sprcific integrated circuit,asic)板卡或现场可编程逻辑门阵列(field programmable gate array,fpga)板卡等,其也包括硬件层6210和软件层6220,硬件层6210包括一个或多个第二处理器6211、第二内存6212以及芯片6213等硬件,其中第二处理器6211的能力可以弱于服务器610中的第一处理器6111的处理能力,软件层6220包括各种处理单元(例如i/o处理单元6221、计算单元6222等)以处理数据迁移相关流程。服务器610的第一处理器6111在完成对指针名称的重新排序之后,继续从内存池中申请一段连续的地址空间以用于存储重新写入的数据,该连续的地址空间可以是本地的内存,即第一内存6112,也可以是远端服务器的内存,然后根据数据的源地址以及所申请得到的地址建立它们之间
的对应关系,得到映射表,该映射表记录了多个源地址和多个目的地址的一一对应关系,之后将该映射表通过高速串行计算机扩展总线标准(peripheral component interconnect express,pcie)接口或rdma网络写入到网卡620的第二内存6212中,网卡620的第二处理器6211按照映射表的顺序读取源地址中的数据,然后将其写入目的地址中。
58.可以理解,服务器通过生成映射表并发送给网卡,由网卡根据映射表中记录的数据的源地址和目的地址之间的对应关系从源地址中读取数据,并将数据写入到目的地址中,不需要再依赖服务器完成数据的读取和写入,不需要占用服务器的内存资源和cpu资源,从而降低了服务器的资源占用率,提高了服务器资源的利用率。
59.spark集群中的服务器在进行数据排序时需要使用内存池所提供的内存,而内存池中的内存可能是由本地的服务器进行提供,也可能是由远端的服务器进行提供,下面将对这两种情况下数据排序过程进行分别介绍。
60.若内存池中的内存是由远端服务器所提供得到,则数据排序流程如图7所示,该流程包括:
61.s701:服务器接收数据排序命令。
62.具体地,该服务器可以是spark集群中的服务器,数据排序命令用于指示服务器对rdd进行排序,其中,数据排序命令可以包括rdd的名称、rdd所包含的数据量等信息。
63.另外,数据排序命令是在满足预设条件下发出的,预设条件可以为spark集群需要对有序的rdd进行数据处理(例如数据压缩等)或其它需要有序rdd的情况,spark集群管理器可以预先获取上述情况,并根据上述情况在集群中选择适合的服务器,并向其发送数据排序命令。
64.s702:服务器将数据写入远端内存。
65.具体地,服务器在接收到数据排序命令之后,申请全局内存并生成全局内存元数据,在申请完成之后,服务器进一步解析该全局内存元数据,解析得到所申请的内存在远端,即所申请得到的内存不是本服务器的内存,而是其它服务器的内存,则服务器将发起rdma将rdd的数据写入远端服务器的内存中。
66.进一步的,服务器在将数据写入远端内存时,可以得到数据所存储的地址,即数据的源地址,并且可以利用数据的关键字的id等生成指针,指针指向一段连续的地址空间,即rdd数据所占用的地址可以用一个指针数组进行表示,需要说明的是,每一个指针所指向的地址内的数据是有序的,即对于rdd来说,其所包含的数据在局部上是有序的,但整体上仍处于无序状态。服务器在生成指针数组之后会将其存入内存之中。
67.s703:服务器对指针名称进行排序。
68.具体地,服务器利用堆外内存算法,例如tungsten-sort算法,对指针名称进行排序,例如,可以将指针名称的id转换成美国信息交换标准代码(american standard code for information interchang,ascii),然后按照从小到大的顺序进行排序,得到重新排序后的指针数组。
69.可以理解,在对指针数组进行排序之后,可以保证具有相同分区号和页码号的数据被排列在一起,从而可以保证整个rdd都是有序排列的。
70.s704:服务器根据排序完成的指针数组,生成第一映射表。
71.具体地,服务器在完成指针排序后,将继续申请一段连续的存储空间,该连续的存
储空间用于存储排序后的数据,该连续的存储空间的大小与最开始写入远端内存的rdd所占用的存储空间相同。
72.在完成申请之后,服务器将依次为多个数据分配多个地址,该多个地址即为数据待写入的目的地址,然后服务器根据指针排序结果,将数据的多个源地址与数据的多个目的地址建立一一对应关系,并通过生成第一映射表来记录该关系。
73.s705:服务器将第一映射表发送给远端网卡。
74.具体地,本地服务器将使用rdma接口,通过rdma的方式将第一映射表发送给远端服务器的网卡,本地服务器的网卡和远端服务器的网卡在建立rdma连接的过程中将会协商创建qp,在创建qp时将会创建关联的发送队列sq和接收队列rq,在创建完成之后,本地服务器的网卡和远端服务器的网卡可以利用qp进行通信。应理解,本地服务器的网卡和远端服务器的网卡可以同时创建多个qp,并利用所创建的多个qp完成通信。
75.进一步的,本地服务器的网卡将提交的工作请求(wr)保存到工作队列(wq),其中,工作队列包括发送队列(sq)和接收队列(rq),工作队列中的每一个元素叫做wqe,wqe指向服务器所生成的第一映射表,远端服务器的网卡从接收队列中取出工作请求(即wqe)来执行,在执行wqe时,将wqe所指向的第一映射表存入该网卡的内存中。
76.s706:远端网卡根据第一映射表,完成数据的读取和重新写入。
77.具体地,远端网卡在将第一映射表存入内存之后,将进一步解析该第一映射表,从而得到多个源地址和多个目的地址之间的一一对应关系,然后按照第一映射表所记录的数据的源地址顺序,从远端服务器的内存中读取数据,并将读取的数据写入与该源地址对应的目的地址中,远端网卡可以同时从远端服务器的内存中读取数据并将读取的数据写入该内存中,直至将所有的数据重新写入目的地址中。
78.可以理解,远端网卡在完成所有数据重新写入之后,可以确保所写入的数据都是有序的,即重新写入远端内存中的数据不仅在局部上是有序的,而且在整体上也是有序的。
79.s707:远端网卡向服务器返回数据写入完成信息。
80.具体地,远端网卡在完成所有数据的重新写入之后,在与qp对应的完成队列(cq)中放置工作完成(wc),该wc指示远端网卡完成数据重新写入完成,本地网卡在解析cq之后,确定数据已重新写入完成,然后通知服务器数据重新写入完成。
81.s708:服务器修改指针的指向地址。
82.具体地,服务器在确定数据已按照指针排序后的顺序重新写入远端内存之后,需要修改指针所指向的地址,指针之前所指向的地址为数据的源地址,此时,需要将指针所指向的地址修改为数据的目的地址,这样可以保证后续能够正确的通过指针来操作该指针所指向的地址空间中的数据。
83.为了更进一步的说明上述图7所述的数据排序流程,请参见图8,图8是本技术提供的一种数据排序的场景示意图。如图8所示,本地服务器810包括jvm8110,jvm8110包括操作系统81110和内存81120,内存81120中存储了初始指针数组以及重新排序后的指针数组,以及根据排序后的指针数组生成的第一映射表,该第一映射表记录了数据的源地址和目的地址之间的对应关系,本地网卡820包括发送队列8210和完成队列8220,发送队列8210中包括工作请求wqe,wqe指向内存81120中的第一映射表,远端网卡830包括接收队列8310、内存8320以及计算单元8330,其中,接收队列8310中包括wqe,远端网卡830将通过rdma网卡接口
将第一映射表写入内存8320中,计算单元8330解析内存8320中的第一映射表,并从远端服务器840的内存8410中读取数据,然后将读取的数据再次写入目的地址(即内存8420)中,在完成所有数据重新写入之后,远端网卡830在返回wc给本地网卡的完成队列8220,该wc指示数据写入完成,本地网卡820在解析完成队列8220中的cq之后,确定数据重新写入完成,通知jvm8110数据写入完成,jvm8110修改内存81120中指针所指向的地址。
84.可以看出,在根据第一映射表从远端内存中读取数据以及将读取的数据写入目的地址的整个过程中,都不需要服务器的软件和cpu参与,仅仅通过远端网卡就可以完成数据读取和重新写入,减小了对服务器的内存占用和cpu占用,提高了数据排序的效率。
85.同理,若内存池中的内存是由本地服务器所提供得到,则数据排序流程如图9所示,该流程包括:
86.s901:服务器接收数据排序命令。
87.具体地,数据排序命令的内容以及触发条件可以参照上述s701中的相关描述,为了简洁,在此不再赘述。
88.s902:服务器将数据写入本地内存。
89.具体地,服务器申请全局内存并生成全局内存元数据,然后对全局内存元数据进行解析,得到所申请的内存在本地,即从内存池中所申请得到的内存是由本地服务器所提供的内存,则服务器将rdd的数据直接写入本地内存中。
90.此外,服务器在将数据写入本地内存时将确定数据所存储的源地址,且同时利用数据的关键字的id等生成指针数组并存入内存中。
91.s903:服务器对指针名称进行排序。
92.具体地,其排序过程可以参照上述s703中的相关描述。
93.s904:服务器根据排序完成的指针数组,生成第一映射表。
94.具体地,服务器在完成指针排序后,将申请内存用于存储重新写入的数据,该申请的内存可以是服务器的本地内存,在申请完成后,服务器将依次为多个数据分配多个本地内存中的地址,然后将分配的多个目的地址与数据的多个源地址建立一一对应关系,进而生成第一映射表。
95.s905:服务器将第一映射表发送给本地网卡。
96.具体地,服务器可以使用本地网卡的环回接口(loopback)将第一映射表写入到本地网卡的内存中,这里利用本地网卡的环回接口完成对第一映射表的写入,可以节约本地网卡的接口资源,提高写入效率。
97.s906:本地网卡根据第一映射表,完成数据的读取和重新写入。
98.具体地,本地网卡对内存中的第一映射表进行解析,得到多个源地址和多个目的地址之间的一一对应关系,然后根据源地址从服务器的内存中读取数据,并将读取的数据写入与该源地址对应的目的地址中。在完成所有数据写入之后,可以保证所写入的所有数据在整体上都是有序的。
99.s907:本地网卡向服务器返回数据写入完成信息。
100.s908:服务器修改指针的指向地址。
101.具体地,可以参照上述s708中的相关描述。
102.应理解,图9所示的方法实施例与图7所示的方法实施例基于同一思想,在具体实
现过程中可以相互参照,为了简洁,在此不再赘述。
103.可以看出,服务器在将第一映射表写入本地网卡后,本地网卡可以替代服务器,根据该第一映射表将数据从本地内存中读取并再次写入,不再依赖于服务器的cpu参与,减小了对服务器内存占用和cpu占用。
104.上述详细阐述了本技术实施例的方法,为了便于更好的实施本技术实施例的上述方案,相应地,下面还提供用于配合实施上述方案的相关设备。
105.参见图10,图10是本技术实施例提供的一种网卡的结构示意图。如图10所示,该网卡10包括:接收模块11和处理模块12。其中,
106.接收模块11,用于接收第一映射表,所述第一映射表包括多个源地址和多个目的地址的一一对应关系,所述多个源地址和所述多个目的地址均为内存地址,其中,所述多个目的地址指向内存的第一存储空间,所述第一存储空间是一段连续的存储空间;
107.处理模块12,用于根据所述第一映射表从所述多个源地址读取数据,并将读取的数据写入对应的目的地址中。
108.应理解,网卡包括的各模块可以为软件模块、也可以为硬件模块、或部分为软件模块部分为硬件模块,各个模块之间互相可以通过通信通路进行数据传输。
109.作为一个实施例,所述接收模块11,具体用于:从所述第一计算设备的第一处理器接收所述第一映射表。
110.作为一个实施例,所述接收模块11,具体用于:从第二计算设备的第二网卡接收所述第一映射表,所述第一映射表是由所述第二设备的第二处理器生成。
111.作为一个实施例,所述第一映射表中所述多个源地址对应的多个数据是按照第一顺序排列的,所述多个目的地址是按照所述第一顺序依次从所述第一存储空间中分配的。
112.作为一个实施例,所述第一顺序是根据所述多个数据对应的关键字确定的。
113.应理解,上述网卡的结构仅仅作为一种示例,不应构成具体的限定,可以根据需要对网卡的各个模块进行增加、减少或合并。此外,网卡中的各个模块的操作和/或功能分别为了实现上述图7和图9所描述的方法的相应流程,为了简洁,在此不再赘述。
114.本技术实施例提供了一种内存数据排序系统,该内存数据排序系统包括服务器和网卡,其中,网卡可以插置于服务器上。如图11所示,服务器包括一个或多个处理器20、通信接口21和存储器22,其中,处理器20、通信接口21和存储器22之间可以通过总线23连接。其中,总线可以是pcie总线或者其他高速总线。
115.处理器20包括一个或者多个通用处理器,其中,通用处理器可以是能够处理电子指令的任何类型的设备,包括中央处理器(central processing unit,cpu)、微处理器、微控制器、主处理器、控制器以及专用集成电路(application specific integrated circuit,asic)等等。处理器20执行各种类型的数字存储指令,例如存储在存储器22中的软件或者固件程序,它能使服务器提供较宽的多种服务。例如,处理器20能够执行程序或者处理数据,以执行本文讨论的方法的至少一部分。
116.通信接口21可以为有线接口(例如以太网接口),用于与客户端进行通信。当通信接口21为有线接口时,通信接口21可以采用tcp/ip之上的协议族,例如,raas协议、远程函数调用(remote function call,rfc)协议、简单对象访问协议(simple object access protocol,soap)协议、简单网络管理协议(simple network management protocol,snmp)
协议、公共对象请求代理体系结构(common object request broker architecture,corba)协议以及分布式协议等等。
117.存储器22可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,ram);存储器也可以包括非易失性存储器(non-volatile memory),例如只读存储器(read-only memory,rom)、快闪存储器(flash memory)、硬盘(hard disk drive,hdd)或固态硬盘(solid-state drive,ssd)存储器还可以包括上述种类的存储器的组合。存储器可以用于存储客户操作系统以及vmm。
118.可以理解,上述服务器可以用于执行如图7和图9中服务器执行的步骤,具体请参阅图7和图9以及相关描述。
119.如图12所示,网卡包括一个或多个处理器30、通信接口31和存储器32。其中,处理器30、通信接口31和存储器32之间可以通过总线33连接。
120.处理器30包括一个或者多个通用处理器,其中,通用处理器可以是能够处理电子指令的任何类型的设备,包括cpu、微处理器、微控制器、主处理器、控制器以及asic等等。处理器30执行各种类型的数字存储指令,例如存储在存储器32中的软件或者固件程序,它能使客户端提供较宽的多种服务。例如,处理器30能够执行程序或者处理数据,以执行本文讨论的方法的至少一部分。
121.通信接口31可以为有线接口(例如以太网接口),用于与服务器或用户进行通信。当通信接口31为有线接口时,通信接口31可以采用tcp/ip之上的协议族,例如,raas协议、rfc协议、soap协议、snmp协议、corba协议以及分布式协议等等。
122.存储器32可以包括易失性存储器(volatile memory),例如ram;存储器也可以包括非易失性存储器(non-volatile memory),例如rom、快闪存储器(flash memory)、hdd或ssd存储器还可以包括上述种类的存储器的组合。存储器32中可以用于存储各个功能模块,例如接收模块、处理模块。
123.可以理解,上述网卡可以用于执行如图7和图9中网卡执行的步骤,具体请参阅图7和图9以及相关描述。
124.本技术实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时,可以实现上述方法实施例中记载的任意一种的部分或全部步骤。
125.本技术实施例还提供了一种计算机程序产品,当其在计算机或处理器上运行时,使得计算机或处理器执行上述任一个方法中的一个或多个步骤。上述所涉及的设备的各组成模块如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在所述计算机可读取存储介质中。
126.在上述实施例中,对各个实施例的描述各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
127.应理解,本文中涉及的第一、第二、第三、第四以及各种数字编号仅为描述方便进行的区分,并不用来限制本技术的范围。
128.应理解,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
129.还应理解,在本技术的各种实施例中,上述各过程的序号的大小并不意味着执行
顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术实施例的实施过程构成任何限定。
130.本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。
131.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
132.在本技术所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
133.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
134.另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
135.所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
136.本技术实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。
137.本技术实施例装置中的模块可以根据实际需要进行合并、划分和删减。
138.以上所述,以上实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献