CN115933973B - 远程更新数据的方法、rdma系统及存储介质 - Google Patents
远程更新数据的方法、rdma系统及存储介质 Download PDFInfo
- Publication number
- CN115933973B CN115933973B CN202211490824.2A CN202211490824A CN115933973B CN 115933973 B CN115933973 B CN 115933973B CN 202211490824 A CN202211490824 A CN 202211490824A CN 115933973 B CN115933973 B CN 115933973B
- Authority
- CN
- China
- Prior art keywords
- command
- data
- network card
- rdma network
- wqes
- 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
Abstract
本申请实施例公开了一种远程更新数据的方法、RDMA系统及存储介质,属于存储技术领域。所述方法包括:第一RDMA网卡接收来自第二RDMA网卡的数据更新请求;第一RDMA网卡响应于数据更新请求从第一QP中预取并执行多个第一WQE,以将第一数据存储区中数据标识所指示的数据更新为目标数据。也即,预先在服务端的内存中部署能够被第一RDMA网卡直接调用的多个第一WQE,这样当第一RDMA网卡接收到第二RDMA网卡发送的数据更新请求时,便可直接调用这多个第一WQE以实现数据更新。整个过程只需要一次RTT,且无需服务端的CPU参与,因此还可以减少服务端的CUP开销,以降低服务端更新数据所需的时延。
Description
技术领域
本申请实施例涉及存储技术领域,特别涉及一种远程更新数据的方法、RDMA系统及存储介质。
背景技术
通过远程直接内存访问(remote direct memory access,RDMA)技术,不同存储系统可以互相访问对方的内存,以达到远程访问的目的。其中,发起访问的存储系统可以称为客户端,被访问的存储系统可以称为服务端。在某些场景中,客户端可以对服务端的内存中的数据进行修改,该过程可以称为远程更新数据。
发明内容
本申请实施例提供了一种远程更新数据的方法、RDMA系统及存储介质,可以在固定RTT为1的情况下,减少服务端的CPU的参与,从而减少CPU开销,相应地减少总时延。所述技术方案如下:
第一方面,提供了一种远程更新数据的方法,该方法应用于远程直接内存访问RDMA系统,RDMA系统包括服务端和客户端,服务端包括第一内存和第一RDMA网卡,第一内存包括第一队列对QP和第一数据存储区,第一QP包括多个第一工作队列元素WQE,多个第一WQE用于实现更新第一数据存储区中的数据,客户端包括第二RDMA网卡。
在该方法中,第一RDMA网卡接收来自第二RDMA网卡的数据更新请求,数据更新请求携带数据标识以及目标数据,数据标识指示的数据存储在第一数据存储区;第一RDMA网卡响应于数据更新请求从第一QP中预取并执行多个第一WQE,以将第一数据存储区中数据标识所指示的数据更新为目标数据。
在本申请实施例中,预先在服务端的内存中部署能够被第一RDMA网卡直接调用的多个第一WQE,这样当第一RDMA网卡接收到第二RDMA网卡发送的数据更新请求时,便可直接调用这多个第一WQE以实现数据更新。整个过程只需要一次网络往返次数(Round TripTimes,RTT),且无需服务端的CPU参与,因此还可以减少服务端的CUP开销,以降低服务端更新数据所需的时延。
基于第一方面提供的方法,在一些实施例中,数据标识包括哈希桶首地址,目标数据包括值数据,多个第一WQE包括第一接收命令、读命令、第一空操作命令和第二空操作命令。这种场景下,第一RDMA网卡执行多个第一WQE的实现方式可以为:第一RDMA网卡执行第一接收命令、读命令、第一空操作命令和第二空操作命令;其中,第一接收命令指示将哈希桶首地址存储至读命令中,将值数据存储至第一空操作命令中,读命令指示基于哈希桶首地址读取值数据对应的指针,并将指针存储至第二空操作命令中,第二空操作命令指示将第一空操作命令中缓存的值数据写入第一数据存储区中指针对应的位置处。
第一RDMA网卡通过RDMA原语中的第一接收命令、读命令、第一空操作命令和第二空操作命令等几个WQE,便可实现更新第一内存中的键值对中的值数据。
基于第一方面提供的方法,在一些实施例中,数据标识还包括键数据,多个第一WQE还包括比较并替换命令,第一接收命令还指示将键数据存储至比较并替换命令中,读命令还指示基于哈希桶首地址查找本地键数据,并将本地键数据存储至第二空操作命令中。
这种场景下,第一RDMA网卡执行第一接收命令之后,第一RDMA执行比较并替换命令;其中,比较并替换命令指示通过第二空操作命令比较本地键数据与键数据,如果本地键数据与键数据相等,则将第二空操作命令的操作码更新为写操作,相应地,第二空操作命令指示在操作码为写操作时将第一空操作命令中缓存的值数据写入第一数据存储区中指针对应的位置处。
通过RDMA原语中的比较并替换命令,还可以实现在更新数据之前通过键数据对客户端进行验证。
基于第一方面提供的方法,在一些实施例中,多个第一WQE还包括立即写命令,读命令还指示将指针存储至立即写命令中。
这种场景下,第一RDMA网卡执行第二空操作命令之后,第一RDMA网卡执行立即写命令;其中,立即写命令指示将第一数据存储区中指针对应的位置处更新后的值数据返回给第二RDMA网卡。
通过RDMA原语中的立即写命令可以实现服务端向客户端告知数据更新是否完成。
基于第一方面提供的方法,在一些实施例中,多个第一WQE包括使能命令和等待命令,使能命令指示多个第一WQE中其他至少一个命令的预取顺序,等待命令指示多个第一WQE中其他至少一个命令的执行顺序。
这种场景下,第一RDMA网卡响应于数据更新请求从第一QP中预取并执行多个第一WQE的实现方式可以为:第一RDMA网卡从第一QP中预取使能命令和等待命令;第一RDMA网卡执行使能命令和等待命令,以控制预取多个第一WQE中其他至少一个命令的顺序、以及响应于数据更新请求执行多个第一WQE中其他至少一个命令的顺序。
通过RDMA原语中的使能命令和等待命令,可以控制数据更新过程中各个命令的有序进行。
基于第一方面提供的方法,在一些实施例中,服务端还包括第一处理器。这种场景下,第一RDMA网卡接收来自第二RDMA网卡的数据更新请求之前,第一处理器在第一内存中创建第一QP;第一处理器发布多个第一WQE,并在第一QP中部署多个第一WQE。
为了实现本申请实施例提供的数据更新方法,第一处理器可以预先在第一内存中部署用于实现数据更新操作的多个第一WQE。
基于第一方面提供的方法,在一些实施例中,客户端还包括第二内存,第二内存包括第二QP,第二QP包括至少一个第二WQE,至少一个第二WQE用于实现向服务端发送数据更新请求。这种场景下,第一RDMA网卡接收来自第二RDMA网卡的数据更新请求的实现方式可以为:第二RDMA网卡从第二QP中预取并执行至少一个第二WQE,以向第一RDMA网卡发送数据更新请求。
为了能够实现第二RDMA网卡避开处理器直接向第一RDMA网卡发送数据更新请求,第二RDMA网卡可以通过至少一个第二WQE向第一RDMA网卡发送数据更新请求。
基于第一方面提供的方法,在一些实施例中,至少一个第二WQE包括发送命令。这种场景下,第二RDMA网卡执行至少一个第二WQE的实现方式可以为:第二RDMA网卡执行发送命令;其中,发送命令指示将数据更新请求通过第二RDMA网卡与第一RDMA网卡之间的通信链路发送至第一RDAM网卡。
通过RDMA原语中的发送命令可以实现第二RDMA网卡向第一RDMA网卡发送数据更新请求。
基于第一方面提供的方法,在一些实施例中,至少一个第二WQE还包括第二接收命令。这种场景下,第二RDMA网卡执行第二接收命令;其中,第二接收命令指示接收第一RDMA网卡返回的更新后数据,并在判断第一RDMA网卡返回的更新后数据与数据更新请求携带的目标数据一致时,确定远程数据更新成功。
通过第二接收命令,客户端能够确认服务端上的数据是否更新成功。
基于第一方面提供的方法,在一些实施例中,客户端还包括第二处理器。这种场景下,在第二RDMA网卡从第二QP中预取并执行至少一个第二WQE之前,第二处理器在第二内存中创建第二QP;第二处理器发布至少一个第二WQE,并在第二QP中部署至少一个第二WQE。
为了实现本申请实施例提供的数据更新方法,第二处理器可以预先在第二内存中部署用于发送数据更新请求的至少一个第二WQE。
第二方面,提供了一种RDMA系统,所述RDMA系统包括服务端和客户端,所述服务端和所述客户端用于实现上述第一方面所述的远程更新数据的方法。
第三方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面所述的远程更新数据的方法。
第四方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面所述的远程更新数据的方法。
上述第二方面、第三方面、第四方面和第五方面所获得的技术效果与第一方面中对应的技术手段获得的技术效果近似,在这里不再赘述。
附图说明
图1是本申请实施例提供的一种通过单边方法远程更新数据的流程图;
图2是本申请实施例提供的一种通过双边方法远程更新数据的流程图;
图3是本申请实施例提供的一种RDMA系统的架构示意图;
图4是本申请实施例提供的一种工作队列示意图;
图5是本申请实施例提供的另一种RDMA系统的架构示意图;
图6是本申请实施例提供的一种远程更新数据的方法流程图;
图7是本申请实施例提供的一种键值存储方式的原理示意图;
图8是本申请实施例提供的一种控制段(ctrl),远程地址段(raddr),数据段(data)和原子段(atomic)中每个字段的代码示意图;
图9是本申请实施例提供的一种执行第一接收命令、读命令、比较并替换命令、第一空操作命令、第二空操作命令和立即写命令的流程示意图;
图10是本申请实施例提供的一种服务端和客户端上各个命令的执行顺序的流程图;
图11是本申请实施例提供的另一种远程更新数据的流程示意图;
图12是本申请实施例提供的另一种RDMA系统的架构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
应当理解的是,本文提及的“多个”是指两个或两个以上。在本申请的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,为了便于清楚描述本申请实施例的技术方案,在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
在对本申请实施例进行详细解释说明之前,先对本申请实施例的应用场景进行介绍。
图片、视频、超文本标记语言(hyper text markup language,HTML)文档等非结构化数据在互联网环境中十分常见。并且,随着网络技术、社交媒体、物联网设备的不断发展,这些非结构化数据的总量呈指数级增长。
键值存储系统通过键值对进行数据存取,非常适合对网络中的非结构化数据进行管理。其中,基于哈希结构的键值存储系统由于其优秀的查找和写入性能(复杂度为O(1))被广泛使用。目前基于哈希结构的键值存储系统有Memcached(一种键值存储系统)和Redis(一种键值存储系统)等。如何进一步提高基于哈希结构的键值存储系统的查找和写入性能是当前研究的热点。
远程直接内存访问(remote direct memory access,RDMA)技术是一种绕过远程主机操作系统内核直接访问其内存中数据的技术。由于访问内存不经过操作系统,不仅节省了大量CPU资源,同样也提高了系统吞吐量、降低了系统的网络通信延迟,尤其适合在大规模并行计算机集群中广泛应用。
RDMA技术因其低时延、高吞吐量、绕过内核、低中央处理器(central processingunit,CPU)开销等特性,被广泛用于键值存储系统中以提升键值存储系统的查找和写入性能。目标诸如Pilaf、FaRM、HERD、DrTM、FaSST、Nessie、KV-Direct、RACE、ChiqueMap等基于哈希结构的键值存储系统均可以使用RDMA技术进行远程访问。
RDMA技术提供了二种类型的原语,包括双边原语和单边原语,通过这二种类型的原语不同的存储系统可以互相访问对方的内存。其中,双边原语是指在服务端和客户端之间成对使用的原语,比如发送(SEDN)/接收(RECEIVE)这两个命令属于双边原语。单边原语是指客户端或服务端单边使用的原语,比如读(READ)和写(WRITE)、获取并添加(Fetch AndAdd)以及比较并替换(Compare And Swap)等命令属于单边原语。
基于RDMA技术提供的原语,客户端可以修改服务端的内存中的数据,以实现远程数据更新。目前实现远程数据更新的方式有以下三种。
第一种远程数据更新方式:单边方法。
图1是本申请实施例提供的一种通过单边方法远程更新数据的流程图。如图1所示,客户端(client)先根据键数据(key)和哈希函数(h)求得服务端(server)中哈希桶的首地址(h(key)),客户端的CPU通过发布发送命令将键数据和哈希桶首地址发送至客户端的RDMA网卡(RNIC),RNIC使用一个读(READ)命令(携带键数据和哈希桶首地址)读取到服务端的哈希桶中存储的指向值数据(value)的指针(pointer,ptr)。然后客户端的CPU通过发布发送命令将要修改的值数据发送至RNIC,RNIC使用一个写(WRITE)命令(携带ptr和值数据)实现远程数据更新。这种方式不需要服务端的CPU参与,但是需要至少2次网络往返次数(Round Trip Times,RTT)。
使用单边方法远程更新值数据,虽然不需要服务端的CPU参与,但受限于RDMA技术提供的原语,需要较多次RTT(≥2)才能完成,增加了操作时延。
第二种远程数据更新方式:双边方法。
图2是本申请实施例提供的一种通过双边方法远程更新数据的流程图。如图2所示,客户端的CPU向RNIC发布发送命令,发送命令携带键数据和值数据,服务端的CPU发布接收命令,以指示RNIC接收键数据和值数据。服务端的RNIC将接收到的值数据和键数据上送至CPU,以使CPU在本地执行修改,并通过RNIC向客户端返回结果。
这种方式需要服务端的CPU参与,虽然固定了RTT为1,但增加了服务端的CPU开销;且服务端的CPU在本地执行修改时涉及额外的内存拷贝,容易造成时延增加。
第三种远程数据更新方式:硬件加速方法。
通过使用特殊硬件如现场可编程门阵列(field programmable gate arrays,FPGA)和智能网卡(Smart NIC)等,定制化设计远程数据更新操作,从而提升存储系统的性能。这种方式引入了成本开销,同时编程复杂度高,因此这种方式难以推广。
基于此,本申请实施例提供了一种远程更新数据的方法。通过本申请实施例提供的方法,可以在固定RTT为1的情况下,减少服务端的CPU的参与,从而减少CPU开销,相应地减少总时延。
下面对本申请实施例提供的RDMA系统、远程更新数据的方法以及相关装置进行详细解释说明。
图3是本申请实施例提供的一种RDMA系统的架构示意图。如图3所示,该RDMA系统包括主机100和主机200。
如图3所示,主机100包括应用101、操作系统(operation system,OS)103和网卡300。其中,应用101运行在主机100的用户(user)层,OS 103运行在主机100的内核(kernal)层,网卡300为主机100提供的一种硬件(hardware)资源,网卡300示例地包括RDMA网卡。主机200和主机100的结构是对称的,对主机200的内部结构不做详细说明。
在图3所示的RDMA系统中,以执行RDMA写请求消息为例,其工作流程如下:
1)当主机100中的一个应用101执行RDMA写请求消息时,本端网卡300从缓冲区102中将该请求消息读取至网卡300自己的缓冲区301中,在此过程中绕过了操作系统103。所述RDMA写请求消息中包含虚拟地址、内存钥匙和待写入的数据,所述虚拟地址是本端网卡300所能访问的虚拟存储空间的地址,所述虚拟存储空间是由主机200的内存映射而来的。内存钥匙用于确定网卡300对主机200的内存的访问权限。
2)网卡300的处理器302通过网络500将所述RDMA写请求发送到网卡400。
3)网卡400确认内存钥匙,根据所述RDMA写请求将数据写入主机200的内存中。
主机200和主机100的结构是对称的,其处理RDMA读写请求的流程也和主机100一致,这里就不对主机200内部的结构进行展开描述。
另外,主机100与主机200之间的消息服务建立在通信双方本端和远端应用之间创建的通道(Channel)连接之上。当应用需要通信时,就会创建一条Channel连接,每条Channel的首尾端点是两对队列对(Queue Pairs,QP)。每对QP由发送队列(Send Queue,SQ)和接收(Receive Queue,RQ)构成,如图4所示。这些队列中管理着各种类型的消息。QP存储在缓冲区102中,网卡300上配置有内存地址转换表(memory translation table,MTT)和内存权限表(memory protection table,MPT),通过MTT和MPT网卡300能够直接访问缓冲区102对应的虚拟地址空间,使得网卡能够直接访问QP。除了QP描述的两种基本队列之外,RDMA还提供一种完成队列(Complete Queue,CQ),CQ中的完成队列元素(Complete QueueEllement,CQE)用来知会用户WQ上的消息已经被处理完。
RDMA还提供了RDMA原语(Verbs)应用程序接口(application interface,API),方便用户创建工作请求(Work Request,WR),WR中描述了应用希望传输到对端的消息内容。WR通知给QP中的某个队列Work Queue(WQ)。在WQ中,用户的WR被转化为工作队列元素(WorkQueue Ellement,WQE)的格式,等待网卡的调度解析,并从WQE指向的缓冲区中拿到消息发送到远端主机。
基于前述RDMA技术提供的双边原语和单边原语,RDMA的传输模式有双边操作也有单边操作。发送/接收(SEND/RECEIVE)命令触发的操作属于双边操作,即需要远端的应用感知参与才能完成收发。读和写(READ和WRITE)命令触发的操作属于单边操作,只需要本端明确信息的源和目的地址,远端应用不必感知此次通信,数据的读或写都通过远端的网卡完成,再由远端网卡通过确认(Ack)消息返回到本端。在实际中,发送/接收命令多用于连接控制类报文,读和写命令通常用于传输数据报文。
图5是本申请实施例提供的另一种RDMA系统的架构示意图。如图5所示,RDMA系统包括服务端501和客户端502。其中,服务端501和客户端502可以分别为图3中的两个主机。
如图5所示,服务端501包括第一内存、第一处理器和第一RDMA网卡。第一处理器上可以运行图3所示的应用以及OS。其中,第一内存与第一处理器之间示例地通过内存总线进行通信。第一处理器与第一RDMA网卡之间示例地通过外设组件互连标准总线(peripheralcomponent interconnect express,PCIe)进行通信。
如图5所示,第一内存中包括第一RDMA网卡对应的注册区域。该注册区域用于缓存键值(key-value,KV)数据、多个QP(图5中标记为QPs)、内存地址转换表(memorytranslation table,MTT)和内存权限表(memory protection table,MPT)。KV数据包括键数据(key)和值数据(value)。
第一处理器上配置有远程更新预备模块(Remote Update Preparer)和RDMA原语(Verbs)应用程序接口(application interface,API)。第一处理器可以通过远程更新预备模块向RDMA原语API配置能够实现数据更新操作的一系列命令,由RDMA原语API将这些命令部署到对应的工作队列中,以便于后续通过这些命令实现远程数据更新。具体实现方式后续实施例展开说明。
如图5所示,客户端502包括第二内存、第二处理器和第二RDMA网卡。第二内存包括第二RDMA网卡对应的注册区域。这些组件之间的通信方式以及相应功能均可以参考前述服务端501的相关说明。
另外,如图5所示,第二处理器上配置有远程更新请求模块(Remote UpdateRequester)和RDMA原语(Verbs)API。第二处理器可以通过远程更新请求模块向RDMA原语API配置能够实现发送数据更新请求的一系列命令,由RDMA原语API将这些命令部署到对应的工作队列中,以便于后续通过这些命令实现远程数据更新。具体实现方式后续实施例展开说明。
图6是本申请实施例提供的一种远程更新数据的方法流程图,该方法应用于图3至图5所示的RDMA系统中。如图6所示,该方法包括如下步骤601和步骤602。
步骤601:第一RDMA网卡接收来自第二RDMA网卡的数据更新请求,数据更新请求携带数据标识以及目标数据,数据标识指示的数据存储在第一数据存储区。
其中,第一RDMA网卡为服务端上的RDMA网卡,第二RDMA网卡为客户端上的RDMA网卡,数据标识用于唯一标识服务端的第一内存中第一数据存储区中的待更新的数据,目标数据指示用户欲要更新后的数据。当客户端需要远程修改服务端的第一内存中存储的数据时,便可通过第二RDAM网卡向第一RDMA网卡发送数据更新请求,以触发远程更新流程。
在一些实施例中,为了能够实现第二RDMA网卡避开处理器直接向第一RDMA网卡发送数据更新请求,还可以预先在客户端的QP上部署用于实现向服务端发送数据更新请求的WQE。基于此,如图5所示,客户端还包括第二内存,第二内存包括第二QP,第二QP包括至少一个第二WQE,这至少一个第二WQE用于实现向服务端发送数据更新请求。
这种场景下,第一RDMA网卡接收来自第二RDMA网卡的数据更新请求的实现方式可以为:第二RDMA网卡从第二QP中预取并执行至少一个第二WQE,以向第一RDMA网卡发送数据更新请求。
示例地,至少一个第二WQE包括发送(SEND)命令。这种场景下,第二RDMA网卡执行至少一个第二WQE的实现方式可以为:第二RDMA网卡执行发送命令。其中,发送命令指示第二RDMA网卡将数据更新请求通过第二RDMA网卡与第一RDMA网卡之间的通信链路发送至第一RDAM网卡。
其中,数据更新请求可以预先缓存在图5中的第二内存的发送缓存(send buffer)中。数据更新请求携带数据标识以及目标数据,数据标识能够帮助第一RDMA网卡查找到第一数据存储区中相应数据的存储位置。目标数据为客户端需要的修改后的数据。
又示例地,至少一个第二WQE包括第二初始化使能(ENABLE)命令和发送(SEND)命令。这种场景下,第二RDMA网卡执行至少一个第二WQE的实现方式可以为:第二RDMA网卡依次执行第二初始化使能命令和发送命令。
其中,第二初始化使能命令指示第二RDMA网卡从第二QP中预取发送命令,以激活发送命令,发送命令在被激活之后第一RDMA网卡才能执行发送命令。
在第一内存和第二内存中的数据采用键值方式存储时,数据更新请求携带的数据标识示例地包括键数据(key)和哈希桶首地址(h(key)),数据更新请求携带的目标数据示例地包括值数据(value)。
为了便于后续理解,在此先对键值存储方式做一解释说明。
图7是本申请实施例提供的一种键值存储方式的原理示意图。如图7所示,键数据(keys)是通过哈希算法将值数据(values)映射得到,比如图7中值数据“a”通过哈希算法映射得到的键数据为2,值数据“b”通过哈希算法映射得到的键数据为6。由于存储的值数据较多,为了提高查找值数据的效率,将不同的键数据按照哈希桶的方式进行管理。哈希桶用于存储多个键数据对应的指针(pointer,ptr),且哈希桶中每个指针的存储位置可以用哈希桶首地址表征。哈希桶中每个指针指向一个内存中用于存储值数据的地址。通过每个键数据对应的指针所指示的地址能够查找到键数据对应的值数据。
基于此,客户端在发送数据更新请求时,通过在数据更新请求中携带哈希桶首地址以使服务端能够基于哈希桶首地址从哈希桶中查找到键数据对应的指针,进而基于指针快速查找到值数据的存储位置。
另外,还可以在数据更新请求中携带键数据,以使服务端对客户端进行验证。示例地,服务端对客户端进行验证的过程为:服务端通过哈希桶首地址(h(key))查找得到本地存储的键数据,也即本地键数据,如果本地键数据与客户端发送的键数据一致,则表明对客户端的验证通过,后续可以进行数据更新。相应地,如果本地键数据与客户端发送的键数据不一致,则表明本地不存在客户端发送的键数据或者客户端发送的哈希桶首地址是错误的,因此对客户端的验证没有通过,后续便不会进行数据更新。
另外,如图7所示,哈希桶中针对每个键数据存储有一个指针,还可以进一步存储一个指针副本,该指针副本指向的地址和同一行的指针指向的地址相同。以便于后续RDMA网卡在获取指针时,可以获取到两个相同的指针,以分别根据两个相同的指针进行不同的操作。
可选地,当第一内存和第二内存中的数据采用其他方式存储时,数据更新请求同样可以携带相应存储方式下的数据标识和目标数据,在此不再一一举例说明。
另外,如图5所示,客户端还包括第二处理器,以通过第二处理器预先在第二QP上部署至少一个第二WQE。因此,在一些实施例中,在第二RDMA网卡从第二QP中预取并执行至少一个第二WQE之前,第二处理器还可以先在第二内存中创建第二QP,然后发布至少一个第二WQE,并在第二QP中部署至少一个第二WQE。
当客户端与服务端之间创建通道(channel)连接时,便可在通道连接的两端(也即客户端和服务端)中分别创建QP,比如在服务端上创建第一QP,在客户端上创建第二QP,以使通过第二QP和第一QP实现远程数据更新。
客户端上的第二处理器在第二内存中创建第二QP之后,第二处理器便可发布至少一个第二WQE,并将至少一个第二WQE部署在第二QP中。
另外,为了便于客户端确认服务端上的数据是否更新成功,至少一个第二WQE还可以进一步包括第二接收(RECV)命令。第二接收命令指示接收第一RDMA网卡返回的更新后数据,并在判断第一RDMA网卡返回的更新后数据与数据更新请求携带的目标数据一致时,确定远程数据更新成功。
其中,第二RDMA网卡可以将第一RDMA网卡返回的更新后数据存储在图5中第二内存中的接收缓存(Recv buffer)中。
示例地,如图5所示,客户端上的第二处理器调用远程更新请求模块发布发送命令、第二初始化使能命令以及第二接收命令等至少一个第二WQE,以使远程更新请求模块通过RDMA原语(Verbs)API将这至少一个第二WQE部署在第二内存中的第二QP上。
上述用于示例说明至少一个第二WQE,可选地,在本申请实施例中,还可以通过设计其他类型的RDMA原语以实现上述至少一个第二WQE的功能,在此不再一一举例说明。
另外,第二QP示例地可以包括管理者(master)QP和使用者QP,这种场景下,可以将至少一个第二WQE中的发送命令部署在使用者QP中的发送队列(SQ)中,将至少一个第二WQE中的第二接收命令部署在使用者QP中的接收队列(RQ)中,将至少一个第二WQE中的第二初始化使能命令部署在管理者QP中的发送队列(SQ)中。
另外,在服务端上的第一处理器在第一内存中创建第一QP之后,第一处理器便可发布多个第一WQE,并将多个第一WQE部署在第一QP中,以通过多个第一WQE实现远程数据更新。因此,在一些实施例中,服务端上的第一处理器可以在第一内存中创建第一QP,然后发布多个第一WQE,并在第一QP中部署多个第一WQE。
示例地,在数据标识包括哈希桶首地址,目标数据包括值数据的场景中,多个第一WQE包括第一接收命令、读命令、第一空操作命令和第二空操作命令。
其中,第一接收命令指示接收数据更新请求,并将哈希桶首地址存储至读命令中,将值数据存储至第一空操作命令中,读命令指示基于哈希桶首地址读取值数据对应的指针,并将指针存储至第二空操作命令中,第二空操作命令指示将第一空操作命令中缓存的值数据写入指针对应的内存中。
可选地,多个第一WQE包括第一接收命令、读命令和第二空操作命令。这种场景下,第一接收命令指示接收数据更新请求,并将哈希桶首地址存储至读命令中,将值数据存储至第一内存的指定位置处中,读命令指示基于哈希桶首地址读取值数据对应的指针,并将指针存储至第二空操作命令中,第二空操作命令指示将指定位置处中缓存的值数据写入指针对应的内存中。
可选地,为了提高数据访问的安全性,多个第一WQE还可以进一步包括比较并替换命令。这种场景下,第一接收命令还指示将键数据存储至比较并替换命令中,读命令还指示基于哈希桶首地址查找本地键数据,并将本地键数据存储至第二空操作命令中,比较并替换命令指示通过第二空操作命令比较本地键数据与客户端发送的键数据,如果本地键数据与客户端发送的键数据相等,则将第二空操作命令的操作码更新为写操作,相应地,第二空操作命令指示在操作码为写操作时将第一空操作命令中缓存的值数据写入指针对应的内存中。
可选地,为了便于客户端能够知悉数据是否更新成功,多个第一WQE还可以进一步包括立即写命令。这种场景下,读命令还指示将指针存储至立即写命令中,立即写命令指示将指针对应的存储位置处更新后的值数据返回给第一RDMA网卡。
其中,在服务端上部署立即写命令后,该立即写命令需要触发客户端上的第二接收命令接收更新后的值数据,该立即写命令标记为WRITE(imm)。
上述用于示例说明多个第一WQE,可选地,在本申请实施例中,还可以通过设计其他类型的RDMA原语以实现上述多个第一WQE的功能,在此不再一一举例说明。
另外,上述将某个信息存储至某个命令,可以理解为将该信息写入QP中该命令的某个字段中。
为了便于理解,下面对WQE的数据结构进行解释说明。
在一些实施例中,WQE的数据结构包括控制段(ctrl),远程地址段(raddr),数据段(data)和原子段(atomic)。
图8是本申请实施例提供的一种控制段(ctrl),远程地址段(raddr),数据段(data)和原子段(atomic)中每个字段的代码示意图。如图8所示,控制段(ctrl)用于存储WQE的控制信息如操作码(opcode),远程地址段(raddr)用于存储远程操作的地址信息,数据段(data)用于存储远程操作的数据信息,原子段(atomic)用于存储原子操作的特有信息,如比较并替换命令中的比较(compare)字段属于原子段,该字段用于存储比较并替换命令用于进行比较的操作数的信息。
为了能够实现上述第一接收命令、读命令、比较并替换命令、第一空操作命令、第二空操作命令和立即写命令等命令的功能,可以设置各个命令中具体字段的信息。表1是本申请实施例提供的一种各个命令中每个字段的信息配置情况。
表1
如表1所示,第一接收命令包括1个控制段(ctrl),1个远程地址段(raddr)以及3个数据段(data)。其中,3个数据段(data)分别与比较并替换命令(compare and swap,CAS)中原子段(atomic)中的比较(compare)字段绑定、与第一空操作命令中的数据段(data)中的addr字段绑定、与读命令中的远程地址段(raddr)中的raddr字段绑定。以实现通过第一接收命令将键数据存储至比较并替换命令中,将值数据存储至第一空操作命令中,将哈希桶首地址存储至读命令中。
读命令包括1个控制段(ctrl),1个远程地址段(raddr)以及3个数据段(data)。其中,3个数据段(data)分别与第二空操作命令中控制段(ctrl)中的qpn_ds字段绑定、还与第二空操作命令中的远程地址段(raddr)中的raddr字段绑定、与立即写命令中的数据段(data)中的addr字段绑定。以实现通过读命令基于哈希桶首地址读取值数据对应的指针,并基于哈希桶首地址查找本地键数据,将本地键数据和指针分别存储至第二空操作命令的qpn_ds字段以及raddr字段,另外还将指针存储至立即写命令中。
比较并替换命令包括1个控制段(ctrl)、1个远程地址段(raddr)以及1个原子段(atomic)。其中,原子段(atomic)中的比较(compare)字段存储有客户端发送的键数据,远程地址段(raddr)中存储有第二空操作命令的控制段(ctrl)的qpn_ds和opcode两个连续字段的地址。原子段(atomic)中的替换添加(swap_add)字段和第二空操作命令的控制段(ctrl)的qpn_ds和opcode绑定。以实现通过比较并替换命令比较第二空操作命令的控制段(ctrl)的qpn_ds和opcode存储的本地键数据+opcode与客户端发送的键数据+第二空操作命令的初始opcode是否一致,如果一致则表明服务端存储的本地键数据与客户端发送的键数据一致,因此可以将第二空操作命令的控制段(ctrl)的qpn_ds和opcode中的opcode更新为写操作。由于空操作命令通常指示一个空操作,因此对CAS命令而言,CAS可以确定第二空操作命令的的初始opcode为一个空操作。
第一空操作命令包括1个控制段(ctrl)、1个远程地址段(raddr)以及1个数据段(data)。其中,数据段(data)用于存储接收到的值数据。
第二空操作命令包括1个控制段(ctrl)、1个远程地址段(raddr)以及1个数据段(data)。其中,控制段(ctrl)中的qpn_ds用于存储读命令基于哈希桶首地址查找到的本地键数据。
立即写命令包括1个控制段、1个远程地址段(raddr)以及1个数据段(data)。其中,1个远程地址段(raddr)用于存储客户端的地址,1个数据段(data)用于存储读命令基于哈希桶首地址查找到的指针,以实现根据指针将修改后的数据值返回给客户端。
其中,表1中的内容用于示例说明如何配置各个命令中的字段的功能。可选地,在本申请实施例中,也可以通过其他方式对各个命令中的字段进行扩展,以使各个命令能够实现远程数据更新。
另外,由于数据更新过程所需操作较多,为了保证数据更新过程的顺利执行,多个第一WQE中还可以进一步包括等待命令和使能命令,等待命令指示多个第一WQE中其他至少一个命令的执行顺序,使能命令指示第一WQE中其他至少一个命令的预取顺序。
示例地,等待命令包括第一等待命令、第二等待命令和第三等待命令,使能命令包括第一使能命令、第二使能命令和第三使能命令。
其中,第一等待命令指示在位于第一等待命令之前的第一接收命令执行完成后,才能通知位于第一等待命令后的第一使能命令开始执行。第一使能命令指示按照第一接收命令、比较并替换命令、第一空操作命令、第二等待命令和第二使能命令的顺序预取并执行这五个命令。第二等待命令指示在位于第二等待命令之前的第一空操作命令执行完成后,才能通知位于第二等待命令后的第二使能命令开始执行。第二使能命令指示按照第二空操作命令、第三等待命令、第三使能命令和立即写命令的顺序预取并执行这四个命令。第三等待命令指示在位于第三等待命令之前的第二空操作命令执行完成后,才能通知位于第三等待命令后的第三使能命令开始执行。第三使能命令指示预取并执行立即写命令。
上述是以三个等待命令和三个使能命令为例说明如何精细控制各个命令的预取顺序和执行顺序。可选地,也可以通过更多数量或更少数量的等待命令和使能命令来控制其他各个命令的预取顺序和执行顺序。
另外,多个第一WQE中还可以进一步包括第一初始化使能命令,第一初始化使能命令是在第一QP创建完成后就执行的命令,第一初始化使能命令指示预取前述的使能命令和等待命令,以做好数据更新操作的准备工作。
示例地,第一初始化使能命令指示预取前述的第一等待命令和第一使能命令,以在后续执行完第一接收命令后执行第一等待命令和第一使能命令。
在多个第一WQE包括第一初始化使能命令、第一接收命令、第一等待命令、第一使能命令、读命令、比较并替换命令、第一空操作命令、第二等待命令、第二使能命令、第二空操作命令、第三等待命令、第三使能命令和立即写命令的场景中,如图5所示,服务端上的第一处理器调用远程更新预备模块发布第一等待命令、第一使能命令、读命令、比较并替换命令、第一空操作命令、第二等待命令、第二使能命令、第二空操作命令、第三等待命令、第三使能命令、立即写命令、第一初始化使能命令以及第一接收命令等多个第一WQE,以使远程更新预备模块通过RDMA原语(verbs)API将这多个第一WQE部署在第一内存中的第一QP上。
另外,第一QP示例地可以包括管理者(master)QP、使用者QP以及工作者(worker)QP,这种场景下,可以将第一初始化使能命令部署在管理者QP中的发送队列(SQ)中,第一接收命令部署在使用者QP中的接收队列(RQ)中,将第一等待命令、第一使能命令、读命令、比较并替换命令、第一空操作命令、第二等待命令、第二使能命令、第二空操作命令、第三等待命令、第三使能命令部署在工作者QP中的发送队列(SQ)中,将立即写命令部署在使用者QP中的发送队列(SQ)中。
为了便于理解服务端上的管理者(master)QP、使用者QP以及工作者(worker)QP以及客户端上管理者(master)QP和使用者QP。下面对客户端与服务端之间创建通道连接的过程进行解释。
在一些实施例中,客户端与服务端创建RDMA通道连接时,可以通过发送IBV_EXP_QP_CREATE_MANAGED_SEND指令来实现。此时,客户端和服务端将分别在各自的内存中创建使用者QP和管理者QP,且使用者QP中的发送队列(SQ)属于管理(managed)模式,也即,使用者QP中的发送队列(SQ)中的WQE需要通过管理者QP中的发送队列(SQ)中的使能命令激活之后才能使用。使用者QP中的接收队列(RQ)属于普通模式,也即,使用者QP中的接收队列(RQ)中的WQE不需要通过管理者QP中的发送队列(SQ)中的使能命令激活便可使用,而是在部署之后就可以立即执行的命令。
另外,服务端在与客户端之间通过IBV_EXP_QP_CREATE_MANAGED_SEND指令建立RDMA连接后,还可以进一步通过IBV_EXP_QP_CREATE_MANAGED_SEND指令建立自身与自身之间的通道连接,以产生与管理者QP对应的工作者QP,并将诸如第一等待命令、第一使能命令、读命令、比较并替换命令、第一空操作命令、第二等待命令、第二使能命令、第二空操作命令、第三等待命令、第三使能命令部署在工作者QP中的发送队列(SQ),同样由于工作者QP中的发送队列(SQ)也属于管理模式,因此工作者QP中的发送队列(SQ)中的WQE需要通过管理者QP中的发送队列(SQ)中的使能命令激活之后才能使用。
可选地,在另一些实施例中,第二RDMA网卡也可以通过第二处理器向第一RDMA网卡发送数据更新请求。比如,第二RDMA网卡可以触发第二处理器向第一RDMA网卡发送数据更新请求,在此不再赘述。这种场景下,第二RDMA网卡上无需预先部署至少一个第一WQE。
步骤602:第一RDMA网卡响应于数据更新请求从第一QP中预取并执行多个第一WQE,以将第一数据存储区中数据标识所指示的数据更新为目标数据。
在一些实施例中,在服务端中的第一内存采用键值方式存储数据的情况,数据标识包括哈希桶首地址,目标数据包括值数据。此时,多个第一WQE可以包括第一接收命令、读命令、第一空操作命令和第二空操作命令。
这种场景下,第一RDMA网卡执行多个第一WQE的实现方式可以为:第一RDMA网卡执行第一接收命令、读命令、第一空操作命令和第二空操作命令。
可选地,如果数据标识还包括键数据,多个第一WQE还包括比较并替换命令,此时,第一RDMA网卡执行第一接收命令之后,还可以执行比较并替换命令。
可选地,如果多个第一WQE还包括立即写命令,第一RDMA网卡执行第二空操作命令后,还继续执行立即写命令。
可选地,如果多个第一WQE还包括等待命令和使能命令,第一RDMA网卡响应于数据更新请求从第一QP中预取并执行多个第一WQE的实现方式可以为:第一RDMA网卡从第一QP中预取使能命令和等待命令;第一RDMA网卡执行使能命令和等待命令,以控制预取多个第一WQE中其他至少一个命令的顺序、以及响应于数据更新请求执行多个第一WQE中其他至少一个命令的顺序。
下面以多个第一WQE包括第一接收命令、第一等待命令、第一使能命令、读命令、比较并替换命令、第一空操作命令、第二等待命令、第二使能命令、第二空操作命令、第三等待命令、第三使能命令和立即写命令为例进行说明。
当第一RDMA网卡通过第一接收命令检测到第二RDAM网卡发送数据更新请求,第一RDMA网卡则可以继续通过第一接收命令以将数据更新请求中携带的哈希桶首地址存储至第一QP中的读命令中,将数据更新请求携带的值数据存储至第一QP中的第一空操作命令中,将数据更新请求携带的键数据存储至第一QP中的比较并替换命令中。
示例地,如图9所示,通过执行第一接收命令,将读命令中的远程地址段中的raddr字段设置为哈希桶首地址,将CAS命令中的原子段中的compare字段设置为客户端发送的键数据,将第一空操作命令中的数据段中的addr字段设置为值数据。
在第一接收命令执行完毕后,第一RDMA网卡才可以继续执行第一等待命令。通过执行第一等待命令确定在第一接收命令执行完毕之后执行第一使能命令。通过执行第一使能命令将读命令、比较并替换命令、第一空操作命令、第二等待命令和第二使能命令依次从第一QP中预取至第一RDMA网卡中。
第一RDMA网卡执行读命令,以基于哈希桶首地址读取值数据对应的指针,并将指针存储至第一QP中的第二空操作命令和立即写命令中,并基于哈希桶首地址查找本地键数据,并将本地键数据也存储至第一QP中的第二空操作命令中。
示例地,如图9所示,通过执行读命令,将立即写命令中的数据段中的addr字段设置为基于哈希桶首地址确定的指针,将第二空操作命令中的控制段中的qpn_ds字段设置为基于哈希桶首地址还原的本地键数据,并将第二空操作命令中远程地址段中的raddr字段设置为基于哈希桶首地址确定的指针。
第一RDMA网卡执行比较并替换命令,以比较本地键数据与客户端发送的键数据,如果本地键数据与客户端发送的键数据相等,图9中x代表客户端发送的键数据,h(key)→key代表本地键数据,则将第二空操作命令的控制段中的操作码(opcode)更新为写操作。
第一RDMA网卡执行第一空操作命令,以缓存客户端发送的值数据。
第一RDMA网卡执行第二等待命令,以在第一空操作命令执行完成后才开始执行第二使能命令。
第一RDMA网卡执行第二使能命令,以依次从第一QP中预取第二空操作命令、第三等待命令和第三使能命令。
第一RDMA网卡执行第二空操作命令,以在操作码为写操作时将第一空操作命令中缓存的值数据写入指针对应的内存中。至此第一RDMA网卡完成将待更新的值数据更新至第一内存。
第一RDMA网卡执行第三等待命令,以在第二空操作命令执行完成后才开始执行第三使能命令。
第一RDMA网卡执行第三使能命令,以从第一QP中预取立即写命令。
第一RDMA网卡执行立即写命令,以将指针对应的存储位置处更新后值数据返回给第二RDMA网卡。至此第一RDMA网卡完成将更新后数据返回给客户端。
第一RDMA网卡在执行完立即写命令后,由于第二RDMA网卡已经执行了第二接收命令,因此第二RDMA网卡能够接收到更新后的值数据,然后第二RDMA网卡将更新后的值数据与数据更新请求携带的值数据进行比较,如果两者一致,则确定远程数据更新成功。
图10是本申请实施例提供的一种服务端和客户端上各个命令的执行顺序的流程图。图10中将第一初始化使能命令标记为s-ENABLE1、将第一接收命令标记为RECV1,将第一等待命令标记为WAIT1,将第一使能命令标记为ENABLE1,将第二等待命令标记为WAIT2,将第二使能命令标记为ENABLE2,将第三等待命令标记为WAIT3,将第三使能命令标记为ENABLE3,将第二初始化使能命令标记为s-ENABLE2、将第二接收命令标记为RECV2,图10中其他命令的标记说明和前述解释一致,在此不再赘述。
如图10所示,在客户端与服务端之间建立通道连接时,客户端与服务端之间创建各自的QP,并在各自的QP上部署用于实现远程数据更新的各个命令。
其中,客户端将发送命令部署在使用者QP中的发送队列(SQ)中,将第二接收命令部署在使用者QP中的接收队列(RQ)中,将第二初始化使能命令部署在管理者QP中的发送队列(SQ)中。其中,使用者QP中的发送队列(SQ)属于管理(managed)模式下的队列,因此使用者QP中的发送队列(SQ)中的WQE需要通过第二初始化使能命令激活才能被第二RDMA网卡从使用者QP中的发送队列(SQ)中预取。
因此,客户端在部署完各个命令之后,第二RDMA网卡先预取并执行第二初始化使能命令和接收命令,第二初始化使能命令用于指示第二RDMA网卡从使用者QP中预取发送命令,以完成发送命令的激活,接收命令用于准备接收服务端发送的数据,至此完成数据更新前的准备操作。同时客户端的在部署完各个命令之后,可以直接执行第二接收命令。
服务端将第一初始化使能命令部署在管理者QP中的发送队列(SQ)中,第一接收命令部署在使用者QP中的接收队列(RQ)中,将第一等待命令、第一使能命令、读命令、比较并替换命令、第一空操作命令、第二等待命令、第二使能命令、第二空操作命令、第三等待命令、第三使能命令部署在工作者QP中的发送队列(SQ)中,将立即写命令部署在使用者QP中的发送队列(SQ)中。其中,使用者QP中的发送队列(SQ)和工作者QP中的发送队列(SQ)也属于管理(managed)模式下的队列,因此使用者QP中的发送队列(SQ)和工作者QP中的发送队列(SQ)中的WQE均需要先通过第一初始化使能命令激活第一等待命令、第一使能命令,后续继续通过第一使能命令、第二使能命令以及第三使能命令激活其他指令。
因此,服务端在部署完命令之后,第一RDMA网卡先预取并执行第一初始化使能命令(图10中将该步骤标记为①),以指示第一RDMA网卡从工作者QP中预取第一等待命令和第一使能命令,同时预取并执行第一接收命令,以准备接收第一RDMA网卡发送的数据,完成数据更新前的准备工作。
后续当客户端上检测到用户触发远程数据更新命令时,第二RDMA网卡执行发送命令(图10中将该步骤标记为②),通过发送命令向第一RDAM网卡发送数据更新请求,通过接收命令准备接收第一RDMA网卡返回的信息。
第一RDAM网卡在通过第一接收命令接收到数据更新请求时,执行第一等待命令和第一使能命令,以依次预取出读命令、比较并替换命令、第一空操作命令、第二等待命令和第二使能命令,并依次执行这些命令。并在执行第二等待命令时确定下一个要执行的指令为第二使能命令后的第二空操作命令,在执行第二使能命令时依次预取出第二空操作命令、第三等待命令和第三使能命令,并依次执行这些命令。图10中将前述步骤标记为③。
第一RDAM网卡在执行第三等待命令时确定下一个要执行的指令为第三使能命令后的立即写命令,在执行第三使能命令时预取出立即写命令,并执行立即写命令,以向第一RDMA网卡返回更新后数据。图10中将该步骤标记为④。
第一RDMA网卡通过第二接收命令接收到第一RDMA网卡返回的更新后数据,并比较更新后数据和数据更新请求携带的目标数据是否一致,如果一致,则确定当前远程更新数据成功。
图11是本申请实施例提供的另一种远程更新数据的流程示意图。如图11所示,客户端(client)先根据键数据(key)和哈希函数(h)求得服务端(server)中哈希桶的首地址(h(key)),客户端上的RDMA网卡(RNIC)使用一个发送(SEND)命令将值数据(value)、键数据(key)和哈希桶首地址(h(key))携带在数据更新请求中发送给服务端上的RDMA网卡(RNIC)。服务端的RDMA网卡通过接收命令接收数据更新请求携带的值数据(value)、键数据(key)和哈希桶首地址(h(key)),并通过读指令等其他指令实现将值数据写入服务端的内存中,并向客户端的RDMA网卡返回更新后的数据值。
将图11与图1和图2进行对比可以发现,本申请实施例提供的远程更新数据方法是图1所示的单边方法和图2所示的双边方法的一种权衡,与单边方法相比,图11所示的方法可以固定RTT为1,从而降低时延;与双边方法相比,图11所示的方法减少了服务端的CPU开销,借用WQE的字段存储信息,减少了中间变量存取,减少了内存拷贝,从而减少了操作时延。另外,本申请实施例提供的方法还不需要修改硬件和驱动,成本较低。
综上,在本申请实施例中,预先在服务端的内存中部署能够被第一RDMA网卡直接调用的多个第一WQE,这样当第一RDMA网卡接收到第二RDMA网卡发送的数据更新请求时,便可直接调用这多个第一WQE以实现数据更新。整个过程只需要一次RTT,且无需服务端的CPU参与,因此还可以减少服务端的CUP开销,以降低服务端更新数据所需的时延。
另外,本申请实施例还提供了一种RDMA系统;
如图12所示,该RDMA系统120包括服务端1201和客户端1202,服务端包括第一内存12012和第一RDMA网卡12011,第一内存包括第一队列对QP和第一数据存储区,第一QP包括多个第一工作队列元素WQE,多个第一WQE用于实现更新第一数据存储区中的数据,客户端1202包括第二RDMA网卡12021。其中,
第一RDMA网卡12011,用于接收来自第二RDMA网卡12021的数据更新请求,数据更新请求携带数据标识以及目标数据,数据标识指示的数据存储在第一数据存储区。具体实现方式可以图6实施例中的步骤601。
第一RDMA网卡,还用于响应于数据更新请求从第一QP中预取并执行多个第一WQE,以将第一数据存储区中数据标识所指示的数据更新为目标数据。具体实现方式可以图6实施例中的步骤602。
可选地,数据标识包括哈希桶首地址,目标数据包括值数据,多个第一WQE包括第一接收命令、读命令、第一空操作命令和第二空操作命令;
第一RDMA网卡用于:
执行第一接收命令、读命令、第一空操作命令和第二空操作命令;
其中,第一接收命令指示将哈希桶首地址存储至读命令中,将值数据存储至第一空操作命令中,读命令指示基于哈希桶首地址读取值数据对应的指针,并将指针存储至第二空操作命令中,第二空操作命令指示将第一空操作命令中缓存的值数据写入第一数据存储区中指针对应的位置处。
可选地,数据标识还包括键数据,多个第一WQE还包括比较并替换命令,第一接收命令还指示将键数据存储至比较并替换命令中,读命令还指示基于哈希桶首地址查找本地键数据,并将本地键数据存储至第二空操作命令中;
第一RDMA网卡还用于:
执行比较并替换命令;
其中,比较并替换命令指示通过第二空操作命令比较本地键数据与键数据,如果本地键数据与键数据相等,则将第二空操作命令的操作码更新为写操作,相应地,第二空操作命令指示在操作码为写操作时将第一空操作命令中缓存的值数据写入第一数据存储区中指针对应的位置处。
可选地,多个第一WQE还包括立即写命令,读命令还指示将指针存储至立即写命令中;
第一RDMA网卡还用于:
执行立即写命令;
其中,立即写命令指示将第一数据存储区中指针对应的位置处更新后的值数据返回给第二RDMA网卡。
可选地,多个第一WQE包括使能命令和等待命令,使能命令指示多个第一WQE中其他至少一个命令的预取顺序,等待命令指示多个第一WQE中其他至少一个命令的执行顺序;
第一RDMA网卡用于:
从第一QP中预取使能命令和等待命令;执行使能命令和等待命令,以控制预取多个第一WQE中其他至少一个命令的顺序、以及响应于数据更新请求执行多个第一WQE中其他至少一个命令的顺序。
可选地,服务端1201还包括第一处理器12013;
第一处理器12013用于:
在第一内存中创建第一QP;
发布多个第一WQE,并在第一QP中部署多个第一WQE。
可选地,客户端1202还包括第二内存12022,第二内存包括第二QP,第二QP包括至少一个第二WQE,至少一个第二WQE用于实现向服务端发送数据更新请求;
第二RDMA网卡用于:
从第二QP中预取并执行至少一个第二WQE,以向第一RDMA网卡发送数据更新请求。
可选地,至少一个第二WQE包括发送命令;
第二RDMA网卡用于:
执行发送命令;
其中,发送命令指示将数据更新请求通过第二RDMA网卡与第一RDMA网卡之间的通信链路发送至第一RDAM网卡。
可选地,至少一个第二WQE还包括第二接收命令;第二RDMA网卡还用于:
执行第二接收命令;
其中,第二接收命令指示接收第一RDMA网卡返回的更新后数据,并在判断第一RDMA网卡返回的更新后数据与数据更新请求携带的目标数据一致时,确定远程数据更新成功。
可选地,客户端1202还包括第二处理器12023;
第二处理器用于:
在第二内存中创建第二QP;
发布至少一个第二WQE,并在第二QP中部署至少一个第二WQE。
综上,在本申请实施例中,预先在服务端的内存中部署能够被第一RDMA网卡直接调用的多个第一WQE,这样当第一RDMA网卡接收到第二RDMA网卡发送的数据更新请求时,便可直接调用这多个第一WQE以实现数据更新。整个过程只需要一次RTT,且无需服务端的CPU参与,因此还可以减少服务端的CUP开销,以降低服务端更新数据所需的时延。
需要说明的是:上述实施例提供的RDMA系统在进行远程数据更新时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的RDMA系统与远程更新数据的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如:同轴电缆、光纤、数据用户线(digital subscriber line,DSL))或无线(例如:红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如:软盘、硬盘、磁带)、光介质(例如:数字通用光盘(digital versatile disc,DVD))、或者半导体介质(例如:固态硬盘(solid state disk,SSD))等。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述为本申请提供的实施例,并不用以限制本申请实施例,凡在本申请实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请实施例的保护范围之内。
Claims (19)
1.一种远程更新数据的方法,其特征在于,所述方法应用于远程直接内存访问RDMA系统,所述RDMA系统包括服务端和客户端,所述服务端包括第一内存和第一RDMA网卡,所述第一内存包括第一队列对QP和第一数据存储区,所述第一QP包括多个第一工作队列元素WQE,所述多个第一WQE用于实现更新所述第一数据存储区中的数据,所述客户端包括第二RDMA网卡;所述方法包括:
所述第一RDMA网卡接收来自所述第二RDMA网卡的数据更新请求,所述数据更新请求携带数据标识以及目标数据,所述数据标识指示的数据存储在所述第一数据存储区;
所述第一RDMA网卡响应于所述数据更新请求从所述第一QP中预取并执行所述多个第一WQE,以将所述第一数据存储区中所述数据标识所指示的数据更新为所述目标数据;
其中,所述多个第一WQE包括使能命令和等待命令,所述使能命令指示所述多个第一WQE中其他至少一个命令的预取顺序,所述等待命令指示所述多个第一WQE中其他至少一个命令的执行顺序;
所述第一RDMA网卡响应于所述数据更新请求从所述第一QP中预取并执行所述多个第一WQE,包括:
所述第一RDMA网卡从所述第一QP中预取所述使能命令和所述等待命令;
所述第一RDMA网卡执行所述使能命令和所述等待命令,以控制预取所述多个第一WQE中其他至少一个命令的顺序、以及响应于所述数据更新请求执行所述多个第一WQE中其他至少一个命令的顺序。
2.如权利要求1所述的方法,其特征在于,所述数据标识包括哈希桶首地址,所述目标数据包括值数据,所述多个第一WQE包括第一接收命令、读命令、第一空操作命令和第二空操作命令;
所述第一RDMA网卡执行所述多个第一WQE,包括:
所述第一RDMA网卡执行所述第一接收命令、所述读命令、所述第一空操作命令和所述第二空操作命令;
其中,所述第一接收命令指示将所述哈希桶首地址存储至所述读命令中,将所述值数据存储至所述第一空操作命令中,所述读命令指示基于所述哈希桶首地址读取所述值数据对应的指针,并将所述指针存储至所述第二空操作命令中,所述第二空操作命令指示将所述第一空操作命令中缓存的所述值数据写入所述第一数据存储区中所述指针对应的位置处。
3.如权利要求2所述的方法,其特征在于,所述数据标识还包括键数据,所述多个第一WQE还包括比较并替换命令,所述第一接收命令还指示将所述键数据存储至所述比较并替换命令中,所述读命令还指示基于所述哈希桶首地址查找本地键数据,并将所述本地键数据存储至所述第二空操作命令中;
所述第一RDMA网卡执行所述第一接收命令之后,所述方法还包括:
所述第一RDMA网卡执行所述比较并替换命令;
其中,所述比较并替换命令指示通过所述第二空操作命令比较所述本地键数据与所述键数据,如果所述本地键数据与所述键数据相等,则将所述第二空操作命令的操作码更新为写操作,相应地,所述第二空操作命令指示在操作码为写操作时将所述第一空操作命令中缓存的所述值数据写入所述第一数据存储区中所述指针对应的位置处。
4.如权利要求2或3所述的方法,其特征在于,所述多个第一WQE还包括立即写命令,所述读命令还指示将所述指针存储至所述立即写命令中;
所述第一RDMA网卡执行所述第二空操作命令之后,所述方法还包括:
所述第一RDMA网卡执行所述立即写命令;
其中,所述立即写命令指示将所述第一数据存储区中所述指针对应的位置处更新后的值数据返回给所述第二RDMA网卡。
5.如权利要求1-3任一所述的方法,其特征在于,所述服务端还包括第一处理器;
所述第一RDMA网卡接收来自所述第二RDMA网卡的数据更新请求之前,所述方法还包括:
所述第一处理器在所述第一内存中创建所述第一QP;
所述第一处理器发布所述多个第一WQE,并在所述第一QP中部署所述多个第一WQE。
6.如权利要求1-3任一所述的方法,其特征在于,所述客户端还包括第二内存,所述第二内存包括第二QP,所述第二QP包括至少一个第二WQE,所述至少一个第二WQE用于实现向所述服务端发送所述数据更新请求;
所述第一RDMA网卡接收来自所述第二RDMA网卡的数据更新请求,包括:
所述第二RDMA网卡从所述第二QP中预取并执行所述至少一个第二WQE,以向所述第一RDMA网卡发送所述数据更新请求。
7.如权利要求6所述的方法,其特征在于,所述至少一个第二WQE包括发送命令;
所述第二RDMA网卡执行所述至少一个第二WQE,包括:
所述第二RDMA网卡执行所述发送命令;
其中,所述发送命令指示将所述数据更新请求通过所述第二RDMA网卡与所述第一RDMA网卡之间的通信链路发送至所述第一RDMA网卡。
8.如权利要求7所述的方法,其特征在于,所述至少一个第二WQE还包括第二接收命令;所述方法还包括:
所述第二RDMA网卡执行所述第二接收命令;
其中,所述第二接收命令指示接收所述第一RDMA网卡返回的更新后数据,并在判断所述第一RDMA网卡返回的更新后数据与所述数据更新请求携带的所述目标数据一致时,确定远程数据更新成功。
9.如权利要求6所述的方法,其特征在于,所述客户端还包括第二处理器;
所述第二RDMA网卡从所述第二QP中预取并执行至少一个第二WQE之前,所述方法还包括:
所述第二处理器在所述第二内存中创建所述第二QP;
所述第二处理器发布所述至少一个第二WQE,并在所述第二QP中部署所述至少一个第二WQE。
10.一种RDMA系统,其特征在于,所述RDMA系统包括服务端和客户端,所述服务端包括第一内存和第一远程直接内存访问RDMA网卡,所述第一内存包括第一队列对QP和第一数据存储区,所述第一QP包括多个第一工作队列元素WQE,所述多个第一WQE用于实现更新所述第一数据存储区中的数据,所述客户端包括第二RDMA网卡;
所述第一RDMA网卡,用于接收来自所述第二RDMA网卡的数据更新请求,所述数据更新请求携带数据标识以及目标数据,所述数据标识指示的数据存储在所述第一数据存储区;
所述第一RDMA网卡,还用于响应于所述数据更新请求从所述第一QP中预取并执行所述多个第一WQE,以将所述第一数据存储区中所述数据标识所指示的数据更新为所述目标数据;
其中,所述多个第一WQE包括使能命令和等待命令,所述使能命令指示所述多个第一WQE中其他至少一个命令的预取顺序,所述等待命令指示所述多个第一WQE中其他至少一个命令的执行顺序;
所述第一RDMA网卡用于:
从所述第一QP中预取所述使能命令和所述等待命令;
执行所述使能命令和所述等待命令,以控制预取所述多个第一WQE中其他至少一个命令的顺序、以及响应于所述数据更新请求执行所述多个第一WQE中其他至少一个命令的顺序。
11.如权利要求10所述的系统,其特征在于,所述数据标识包括哈希桶首地址,所述目标数据包括值数据,所述多个第一WQE包括第一接收命令、读命令、第一空操作命令和第二空操作命令;
所述第一RDMA网卡用于:
执行所述第一接收命令、所述读命令、所述第一空操作命令和所述第二空操作命令;
其中,所述第一接收命令指示将所述哈希桶首地址存储至所述读命令中,将所述值数据存储至所述第一空操作命令中,所述读命令指示基于所述哈希桶首地址读取所述值数据对应的指针,并将所述指针存储至所述第二空操作命令中,所述第二空操作命令指示将所述第一空操作命令中缓存的所述值数据写入所述第一数据存储区中所述指针对应的位置处。
12.如权利要求11所述的系统,其特征在于,所述数据标识还包括键数据,所述多个第一WQE还包括比较并替换命令,所述第一接收命令还指示将所述键数据存储至所述比较并替换命令中,所述读命令还指示基于所述哈希桶首地址查找本地键数据,并将所述本地键数据存储至所述第二空操作命令中;
所述第一RDMA网卡还用于:
执行所述比较并替换命令;
其中,所述比较并替换命令指示通过所述第二空操作命令比较所述本地键数据与所述键数据,如果所述本地键数据与所述键数据相等,则将所述第二空操作命令的操作码更新为写操作,相应地,所述第二空操作命令指示在操作码为写操作时将所述第一空操作命令中缓存的所述值数据写入所述第一数据存储区中所述指针对应的位置处。
13.如权利要求11或12所述的系统,其特征在于,所述多个第一WQE还包括立即写命令,所述读命令还指示将所述指针存储至所述立即写命令中;
所述第一RDMA网卡还用于:
执行所述立即写命令;
其中,所述立即写命令指示将所述第一数据存储区中所述指针对应的位置处更新后的值数据返回给所述第二RDMA网卡。
14.如权利要求10-12任一所述的系统,其特征在于,所述服务端还包括第一处理器;
所述第一处理器用于:
在所述第一内存中创建所述第一QP;
发布所述多个第一WQE,并在所述第一QP中部署所述多个第一WQE。
15.如权利要求10-12任一所述的系统,其特征在于,所述客户端还包括第二内存,所述第二内存包括第二QP,所述第二QP包括至少一个第二WQE,所述至少一个第二WQE用于实现向所述服务端发送所述数据更新请求;
所述第二RDMA网卡用于:
从所述第二QP中预取并执行所述至少一个第二WQE,以向所述第一RDMA网卡发送所述数据更新请求。
16.如权利要求15所述的系统,其特征在于,所述至少一个第二WQE包括发送命令;
所述第二RDMA网卡用于:
执行所述发送命令;
其中,所述发送命令指示将所述数据更新请求通过所述第二RDMA网卡与所述第一RDMA网卡之间的通信链路发送至所述第一RDMA网卡。
17.如权利要求16所述的系统,其特征在于,所述至少一个第二WQE还包括第二接收命令;所述第二RDMA网卡还用于:
执行所述第二接收命令;
其中,所述第二接收命令指示接收所述第一RDMA网卡返回的更新后数据,并在判断所述第一RDMA网卡返回的更新后数据与所述数据更新请求携带的所述目标数据一致时,确定远程数据更新成功。
18.如权利要求15所述的系统,其特征在于,所述客户端还包括第二处理器;
所述第二处理器用于:
在所述第二内存中创建所述第二QP;
发布所述至少一个第二WQE,并在所述第二QP中部署所述至少一个第二WQE。
19.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行权利要求1-9任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211490824.2A CN115933973B (zh) | 2022-11-25 | 2022-11-25 | 远程更新数据的方法、rdma系统及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211490824.2A CN115933973B (zh) | 2022-11-25 | 2022-11-25 | 远程更新数据的方法、rdma系统及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115933973A CN115933973A (zh) | 2023-04-07 |
CN115933973B true CN115933973B (zh) | 2023-09-29 |
Family
ID=86553202
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211490824.2A Active CN115933973B (zh) | 2022-11-25 | 2022-11-25 | 远程更新数据的方法、rdma系统及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115933973B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110764688A (zh) * | 2018-07-27 | 2020-02-07 | 杭州海康威视数字技术股份有限公司 | 对数据进行处理的方法和装置 |
CN111459418A (zh) * | 2020-05-15 | 2020-07-28 | 南京大学 | 一种基于rdma的键值存储系统传输方法 |
CN115334134A (zh) * | 2022-07-22 | 2022-11-11 | 阿里巴巴(中国)有限公司 | 数据处理方法及系统 |
-
2022
- 2022-11-25 CN CN202211490824.2A patent/CN115933973B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110764688A (zh) * | 2018-07-27 | 2020-02-07 | 杭州海康威视数字技术股份有限公司 | 对数据进行处理的方法和装置 |
CN111459418A (zh) * | 2020-05-15 | 2020-07-28 | 南京大学 | 一种基于rdma的键值存储系统传输方法 |
CN115334134A (zh) * | 2022-07-22 | 2022-11-11 | 阿里巴巴(中国)有限公司 | 数据处理方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN115933973A (zh) | 2023-04-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112422615B (zh) | 一种通信的方法及装置 | |
US7870306B2 (en) | Shared memory message switch and cache | |
US20070041383A1 (en) | Third party node initiated remote direct memory access | |
US10983920B2 (en) | Customizable multi queue DMA interface | |
US20060165084A1 (en) | RNIC-BASED OFFLOAD OF iSCSI DATA MOVEMENT FUNCTION BY TARGET | |
CN111078607B (zh) | 面向rdma与非易失性内存的网络访问编程框架部署方法及系统 | |
US20060168091A1 (en) | RNIC-BASED OFFLOAD OF iSCSI DATA MOVEMENT FUNCTION BY INITIATOR | |
US10152402B2 (en) | Supporting multiple streams for a redirected USB device | |
US7343527B2 (en) | Recovery from iSCSI corruption with RDMA ATP mechanism | |
US11150817B2 (en) | Integrating kernel-bypass user-level file systems into legacy applications | |
US20060168286A1 (en) | iSCSI DATAMOVER INTERFACE AND FUNCTION SPLIT WITH RDMA ATP MECHANISM | |
US20050091334A1 (en) | System and method for high performance message passing | |
US11853806B2 (en) | Cloud computing platform that executes third-party code in a distributed cloud computing network and uses a distributed data store | |
KR100834431B1 (ko) | 개시자에 의한 iSCSI 데이터 이동 기능의 RNIC기반 오프로드 | |
CN115129625A (zh) | 外围设备中的增强的存储协议仿真 | |
US10523741B2 (en) | System and method for avoiding proxy connection latency | |
CN115933973B (zh) | 远程更新数据的方法、rdma系统及存储介质 | |
US7827194B2 (en) | Access to shared disk device on storage area network | |
US20060168092A1 (en) | Scsi buffer memory management with rdma atp mechanism | |
KR102426416B1 (ko) | 멀티 커널 시스템의 입출력 처리 방법 및 장치 | |
Dalessandro et al. | iSER storage target for object-based storage devices | |
US11875151B1 (en) | Inter-process serving of machine learning features from mapped memory for machine learning models | |
US11960768B2 (en) | Memory-side cache directory-based request queue | |
US20060168094A1 (en) | DIRECT ACCESS OF SCSI BUFFER WITH RDMA ATP MECHANISM BY iSCSI TARGET AND/OR INITIATOR | |
WO2023077846A1 (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 |