CN113609150B - 基于硬件的原子写方法、设备及系统 - Google Patents

基于硬件的原子写方法、设备及系统 Download PDF

Info

Publication number
CN113609150B
CN113609150B CN202111168583.5A CN202111168583A CN113609150B CN 113609150 B CN113609150 B CN 113609150B CN 202111168583 A CN202111168583 A CN 202111168583A CN 113609150 B CN113609150 B CN 113609150B
Authority
CN
China
Prior art keywords
data
memory space
atomic write
module
writing
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
Application number
CN202111168583.5A
Other languages
English (en)
Other versions
CN113609150A (zh
Inventor
郑军
孙华
朱登成
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba China Co Ltd
Alibaba Cloud Computing Ltd
Original Assignee
Alibaba China Co Ltd
Alibaba Cloud Computing Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alibaba China Co Ltd, Alibaba Cloud Computing Ltd filed Critical Alibaba China Co Ltd
Priority to CN202111168583.5A priority Critical patent/CN113609150B/zh
Publication of CN113609150A publication Critical patent/CN113609150A/zh
Application granted granted Critical
Publication of CN113609150B publication Critical patent/CN113609150B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2365Ensuring data consistency and integrity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computing Systems (AREA)
  • Hardware Redundancy (AREA)

Abstract

本申请实施例提供一种基于硬件的原子写方法、设备及系统。在本申请实施例中,在具有远程原子写需求的应用场景中,在接收端基于硬件实现原子写引擎,并为原子写引擎分配目标内存空间,并通过前导描述符对是否执行原子写操作进行区分。在接收到发送端发送的前导描述符的情况下,根据前导描述符的指示,通过硬件实现的原子写引擎对第一数据执行原子写操作。在原子写操作成功的情况下,第一数据被全部写入目标内存空间中,在原子写操作失败的情况下,目标内存空间被恢复至写入第一数据之前的状态。整个过程中,通过基于硬件实现的原子写引擎实现第一数据的原子写操作,无需接收端的CPU参与,不受CPU性能的影响,提高了原子写操作的性能。

Description

基于硬件的原子写方法、设备及系统
技术领域
本申请涉及计算机系统技术领域,尤其涉及一种基于硬件的原子写方法、设备及系统。
背景技术
新兴的数据密集型应用程序,例如图形分析、机器学习等,正推动数据中心朝着横向扩展、异构以及高吞吐量的方向发展。为了提高数据密集型应用的性能,针对这类应用通常采用存储和计算分离的数据库架构。在存储和计算分离的数据库架构中,计算节点依赖存储节点中存储的数据,并且计算节点之间共享同一份数据,这就需要保证不同存储节点中数据的一致性。为了保证不同存储节点中数据的一致性,在计算节点向存储节点写入数据时,需要执行跨节点原子内存写(Atomic Memory Write,AMW)操作。
跨节点原子内存写操作是一种新兴的远程数据操作,又称为远程原子内存写(Remote Atomic Memory Write,RAMW)操作。原子内存写操作是一种为了保证存储节点中数据的一致性,在计算节点向存储节点写入数据时,要么将本次数据全部写入存储节点,要么全部不写入存储节点的操作。在现有技术中,可以采用远程直接内存访问(RemoteDirect Memory Access,RDMA)技术实现远程原子内存写操作,但现有的RDMA原子操作最多只支持64-bit的标量数据,无法实现块长度或任意长度的原子操作。当需要实现任意长度原子写时,用到DoubleWrite Buffer技术。具体地,计算节点借助于RDMA控制器先将需要写入的数据写到远端存储节点的临时缓冲区,在数据全部写入该临时缓冲区时,远端存储节点的CPU从该临时内存区中将数据复制到目标地址中。整个过程不仅进行了两次I/O操作,而且对远端存储节点的CPU资源消耗较大,且也容易受当时CPU负载的影响,写性能较低。
发明内容
本申请的多个方面提供一种基于硬件的原子写方法、设备及系统,用以提高原子写操作的性能。
本申请实施例提供一种计算机系统,包括:第一设备和第二设备,第一设备和第二设备网络互联;第一设备,用于在其上层应用发起原子写请求的情况下,采用远程直接数据存取RDMA方式向第二设备发送前导描述符和第一数据,前导描述符指示第二设备针对第一数据执行原子写操作;第二设备包括基于硬件实现的原子写引擎,原子写引擎分配有目标内存空间,用于在接收前导描述符和第一数据的情况下,根据前导描述符的指示,对第一数据执行原子写操作;其中,在原子写操作成功的情况下,第一数据被全部写入目标内存空间中,在原子写操作失败的情况下,目标内存空间被恢复至写入第一数据之前的状态。
本申请实施例还提供一种计算机设备,包括:具有RDMA功能的网络接口卡、基于硬件实现的原子写引擎和存储器,存储器包括分配给原子写引擎的目标内存空间;网络接口卡,用于接收前导描述符和第一数据,并将前导描述符和第一数据提供给原子写引擎;前导描述符指示原子写引擎针对第一数据执行原子写操作;原子写引擎,用于根据前导描述符的指示,对第一数据执行原子写操作;其中,在原子写操作成功的情况下,第一数据被全部写入目标内存空间中,在原子写操作失败的情况下,目标内存空间被恢复至写入第一数据之前的状态。
本申请实施例还提供一种基于硬件实现的原子写引擎,包括:备份模块、缓存写模块和内存写模块;缓存写模块用于缓存第一数据;备份模块,用于接收前导描述符,前导描述符指示内存写模块针对第一数据执行原子写操作,根据前导描述符的指示,通知内存写模块;内存写模块,用于根据备份模块的通知,对第一数据执行原子写操作;其中,在原子写操作成功的情况下,第一数据被全部写入目标内存空间中,在原子写操作失败的情况下,目标内存空间被恢复至写入第一数据之前的状态。
本申请实施例还提供一种基于硬件的原子写方法,适用于第二设备,第二设备包括基于硬件实现的原子写引擎,原子写引擎分配有目标内存空间,该方法包括:接收由第一设备发送的前导描述符和第一数据,前导描述符指示对第一数据执行原子写操作;根据前导描述符的指示,控制原子写引擎对第一数据执行原子写操作;其中,在原子写操作成功的情况下,第一数据被全部写入目标内存空间中,在原子写操作失败的情况下,目标内存空间被恢复至写入第一数据之前的状态。
本申请实施例还提供一种基于硬件的原子写方法,适用于第一设备,第一设备包括具有RDMA功能的第一网络接口卡,该方法包括:在上层应用发起原子写请求的情况下,响应上层应用发起的原子写请求,生成前导描述符,前导描述符指示第二设备针对第一数据执行原子写操作;采用RDMA方式从第一设备的内存空间中读取第一数据并将前导描述符和第一数据发送给第二设备,以供所述第二设备根据所述前导描述符利用其内基于硬件实现的原子写引擎对所述第一数据执行原子写操作。
在本申请实施例中,在具有远程原子写需求的应用场景中,在接收端基于硬件实现原子写引擎,并为原子写引擎分配目标内存空间,并通过前导描述符对是否执行原子写操作进行区分,基于此,在接收到发送端发送的前导描述符的情况下,根据前导描述符的指示,通过该硬件实现的原子写引擎对第一数据执行原子写操作。在原子写操作成功的情况下,第一数据被全部写入目标内存空间中,在原子写操作失败的情况下,目标内存空间被恢复至写入第一数据之前的状态。整个过程中,通过基于硬件实现的原子写引擎实现第一数据的原子写操作,无需接收端的CPU参与,不受CPU性能的影响,提高了原子写操作的性能。另外,本申请实施例基于硬件实现的原子写过程,与RDMA原子操作不同,可支持任意长度的原子写操作,不再受限于64-bit的标量数据。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请示例性实施例提供的一种计算机系统的结构示意图;
图2为本申请示例性实施例提供的另一种计算机系统的结构示意图;
图3a为本申请示例性实施例提供的一种基于硬件实现的原子写引擎的结构示意图;
图3b为本申请示例性实施例提供的另一种基于硬件实现的原子写引擎的结构示意图;
图4a为本申请示例性实施例提供的一种基于硬件的支持任意长度的原子写方法的流程示意图;
图4b为本申请示例性实施例提供的另一种基于硬件的原子写方法的流程示意图;
图5为本申请示例性实施例提供的一种计算机设备的结构示意图;
图6为本申请示例性实施例提供的另一种计算机设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
针对现有技术中远端存储节点的CPU资源消耗较大,且也容易受CPU负载的影响,写性能较低的问题,在本申请实施例中,在具有远程原子写需求的应用场景中,在接收端基于硬件实现原子写引擎,并为原子写引擎分配目标内存空间,并通过前导描述符对是否执行原子写操作进行区分,基于此,在接收到对端发送的前导描述符的情况下,根据前导描述符的指示,通过该硬件实现的原子写引擎对第一数据执行原子写操作。在原子写操作成功的情况下,第一数据被全部写入目标内存空间中,在原子写操作失败的情况下,目标内存空间被恢复至写入第一数据之前的状态。整个过程中,通过基于硬件实现的原子写引擎实现第一数据的原子写操作,无需接收端的CPU参与,不受CPU性能的影响,提高了原子写操作的性能。另外,本申请实施例基于硬件实现的原子写过程,与RDMA原子操作不同,可支持任意长度的原子写操作,不再受限于64-bit的标量数据。
以下结合附图,详细说明本申请各实施例提供的技术方案。
图1为本申请示例性实施例提供的一种计算机系统的结构示意图。如图1所示,该计算机系统100包括:第一设备10和第二设备20。
在本实施例中,第一设备10和第二设备20可以实现为常规服务器、云服务器或服务器阵列等服务端设备。在计算机系统实现为数据库系统的情况下,第一设备10可以实现为数据库系统中的计算节点,第二设备20可以实现为数据库系统中的存储节点;或者,第一设备10实现为数据库系统中的主节点(可读可写),第二设备20可以实现为数据库系统中的只读节点,或者,第一设备10和第二设备20实现为同时具备读写功能的节点,或者第一设备10和第二设备20实现为同时具备计算和存储功能的节点。无论第一设备10和第二设备20实现为具有哪种功能的节点,第一设备10和第二设备20网络互联。例如,第一设备10和第二设备20可以通过网络交换机(Network Switch)或者路由器(Router)进行网络互联,以实现第一设备10和第二设备20之间的数据传输,如图2所示。
在本实施例中,第一设备10上部署有上层应用,上层应用可以是但不限于:游戏应用、在线教育应用或视频应用等。上层应用可以产生应用数据,为了便于区分和描述,将上层应用产生的应用数据称为第一数据。在需要将第一数据发送给第二设备20的情况下,为了保证第一数据的一致性,上层应用可以针对该第一数据发起原子写请求,以指示数据接收端(即第二设备20)对第一数据执行原子写操作。第一设备10针对上层应用发送的原子写请求,生成前导描述符,前导描述符是一种指示信息,用于指示第二设备20针对第一数据执行原子写操作。前导描述符是可被数据发送端和数据接收端共同识别的用于区分原子写操作的标识信息。可选地,前导描述符可以包括发送第一数据的目的地址和第一数据的长度,除此之外,前导描述符还可以包括:第一数据的元数据或者用户需要的任何控制操作。
在本申请一可选实施例中,第一设备10具有远程直接数据存取(Remote DirectMemory Access,RDMA)功能,可以采用RDMA方式向第二设备20发送前导描述符和第一数据。其中,RDMA是为了解决网络传输中第一设备10和第二设备20传输第一数据的延迟而产生的,RDMA可通过网络将第一数据从第一设备10的内存空间中快速传输给第二设备20中,而不对第一设备和第二设备的CPU性能造成任何影响。
在本实施例中,为了实现远程原子写功能,在第二设备20中包括基于硬件实现的原子写引擎(RAMW Engine)201。例如,可以基于现场可编程门阵列(Field-ProgrammableGate Array,FPGA)或复杂可编程逻辑器件(Complex Programmable logic device,CPLD)等硬件实现原子写引擎201。原子写引擎201是一种用于对数据执行原子写操作的核心硬件设备,在实现形态上,原子写引擎201可以是一个独立的芯片或硬件模块,也可以是内嵌在第二设备20的主板上的一个芯片或硬件模块,还可以是内嵌在第二设备20包含的网络接口卡上的一块芯片,对此不做限定。原子写引擎201分配有目标内存空间,目标内存空间是第二设备20的内存中,供原子写引擎201通过原子写操作存放数据的部分内存空间。原子写引擎201在接收前导描述符和第一数据的情况下,根据前导描述符的指示,可以对第一数据执行原子写操作,即在不经过第二设备20的CPU的情况下,可以直接将第一数据写入原子写引擎201对应的目标内存空间中,且可以保证第一数据写入的原子性;其中,在原子写操作成功的情况下,第一数据被全部写入目标内存空间中。在执行原子写过程中,若第一设备20的系统崩溃、或者第一设备20断电,或者第一设备10与第二设备20之间的传输链路出现故障,导致第一数据无法全部写入目标内存地址空间中,则认为原子写操作失败。在原子写操作失败的情况下,在本实施例中,基于硬件实现的原子写引擎201可以做到目标内存空间被恢复至写入第一数据之前的状态,以保证目标内存空间中数据的一致性。
在本申请实施例中,在具有远程原子写需求的应用场景中,在接收端基于硬件实现原子写引擎,并为原子写引擎分配目标内存空间,并通过前导描述符对是否执行原子写操作进行区分,基于此,在接收到对端发送的前导描述符的情况下,根据前导描述符的指示,通过该硬件实现的原子写引擎对第一数据执行原子写操作。在原子写操作成功的情况下,第一数据被全部写入目标内存空间中,在原子写操作失败的情况下,目标内存空间被恢复至写入第一数据之前的状态。整个过程中,通过基于硬件实现的原子写引擎实现第一数据的原子写操作,无需接收端的CPU参与,不受CPU性能的影响,提高了原子写操作的性能。另外,本申请实施例基于硬件实现的原子写过程,与RDMA原子操作不同,可支持任意长度的原子写操作,不再受限于64-bit的标量数据,例如可以支持128-bit、4KB、16KB等长度的原子写操作。
在一可选实施例中,如图2所示,第一设备10包括第一网络接口卡(NetworkInterface with RDMA function)101,可选地,第一网络接口卡具有RDMA功能,例如第一网络接口卡101上集成有RDMA芯片,用于实现RDMA功能。第一网络接口卡101用于实现第一设备10与第二设备20之间的数据传输,并可以不经过第一设备10的CPU直接读取第一设备10的内存空间中的第一数据,或者,直接向第一设备10的内存空间中写入数据。在本实施例中,对于需要进行原子写的第一数据,上层应用可向该第一网络接口卡101发起原子写请求。其中,并不限定上层应用发起的原子写请求的实施方式。例如,第一网络接口卡101在驱动程序中内嵌原子写功能代码,并将原子写功能以应用程序接口(ApplicationProgramming Interface,API)的形式暴露给上层应用,上层应用可以通过调用该API向第一网络接口卡101发起原子写请求。在上层应用可向第一网络接口卡101发起原子写请求的情况下,该第一网络接口卡101可以响应上层应用发起的原子写请求,生成前导描述符并发送给第二设备20。其中,生成前导描述符等功能可以是运行内嵌在第一网络接口卡101的驱动程序中的原子写功能代码实现的。需要说明的是,第一设备10的上层应用不仅具有原子写需求,也可能具有非原子写功能并会产生不需要进行原子写的第三数据,对于不需要进行原子写的第三数据,上层应用可以向第一网络接口卡101发起非原子写请求,非原子写请求是一种不需要对第三数据执行原子写操作的请求,例如,非原子写请求可以是常规的写请求。在该情况下,第一网络接口卡101的驱动程序中还包括支持非原子写的功能代码,并将该非原子写的功能以另一种API的形式暴露给上层应用,上层应用可以根据数据写需求,调用不同非原子写功能对应的API发起非原子写请求,也可以调用原子写功能对应的API发起原子写请求。
在一可选实施例中,如图2所示,第二设备20包括第二网络接口卡202,可选地,第二网络接口卡可以具有RDMA功能,例如第二网络接口卡202上可以集成有RDMA芯片。第二网络接口卡202与基于硬件实现的原子写引擎201电连接。第二网络接口卡202可以接收第一设备10发送的前导描述符和第一数据,具体为第一网络接口卡101经过路由器或网络交换机发送的前导描述符和第一数据。第二网络接口卡202将接收到的前导描述符和第一数据提供给原子写引擎201。
可选地,在第一网络接口卡和第二网络接口卡均具有RDMA功能的情况下,若第二网络接口卡202收到第一设备10的第一网络接口卡101发送的第一数据后确定需要对该第一数据执行非原子写操作,例如在仅接收到第一数据但并未接收到前导描述符的情况下,确定需要对该第一数据执行非原子写操作,此时,第二网络接口卡202不再将第一数据提供给原子写引擎201,而是采用RDMA方式直接将第一数据写入第二设备20的非目标内存空间中,非目标内存空间是指第二设备20的内存空间中除去目标内存空间之外的其它内存空间,也就是支持RDMA读写的内存空间。相应地,在第一网络接口卡和第二网络接口卡均具有RDMA功能的情况下,若第二网络接口卡202收到第一设备10的第一网络接口卡101发送的前导描述符,意味着需要对第一数据执行原子写操作,于是将第一数据提供给原子写引擎201,由原子写引擎201针对第一数据执行原子写操作。
在一可选实施例中,原子写引擎201在接收到前导描述符的情况下,可以针对第一数据执行原子写操作,即将第一数据全部写入第二设备20的目标内存空间中,或者全部不写入第二设备20的目标内存空间中。在第一数据写入失败的情况下,为了保证数据一致性,需要将目标内存空间恢复至写入第一数据之前的状态。基于此,在本申请实施例中,原子写引擎201在将第一数据写入目标内存空间之前,可以从目标内存空间中读取第二数据并写入至本地备份内存空间中,第二数据是目标内存空间中的原始数据,本地备份内存空间是原子写引擎201本地的内存空间,用于备份原子写引擎201从目标内存空间读取出来的第二数据。本申请实施例对本地备份内存空间的大小不做限定,以原子写操作所支持的最大数据块为依据,可以大于或等于该最大数据块。在第一数据写入失败的情况下,原子写引擎201将本地备份内存空间中的第二数据重新回写至目标内存空间中。
在一可选实施例中,并不限定原子写引擎201向目标内存空间写入第一数据的时间。例如,在将第二数据全部写入至本地备份内存空间之后,原子写引擎201向目标内存空间写入第一数据。又例如,原子写引擎201分批次地从目标内存空间中读取第二数据并写入至本地备份内存空间中;相应地,原子写引擎201根据每次从目标内存空间中读取的第二数据的数据量,分批次向目标内存空间中写入第一数据。即从目标内存空间每读出一次第二数据,就向目标内存空间执行一次第一数据的写入操作,直至所有第一数据均被成功写入目标内存空间;或者,直至第一数据写入失败。
在本实施例中,并不对第一设备10和第二设备20的内部实现结构进行限定。图2中展示了一种第一设备10和第二设备20的内部实现结构,但并不限于此。
如图2所示,第一设备10包括:第一网络接口卡101、第一内存空间102、CPU 103和外设部件互联扩展总线标准(Peripheral Component Interconnect Express,PCIE)总线104。进一步可选地,第一网络接口卡101包括:第一RDMA引擎101a,第一RDMA引擎101a与PCIE总线104连接,PCIE总线104经过CPU103与第一内存空间102连接。可选地,第一网络接口卡101可实现为板卡结构上包括第一RDMA引擎101a和PCIE总线104。
在本实施例中,第一内存空间102用于存储上层应用对应的第一数据。第一设备10在上层应用针对第一数据发起原子写请求的情况下,第一RDMA引擎101a获取前导描述符并发送给第二设备20,以及将读取到的第一数据发送给第二设备20。其中,RDMA的功能优势被保留,RDMA功能不需要第一设备和第二设备的CPU参与,在接收到前导描述符的情况下,第一数据可直接通过原子写引擎201写入第二设备的目标内存空间,在未接收到前导描述符的情况下,第一数据可直接通过第一RDMA引擎101a写入第二设备的非目标内存空间。
如图2所示,第二设备20包括:基于硬件实现的原子写引擎201、第二网络接口卡202、第二内存空间203、CPU 204以及PCIE总线205。进一步可选地,第二网络接口卡202包括:第二RDMA引擎202a,该第二RDMA引擎202a可以实现RDMA功能。第二RDMA引擎202a与原子写引擎201连接,原子写引擎201与PCIE总线205连接,PCIE总线205通过CPU 204与第二内存空间203连接。
其中,并不限定原子写引擎201、PCIE总线205和第二网络接口卡202的实现结构。例如,第二网络接口卡202实现为可插拔的板卡结构,第二网络接口卡202实现的板卡结构上集成有原子写引擎201、第二RDMA引擎202a和PCIE总线205,如图2所示。又例如,第二网络接口卡202和原子写引擎201分别实现为可插拔的板卡结构,第二网络接口卡202实现的板卡结构上包括第二RDMA引擎202a,原子写引擎201实现的板卡结构上包括:PCIE总线205。
在本实施例中,第二RDMA引擎202a可以接收第一RDMA引擎101a发送的前导描述符和第一数据。第二内存空间203包括为原子写引擎201分配的目标内存空间。第二设备20可以实现旁路功能,即可以直接将PCIE总线205与第二内存空间203在物理上导通,以实现在CPU 204不参与的情况下,第二RDMA引擎202a与第二内存空间203之间的数据传输。具体地,RDMA引擎202a与第二内存空间203之间的数据传输分为二种,第一种:第二RDMA引擎202a通过PCIE总线向第二内存空间203写入数据;第二种:第二RDMA引擎202a根据前导描述符的指示,将接收到的第一数据提供给原子写引擎201,原子写引擎201通过原子写操作将第一数据写入第二内存空间203。
在本实施例中,并不对上文中提到的原子写引擎201的内部实现结构进行限定。下面提供一种基于硬件实现的原子写引擎201的内部实现结构。如图3a所示,基于硬件实现的原子写引擎201包括:缓存写(Buffer Write)模块301、备份(Backup)模块302、内存写(HostWrite)模块303、本地缓存空间304以及本地备份内存空间305。例如,本地缓存空间304又可以称为原子缓存空间(Atomic Buffer),本地备份内存空间305又可以称为备份内存(Backup Memory)。其中,本地缓存空间304中将不同第一数据以队列(queue)的形式进行缓存。在图3b中,以本地缓存空间中包括多个队列,多个队列对应不用的第一数据为例进行图示,但并不限于此。其中,不同的第一数据,可以是来自不同设备的数据,也可以是来自相同设备,但是不同上层应用的数据,还可以是来自同一上层应用的不同数据,对此不做限定。本地缓存空间304可以为第一数据提供任意长度的存储空间,相较于传统 RDMA最多只能实现64位数据的原子写操作,本申请实施例提供的技术方案,可以针对任意长度的数据进行原子写操作,从原理上克服了传统RDMA原子写的局限功能,可以说,本申请实施例提供的技术方案是一种通用的远程原子写高性能方案。在本实施例中,备份模块302,用于接收第二网络接口卡202提供的前导描述符,如图3a中的步骤①所示;在前导描述符的指示下,从目标内存空间中读取第二数据并写入至本地备份内存空间305中,如图3a中的步骤②所示;并通知内存写模块303,如图3a中的步骤③所示。缓存写模块301,用于接收第二网络接口卡202提供的第一数据,如图3a中的步骤④所示;将第一数据写入本地缓存空间304中,如图3a中的步骤⑤所示。需要说明的是,第二网络接口卡202提供前导描述符或第一数据,具体是指第二网络接口卡202中的第二RDMA引擎202a提供前导描述符或第一数据,在图3a中,以第二RDMA引擎202a提供前导描述符或第一数据为例进行图示。
在本实施例中,内存写模块303,用于根据备份模块302的通知,从本地缓存空间304中读取第一数据,如图3a中的步骤⑥所示;并向目标内存空间中写入第一数据,如图3a中的步骤⑦所示;在第一数据写入失败的情况下,从本地备份内存空间305中读取第二数据,如图3a中的步骤⑧所示;并将第二数据重新回写至目标内存空间中,如图3a中的步骤⑨所示。
在一可选实施例中,如图3b所示,备份模块302包括:备份控制(BackupControl)单元302a、备份读(Host Backup Read)单元302b以及备份写(Host Data Write)单元;备份控制单元302a,用于接收第二网络接口卡202提供的前导描述符,如图3b中的步骤①所示;在前导描述符的指示下,向备份读单元302b发送内存读指令,如图3b中的步骤②所示;并向备份写单元302c发送待读取内存地址,如图3b中的步骤②所示。备份读单元302b(HostBackup Read 209),用于将内存读指令转换为总线控制信号,以将原子写引擎201与目标内存空间之间的数据总线(如PCIE总线)切换为读模式,如图3b中的步骤③所示,以读取第二数据。备份写单元302c(Host Data Write210),用于在数据总线切换为读模式的情况下,根据待读取内存地址,暂存从目标内存空间中读取的第二数据,如图3b中的步骤④所示,并将第二数据写入至本地备份内存空间中305,如图3b中的步骤⑤所示。
在一可选实施例中,如图3b所示,内存写模块303包括:指针管理(PointerManage)单元303a、超时监测(Timeout Monitor)单元303b和写入控制(Host WriteControl)单元303c。其中,备份写单元302c可以分批次从目标内存空间中读取第二数据,并在每次读取第二数据之后,确定本地缓存空间304中的目标指针位置,并将目标指针位置提供给指针管理单元303a,如图3b中的步骤⑥所示。指针管理单元303a,用于在接收到备份写单元302c提供的目标指针位置时,将本地缓存空间304中位于当前指针位置与目标指针位置之间的第一数据传输给写入控制单元303c,如图3b中的步骤⑦所示。进一步,内存写模块303还包括:排序模块303d,缓存写模块301接收第一数据时,由于网络等原因,接收到的第一数据可能是乱序的,排序模块303d可以对接收到的第一数据进行排序,或者通过交织技术对第一数据进行交织处理。写入控制单元303c,用于接收位于当前指针位置与目标指针位置之间的第一数据并向目标内存空间写入该第一数据,如图3b中的步骤⑧所示;以及在第一数据写入失败的情况下,接收从本地备份内存空间传输过来的第二数据并重新回写至目标内存空间中,如图3b中的步骤⑨所示。超时监测单元303b,用于监测从RDMA引擎202a来的原子写数据耗时,在耗时超过设定时长阈值未传送完时,认为第一数据写入失败,将本地备份内存空间305中的第二数据传输给写入控制单元303c,由写入控制单元303c接收从本地备份内存空间传输过来的第二数据并重新回写至目标内存空间中。
在此说明,在本申请实施例中,并不限定原子写引擎201的硬件实现方式,例如图3a或图3b所示的原子写引擎201可以基于FPGA或CPLD等任何可编程设备实现,或者,也可以采用ASIC芯片实现。再者,结合图2所示,原子写引擎201可以集成到网络接口卡202上实现,进一步可选地,可以独立于第二RDMA引擎202a集成到网络接口卡202上实现。除此之外,原子写引擎201也可以独立于网络接口卡202实现,或者也可以集成到RDMA引擎/芯片中实现,对于这种实现结构未作图示。
在本实施例中,基于硬件实现的原子写引擎可以实现针对第一数据的原子写操作,在写入过程中在第一设备断电、第一设备的操作系统崩溃或第一设备与第二设备之间的电缆断开连接的情况下,第二设备依旧可以恢复写入第一数据之前的状态,基于写入第一数据之前的状态,第二设备的系统可正常运行,提高了系统的稳定性。另外,本实施例采用基于硬件实现的原子写引擎实现原子写过程,与RDMA原子操作不同,可支持任意长度的原子写操作,不再受限于64-bit的标量数据,例如可以支持128-bit、4KB、16KB等。
基于上述计算机系统,本申请还提供一种基于硬件的支持任意长度的原子写方法,适用于第二设备,第二设备包括基于硬件实现的原子写引擎,原子写引擎分配有目标内存空间,如图4a所示,该方法包括:
401a、接收由第一设备发送的前导描述符和第一数据,前导描述符指示对第一数据执行原子写操作;
402a、根据前导描述符的指示,控制基于硬件实现的原子写引擎对第一数据执行原子写操作;其中,在原子写操作成功的情况下,第一数据被全部写入目标内存空间中,在原子写操作失败的情况下,目标内存空间被恢复至写入第一数据之前的状态。
在一可选实施例中,根据前导描述符的指示,控制原子写引擎对第一数据执行原子写操作,包括:在接收到前导描述符的情况下,指示原子写引擎执行原子写操作,原子写操作至少包括以下步骤:从目标内存空间中读取第二数据并写入至本地备份内存空间中;向目标内存空间写入第一数据,在第一数据写入失败的情况下,将第二数据重新回写至目标内存空间中。
在一可选实施例中,前导描述符中包括第一数据的长度,则从目标内存空间中读取第二数据并写入至本地备份内存空间中,包括:根据第一数据的长度,分批次地从目标内存空间中读取第二数据并写入至本地备份内存空间中;相应地,向目标内存空间写入第一数据,包括:根据每次从目标内存空间中读取的第二数据的数据量,分批次向目标内存空间中写入第一数据。
在一可选实施例中,本申请实施例提供的方法还包括:在未接收到前导描述符的情况下,将第一数据直接写入第二设备的非目标内存空间中。
在此说明,关于基于硬件实现的原子写引擎的硬件实现结构可参见前述实施例中的描述,在此不在赘述。相应地,结合原子写引擎的具体硬件实现结构实现原子写的详细过程,同样参见前述实施例,在此不再赘述。
图4b为本申请示例性实施例提供的另一种基于硬件的原子写方法,适用于第一设备,第一设备包括具有RDMA功能的第一网络接口卡,如图4b所示,该方法包括:
401b、在上层应用发起原子写请求的情况下,响应上层应用发起的原子写请求,生成前导描述符,前导描述符指示第二设备针对第一数据执行原子写操作;
402b、采用RDMA方式从第一设备的内存空间中读取第一数据并将前导描述符和第一数据发送给第二设备,以供第二设备根据前导描述符利用其内基于硬件实现的原子写引擎对第一数据执行原子写操作。关于第二设备根据前导描述符利用其内基于硬件实现的原子写引擎对第一数据执行原子写操作参见其它实施例中的描述,在此不再赘述。
在一可选实施例中,第一设备包括第一网络接口卡,上述前导描述符和第一数据可通过第一网络接口卡发送给第二设备。进一步可选地,第一网络接口卡具有RDMA功能,例如第一网络接口卡上集成有RDMA芯片/引擎,基于此,第一网络接口卡可以采用RDMA方式将第一数据发送给第二设备。
本申请上述方法实施例中,由发送端(即第一设备)与接收端(即第二设备)相互配合,可实现基于硬件的原子写过程。在具有远程原子写需求的应用场景中,在接收端基于硬件实现原子写引擎,并为原子写引擎分配目标内存空间,并通过前导描述符对是否执行原子写操作进行区分,基于此,在接收到发送端发送的前导描述符的情况下,接收端根据前导描述符的指示,通过基于硬件实现的原子写引擎对第一数据执行原子写操作。在原子写操作成功的情况下,第一数据被全部写入目标内存空间中,在原子写操作失败的情况下,目标内存空间被恢复至写入第一数据之前的状态。整个过程中,通过基于硬件实现的原子写引擎实现第一数据的原子写操作,无需接收端的CPU参与,不受CPU性能的影响,提高了原子写操作的性能。另外,在写入过程中在第一设备断电、第一设备的操作系统崩溃或第一设备与第二设备之间的电缆断开连接的情况下,第二设备依旧可以恢复写入第一数据之前的状态,基于写入第一数据之前的状态,第二设备的系统可正常运行,提高了系统的稳定性。再者,本实施例采用基于硬件实现的原子写引擎实现原子写过程,与RDMA原子操作不同,可支持任意长度的原子写操作,不再受限于64-bit的标量数据,例如可以支持128-bit、4KB、16KB等。
需要说明的是,上述实施例所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。比如,步骤401a至步骤402a的执行主体可以为设备A;又比如,步骤401a的执行主体可以为设备A,步骤403b的执行主体可以为设备B;等等。
另外,在上述实施例及附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如401a、402a等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
图5为本申请示例性实施例提供的一种计算机设备的结构示意图,该计算机设备可实现为计算机系统中的第二设备。如图5所示,该计算机设备包括:具有RDMA功能的网络接口卡51、基于硬件实现的原子写引擎52和存储器54,存储器54包括分配给原子写引擎52的目标内存空间。
其中,网络接口卡51,用于接收前导描述符和第一数据,并将前导描述符和第一数据提供给原子写引擎;前导描述符指示原子写引擎针对第一数据执行原子写操作;
原子写引擎52,用于根据前导描述符的指示,对第一数据执行原子写操作;其中,在原子写操作成功的情况下,第一数据被全部写入目标内存空间中,在原子写操作失败的情况下,目标内存空间被恢复至写入第一数据之前的状态。
在一可选实施例中,原子写引擎52在执行原子写操作时,具体用于:在接收到前导描述符的情况下,从目标内存空间中读取第二数据并写入至本地备份内存空间中,向目标内存空间写入第一数据,在第一数据写入失败的情况下,将第二数据重新回写至目标内存空间中。
在一可选实施例中,前导描述符中包括第一数据的长度,则原子写引擎52在从目标内存空间中读取第二数据并写入至本地备份内存空间中时,具体用于:根据第一数据的长度,分批次地从目标内存空间中读取第二数据并写入至本地备份内存空间中;相应地,原子写引擎52在向目标内存空间写入第一数据时,具体用于:根据每次从目标内存空间中读取的第二数据的数据量,分批次向目标内存空间中写入第一数据。
在一可选实施例中,原子写引擎52集成在网络接口卡51上,网络接口卡51上还集成有RDMA引擎。另外,在本申请实施例中,并不限定原子写引擎52的硬件实现方式,例如可以基于FPGA或CPLD等任何可编程设备实现,或者,也可以采用ASIC芯片实现。再者,原子写引擎52可以独立于网络接口卡51实现,或者也可以集成到网络接口卡51上实现,进一步可选地,可以独立于RDMA引擎集成到网络接口卡51上实现,或者也可以集成到RDMA引擎/芯片中实现。
在一可选实施例中,原子写引擎集成在所述网络接口卡上51上,进一步,网络接口卡51上还集成有RDMA引擎,用以采用RDMA方式接收前导描述符和第一数据。
在一可选实施例中,网络接口卡51还用于:在未接收到前导描述符的情况下,将第一数据直接写入计算机设备的非目标内存空间中,非目标内存空间是第二设备上除目标内存空间之外的其它内存空间,也就是支持RDMA操作的内存空间。
需要说明的是,存储器54用于存储计算机程序,并可被配置为存储其它各种数据以支持在计算机设备上的操作。这些数据的示例包括用于在计算机上操作的任何应用程序或方法的指令等。
存储器54可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如动态随机存取存储器(DRAM),静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。存储器54的目标内存空间可以是任何类型的易失性存储设备,目标内存空间中可以存储第一数据或第二数据。
进一步,如图5所示,该计算机设备还包括:处理器55、通信组件56、显示器57、电源组件58、音频组件59等其它组件。图5中仅示意性给出部分组件,并不意味着计算机设备只包括图5所示组件。需要说明的是,图5中虚线框内的组件为可选组件,而非必选组件,具体可视计算机设备的产品形态而定。
图6为本申请示例性实施例提供的一种计算机设备的结构示意图,该计算机设备可实现为计算机系统中的第一设备。如图6所示,该计算机设备包括:网络接口卡63和存储器64,存储器64包括内存空间,该内存空间中存储有第一数据。
网络接口卡63,用于在上层应用发起原子写请求的情况下,响应上层应用发起的原子写请求,生成前导描述符,前导描述符指示第二设备针对第一数据执行原子写操作;将前导描述符发送给第二设备,以供第二设备针对第一数据执行原子写操作;以及从计算机设备的内存空间中读取第一数据并发送给第二设备。
进一步,如图6所示,该计算机设备还包括:处理器65、通信组件66、显示器67、电源组件68、音频组件69等其它组件。图6中仅示意性给出部分组件,并不意味着计算机设备只包括图6所示组件。需要说明的是,图6中虚线框内的组件为可选组件,而非必选组件,具体可视计算机设备的产品形态而定。
本申请实施例提供的计算机设备,在具有远程原子写需求的应用场景中,在接收端基于硬件实现原子写引擎,并为原子写引擎分配目标内存空间,并通过前导描述符对是否执行原子写操作进行区分,基于此,在接收到对端发送的前导描述符的情况下,根据前导描述符的指示,通过该硬件实现的原子写引擎对第一数据执行原子写操作。在原子写操作成功的情况下,第一数据被全部写入目标内存空间中,在原子写操作失败的情况下,目标内存空间被恢复至写入第一数据之前的状态。整个过程中,通过基于硬件实现的原子写引擎实现第一数据的原子写操作,无需接收端的CPU参与,不受CPU性能的影响,提高了原子写操作的性能。
上述图5和图6中的通信组件被配置为便于通信组件所在设备和其他设备之间有线或无线方式的通信。通信组件所在设备可以接入基于通信标准的无线网络,如WiFi,2G、3G、4G/LTE、5G等移动通信网络,或它们的组合。在一个示例性实施例中,通信组件经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
上述图5和图6中的显示器包括屏幕,其屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。
上述图5和图6中的电源组件,为电源组件所在设备的各种组件提供电力。电源组件可以包括电源管理系统,一个或多个电源,及其他与为电源组件所在设备生成、管理和分配电力相关联的组件。
上述图5和图6中的音频组件,可被配置为输出和/或输入音频信号。例如,音频组件包括一个麦克风(MIC),当音频组件所在设备处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器或经由通信组件发送。在一些实施例中,音频组件还包括一个扬声器,用于输出音频信号。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器 (CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器 (RAM) 和/或非易失性内存等形式,如只读存储器 (ROM) 或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存 (PRAM)、静态随机存取存储器 (SRAM)、动态随机存取存储器 (DRAM)、其他类型的随机存取存储器 (RAM)、只读存储器 (ROM)、电可擦除可编程只读存储器 (EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘 (DVD) 或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体 (transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (14)

1.一种计算机系统,其特征在于,包括:第一设备和第二设备,所述第一设备和所述第二设备网络互联;
所述第一设备,用于在其上层应用发起原子写请求的情况下,采用远程直接数据存取RDMA方式向所述第二设备发送前导描述符和第一数据,所述前导描述符指示所述第二设备针对所述第一数据执行原子写操作;
所述第二设备包括基于硬件实现的原子写引擎,所述原子写引擎分配目标内存空间,且至少包括缓存写模块、备份模块和内存写模块,所述缓存写模块用于接收并缓存所述第一数据,所述备份模块用于在接收所述前导描述符的情况下,根据所述前导描述符的指示,通知所述内存写模块;所述内存写模块用于根据所述备份模块的通知,对所述第一数据执行原子写操作;其中,在所述原子写操作成功的情况下,所述第一数据被全部写入所述目标内存空间中,在所述原子写操作失败的情况下,所述目标内存空间被恢复至写入所述第一数据之前的状态。
2.根据权利要求1所述的系统,其特征在于,所述第一设备包括具有RDMA功能的第一网络接口卡,用于响应所述上层应用发起的原子写请求,生成所述前导描述符并发送给所述第二设备,以及从所述第一设备的内存空间中读取所述第一数据并发送给所述第二设备。
3.根据权利要求2所述的系统,其特征在于,所述第二设备包括具有RDMA功能的第二网络接口卡,用于接收所述第一设备发送的所述前导描述符和所述第一数据,并将所述前导描述符和所述第一数据提供给所述原子写引擎;
所述原子写引擎在执行原子写操作时,具体用于:在接收到所述前导描述符的情况下,从所述目标内存空间中读取第二数据并写入至本地备份内存空间中,向所述目标内存空间写入所述第一数据,在所述第一数据写入失败的情况下,将所述第二数据从所述备份内存空间重新回写至所述目标内存空间中。
4.根据权利要求3所述的系统,其特征在于,所述原子写引擎还包括:本地缓存空间以及本地备份内存空间;
所述备份模块具体用于:接收所述第二网络接口卡提供的所述前导描述符,并在所述前导描述符的指示下,从所述目标内存空间中读取所述第二数据并写入至本地备份内存空间中,并通知所述内存写模块;
所述缓存写模块具体用于:接收所述第二网络接口卡提供的所述第一数据,并将所述第一数据写入所述本地缓存空间中;
所述内存写模块具体用于:根据所述备份模块的通知,从本地缓存空间中读取所述第一数据并向所述目标内存空间中写入,以及在所述第一数据写入失败的情况下,从所述本地备份内存空间中读取所述第二数据并重新回写至所述目标内存空间中。
5.一种计算机设备,其特征在于,包括:具有RDMA功能的网络接口卡、基于硬件实现的原子写引擎和存储器,所述存储器包括分配给所述原子写引擎的目标内存空间;
所述网络接口卡,用于接收前导描述符和第一数据,并将所述前导描述符和所述第一数据提供给所述原子写引擎;所述前导描述符指示所述原子写引擎针对所述第一数据执行原子写操作;
所述原子写引擎至少包括:缓存写模块、备份模块和内存写模块,所述缓存写模块用于接收并缓存所述第一数据,所述备份模块用于在接收所述前导描述符的情况下,根据所述前导描述符的指示,通知所述内存写模块;所述内存写模块用于根据所述备份模块的通知,对所述第一数据执行原子写操作;其中,在所述原子写操作成功的情况下,所述第一数据被全部写入所述目标内存空间中,在所述原子写操作失败的情况下,所述目标内存空间被恢复至写入所述第一数据之前的状态。
6.根据权利要求5所述的设备,其特征在于,所述备份模块具体用于:在接收到所述前导描述符的情况下,从所述目标内存空间中读取第二数据并写入至本地备份内存空间中,并通知所述内存写模块;所述内存写模块具体用于:根据所述备份模块的通知,向所述目标内存空间写入所述第一数据,在所述第一数据写入失败的情况下,将所述第二数据从所述备份内存空间中重新回写至所述目标内存空间中。
7.一种基于硬件实现的原子写引擎,其特征在于,包括:备份模块、缓存写模块和内存写模块;所述缓存写模块用于缓存第一数据;
所述备份模块,用于接收前导描述符,所述前导描述符指示所述内存写模块针对所述第一数据执行原子写操作,根据所述前导描述符的指示,通知所述内存写模块;
所述内存写模块,用于根据所述备份模块的通知,对所述第一数据执行原子写操作;其中,在所述原子写操作成功的情况下,所述第一数据被全部写入目标内存空间中,在所述原子写操作失败的情况下,所述目标内存空间被恢复至写入所述第一数据之前的状态。
8.根据权利要求7所述的引擎,其特征在于,所述原子写引擎,还包括:本地缓存空间和本地备份内存空间;
所述缓存写模块具体用于:将所述第一数据缓存至所述本地缓存空间;
所述备份模块具体用于:在所述前导描述符的指示下,从所述目标内存空间中读取第二数据并写入至本地备份内存空间中,并通知所述内存写模块;
所述内存写模块具体用于:根据所述备份模块的通知,从本地缓存空间中读取所述第一数据并向所述目标内存空间中写入,以及在所述第一数据写入失败的情况下,从所述本地备份内存空间中读取所述第二数据并重新回写至所述目标内存空间中。
9.根据权利要求8所述的引擎,其特征在于,所述备份模块包括:备份控制单元、备份读单元以及备份写单元;
所述备份控制单元,用于接收前导描述符,在所述前导描述符的指示下,向所述备份读单元发送内存读指令,并向所述备份写单元发送待读取内存地址;
所述备份读单元,用于将所述内存读指令转换为总线控制信号,以将所述原子写引擎与所述目标内存空间之间的数据总线切换为读模式;
所述备份写单元,用于在所述数据总线切换为读模式的情况下,根据所述待读取内存地址,从所述目标内存空间中读取所述第二数据并写入至本地备份内存空间中。
10.根据权利要求9所述的引擎,其特征在于,所述内存写模块包括:指针管理单元、超时监测单元和写入控制单元;
所述备份写单元具体用于:分批次从所述目标内存空间中读取所述第二数据,并在每次读取所述第二数据之后,确定本地缓存空间中的目标指针位置,并将所述目标指针位置提供给所述指针管理单元;
所述指针管理单元,用于在接收到所述备份写单元提供的所述目标指针位置时,将所述本地缓存空间中位于当前指针位置与所述目标指针位置之间的第一数据传输给所述写入控制单元;
所述写入控制单元,用于接收位于当前指针位置与所述目标指针位置之间的第一数据并向所述目标内存空间写入;以及接收从所述本地备份内存空间传输过来的所述第二数据并重新回写至所述目标内存空间中;
所述超时监测单元,用于在所述写入控制单元向所述目标内存空间写入所述第一数据的过程中,监测写入耗时,在所述写入耗时超过设定时长阈值时,将所述本地备份内存空间中的所述第二数据传输给所述写入控制单元。
11.一种基于硬件的原子写方法,适用于第二设备,其特征在于,所述第二设备包括基于硬件实现的原子写引擎,所述原子写引擎至少包括缓存写模块、备份模块和内存写模块,所述原子写引擎分配有目标内存空间,所述方法包括:
控制所述备份模块和所述备份模块分别接收由第一设备发送的前导描述符和第一数据,所述前导描述符指示对所述第一数据执行原子写操作;
根据所述前导描述符的指示,控制所述备份模块通知所述内存写模块;根据所述备份模块的通知,控制所述内存写模块对所述第一数据执行原子写操作;其中,在所述原子写操作成功的情况下,所述第一数据被全部写入所述目标内存空间中,在所述原子写操作失败的情况下,所述目标内存空间被恢复至写入所述第一数据之前的状态。
12.根据权利要求11所述的方法,其特征在于,根据所述备份模块的通知,控制所述内存写模块对所述第一数据执行原子写操作,包括:
根据所述备份模块的通知,指示所述内存写模块执行原子写操作,所述原子写操作至少包括以下步骤:
从所述目标内存空间中读取第二数据并写入至本地备份内存空间中;
向所述目标内存空间写入所述第一数据,
在所述第一数据写入失败的情况下,将所述第二数据从本地备份内存空间中重新回写至所述目标内存空间中。
13.根据权利要求12所述的方法,其特征在于,所述前导描述符中包括所述第一数据的长度,则从所述目标内存空间中读取第二数据并写入至本地备份内存空间中,包括:根据所述第一数据的长度,分批次地从所述目标内存空间中读取所述第二数据并写入至本地备份内存空间中;
相应地,向所述目标内存空间写入所述第一数据,包括:根据每次从所述目标内存空间中读取的所述第二数据的数据量,分批次向所述目标内存空间中写入所述第一数据。
14.一种基于硬件的原子写方法,适用于第一设备,其特征在于,所述第一设备包括具有RDMA功能的第一网络接口卡,所述方法包括:
在上层应用发起原子写请求的情况下,响应所述上层应用发起的原子写请求,生成前导描述符,所述前导描述符指示第二设备针对第一数据执行原子写操作;
采用RDMA方式从所述第一设备的内存空间中读取所述第一数据并将所述前导描述符和所述第一数据发送给所述第二设备,以供所述第二设备根据所述前导描述符利用其内基于硬件实现的原子写引擎对所述第一数据执行原子写操作;
所述原子写引擎至少包括缓存写模块、备份模块和内存写模块,所述原子写引擎对所述第一数据执行原子写操作,包括:通过所述缓存写模块缓存第一数据;通过所述备份模块接收所述前导描述符,根据所述前导描述符的指示,通知所述内存写模块;通过所述内存写模块根据所述备份模块的通知,对所述第一数据执行原子写操作;其中,在所述原子写操作成功的情况下,所述第一数据被全部写入目标内存空间中,在所述原子写操作失败的情况下,所述目标内存空间被恢复至写入所述第一数据之前的状态。
CN202111168583.5A 2021-10-08 2021-10-08 基于硬件的原子写方法、设备及系统 Active CN113609150B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111168583.5A CN113609150B (zh) 2021-10-08 2021-10-08 基于硬件的原子写方法、设备及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111168583.5A CN113609150B (zh) 2021-10-08 2021-10-08 基于硬件的原子写方法、设备及系统

Publications (2)

Publication Number Publication Date
CN113609150A CN113609150A (zh) 2021-11-05
CN113609150B true CN113609150B (zh) 2022-03-08

Family

ID=78310756

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111168583.5A Active CN113609150B (zh) 2021-10-08 2021-10-08 基于硬件的原子写方法、设备及系统

Country Status (1)

Country Link
CN (1) CN113609150B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107797755A (zh) * 2016-09-05 2018-03-13 上海宝存信息科技有限公司 固态硬盘系统的原子写入方法以及使用该方法的装置
CN110390969A (zh) * 2019-06-28 2019-10-29 苏州浪潮智能科技有限公司 一种实现原子写的方法和系统
CN110737716A (zh) * 2018-07-02 2020-01-31 华为技术有限公司 一种数据写入的方法和装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10310897B2 (en) * 2016-09-30 2019-06-04 Intel Corporation Hardware accelerators and methods for offload operations

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107797755A (zh) * 2016-09-05 2018-03-13 上海宝存信息科技有限公司 固态硬盘系统的原子写入方法以及使用该方法的装置
CN110737716A (zh) * 2018-07-02 2020-01-31 华为技术有限公司 一种数据写入的方法和装置
CN110390969A (zh) * 2019-06-28 2019-10-29 苏州浪潮智能科技有限公司 一种实现原子写的方法和系统

Also Published As

Publication number Publication date
CN113609150A (zh) 2021-11-05

Similar Documents

Publication Publication Date Title
US11640247B2 (en) Providing service address space for diagnostics collection
US8863123B2 (en) Apparatus and method for virtualizing input/output devices using shared memory in host-based mobile terminal virtualization environment
CN112764872B (zh) 计算机设备、虚拟化加速设备、远程控制方法及存储介质
CN103793258A (zh) 基于管理程序的服务器复制系统及其方法
CN112765084B (zh) 计算机设备、虚拟化加速设备、数据传输方法及存储介质
US20210311768A1 (en) Switching between master and standby container systems
CN106095622A (zh) 数据备份方法及装置
CN104104705B (zh) 分布式存储系统的接入方法和设备
US10642782B2 (en) Multi-core processor and operation method thereof
US9417942B1 (en) Event-based in-band host registration
CN114265713A (zh) Rdma事件管理方法、装置、计算机设备及存储介质
JP2007080012A (ja) 再起動方法、システム及びプログラム
CN116185571B (zh) 数据迁移方法、设备、存储介质及装置
CN113609150B (zh) 基于硬件的原子写方法、设备及系统
US20160011791A1 (en) Storage control apparatus, storage system, and program
JP2018132964A (ja) ストレージ制御装置、ストレージ制御方法及びストレージシステム
US20110022995A1 (en) Circuit design information generating equipment, function execution system, and memory medium storing program
KR102377729B1 (ko) 멀티 코어 프로세서 및 그것의 동작 방법
CN110018987B (zh) 快照创建方法、装置及系统
US8862793B2 (en) Storage system, control device, and storage system control method of controlling storage system
CN107656702A (zh) 加速硬盘读写的方法及其系统、以及电子设备
US11003391B2 (en) Data-transfer-based RAID data update system
CN114327248A (zh) 存储节点、存储设备及网络芯片
US10628159B2 (en) Processor with selection circuit and selectively controllable register and method of operating same
US20150116208A1 (en) Terminal apparatus, information processing apparatus, and display control method

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