CN108027803A - 分布式无锁基于rdma的存储器分配和解分配 - Google Patents

分布式无锁基于rdma的存储器分配和解分配 Download PDF

Info

Publication number
CN108027803A
CN108027803A CN201680052870.0A CN201680052870A CN108027803A CN 108027803 A CN108027803 A CN 108027803A CN 201680052870 A CN201680052870 A CN 201680052870A CN 108027803 A CN108027803 A CN 108027803A
Authority
CN
China
Prior art keywords
memory
rdma
block
section
host
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.)
Granted
Application number
CN201680052870.0A
Other languages
English (en)
Other versions
CN108027803B (zh
Inventor
铃江丰
A·沙米斯
K·M·里斯维克
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.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
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 Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN108027803A publication Critical patent/CN108027803A/zh
Application granted granted Critical
Publication of CN108027803B publication Critical patent/CN108027803B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17331Distributed shared memory [DSM], e.g. remote direct memory access [RDMA]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

“基于RDMA的存储器分配器”应用远程直接存储器访问(RDMA)消息传送,以为跨基于RDMA的网络中在多个服务器分布的共享存储器提供快速无锁存储器分配和解分配。替代地,在各种实现中,基于RDMA的存储器分配器对RDMA消息传送和远程过程调用(RPC)请求进行组合,以为跨基于RDMA的网络中的多个服务器分布的共享存储器提供快速无锁存储器分配和解分配。在任意一种情况下,联网服务器中的任意一个均可以充当用于请求(或释放)存储器分配的客户端和用于托管分布式存储器的一部分的主机中的一者或两者。此外,任意服务器(包括请求客户端)均可以针对由任意客户端经由RDMA消息传送来分配或解分配的分布式存储器充当主机。有利地,无锁定通过减少整个***延迟来提高联网的计算机之间的存储器访问的整体性能。

Description

分布式无锁基于RDMA的存储器分配和解分配
背景技术
通常,直接存储器存取(DMA)提供了使得本地主机计算设备的设备或过程能够在不中断主机的CPU的情况下直接读和写该主机设备的本地存储器的各种技术。相反,越来越多地被部署在数据中心中的远程直接存储器存取(RDMA)扩展了传统的基于DMA的技术,以使远程设备或过程能够在不中断远程计算设备的CPU的情况下直接读和写远程计算设备的存储器。
诸如例如InfiniBand、iWARP、融合以太网上的RDMA(RoCE)等的现有的基于RDMA的技术利用支持RDMA的网络接口控制器(NIC)。当通过支持RDMA的网络写数据时,服务器或配备有支持RDMA的NIC的其他计算设备通常会应用DMA来读用户指定的、或进程指定的缓冲器或存储器地址中的数据,并将该数据作为自包含消息发送到联网计算设备的支持RDMA的NIC。接收支持RDMA的NIC然后使用DMA来将该数据写用户指定的、或进程指定的缓冲器或存储器地址。类似地,对于在支持RDMA的网络上的数据读,本地计算设备使用支持RDMA的NIC来向远程计算设备的支持RDMA的NIC发送自包含消息,以从用户指定的、或进程指定的缓冲器或存储器地址请求数据。然后,远程计算设备应用DMA来读所请求的数据并经由每个设备的支持RDMA的NIC将其返回到本地计算设备。
发明内容
提供以下发明内容以简化形式介绍将在以下具体实施方式中进一步描述概念的选择。本发明内容并非旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用作确定所要求保护的主题的范围的辅助手段。此外,虽然本文可以讨论其他技术的某些缺点,但所要求保护的主题不旨在限于可解除或解决这些其他技术的任意或全部缺点的实现。本发明内容的唯一目的是以简化的形式呈现所要求保护的主题的一些概念,作为以下呈现的更详细描述的序言。
通常,如本文中所描述的“基于RDMA的存储器分配器”应用远程直接存储器存取(RDMA)消息传送以为跨基于RDMA的网络中的多个服务器分布的共享存储器提供快速无锁存储器分配和解分配。替代地,在各种实现中,基于RDMA的存储器分配器组合RDMA消息传送和远程过程调用(RPC)请求,以为跨基于RDMA的网络中的多个服务器分布的共享存储器提供快速无锁存储器分配和解分配。在任意一种情况下,联网服务器中的任意一个都可以充当用于请求(或释放)存储器分配的客户端和用于托管分布式存储器的一部分的主机中的一者或两者。此外,任意服务器(包括请求客户端)均可以充当由任意客户端经由RDMA消息来分配或解分配的分布式存储器的主机。
存储器分配和解分配是经由分布式存储器分配器来完成的,该分布式分配器包括在块分配器需要时被实例化的块分配器和段分配器的多个实例。块分配器和段分配器通常应用RDMA读消息来从与每个存储器块相关联的元数据(例如,块首部和空闲段图)来将特定存储器块和存储器段块的状态确定为被使用或空闲。此外,块分配器和段分配应用RDMA原子比较和交换(CAS)消息来基于经由RDMA读消息取回的元数据来分配或解分配这些块和/或段。换句话说,块分配器通过经由支持RDMA的网络接口控制器(NIC)在服务器之间传送的RDMA读和CAS消息序列来结合段分配器执行分配和解分配以读和修改与每个存储器块关联的块首部和空闲段图。在使用此过程分配了存储器段之后,任意客户端都可以通过应用指向分配段的引用的RDMA读和写来读或写任意主机的任意分配段。更具体地说,客户端NIC向主机的NIC发送RDMA消息。主机然后对其自己的本地存储器执行对应的直接存储器访问(DMA)操作以完成客户端的RDMA请求。
例如,在存储器分配的情况下,基于RDMA的存储器分配器利用跨两个或更多个联网计算设备分布的共享存储器进行操作。在各种实现中,基于RDMA的存储器分配器拦截或以其他方式接收联网计算设备中充当客户端的的特定联网计算设备的存储器分配请求。基于RDMA的存储器分配器然后响应于存储器分配请求来确定存储器段大小以及联网计算设备中充当主机的的特定联网计算设备,将从充当主机的特定联网计算设备分配共享存储器的一个段。
在各种实现中,基于RDMA的存储器分配器然后应用主机的多个存储器块首部的RDMA读。基于RDMA的存储器分配器然后执行主机的空闲段图的RDMA读。通常,这个空闲的段图包括响应于块首部的接收而选择的存储器块的段分配数据。在各种实现中,基于RDMA的存储器分配器然后通过对所选择的存储器块的空闲段图执行RDMA CAS来分配主机的所选择的空闲存储器段。最后,基于RDMA的存储器分配器向客户端提供了对所分配的存储器段的引用。
在存储器解分配的情况下,在各种实现中,基于RDMA的存储器分配器再次利用跨两个或更多个联网计算设备分布的共享存储器进行操作。基于RDMA的存储器分配器截取或以其他方式接收对联网计算设备中充当主机的的特定联网计算设备上的特定存储器段的解分配请求。在各种实现中,基于RDMA的存储器分配器然后对与其中存储器段正被解分配的主机的特定存储器块相对应的空闲段图的一部分执行RDMA CAS。此RDMA CAS更新空闲段图,以将正在被解分配的段标记为空闲。最后,在各种实现中,基于RDMA的存储器分配器对主机的特定存储器块的存储器块首部执行RDMA CAS,以更新该块首部以将一个附加的段示出为空闲。
本文描述的基于RDMA的存储器分配器提供用于应用RDMA消息传送以针对跨基于RDMA的网络中的多个服务器分布的共享存储器提供快速无锁存储器分配和解分配的各种技术。此无锁存储器分配和解分配可减少延迟并提高基于RDMA的网络中的吞吐量。除了上述益处之外,基于RDMA的存储器分配器的其他优点将从下文的详细描述中变得显而易见。
附图说明
所要求保护的主题的具体特征、方面和优点将关于以下描述、所附权利要求和附图变得更好理解,其中:
图1图示了示例性数据中心或服务器的其他网络经由支持RDMA的交换机、路由器和用于与如本文所描述的“基于RDMA的存储器分配器”一起使用的直接连接的任意组合进行通信。
图2图示了用于使用基于RDMA的存储器分配器提供基于RDMA的存储器分配和解分配的总体架构图。
图3图示了图示用于影响基于RDMA的分布式存储器分配的各种示例性技术的总体流程图。
图4图示了图示用于影响基于RDMA的分布式存储器解分配的各种示例性技术的总体流程图。
图5图示了由基于RDMA的存储器分配器控制的示例性分布式存储器结构。
图6图示了用于使用基于RDMA的存储器分配器执行分布式存储器分配的示例性过程。
图7图示了用于使用基于RDMA的存储器分配器执行分布式存储器分配的示例性过程。
图8图示了用于使用基于RDMA的存储器分配器执行分布式存储器解分配的示例性过程。
图9是描绘具有用于在影响如本文所述的基于RDMA的存储器分配器的各种实现中使用的简化的计算和I/O能力的简化通用计算设备的总体***图。
具体实施方式
在以下对“基于RDMA的存储器分配器”的各种实现的描述中,对附图进行了参考,附图构成本文的一部分,并且其中通过图示的方式示出了具体的实现,其中基于RDMA的存储器分配器可以被实践。在不脱离其范围的情况下,可以利用其他实现,并且可以进行结构改变。
特定术语将被用于描述本文所述的各种实现,并且并非旨在用于将这些实现限于如此选择的特定术语。此外,应当理解的是,每个特定术语包括以大致类似的方式操作以实现类似目的所有其技术等同物。本文中对“一种实现”或“另一实现”或“示例性实现”或“替代实现”或类似短语的引用意味着结合实现描述的特定特征、特定结构或特定特性可以被包括在基于RDMA的存储器分配器的至少一个实现中。此外,整个说明书中这些短语的出现并不一定都指的是相同的实现,并且分离的或替代的实现不与其他实现相互排斥。本文所描述或示出的、针对表示基于RDMA的存储器分配器的一个或多个实现的任意过程流程顺序并不固有地指示过程要按照所描述或图示的顺序来实现的任意要求,以及对于任意过程流程在本文描述或示出的任意这种顺序并不意味着基于RDMA的存储器分配器的任意限制。
如本文所使用的术语“部件”、“***”、“客户端”等旨在指代与计算机相关的实体,或者硬件、软件(例如,执行中)、固件,或者其组合。例如,部件可以是在处理器运行的进程、对象、可执行文件、程序、函数、库、子例程、计算机或软件和硬件的组合。举例来说,在服务器上运行的应用程序和服务器本身都可以是部件。一个或多个组件可以驻留在进程中,并且部件可以位于一台计算机上和/或分布在两台或多台计算机之间。此外,在基于RDMA的存储器分配器的上下文中,多个联网服务器中的任意一个可以同时地或分离地充当客户端计算设备和主计算设备中的任一者或两者。术语“处理器”通常被理解为指硬件部件,诸如计算机***的处理单元。
此外,就术语“包括”、“包含”、“具有”、“含有”、其变体以及其他类似词语在本具体实施方式或权利要求书中使用的程度而言,这些术语旨在以类似于作为开放式过渡词的术语“包括”的方式是包含性的,而不排除任意附加或其他要素。
1.0简介:
远程直接存储器存取(RDMA)是从一台计算机的存储器到不同计算机的存储器的直接存储器存取,其是经由这些计算机的支持RDMA的网络接口控制器(NIC)执行的,而不涉及任一台计算机的操作***。换句话说,所有的RDMA操作都是由读或写到服务器存储器而不会中断或通知任一服务器的CPU的NIC来直接执行的。更具体地说,客户端NIC向主机的NIC发送RDMA消息或请求。主机然后在其自己的本地存储器上执行对应的直接存储器存取(DMA)操作以完成客户端的RDMA请求。然而,出于解释的目的,以下讨论将简单地引用由客户端向主机发送以执行存储器分配和解分配的RDMA消息或请求的使用。应当理解的是,接收到RDMA消息或请求的服务器然后经由主机的NIC和主机的存储器之间的本地DMA操作与其自己的存储器交互。
在各种实现中,基于RDMA的存储器分配器利用各种RDMA动作以使能联网计算机之间的快速无锁存储器分配。例如,在各种实现中,这些RDMA动作包括但不限于RDMA写消息、RDMA读消息和RDMA原子比较和交换(CAS)消息。
此外,远程过程调用(RPC)是过程间通信,其允许在一台计算机上运行的计算机程序、进程或线程使得子例程或程序在共享网络上的不同计算机的地址空间中执行。通常,为了执行RPC,客户端计算机会向服务器计算机发送RPC请求。RPC请求包括要由服务器执行的具体程序(例如,子例程、应用程序、进程等)的ID以及要用于该程序的执行的一个或多个可选参数。在各种实现中,“cookie”等也可以与ID一起被发送。一般来说,这个cookie是标识符(例如,数字、名称等),它以使客户端发送的原始消息能够与客户端最终收到的响应相匹配的方式来唯一地标识客户端/发送方。
在各种实现中,基于RDMA的存储器分配器使用基于RDMA的消息传送来执行存储器分配和解分配。如此,这些存储器分配和解分配在不涉及做出存储器分配或解分配请求的客户端的CPU并且不涉及正在进行那些存储器分配和解分配的主机的CPU的情况下被执行。然而,在各种实现中,基于RDMA的存储器分配器将RDMA消息传送和远程过程调用(RPC)请求进行组合,以针对跨基于RDMA的网络中多个服务器分布的共享存储器提供快速无锁存储器分配和解分配。在这种情况下,当客户端和主机服务器的CPU在经由基于RDMA的消息传送所发送的RPC请求来执行由在客户端和主机服务器之间发送的RPC请求指定的存储器分配或解分配请求时,它们才会参与其中。
有利的是,通过减少商品NIC硬件上的这些类型的存储器请求的总体***延迟,无锁定改善了联网计算机之间的存储器分配和解分配的整体性能。此外,本文描述的消息用于使用商品NIC的消息传送技术的能力基于专用NIC硬件降低了相对于网络的联网成本。此外,使用基于RDMA的存储器分配器实现的网络非常灵活,因为相对于一个或多个其他主机作为客户端的任意服务器(例如,发起存储器分配和解分配请求)(例如托管一部分分布式共享存储器)可以同时作为相对于一个或多个其他客户端的主机。此外,基于RDMA的存储器分配器可轻松扩展到来自在客户端和主机能力之一或两者中动作的服务器的多个同时的、并发的、或顺序的请求,从而提高网络性能。
如由图1中所示,基于RDMA的存储器分配器可以被配置为与任意所需的网络配置一起使用,其包括经由支持RDMA的路由器140、交换机(150和160)以及直接连接170的任意组合通信的服务器(100,110,120和130)的任意组合。有利的是,基于RDMA的存储器分配器所使能的通信和消息传送技术可扩展到任意数量的联网计算机和任意数量的联网计算机之间的任意数量的并发存储器分配和解分配请求。此外,一旦存储器已经由基于RDMA的存储器分配器分配,则该存储器可以经由在支持RDMA的NIC之间发送的无锁RDMA读和写来由任意联网计算机直接读或写。
图2图示了基于RDMA的存储器分配器的示例性架构。具体地,多个服务器(200、205、210、215、220和225)经由诸如路由器、交换机或其他联网硬件的支持RDMA的网络通信硬件230被配置为网络。服务器(200、205、210、215、220和225)中的每一个可以相对于网络中的任意其他服务器作为客户端(发送分配和解分配请求)和主机(托管分布式共享存储器的一部分)中的任意一者或两者来操作。
此外,在各种实现中,服务器(200、205、210、215、220和225)中的每一个被配置为运行操作***(例如,235、240),该操作***进而可以执行一个或多个程序(例如,245、250)。基于RDMA的存储器分配器API(255、260)驻留在每个服务器(200、205、210、215、220和225)上,并且被应用于拦截和处理来自每个特定服务器上执行的任意程序(例如245、250)或操作***(例如235、240)的任意存储器分配和解分配请求。基于RDMA的存储器分配器API在本文也被称为存储器分配器API模块,或简称为API。
最后,服务器(200、205、210、215、220和225)中的每一个包括用于向其他服务器中的一个或多个的支持RDMA的NIC发送和从其他服务器中的一个或多个的支持RDMA的NIC接收RDMA消息(例如RDMA读、RDMA写和RDMA CAS)的支持RDMA的NIC(例如265、270),如本文所描述。
1.1***概述:
如上所述,基于RDMA的存储器分配器提供用于应用RDMA消息传送的各种技术,以针对跨基于RDMA的网络中的多个服务器分布的共享存储器提供快速无锁存储器分配和解分配。上面总结的过程由图3(存储器分配)和图4(存储器解分配)的总体***图说明。
一般而言,图3的***图图示了如本文所描述的基于RDMA的存储器分配器的存储器分配特征的各种实现。此外,尽管图3的***图示出了基于RDMA的存储器分配器的各种实现的高级视图,但是图3并不旨在提供如在整个本文档中描述的基于RDMA的存储器分配器的每个可能的实现的详尽或完整图示。另外,图3中的任意框和可以由虚线或短划线表示的框之间的互连表示本文描述的基于RDMA的存储器分配器的替代实现。此外,如本文所描述的,这些替代实现中的任意一个或全部可以与整个本文描述的其他替代实现结合使用。
一般来说,如图3所示,基于RDMA的存储器分配器所使能的过程通过接收305来自客户端300的存储器分配(malloc)请求并针对该存储器分配请求来确定适当的段大小的存储器大小来开始操作。此存储器分配的大小通常基于客户端的某些应用程序、进程、线程等对特定存储器量的请求。基于RDMA的存储器分配器然后选择310从其为客户端300的存储器分配请求进行服务的特定主机和/或存储器区域。在各种实现中,为存储器分配目的而对特定主机和/或主机的存储器区域的选择是基于各种选择方法,包括但不限于用于找到嵌套可用适当大小的块和/或段的“最佳拟合”分配策略、随机选择、基于对去往和来自特定主机的业务的分析的选择、基于将一个或多个主机和/或存储器区域关联或预分配给特定客户的选择等等。
一般而言,如本文进一步详细讨论的,每个存储器区域是为基于RDMA的存储器分配器使用所保留的存储器的连续部分。因此,响应于由每个服务器的支持RDMA的NIC发送和接收的RDMA读、写和CAS操作,这些保留的存储器区域可由支持RDMA的NIC直接寻址。此外,每个单独的存储器区域都包含以块首部和空闲段图形式的元数据。
另外,取决于***配置,每个存储器区域的其余部分被分成相等大小的块,尽管不同存储器区域中的块大小可以与其他存储器区域的块大小不同。类似地,每个存储器块被分成相等大小的存储器段,尽管取决于***配置,不同块中的段大小可以与其他块的段大小不同。
在各种实现中,块首部的元数据包括信息,信息包括但不限于特定存储器区域中的每个块是空闲还是被分配的指示、每个分配块的段大小、以及存储器区域的每个分配块中分配的段的数量的计数。该空闲段图包括元数据,该元数据包括但不限于位图或其他元数据,指示特定存储器区域的存储器块中的每一个中的每个单独段是空闲的还是被分配的(例如,对于任意特定的段,如果空闲则为0,或如果被使用或被分配则为1)。
给定具有块首部和空闲段图的保留存储器区域的这种配置,在各种实现中,响应于客户端存储器分配请求,基于RDMA的存储器分配器执行(315)所选择的存储器区域的部分的RDMA读,该所选择的存储器区域包含该存储器区域的块首部。基于RDMA的存储器分配器然后评估320这些块首部以确定主机的存储器区域是否包含适当大小的存储器段(例如,适于预期的存储器分配请求的大小的段)的任意分配的块。
假设适当大小的存储器段在所选择的存储器区域的一个或多个块中可用,则基于RDMA的存储器分配器然后对具有适当大小的段的那些块中所选择的一个(被称为“适当的块”)的块首部执行325RDMA CAS操作。该CAS操作用于更新适当块的块首部以指示在该块中的附加段正在被使用。换句话说,经由对块首部的该RDMA CAS操作的成功完成330,适当块中的空闲段的计数减一。在各种实现中,在对于特定段大小在所选择的存储器区域内存在多个适当块的情况下,特定适当块的选择基于各种选择方法,包括但不限于“最佳拟合”分配策略、随机选择、基于块地址顺序的选择等。
此外,一旦成功完成RDMA CAS以更新适当的块首部以减少空闲段的数量,则基于RDMA的存储器分配器然后执行335对所选择的存储器区域的空闲段图的RDMA读。接下来,给定空闲段图,基于RDMA的存储器分配器选择适当块中的空闲段之一,并且对空闲段图执行340RDMA CAS操作以更新空闲段图以示出所选择的段为被分配(例如,在空闲段图中将0更改为1以指示所选择的空闲段现在是被分配的段)。换句话说,如果成功345,则对该空闲段图的CAS操作通过更新空闲段图中的对应条目来保留适当块的所选择的空闲段。响应于经由CAS消息的段的成功保留,基于RDMA的存储器分配器计算350对分配段的引用并将该引用提供给客户端300,从而完成存储器分配请求。
如上所述,客户端评估320经由所选择的主机的块首部的RDMA读315接收到的块首部,以确定主机是否包含适当大小的存储器段的任意块。在主机的一个或多个块中适当大小的存储器块不可用的情况下,客户端进一步评估355这些块首部以确定主机是否保存任意空闲块或未分配块(例如,尚未被保留用于特定的段大小的存储器块,意味着该块尚未被分成段,因此可用于分配)。在这种情况下,假设主机包含一个或多个空闲块,则客户端在所选择的空闲块之一的块首部上执行360RDMA CAS操作以保留或分配该块。如果成功365,则该CAS操作通过更新对应块首部中的元数据来指定用于该块的段大小并且将该块中的空闲段的数量递减1来将针对适当的段大小配置所选择的空闲块。一旦这个先前的空闲块已经被配置为适当的段大小,则基于RDMA的存储器分配器然后继续到经由执行335对于空闲段图的RDMA读、对空闲段图执行340RDMA CAS操作、并计算350并向客户端300提供对应的引用的上述序列来保留新配置的块中的段之一来完成存储器分配请求。
如上所述,在评估320以确定主机是否包含适当大小的段的块之后,基于RDMA的存储器分配器对所选择的适当块的块首部执行325CAS操作。然而,在由于某种原因(例如,经由由某个其他客户端的存储器分配请求预先保留)使该CAS操作不成功330的情况下,则在各种实现中,基于RDMA的存储器分配器通过为存储器分配请求选择310新的主机来重启开始存储器分配过程。然而,存储器通常响应于相同或其他客户端的请求在主机中以相对高的频率被分配和解分配。因此,在各种实现中,不是选择310新的主机,而是基于RDMA的存储器分配器通过针对最初选择的存储器区域执行315块首部的新的RDMA读来在相同主机上重新启动原始的存储器分配请求。在任一情况下,如图3所图示的,重新启动的存储器分配过程然后如上所述继续。
类似地,如果用于确定主机是否包含任意空闲块或未分配块的评估355指示没有未分配块可用,则在各种实现中,基于RDMA的存储器分配器通过为存储器分配请求选择310新的主机或者重复所选择的主机的存储器块首部的RDMA读的执行315来重新启动存储器分配过程。如由图3中所示,重新启动的存储器分配过程然后继续,如上所述。
类似地,如上所述,在各种情况下,基于RDMA的存储器分配器对所选择的空闲块之一的块首部执行360RDMA CAS操作,以保留或分配该块。然而,在由于某种原因(例如,某些其他客户端经由存储器分配请求的预先保留)此CAS操作不成功365的情况下,则在各种实现中,基于RDMA的存储器分配器通过为存储器分配请求选择310a新主机或者重复所选择的主机的存储器块首部的RDMA读的执行315来重新启动存储器分配过程。如由图3中所图示的,重新启动的存储器分配过程然后继续,如上所述。
如本文所述,图4的***图图示了基于RDMA的存储器分配器的存储器解分配特征的各种实现。此外,尽管图4的***图示出了基于RDMA的存储器分配器的各种实现的高级视图,但图4并不旨在提供如在整个本文档中描述的基于RDMA的存储器分配器的每种可能的实现的详尽或完整说明。另外,图4中的任意框和可以由虚线或短划线表示的框之间的互连表示本文描述的基于RDMA的存储器分配器的替代实现。此外,如本文所描述的,这些替代实现中的任意一个或全部可以与整个本文描述的其他替代实现结合使用。另外,图4所示的解分配过程可以与图3所示的分配过程组合,以针对跨网络分布的存储器执行并行和正在进行的存储器分配和解分配。
在各种实现中,存储器解分配过程开始于基于RDMA的存储器分配器从客户端接收405或以其他方式拦截的解分配请求。该解分配请求针对特定的主机上的特定存储器段。响应于解分配请求,在各种实现中,基于RDMA的存储器分配器对与正被解分配的特定段相关的空闲段图中的条目执行410RDMA CAS操作,以将空闲段图更新为标记该段是空闲的(例如,在空闲段图中将1更改为0以指示所选择的已分配段现在是空闲段)。在这个RDMA CAS操作不成功415的情况下,则特定段已经被标记为空闲(例如,响应于来自网络中某个其他客户端或过程的在先解分配请求),并且解分配请求完成425。然而,在该CAS操作成功415的情况下,在各种实现中,基于RDMA的存储器的分配器针对在其中存储器段被解分配的块的块首部执行420RDMA CAS操作,以显示一个附加的段为在该块中空闲(例如,将对应的块首部中空闲段的数量增加1)。此时,解分配请求完成425。
在各种实现中,在执行初始CAS操作410之前,基于RDMA的存储器分配器首先针对其中存储器段被解分配的块执行430空闲段图的RDMA读。然后,空闲段图中信息被用于在空闲段图上执行上述CAS操作410。
如上所述,在RDMA CAS操作410成功415的情况下,基于RDMA的存储器分配器可以对块首部执行上述RDMA CAS操作420以完成425解分配请求。然而,在各种实现中,基于RDMA的存储器分配器执行附加操作以确定对应的块在解分配之后是否包含任意分配的段,以及在对应的块首部中整个块是否可以被标记为空闲。
具体地,在对空闲段图上的RDMA CAS操作410的成功415完成后,在各种实现中,基于RDMA的存储器分配器针对其中存储器段正被解分配的块执行435块首部的RDMA读。然后基于RDMA的存储器分配器评估440块首部以确定是否块中的所有段均空闲(例如,在特定段的解分配之后,元数据中的段计数将示出零分配段)。在该块中的一个或多个其他段依然被分配的情况下,则基于RDMA的存储器分配器简单地对该块首部执行420上述的RDMA CAS,以将一个附加段示出为空闲,以完成425解分配请求。
然而,在块在特定段的重新分配之后将不具有分配的段的情况下,基于RDMA的存储器分配器代之以对在其中段被解分配的块的块首部执行445RDMA CAS操作,以将整个段标记为空闲。当该CAS操作445成功时450,解分配请求完成425。然而,在该CAS操作445失败(例如,在块被释放之前,某个其他客户端或过程保留或分配来自该块的附加段)的情况下,基于RDMA的存储器分配器简单地对该块首部执行420上述RDMACAS操作,以将一个附加段示出为空闲,以完成425解分配请求。
一般而言,一旦存储器的先前分配的段或块被解分配,该段或块立即变得可用于由基于RDMA的存储器分配器的进一步分配。此外,在各种实现中,在特定块中的所有段已被解分配的情况下,基于RDMA的存储器分配器维持该块的现有段大小而不是将该块标记为空闲。在该块的现有段大小具有可能会被经常使用的大小的情况下,这样可以进一步减少存储器分配的延迟。然而,在不常见的段大小或者有限存储资源的情况下,在该块中的所有段的解分配之后将整个块标记为空闲可以更为有利。通常,在这种情况下将块标记为空闲的决定将取决于特定的应用程序和网络业务简档。
2.0基于RDMA的存储器分配器的操作细节:
上述程序模块被采用用于实现基于RDMA的存储器分配器的各种实现。如上所综述,基于RDMA的存储器分配器提供了用于应用RDMA消息传送以为跨基于RDMA的网络中的多个服务器分布的共享存储器提供快速无锁存储器分配和解分配的各种技术。以下部分提供了基于RDMA的存储器分配器的各种实现的操作以及用于实现部分1中关于图1至图4描述的程序模块的示例性方法的详细讨论。具体地,以下各节提供了基于RDMA的存储器分配器的各种实现的示例和操作细节,包括:
·基于RDMA的存储器分配器的操作概述;
·RDMA动作;
·存储器区域并划分为具有包括块首部和段图的元数据的存储器块和存储器段;
·分布式存储器分配;
·分布式存储器解分配;
·用于存储器分配和解分配的基于RDMA的RPC消息;
·跨多个服务器复制存储器分配;以及
·不使用段图的分配和解分配
2.1操作概述:
如上所述,本文描述的基于基于RDMA的存储器分配器的过程提供了用于应用RDMA消息传送以提供针对跨基于RDMA的网络中的多个服务器分布的共享存储器的快速无锁存储器分配和解分配的各种技术。在各种实现中,通过连接库等来使能该消息传送能力,其提供应用程序编程接口(API)用于经由每个服务器的支持RDMA的NIC的基于RDMA的消息传送的使用。这个连接库在本文被称为基于RDMA的存储器分配器API,封装了各种协议,以建立和维护任意数量的联网计算机的NIC之间的连接。
在各种实现中,由基于RDMA的存储器分配器API实现的库基于包括RDMA读消息、RDMA原子比较和交换(CAS)消息、以及RDMA写消息的RDMA动作的组合来提供快速无锁存储器分配和解分配以及后续访问。在任意服务器上运行的任意应用程序或过程都可以访问该API来启动存储器分配和解分配请求,并读或写分配存储器的请求。然后,API将经由支持RDMA的NIC来自动地发起服务器之间的通信以处理存储器请求。
在各种实现中,基于RDMA的存储器分配器API包括“块分配器”和“段分配器”。一般而言,块分配器被用于从连续的存储器区域分配和解分配存储器块。类似地,段分配器由块分配器派生或实例化以在单独块中分配段。有利的是,通过使块分配器和段分配器两者能够驻留在网络中的任意服务器上同时控制网络中的任意其他服务器上的存储器块和段,增强了网络可配置性。换句话说,块分配器不需要与其管理的存储器在相同台服务器上。进一步,即使这些块分配器和正在管理的存储器都是相同或不同的服务器,多块分配器也可以管理相同的存储器。同样,段分配器不需要与其管理的存储器在相同台服务器上,即使段分配器和正在管理的存储器都在相同或不同服务器上,多个段分配器也可以管理相同的存储器。
基于RDMA的存储器分配器应用整个基于RDMA的存储器分配器API的块分配器部件,以经由RDMA读和RDMA CAS操作的组合来读和修改网络中的任意主机上的存储器区域的块首部。读和CAS操作的这种组合分配或解分配特定的存储器块。在各种实现中,块大小在每个存储器区域内是一致的,但是可以在不同的存储器区域之间变化。然而,单个存储器区域中的块大小可以通过在块首部中包括附加的元数据而变化,以跟踪任意特定存储器区域中的可变大小的块并与任意特定存储器区域中的可变大小的块交互。
类似地,段分配器根据需要被任意块分配器实例化,用于单独存储器块的存储器段的分配和解分配。更具体地说,当相应的存储器块首先被分成存储器段时,每个段分配器与特定的存储器块相关联,并且由块分配器实例化。段分配器定义了块正在被划分的段的大小。在各种实现中,段大小在每个块内是一致的,但是可以在不同的块之间变化。然而,单独块中的段大小可以通过在块首部和自由段图中的一者或两者中包括附加的元数据而变化,从而跟踪可变大小的段并与可变大小的段交互。与块分配器一样,段分配器不需要驻留在从其它们正在从存储器块分配并解分配段的服务器上。
通常,基于RDMA的存储器分配器API是基于“内核旁路(kernel pass)”技术来实现的。此外,因为NIC响应于基于RDMA的消息直接读和写共享分布式存储器,所以对于得到的存储器访问减少了延迟和***开销。内核旁路是一种应用于通过执行各种操作和存储器读和写而不访问或通知内核来提高网络性能的概念。在典型的网络场景中,内核解码网络分组,例如TCP,并通过对其进行复制来将数据从内核空间传递到“用户空间”。术语“用户空间”是指在内核之外(例如,内核空间之外)运行的代码。用户空间通常是指OS用来与内核进行交互的各种程序和库,诸如例如执行输入/输出、操纵文件***对象、应用软件等的软件。从内核空间到用户空间的复制过程通常涉及保存用户空间进程上下文数据,然后加载内核上下文数据。保存用户空间进程上下文数据然后加载内核进程信息的这个步骤通常被称为上下文切换。然而,已经观察到应用程序上下文切换以构成了很大一部分网络开销,从而降低了计算机互连的带宽和延迟性能。
基于RDMA的存储器分配器适应各种内核旁路技术以使得用户空间应用程序能够与基于RDMA的存储器分配器API通信,所述基于RDMA的存储器分配器API适用于与用户空间应用和在其上基于RDMA的存储器分配器API正在执行的NIC两者进行通信。此进程将内核移出用户空间进程与由基于RDMA的存储器分配器API使能的I/O子***之间的通信路径,该基于RDMA的存储器分配器API经由具有支持RDMA的NIC来处理网络通信。有利的是,该配置消除了上下文切换并从内核空间复制到用户空间。例如,在各种实现中,基于RDMA的存储器分配器通常经由以下用户空间操作顺序来发送RDMA读、写和CAS操作:
1.在作为客户端的本地服务器上做出RDMA消息要被发送到作为共享分布式存储器的某部分的主机的远程服务器的确定。通常,该确定是响应于由基于RDMA的存储器分配器API接收或以其他方式拦截的存储器分配或解分配请求(或读或写分配的存储器段的地址的请求)而作出的;
2.在客户端上应用基于RDMA的存储器分配器API的本地实例以与本地服务器的NIC进行通信;
3.应用本地服务器的NIC以与网络的物理联网硬件(例如支持RDMA的交换机、路由器等)进行通信,以跨网络向远程服务器的NIC发送适当的RDMA消息(例如读、写和CAS操作);以及
4.响应于由远程服务器的NIC接收到RDMA消息,应用远程服务器的NIC以经由该NIC与该服务器上的存储器之间的DMA操作来在远程服务器的存储器上执行所请求的读、写或CAS操作。换句话说,每个服务器响应于由NIC从其他服务器接收到的RDMA消息来执行本地DMA操作(例如,读、写和CAS操作)。
例如,在各种实现中,在联网服务器中充当“客户端”的一个取网服务器上执行的应用程序、进程或线程首先指示该客户端分配(或释放)一些特定量的存储器。在各种实现中,基于RDMA的存储器分配器API接收或以其他方式拦截该存储器分配或解分配请求,并且执行RDMA读和RDMA CAS操作的序列以在特定主机服务器的特定存储器区域内分配或解分配存储器的特定块和/或段。
有利的是,使用分配的存储器的实际进程、线程或应用程序可以不必知道或在意网络中不同服务器上存在分配的存储器。该进程、线程或应用程序只是简单地使用为响应分配请求而提供的引用来读或写分配的存储器。换句话说,RDMA读和RDMA写然后与对分配的存储器的引用结合使用来读和/或写分配的存储器。因此,基于RDMA的存储器分配器为这些联网服务器提供了比可能仅通过访问本地服务器存储器的显著更大的共享存储器空间的快速无锁访问。
2.2 RDMA动作:
如上所述,在各种实现中,基于RDMA的存储器分配器适配RDMA动作序列以使能跨多个联网计算机分布的存储器的快速无锁分配以及随后的读和写。应用于此目的的RDMA动作包括RDMA读消息、RDMA原子比较和交换(CAS)消息、以及RDMA写消息。
RDMA读消息使得客户端能够经由客户端和主机的RDMA NIC读主机的存储器的一部分。在各种实现中,基于RDMA的存储器分配器假设受保护的网络,其中所有服务器都具有访问其他计算机的共享存储器的一个或多个保留区域的适当权限。否则,在执行RDMA操作之前执行附加的许可步骤,以确保主机为特定客户端提供适当的权限以允许客户端访问其存储器。假设这样的权限是适当的,RDMA读操作经由客户端的NIC和主机之间的消息传送进行,而无论如何不通知主机的操作***。换一种说法,RDMA读消息使得客户端能够读主机的存储器,而不需要主机的操作***知道该存储器读。
类似地,RDMA写消息使得客户端能够经由发送者和主机的RDMA NIC向主机的一部分存储器(例如,由基于RDMA的存储器分配器分配的存储器段)写。如与RDMA读一样,RDMA写操作在没有通知主机的情况下被执行。
RDMA原子比较和交换(CAS)消息用于原子比较来自客户端的RDMA CAS消息中的值与主机的指定虚拟地址的值。如果比较值相等,则由RDMA CAS消息指定的值将存储在主机的虚拟地址处。换句话说,在原子事务中,一系列数据库操作或者全部发生,或者什么也不发生。原子性的保证防止对存储器地址的更新仅部分地发生。因此,主机没有观察到RDMA事务正在进行,因为在某一时刻,它尚未发生,并且在下一时刻,它已经全部发生(或者如果事务因为发送的值与主机所持有的值不匹配而失败,则什么都不发生)。因此,RDMA CAS操作的使用与经由块首部和空闲段图的RDMA读所获得的元数据相结合,使得基于RDMA的存储器分配器能够通过经由对这些块首部和空闲段图的RDMA CAS操作来修改块首部和空闲的段图来分配和解分配特定的存储器块和存储器段。
2.3存储器区域和块和段中的分配:
如上所述,网络中的多个服务器托管共享分布式存储器的一个或多个存储器区域,其为基于RDMA的存储器分配器保留并且可由基于RDMA的存储器分配器访问。保留这些存储器区域以用于由基于RDMA的存储器分配器使用,可确保网络中的服务器或在这些服务器上执行的其他进程除了经由基于RDMA的存储器分配器之外不会写保留存储器的存储器区域,从而避免由基于RDMA的存储器分配器管理的存储器的冲突或损坏。然后,任意特定的保留存储器仅由基于RDMA的存储器分配器API并经由响应于由该服务器的NIC接收的RDMA消息由该服务器的NIC对该存储器的DMA读、写和CAS操作才能被访问。
通常,每个存储器区域被定义为存储器的连续部分,该存储器的连续部分被保留以供基于RDMA的存储器分配器使用。在各种实现中,使用2GB的存储器区域大小,其中这些区域中的一个或多个被保留在任意联网服务器上。然而,任意期望大小的存储器区域可以基于本文描述的技术而被使用。这些保留的存储器区域可响应于由每个服务器的支持RDMA的NIC发送和接收的RDMA读、写和CAS操作,可由支持RDMA的NIC直接寻址。
此外,每个单独的存储器区域包含以块首部和空闲段图的形式为元数据保留的存储器的一部分(例如,一个或多个存储器块)。在各种实现中,块首部区域的大小和空闲段图的大小可以与每个区域被划分成的块的大小相同。然而,不要求块首部与空闲段图大小相同,或者这些中的任一者与相同存储区中的块大小相同。另外,取决于存储区大小和块首部和空闲段图中的元数据量,多个块首部部分和多个空闲段图可以被包括在任意特定存储器区域中。
在各种实现中,块首部的元数据包括信息,信息包括但不限于特定存储器区域中的每个块是空闲还是被分配的指示、每个分配块的段大小、以及存储器区域的每个分配块中分配的段的数目的计数(或者空闲段的数目的计数)。该空闲段图包括元数据,该元数据包括但不限于位图或其他元数据,指示特定存储器区域的存储器块中的每一个中的每个单独段是空闲的还是被分配的(例如,对于任意特定的段,如果空闲则为“0”,或如果被使用或被分配则为“1”)。
在各种实现中,每个存储器区域的其余部分(除了元数据部分之外)被基于RDMA的存储器分配器的块分配器分成相等大小的块。然而,取决于***配置,不同存储器区域中的块大小可以不同于其他存储器区域的块大小。类似地,在各种实现中,每个存储器块被基于RDMA的存储器分配器的段分配器划分成相等大小的存储器段。然而,取决于***配置,不同块中的段大小可以不同于其他块的段大小。
通常,基于RDMA的存储器分配器API的块分配器部件针对元数据保留其存储器区域中的第一块中的两个或更多个第一块。第一组块为至少包含一个块,包含整个存储器区域的所有块首部。这些块首部包含在分配器中需要用于执行无锁操作的所有共享信息。下一组块是存储器区域中所有可分配块的空闲段图。用于该元数据的块数量基于块的数量、块大小和块中的段的最大数量。换句话说,存储器块是由基于RDMA的存储器分配器API的块分配器部件从存储器区域分配的。
每个块分配器负责分配和解分配来自特定区域内的块。块分配器还负责设置块的大小,并在块中不再存在被使用的段时将块标记为未使用块(经由与该块相关联的块首部)。在各种实现中,块分配器应用“最佳拟合”分配策略来在下一个适当大小的段和/或块中找到空间。这导致内部碎片增加和***延迟之间的折衷。
这些块分配器根据基于RDMA的存储器分配器API的需要被实例化并且设置从存储器区域分配的块的大小。在各种实现中,块大小被设置为1MB。然而,并不要求块具有任意特定的大小,因此,块大小可以是高达存储器区域的整个大小的任意期望的大小(少于为元数据保留的存储器区域的部分)。
类似地,存储器段由基于RDMA的存储器分配器API的段分配器部件从存储器块分配。这些段分配器根据与特定存储器区域相关联的任意块分配器的需要被实例化。一般来说,段是分配器中最小的单元,它是任意客户端可以分配用于存储器读和写的实际单独分配单元。如上所述,段的大小可以在不同块之间不同,但在单独块内通常是相同的大小。例如,在各种实现中,可能的段大小被设置在一个字节和一兆字节之间的任意地方(或者不管最大块大小已经被设置为多少,具有增加2的幂的中间大小(例如2字节、4字节、8字节、16字节、32字节、64字节、128字节、256字节等))。在单独块内分配相同大小的段使得通过基于块中的段计数简单地确定偏移量来计算对分配段的引用成为简单的事情。然而,通过在空闲段图或块首部中包括附加的元数据以允许对保留段的引用的确定,可以在块内将段设置为任意期望的大小。
图5图示了划分成元数据部分的区域的示例性分布式存储器结构,该区域包括用于由基于RDMA的存储器分配器使用的块首部。例如,如图5所图示的,基于RDMA的存储器分配器API模块255根据需要实例化一个或多个块分配器500和段分配器。如上所述,块分配器500从存储器的连续区域分配和解分配存储器块。此外,块分配器500不需要驻留计算设备上,它们正在针对该计算设备分配和解分配块。类似地,段分配器505在块分配器500需要用于单独存储器块的存储器段的分配和解分配时被实例化。与块分配器500一样,段分配器505不需要驻留在计算设备上,它们正在针对该计算设备分配和解分配段。
此外,如图5所示,基于RDMA的存储器分配器API 255驻留在一个或多个联网计算设备或服务器(510、515和520)上。这些联网计算设备或服务器(510、515和520)中的一个或多个托管被保留用于由基于RDMA的存储器分配器使用的一个或多个存储器区域(525、530、535)。每个存储器区域(525、530、535)是联网计算设备中的任意一个上的RDMA可寻址存储器的连续部分。此外,每个存储器区域(525、530、535)包括块首部540和空闲段图545。
另外,如图5所示,在各种实现中,每个存储器区域(525、530、535)被划分为一个或多个相等大小的存储器块(550、555、560、565)。不同的存储器区域(525、530、535)可以被对应的块分配器500划分成不同大小的存储器块(550、555、560、565)。
最后,如图5所图示的,在各种实现中,每个存储器块(550、555、560、565)被划分成一个或多个相等大小的存储器段(570、575、580、585)。不同的存储器块(550、555、560、565)可以被对应的段分配器505划分成不同大小的存储器段(570、575、580、585)。
2.4分布式存储器分配考虑:
如上所述,基于RDMA的存储器分配器执行跨网络分布的共享存储器的分配和解分配。此外,对分配的存储器的引用被提供给客户端,用于在读和写分配的存储器段中使用。以下段落讨论了应用基于RDMA的存储器分配器以仅基于RDMA消息传送来执行存储器分配的各种实现的一些考虑。使用RDMA和RPC组合的存储器分配和解分配的讨论在下面的2.6节中被提供。
在各种实现中,基于RDMA的存储器分配器API在多个约束下操作,其中没有一个约束是强制的,为了简化总体***配置并减少用于执行存储器分配和解分配的带宽和延迟。例如,在各种实现中,基于RDMA的存储器分配器API强制最大分配大小(例如,2GB存储器区域、1MB块等),该最大分配大小在任意特定网络的基于RDMA的存储器分配器的初始设置期间被指定。
在各种实现中,基于RDMA的存储器分配器API使用用于分配的预定的或静态开销。例如,考虑用于分配的2GB存储器区域大小。在这种情况下,基于RDMA的存储器分配器API可以使用静态量的该存储器区域(例如,0.1GB)用于元数据,以及剩余量(例如,1.9GB)用于块分配。然而,在各种实现中,基于RDMA的存储器分配器API基于每个块中区域的大小、块大小以及段的数目和大小来针对元数据应用可变开销大小。
各种实现中的附加约束是一旦存储器已被保留,则该存储器不被移动。这确保了分配的存储器可经由RDMA读和写访问。此外,在各种实现中,基于RDMA的存储器分配器API不使用任意种类的分块代码(例如,关键部分、等待单个对象等),因为底层内核代码将考虑引入比RDMA读、写或CAS操作相当地更多的延迟。然而,即使延迟可以增加,使用分块代码也可以被应用在基于RDMA的存储器分配器的各种实现中,以解决针对特定应用程序的特定网络考虑。
以下讨论总结了在由基于RDMA的存储器分配器的示例性存储器分配期间两个联网的计算机(例如,“客户端”和“主机”)之间的通信。下面的事件序列并不旨在描述或包括基于RDMA的存储器分配器的所有各种实现,并且仅为了示例目的而提供。
1.客户端(计算机A)确定以下信息:客户端想要从其分配存储器的存储器区域位于的位置(例如,计算机B、主机)、以及期望的分配大小。考虑到计算机A可以是与计算机B相同的计算机,但是不必须与计算机B相同。换句话说,这种分配过程可以应用在作为客户端和主机两者的单个计算机上,或者在不同计算机之间。
2.客户端执行主机上的存储器区域中的块首部的RDMA读。
3.客户端评估块首部并确定以下中的一项:
(a)主机的存储器区域包含适当的块,从该适当的块分配存储器段;
(b)主机上没有适当的分配块,但主机上有一个或多个未分配的块;或者
(c)主机上没有适当的分配块,并且主机上也没有未分配的块。
4.基于步骤3中的确定,客户端将执行以下动作之一:
(a)如果是3(a),则客户端将对主机上所选择的块的块首部执行RDMA CAS操作,该CAS操作将更新块首部以指示在该块中附加的段正在被使用;
(b)如果是3(b),则客户端将对主机上的未分配块的首部执行RDMA CAS以分配该块,该CAS操作将初始化对应块首部中的所有元数据,包括指示在该块中附加的段正在被使用;
(c)如果是3(c),则客户将分配失败。响应于这种失败,有几种选项是可能的。
i.将分配错误返回给客户端(或者客户端上发出初始malloc请求的任意进程、线程或应用程序);
ii.返回到步骤1。存储器分配和解分配是动态的。因此,自从分配失败后,一个或多个块或段在主机上已经变得可用是可能的;或
iii.返回到步骤2。存储器分配和解分配是动态的。因此,自从分配失败后,一个或多个块或段在主机上已经变得可用是可能的。
5.假设客户端成功执行步骤4(a)或步骤4(b),客户端然后将执行主机的空闲段图的RDMA读。
6.响应于步骤5,客户端将评估空闲段图以标识未分配的段,然后经由对主机的空闲段图的RDMA CAS操作来保留未分配的段,以将对应的段条目更新为正在被使用。
7.响应于步骤6,基于RDMA的存储器分配器计算对分配的段的引用,并将该引用提供给客户端以完成存储器分配操作。
2.5分布式存储器解分配考虑:
以下讨论总结了在由基于RDMA的存储器分配器的示例性存储器解分配期间两个联网的计算机之间的通信。下面的事件序列并不旨在描述或包括基于RDMA的存储器分配器的所有各种实现,并且仅为了示例而被提供。
1.客户端(计算机A)确定以下信息:客户端想要从其解分配存储器的存储器区域位于的位置(例如,计算机B,主机)。
考虑到计算机A可以是与计算机B相同的计算机,但是不必须与计算机B相同。换句话说,该解分配过程可以应用于作为客户端和主机两者的单个计算机或者不同的计算机之间。
2.客户端执行RDMA读存储器区域的空闲段图,在该空闲段图中段正在被解分配。
3.客户端对主机的空闲段图执行RDMA CAS操作,以将正在被解分配的段标记为空闲。
4.然后,客户端为块执行主机的块首部的RDMA读,在该块中段正在被解分配。
5.客户端评估块由首部指示的保留或分配的段的数量,并确定以下基于实例的场景之一:
(a)除了正在被解分配的段之外,块中没有其他的正在使用的段;或
(b)该块中存在正在使用其他的段。
6.根据步骤5的确定,客户然后将执行以下操作之一:
(a)如果是5(a),则客户端将对主机的块首部执行RDMA CAS操作,以便更新块首部以将整个块示出为空闲(即未分配);
(b)如果是5(b),则客户端将对主机的块首部执行RDMA CAS操作,以便更新块首部以示出该块中存在正在使用的段少一个。
7.成功完成步骤6后,解分配完成,并且先前分配的段(或块)可用于进一步分配。
2.6用于分配和解分配的基于RDMA的RPC消息:
如上所述,在各种实现中,基于RDMA的内存分配器将RDMA消息传送和远程过程调用(RPC)请求组合,以针对跨基于RDMA的网络中的多个服务器分布的共享存储器提供对快速无锁存储器分配和解分配。在这种情况下,客户端和主机服务器的CPU只有在它们执行由客户端和主机服务器之间经由基于RDMA的消息传送发送的RPC请求指定的存储器分配或解分配请求时才会被涉及。
例如,在各种实现中,在联网服务器中的任意一个上执行的应用程序、进程或线程进行由基于RDMA的存储器分配器API拦截的存储器分配(或解分配)请求。该服务器的基于RDMA的存储器分配器API然后应用RDMA写来向另一个服务器(其可以是服务器中的相同或不同的服务器)的存储器缓冲器输入RPC存储器分配(或解分配)请求。接收服务器上的一个或多个本地线程然后监视该缓冲器,用于RPC存储器分配或解分配请求的接收。
响应于基于RPC的请求的接收,接收服务器的CPU(而不是在基于RDMA的请求的情况下的NIC)对上述块首部和空闲段图执行RDMA读和CAS操作的相同的序列,以执行所请求的无锁分配或解分配。作为响应,接收服务器然后通过将该引用的RDMA写应用于请求服务器的存储器缓冲器来将对分配的存储器的引用发送给请求服务器。请求服务器上的一个或多个本地线程监视该服务器的缓冲器,用于对分配的存储器的引用(或成功解分配请求的确认)的接收。
经由RDMA发送RPC消息的开销和延迟高于本文所述的、仅依赖于RDMA消息传送的技术。然而,此过程的优点之一是响应于RPC消息的接收由CPU执行的读、写和CAS操作通常比NIC响应于RDMA消息的接收所执行的读、写和CAS操作快得多。
2.7跨多个服务器复制分配的存储器:
在各种实现中,基于RDMA的存储器分配器可选地跨越一个或多个附加服务器来复制分配的存储器段、块或整个存储器区域,以在针对任何原因的特定服务器上的数据损坏或特定服务器的丢失的情况下提供数据冗余。在最简单的情况下,整个存储器区域被复制。此外,在各种实现中,每当由基于RDMA的存储器分配器接收到用于原始段、块或整个存储器区域的解分配的调用时,已经被复制到一个或多个附加服务器的存储器段、块或整个存储器区域被自动地解分配。
例如,当复制分配的存储器的状态时,首先使用本文描述的基于RDMA的技术将该存储器分配(或解分配)到主要位置。一旦存储器在主要位置上被分配(或解分配),基于RDMA的存储器分配器将每个对应的存储器区域可选地复制到(在相同或不同的服务器上的)一个或多个副本。因此,如果没有正在进行的分配或解分配,则每个副本将与主要位置完全相同。
通常,在各种实现中,如上所述,由基于RDMA的存储器分配器执行的可选复制过程被实现为由基于RDMA的存储器分配器API执行的分配和解分配过程的简化版本。然而,任意已知的用于复制存储器的技术都可以在由基于RDMA的存储器分配器的原始分配之后被应用。
更具体地说,在分配的情况下,一旦特定的块和段被分配给主要位置,基于RDMA的存储器分配器API准确地知道哪个块和段已经在特定的存储器区域中被分配。因此,在该分配已经完成之后,基于RDMA的存储器分配器API应用上述基于RDMA的技术以通过执行以下描述的步骤来创建每个副本(其应当鉴于先前关于基于RDMA的存储器分配的详细描述进行理解)。然而,如上所述,在任意存储器已经由基于RDMA的存储器分配器分配之后,任意用于复制存储器的已知技术可以被应用以创建副本。假定本文描述的基于RDMA的技术的使用,经由以下步骤完成复制(对于主要位置的每个副本):
1.应用RDMA CAS操作来更新副本存储器区域的适当块首部中的空闲段的数目;
2.应用RDMA CAS操作以在副本的空闲段图中将适当的段标记为正使用;以及
3.将对主要位置上分配的段的任意写传播到副本中的每一个。在解分配的情况下,在各种实现中,由基于RDMA的存储器分配器执行的复制过程考虑在特定段的解分配之后在主要位置的存储器块中附加段是否正被使用。
例如,在特定段的解分配之后在块中其它段仍被使用的情况下,通过使用上述基于RDMA的技术来更新副本以用于改变元数据以减少在副本的块首部中使用的段的数量,并在副本的空闲段图中将段标为空闲。这些过程针对主要位置的每一个副本被复制。
相反,在主设备上正被释放的段是块中最后(或仅有)段的情况下,在各种实现中,基于RDMA的存储器分配器执行以下步骤:
1.应用RDMA CAS操作以将主要位置的块标记为保留而非空闲;
2.评估第一个副本以确保在主设备上被解分配的段的副本是在对应块中使用的唯一段,并且当为真时,则应用RDMA CAS操作以将该副本的块标记为空闲;
3.针对主要位置的所有副本重复步骤2以完成每个副本的解分配过程;以及
4.在完成所有副本的解分配过程后,应用RDMA CAS操作以将主要位置的块标记为空闲。
2.8没有空闲段图的分配和解分配:
如上所述,存储器分配和解分配(和可选复制)可以由基于RDMA的存储器分配器经由基于RDMA的消息传送和/或基于RDMA的RPC消息来执行。在这些情况中的每一个中,先前的讨论都引用了特定存储器段的分配和解分配的空闲段图的使用。然而,在各种实现中,通过在每个块首部和存储器段中包括附加的元数据而提供段管理(例如,分配、解分配和复制)而不使用空闲段图。
例如,与先前实现中的每一个一样,基于RDMA的存储器分配器利用每个存储器区域中的块首部元数据。如上所述,先前实现中的块首部元数据包括信息,信息包括但不限于特定存储器区域中的每个块是空闲还是被分配的指示、每个分配块的段大小、以及存储器区域的每个分配块中分配的段的数目的计数。然而,在其中空闲段图被去除的实现中,存储器区域中的块首部中的每一个的元数据还包括对该块的第一空闲段的附加引用。
另外,包括每个块中的第一空闲段的每个段包括其自己的具有引用的元数据首部,该引用指向该块中的下一个空闲段,等等(例如,链接列表),直到块中的最后一块空闲块已达到。块中的最后空闲段要么没有对任意其他空闲段的引用,或者只是一个空引用。此外,如上所述,每当块被首先分配时,其将被划分为相等大小的存储器段的集合。因此,在其中没有使用空闲段图的实现中,每个段首部中的元数据在初始块分配过程中被初始化,使得块中的每个段(最初都是空闲的)包括对在该块中的某个其他空闲段的初始引用。
在各种实现中,从一个空闲段到下一个的初始引用是顺序的(例如,段-1具有对段-2的引用,段-2引用段-3,以此类推)。然而,只要块中的所有段都被块中的另一块段引用,并且没有段被多于一个其他段引用,则对其他空闲段的空闲段引用的任意顺序可以被应用,包括随机顺序。然后,在分配过程中,块首部中的、指示下一个空闲块的元数据将随着每个分配而改变。类似地,在解分配过程的期间,块首部中的元数据和正被释放的段的首部中的元数据将随着每次解分配而改变。
以下讨论针对其中消除了空闲段图的实现总结了由基于RDMA的存储器分配器的示例性块分配过程。此外,可以使用第2.6节中描述的、应用基于RDMA的RPC消息的技术来修改此过程。下面的事件序列并不旨在描述或包括基于RDMA的存储器分配器的所有各种实现,并且仅为了示例目的被提供。例如,针对新分配的块的基于RDMA的块分配的情况下,基于RDMA的存储器分配器可以经由以下序列来执行分配,为了解释目的,其假设了初始序列段引用。该块分配过程不需要被重复,除非整个块被解分配并然后随后重新分配。
1.确定存储器区域,从存储器区域分配所选择的空闲块以及针对该块所期望的块大小;
2.块分成适当大小的段;
3.初始化每个段首部中的引用以指向块中的下一个顺序段。更具体地,段-n包括指向作为下一个空闲段的段-(n+1)的初始引用,以此类推,块中的最后一个空闲段包括空引用,该空引用可以响应于随后的段分配和解分配来改变为指向一些其他空闲段。例如,第一段(例如,段-1)的段首部被初始化为指向作为其下一空闲段的段-2,而段-2的段首部被初始化为指向作为其下一个空闲段的段-3,以此类推;以及
4.初始化正在被分配的块的块首部,以包括对第一空闲段(例如段-1)的引用。
以下讨论针对其中消除了空闲段图的实现总结了由基于RDMA的存储器分配器的示例性段分配过程。此外,可以使用第2.6节中描述的、应用基于RDMA的RPC消息的技术来修改此过程。下面的事件序列并不旨在描述或包括基于RDMA的存储器分配器的所有各种实现,并且仅为了示例的目的而被提供。例如,在基于RDMA的段分配情况下,基于RDMA的存储器分配器可以经由以下顺序执行段分配:
1.确定要从其中分配存储器的段的特定内存区域和段分配大小;
2.执行存储器区域中的块首部的RDMA读;
3.评估存储器区域的块首部以获得对特定块(例如,具有适当大小的段的块)的第一空闲段(例如段-a)的引用;
4.执行段-a的元数据首部的RDMA读(即在块首部中引用的第一空闲段);
5.评估段-a的元数据以获得对例如段-b的下一空闲段的引用,;
6.对块首部执行RDMA CAS操作(基于对段-a的已知引用)以更新块首部的元数据,以引用作为段-b的第一空闲段。由于某种原因,CAS操作可以会失败,例如,在上面的步骤2之后发生一些其他段分配或解分配。因此,在CAS操作失败时,段分配过程可以从上面的步骤1或步骤2重新启动,然后重复到步骤6直到CAS操作成功;以及
7.将对段-a的引用返回到请求段分配的线程、过程或应用程序。
以下讨论针对其中空闲段图被消除的实现总结了由RDMA的存储器分配器的示例性段解分配过程。此外,可以使用第2.6节中描述的、应用基于RDMA的RPC消息的技术修改此过程。下面的事件序列并不旨在描述或包括基于RDMA的存储器分配器的所有各种实现,并且仅为了示例目的而被提供。例如,在基于RDMA的段解分配的情况下,基于RDMA的存储器分配器可以经由以下顺序来执行段解分配:
1.执行其中特定段(例如段-j)将被解分配的块首部的RDMA读;
2.评估块首部中的元数据以获得对块中、例如段-k的第一块空闲段的引用;
3.执行RDMA写操作以将正在被解分配的段(即段-j)的首部中的元数据更新为引用段-k作为块中的下一空闲段;
4.对块首部执行RDMA CAS操作(基于对段-k的已知引用)以将该块首部的元数据更新为引用第一空闲段作为段-j。CAS操作可以由于某些原因失败,例如,在上面的步骤1之后发生了某个其他的段分配或解分配。因此,在CAS操作失败时,段解分配过程可以从步骤1重新启动,然后重复到步骤4直到CAS操作成功。
3.0基于RDMA的存储器分配器的操作概述:
以上关于图1至图5描述的过程以及进一步结合上面在章节1和2中提供的详细描述由图6至图8的一般操作流程图图示出。具体地,图6至图8提供了总结基于RDMA的存储器分配器的各种实现中的一些的操作的示例性操作流程图。图6至图8并非旨在提供本文所述的基于RDMA的存储器分配器的所有各种实现的详尽表示,并且这些图中表示的实现仅为了解释的目的而被提供。
此外,任意框和可由图6至图8中的虚线或短划线表示的框之间的互连表示本文描述的基于RDMA的存储器分配器的可选或替代实现,并且如下所述的这些可选或替代实现中的任意一个或全部可以与在整个本文中描述的其他替代实现结合使用。
一般来说,如图6所示,在各种实现中,基于RDMA的存储器分配器通过接收(610)由作为客户端的联网计算设备中的特定的一个的存储器分配请求来在跨两个或更多个联网计算设备上分布的共享存储器(600)中开始分配存储器的过程。基于RDMA的存储器分配器然后响应于存储器分配请求,确定(620)存储器段大小和从其中分配共享存储器的段的、作为主机的、网计算设备中的特定一个。
接下来,基于RDMA的存储器分配器应用(630)主机的多个存储器块首部的RDMA读,每个块首部包括与主机的对应存储器块相关联的元数据。然后,基于RDMA的存储器分配器执行(640)主机的空闲段图的RDMA读,空闲段图对应于响应于块首部的接收而选择的存储器块,所述空闲段图包括定义所选择的存储器块的存储器段分配状态的元数据。响应于空闲段图的RDMA读,基于RDMA的存储器分配器通过对所选择的存储器块的空闲段图执行RDMACAS来分配(650)主机的所选择的空闲存储段。最后,基于RDMA的存储器分配器向客户端提供(660)对分配的存储器段的引用以完成分配过程。
类似地,如图7所图示的,在各种实现中,基于RDMA的存储器分配器通过应用(710)作为客户端的服务器之一的存储器分配器API以拦截客户端的存储器分配请求,经由支持RDMA的NIC进行通信从多个联网的服务器(700)开始分配存储器的过程。然后,基于RDMA的存储器分配器应用(720)客户端的存储器分配器API以引导客户端的NIC经由主机的NIC执行作为主机的服务器之一的存储器块首部的RDMA读。
接下来,响应于存储器块首部的接收,基于RDMA的存储器分配器应用(730)客户端的存储器分配器API以引导客户端的NIC经由主机的NIC对主机的所选择的块首部执行RDMACAS以更新该块首部,以指示附加的存储器块在该存储器块中正被使用。然后基于RDMA的存储器分配器应用(740)客户端的存储器分配器API以引导客户端的NIC经由主机的NIC执行所选择的存储器块的空闲段图的RDMA读。
响应于空闲段图的接收,基于RDMA的存储器分配器应用(750)客户端的存储器分配器API以引导客户端的NIC经由主机的NIC对空闲段图执行RDMA CAS,以分配所选择的存储器块的特定空闲段。基于RDMA的存储器分配器然后通过向客户端提供(760)对分配段的引用来完成分配请求。
相反,图8图示了基于RDMA的存储器分配器如何执行存储器解分配的示例。例如,在各种实现中,基于RDMA的存储器分配器通过接收(810)针对作为主机的联网计算设备中的特定的一个上的特定存储器段的解分配请求,从跨两个或更多个联网计算设备上分布的共享存储器(800)开始解分配过程。基于RDMA的存储器分配器然后对主机的特定存储器块的空闲段图执行(820)RDMA CAS,在主机中存储器段被解分配以将段标记为空闲。基于RDMA的存储器分配器然后对主机的特定存储器块的存储器块首部执行(830)RDMA CAS以更新该块首部以将一个附加的段示出为空闲以完成解分配请求。
在其他实现中,在对主机的特定存储器块的存储器块首部执行(830)RDMA CAS之前,基于RDMA的存储器分配器首先执行(840)特定的存储器块的块首部的RDMA读。在块首部的这种读示出(850)在存储器块中没有其他存储器段被分配的情况下,基于RDMA的存储器分配器然后将对块首部执行(860)RDMA CAS以更新该存储器块首部以将特定存储器块示出为空闲,以完成解分配请求。然而,在块首部的读示出(850)在存储器块中存在仍被分配的其他存储器段的情况下,基于RDMA的存储器分配器然后简单地对主机的特定存储器块的存储器块首部执行(830)前述的RDMA CAS以更新该块首部,以将一个附加的段示出为空闲,以完成解分配请求。
4.0用于基于RDMA的RPC消息传送的示例性实现:
以下段落总结了本文中可以被要求保护的实现的各种示例。下面总结的实现并非旨在限制可以结合基于RDMA的存储器分配器的详细描述所要求保护的主题。此外,下面总结的实现中的任意一个或全部可以以与在整个具体实施方式中描述的实现中的一些或全部以及在附图中的一个或多个中图示的任意实现以及下面描述的任意其他实现和示例的任意期望的组合而被要求保护。以下实现和示例旨在结合在整个本文中的具体实放方式和附图而被理解。
在各种实现中,基于RDMA的存储器分配器应用RDMA消息传送以针对跨基于RDMA的网络中的多个服务器分布的共享存储器提供快速无锁存储器分配和解分配。替代地,在各种实现中,基于RDMA的存储器分配器将RDMA消息传送和RPC请求组合起来,以针对跨基于RDMA的网络中的多个服务器分布的共享存储器提供快速无锁存储器分配和解分配。在任意一种情况下,联网服务器中的任意一个均可以充当用于请求(或释放)存储器分配的客户端和用于托管分布式存储器的一部分的主机中的任意一个或两者。此外,任意服务器(包括请求客户端)均可以充当用于由任意客户端经由RDMA消息传送来分配或解分配的分布式存储器的主机。有利地,无锁定通过减少整个***延迟来提高联网计算机之间的存储器访问的整体性能。
作为第一示例,在各种实现中,计算机实现的过程经由用于分配跨两个或更多个联网计算设备分布的共享存储器的手段、过程或技术来实现。在各种实现中,该过程通过接收联网计算设备中充当客户端的的特定联网计算设备的存储器分配请求开始。该过程通过响应于存储器分配请求来确定存储器段大小和联网计算设备中充当主机的的特定联网计算设备来继续,从充当主机的该特定的联网计算设备分配共享存储器的段。接下来,RDMA读被应用以读主机的多个存储器块首部。此外,主机的空闲段图的RDMA读被执行。这个空闲的段图对应于响应于块首部的接收而选择的存储器块。最后,在各种实现中,分配请求通过对所选择的存储器块的空闲段图执行RDMA CAS来分配主机的所选择的空闲存储器段来完成。
作为第二示例,在各种实现中,第一示例经由用于向客户端提供对分配的存储器段的引用的手段、过程或技术而被进一步修改。
作为第三示例,在各种实现中,第一示例和第二示例中的任一者经由手段、过程或技术而被进一步修改,其中每个块首部包括元数据,所述元数据包括对应存储器块中的段大小和分配段数。
作为第四示例,在各种实现中,第一示例、第二示例和第三示例中的任一者经由手段、过程或技术而被进一步修改,其中每一空闲段图包括元数据,所述元数据包括所选择的存储器块的存储器段分配状态。
作为第五示例,在各种实现中,第一示例、第二示例、第三示例和第四示例中的任一者经由手段、过程或技术而被进一步修改,其中联网计算设备中的任意联网计算设备同时充当主机中的主机和客户端中的客户端的任意组合。
作为第六示例,在各种实现中,第一示例、第二示例、第三示例、第四示例和第五示例中的任一者经由用于经由对所分配的存储器段的RDMA写来应用该引用以写分配的存储器段的手段、过程或技术而被进一步修改。
作为第七示例,在各种实现中,第一示例、第二示例、第三示例、第四示例、第五示例和第六示例中的任一者经由用于经由该存储器段的RDMA读来应用该引用以读分配的存储器段的手段、过程或技术而被进一步修改。
作为第八示例,在各种实现中,第一示例、第二示例、第三示例、第四示例、第五示例、第六示例和第七示例中的任一者还经由用于跨一个或多个附加的联网计算设备复制所分配的段的手段、过程或技术而被进一步修改。
作为第九示例,在各种实现中,第一示例、第二示例、第三示例、第四示例、第五示例、第六示例、第七示例和第八示例中的任一者还经由以下手段、过程或技术而被进一步修改:用于接收针对分配的存储器段的解分配请求,对所选择的存储器块的空闲段图执行RDMA CAS以将所分配的段标记为空闲,并且对所选择的存储器块的存储器块首部执行RDMACAS以将一个附加的段显示为空闲。
作为第十示例,在各种实现中,第九示例经由用于以下各项的部件、过程或技术而被进一步修改:在对该存储器块首部执行RDMA CAS之前执行所选择的存储器块的存储器块首部的RDMA读,并且在存储器块首部显示在所选择的存储器块中没有其他存储器段被分配的情况下,对该存储器块首部执行RDMA CAS以更新该存储器块首部以将该存储器块显示为空闲。
作为第十一示例,在各种实现中,***经由用于分配跨两个或更多联网计算设备分布的共享存储器的手段、过程或技术来实现。在各种实现中,该***开始提供经由支持支持RDMA的NIC而通信的多个联网的服务器。在各种实现中,该***然后应用服务器中充当客户端的服务器的存储器分配器API以拦截客户端的存储器分配请求。接下来,在各种实现中,该***然后应用客户端的存储器分配器API以引导客户端的NIC以经由服务器中充当主机的一个服务器的NIC来执行对所述主机的存储器块首部的RDMA读。响应于存储器块首部的接收,该***然后应用客户端的存储器分配器API以引导客户端的NIC以经由主机的NIC对主机的所选择的存储器块的块首部执行RDMA CAS以更新该块首部,以指示该存储器块中的附加存储器段正在被使用。接下来,在各种实现中,该***应用客户端的存储器分配器API以引导客户端的NIC经由主机的NIC来执行所选择的存储器块的空闲段图的RDMA读。最后,响应于空闲段图的接收,在各种实现中,该***应用客户端的存储器分配器API以引导客户端的NIC经由主机的NIC来对空闲段图执行RDMA CAS以分配所选择的存储器块的特定空闲段。
作为第十二示例,在各种实现中,第十一示例还经由用于向客户端提供对分配的段的引用的手段、过程或技术而被进一步修改。
作为第十三示例,在各种实现中,第十二示例经由用于以下的部件、过程或技术而被进一步修改:应用该引用以经由对存储器段的对应的RDMA读和RDMA写来执行对分配的存储器段的读和写的任意组合。
作为第十四示例,在各种实现中,第十一示例、第十二示例和第十三示例中的任一个经由手段、过程或技术而被进一步修改,其中联网的服务器中的任意一个联网的服务器同时充当主机中的主机和客户端中的客户端的任意组合。
作为第十五示例,在各种实现中,第十一示例、第十二示例、第十三示例和第十四示例中的任一个经由手段、过程或技术而被进一步修改,其中联网的服务器中一个联网的服务器的同时充当客户端和主机两者。
作为第十六示例,在各种实现中,第十一示例、第十二示例、第十三示例、第十四示例和第十五示例中的任意一个经由用于以下的手段、过程或技术而被进一步修改:经由主机的NIC对空闲段图执行RDMA CAS,以通过更新空闲段来解分配该分配的段,以将该分配的段显示为空闲。
作为第十七示例,在各种实现中,经由用于提供跨两个或更多个联网计算设备分布的共享存储器的手段、过程或技术来实现的计算机实现的过程。在各种实现中,该过程通过接收充当主机的特定联网计算设备中上的特定存储器段的解分配请求来开始解分配。在各种实现中,该过程主机的特定存储器块的空闲段图执行RDMA CAS以更新空闲段图以将段标记为空闲而继续,在是所述特定存储器块中,所述存储器段正被解分配。最后,在各种实现中,此过程通过对主机的特定存储器块的存储器块首部执行RDMA CAS来更新该块首部以将一个附加的块显示为空闲,来完成解分配请求。
作为第十八示例,在各种实现中,第十七示例还经由用于自动地解除受制于解分配请求的分配存储器段的一个或多个复制副本的手段、过程或技术而被修改。
作为第十九示例,在各种实现中,第十七示例还经由用于以下的手段、过程或技术而被进一步修改:在对存储器块首部执行RDMA CAS之前执行存储器块首部的RDMA读,并且在存储器块首部显示存储器块中没有其他存储器段被分配的情况下,对该存储器块首部执行RDMA CAS以更新该存储器块首部,以将该存储器块显示为空闲。
作为第二十示例,在各种实现中,第十七示例和第十八示例中的任一个经由用于自动地解分配被出为空闲的存储器块的一个或多个复制副本的手段、过程或技术而被修改。
5.0示例性操作环境:
本文描述的基于RDMA的存储器分配器实现在许多类型的通用或专用计算***环境或配置内操作。图9图示了通用计算机***的简化示例,在该通用计算机***上可以实现如本文所述的基于RDMA的存储器分配器的各种实现和元件。图9中所示的简化计算设备900中由虚线或短划线表示的任意框表示简化的计算设备的替代实现。如下所述,可以将这些替代实现中的任意一个或全部与整个本文中描述的其他替代实现结合使用。
简化的计算设备900通常在具有至少一些最小计算能力的设备中被发现,诸如个人计算机(PC)、服务器计算机、手持计算设备、膝上型计算机或移动计算机、诸如蜂窝电话和个人数字助理(PDA)的通信设备、多处理器***、基于微处理器的***、机顶盒、可编程消费电子产品、网络PC、小型计算机、大型计算机以及音频或视频媒体播放器。
为了允许设备实现本文描述的基于RDMA的存储器分配器实现,设备应当具有足够的计算能力和***存储器以使能基本的计算操作。具体地,在图9所示的简化计算设备900的计算能力通常由一个或多个处理单元910所图示出,并且还可以包括一个或多个图形处理单元(GPU)915,任一个或者两者与***存储器920通信。简化计算设备900的处理单元910可以是专用微处理器(诸如数字信号处理器(DSP)、超长指令字(VLIW)处理器、现场可编程门阵列(FPGA)或其他微控制器),或者可以是常规的中央处理单元(CPU),中央处理单元(CPU)具有一个或多个处理核并且还可以包括多核处理器中的一个或多个基于GPU的核或其他专用核。
另外,简化计算设备900还可以包括其他部件,诸如例如网络接口控制器930。简化计算设备900还可以包括一个或多个常规计算机输入设备940(例如,触摸屏、触摸敏感表面、指点设备、键盘、音频输入设备、基于声音或语音的输入和控制设备、视频输入设备、触觉输入设备、用于接收有线或无线数据传输的设备等)或这些的任意组合设备。
类似地,与简化计算设备900以及与基于RDMA的存储器分配器的任意其他部件或特征的各种交互,包括输入、输出、控制、反馈和对一个或多个用户或与基于RDMA的存储器分配器相关联的其他设备或***的响应,可以通过各种自然用户界面(NUI)场景使能。由基于RDMA的存储器分配器使能的NUI技术和场景包括但不限于允许一个或多个用户以“自然”方式与基于RDMA的存储器分配器交互而不受由诸如鼠标,键盘,遥控器等输入设备施加的人为约束的接口技术。
这样的NUI实现通过各种技术的使用来使能,各种技术包括但不限于使用从经由麦克风或其他输入设备940或***传感器905捕获的用户语音或发声(vocalizations)导出的NUI信息。这样的NUI实现还能够通过各种技术的使用来使能,其包括但不限于从***传感器905或其他输入设备940从用户的面部表情以及从用户的手、手指、手腕、手臂、腿、身体、头部、眼睛等的位置、运动或取向导出的信息,其中这样的信息可以使用各种类型的2D或深度成像设备(诸如立体或飞行时间摄像机***、红外摄像机***、RGB(红、绿和蓝)摄像机***等)来捕获,或这些设备的任意组合。这种NUI实现的其他示例包括但不限于从触摸和触控笔识别、手势识别(屏幕上和屏幕附近或显示表面两者)、空中或基于联系人的手势、用户触摸(各种表面上、对象或其他用户)、基于悬停的输入或动作等导出的NUI信息。这样的NUI实现还可以包括但不限于评估当前或过去的用户行为、输入、动作等的各种预测性机器智能处理,单独地或者与其他NUI信息组合地,以预测诸如用户意图、期望和/或目标的信息。不管基于NUI的信息的类型或来源如何,这些信息然后可以用于发起、终止或以其他方式控制基于RDMA的存储器分配器的一个或多个输入、输出、动作或功能特征或与基于RDMA的存储器分配器的一个或多个输入、输出、动作或功能特征进行交互。
然而,前述示例性NUI场景可以通过将人工约束或附加信号的使用与NUI输入的任意组合进行组合而被进一步增强。这样的人工约束或附加信号可以通过诸如鼠标、键盘和遥控器的输入设备940或者通过诸如加速度计、用于接收代表由用户肌肉生成的电信号的肌电信号的肌电图(EMG)传感器、心率监测器、用于测量用户出汗的电流皮肤传导传感器、用于测量或以其他方式感测用户大脑活动或电场的可佩戴或远程生物传感器、用于测量用户体温变化或差异的可佩戴或远程生物传感器等等的各种远程或用户佩戴的设备来施加或生成。从这些类型的人工约束或附加信号导出的任意这样的信息可以是与任意一个或多个NUI输入组合,以启动、终止或以其他方式控制基于RDMA的存储器分配器的一个或多个输入、输出、动作或功能特性或与基于RDMA的存储器分配器的一个或多个输入、输出、动作或功能特性进行交互。
简化计算设备900还可以包括其他可选部件,诸如一个或多个常规计算机输出设备950(例如显示设备955、音频输出设备、视频输出设备,用于传输有线或无线数据传输的设备等等)。用于通用计算机的典型网络接口控制器(NIC)930、输入设备940、输出设备950和存储设备960对于本领域技术人员来说是公知的,本文不再详细描述。
图9中所示的简化计算设备900还可以包括各种计算机可读介质。计算机可读介质可以是计算设备900可以经由存储设备960访问的任意可用介质,并且包括可移动970和/或不可移动980的易失性和非易失性介质两者,用于诸如计算机可读或计算机可执行指令、数据结构、程序模块或其他数据的信息的存储。
计算机可读介质包括计算机存储介质和通信介质。计算机存储介质是指有形的计算机可读或机器可读介质或存储设备,诸如数字多功能盘(DVD)、蓝光盘(BD)、光盘(CD)、软盘、磁带驱动器、硬盘驱动器、光学驱动器、固态存储器设备、随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、CD-ROM或其他光盘存储器、智能卡、闪存(例如,卡、棒和钥匙驱动器)、磁带盒、磁带、磁盘存储器、磁条或其他磁存储设备。此外,传播的信号不包括在计算机可读存储介质的范围内。
诸如计算机可读或计算机可执行指令、数据结构、程序模块等的信息的保留也可以通过使用用于编码一个或多个调制数据信号或载波的各种前述通信介质(与计算机存储介质相对)或其他传输机制或通信协议中的任意一种来实现,并且可以包括任意有线或无线信息传递机制。术语“已调制数据信号”或“载波”通常是指具有以将信息编码到信号中的这种方式来设置或改变的其特征中的一个或多个的信号。例如,通信介质可以包括有线介质,诸如携带一个或多个调制数据信号的有线网络或直接有线连接,和无线介质,诸如声学、射频(RF)、红外线、激光器和用于发送和/或接收一个或多个调制的数据信号或载波的其他无线介质。
此外,实施本文描述的各种基于RDMA的存储器分配器实现中的一些或全部的软件、程序和/或计算机程序产品或其部分可以以计算机可执行指令或其他数据结构形式从计算机可读或机器可读介质或存储设备以及通信介质的任意期望组合存储、接收、发送或读。另外,要求保护的主题可以被实现为使用标准编程和/或工程技术来产生软件、固件925、硬件或其任意组合以控制计算机来实现所公开的主题的方法、装置或制品。如本文所使用的术语“制品”旨在涵盖可从任意计算机可读设备或介质访问的计算机程序。
本文描述的基于RDMA的存储器分配器实现可以在由计算设备执行的诸如程序模块的计算机可执行指令的一般上下文中的进一步描述。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、部件、数据结构等。基于RDMA的存储器分配器实现还可以在分布式计算环境中实施,其中任务由一个或多个远程处理设备执行,或者在通过一个或多个通信网络链接的一个或多个设备的云内执行。在分布式计算环境中,程序模块可以位于包括介质存储设备的本地和远程计算机存储介质两者中。另外,上述指令可以部分或全部地被实现为硬件逻辑电路,其可以包括或不包括处理器。
可替代地或附加地,本文描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如但不限于,可以使用的硬件逻辑部件的示例性类型包括现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上***(SOC)、复杂可编程逻辑器件(CPLD)等等。
6.0其他实现:
为了说明和描述的目的已经呈现了基于RDMA的存储器分配器的以上描述。并非旨在穷举或将所要求保护的主题限制到所公开的精确形式。鉴于上述教导,许多修改和变体均是可能的。此外,可以以期望的任意组合来使用前述替代实现中的任意一个或全部,以形成基于RDMA的存储器分配器的附加的混合实现。旨在是基于RDMA的存储器分配器的范围不受该详细描述的限制,而是受所附权利要求的限制。尽管已经用结构特征和/或方法动作专用的语言描述了主题,但应当理解,所附权利要求中限定的主题不一定限于上面描述的特定特征或动作。相反,上述特定特征和动作被公开为实施权利要求的示例形式,并且其他等同特征和动作旨在落入权利要求的范围内。
以上描述的内容包括示例实现。当然,不可能为了描述所要求保护的主题的目的而描述部件或方法的每个可想到的组合,但是本领域的普通技术人员可以认识到,许多其他组合和置换是可能的。因此,要求保护的主题旨在涵盖落入上述基于RDMA的存储器分配器的详细描述的精神和范围内的所有这样的改变、修改和变体。
关于由上述部件、设备、电路、***等执行的各种功能,用于描述这些组件的术语(包括对“装置”的引用),除非以其它方式指示,旨在对应于执行所描述的部件的指定功能的任意部件(例如,功能等同物),即使在结构上与所公开的结构不等同,其执行在本文中的、所要求保护的主题的示例性方面所图示出的功能。就这一点而言,还将认识到,前述实现包括***以及具有用于执行所要求保护的主题的各种方法的动作和/或事件的计算机可执行指令的计算机可读存储介质。
存在多种实现前述实现的方式(诸如适当的应用程序编程接口(API)、工具包、驱动程序代码、操作***、控件、独立或可下载的软件对象等),其使应用程序和服务能够使用本文描述的实现。所要求保护的主题从API(或其他软件对象)的角度以及根据本文阐述的实现进行操作的软件或硬件对象的角度来考虑这种使用。因此,本文描述的各种实现可以具有完全在硬件中、或部分在硬件中并且部分在软件中、或者完全在软件中的方面。
已经关于几个部件之间的交互描述了上述***。应当理解,这样的***和部件可以包括那些部件或指定的子部件、一些指定的部件或子部件、和/或附加的部件、并且根据前述的各种排列和组合。子部件也可以被实现为可通信地耦合到其他部件而不是被包括在父部件(例如,分层部件)内的部件。
另外,一个或一个以上部件可以被组合成提供聚集功能性的单个组件或被分成多个分离子部件,且可提供诸如管理层的任意一个或多个中间层以通信地耦合到此子部件以提供集成功能。本文描述的任意部件还可以与本文未具体描述的、但是通常已知以使能这种交互的一个或多个其他部件进行交互。

Claims (15)

1.一种计算机实现的过程,包括:
跨两个或更多个联网计算设备分布的共享存储器;
接收所述联网计算设备中充当客户端的特定联网计算设备的存储器分配请求;
响应于所述存储器分配请求,确定存储器段大小和所述联网计算设备中充当主机的特定联网计算设备,将从所述充当主机的特定联网计算设备分配所述共享存储器的一个段;
应用所述主机的多个存储器块首部的RDMA读;
执行所述主机的空闲段图的RDMA读,所述空闲段图对应于响应于所述块首部的接收而选择的存储器块;以及
通过对所选择的所述存储器块的所述空闲段图执行RDMA CAS来分配所述主机的所选择的空闲存储器段。
2.根据权利要求1所述的计算机实现的过程,还包括向所述客户端提供对所分配的所述存储器段的引用。
3.根据权利要求1所述的计算机实现的过程,其中每个块首部包括元数据,所述元数据包括对应的所述存储器块中的段大小和已分配段数。
4.根据权利要求1所述的计算机实现的过程,其中每个空闲段图包括元数据,所述元数据包括所选择的所述存储器块的存储器段分配状态。
5.根据权利要求1所述的计算机实现的过程,其中所述联网计算设备中的任意联网计算设备同时充当所述主机之一和所述客户端之一的任意组合。
6.根据权利要求2所述的计算机实现的过程,还包括应用所述引用,以经由对所分配的所述存储器段的RDMA写,来读或写该存储器段。
7.根据权利要求1所述的计算机实现的过程,还包括:
接收针对所分配的所述存储器段的解分配请求;
对所选择的所述存储器块的所述空闲段图执行RDMA CAS,以将所分配的所述段标记为空闲;以及
对所选择的所述存储器块的所述存储器块首部执行RDMA CAS,以将一个附加的段显示为空闲。
8.根据权利要求7所述的计算机实现的过程,还包括:
在对所述存储器块首部执行所述RDMA CAS之前,执行所选择的所述存储器块的所述存储器块首部的RDMA读;以及
在所述存储器块首部显示在所选择的所述存储器块中没有其他的存储器段被分配的情况下,对所述存储器块首部执行RDMA CAS以更新所述存储器块首部,以将所述存储器块显示为空闲。
9.一种***,包括:
经由支持RDMA的NIC而通信的多个联网服务器;
应用所述服务器中充当客户端的一个服务器的存储器分配器API,以拦截所述客户端的存储器分配请求;
应用所述客户端的所述存储器分配器API,以引导所述客户端的NIC经由所述服务器中充当主机的一个服务器的NIC来执行对所述主机的存储器块首部的RDMA读;
响应于所述存储器块首部的接收,应用所述客户端的所述存储器分配器API,以引导客户端的所述NIC经由所述主机的所述NIC来对所述主机的所选择的存储器块的块首部执行RDMA CAS,从而更新该块首部以指示在所述存储器块中的附加的存储器段正被使用;
应用所述客户端的所述存储器分配器API,以引导客户端的所述NIC经由所述主机的所述NIC来执行所选择的所述存储器块的空闲段图的RDMA读;以及
响应于所述空闲段图的接收,应用所述客户端的所述存储器分配器API,以引导客户端的所述NIC经由所述主机的所述NIC来对所述空闲段图执行RDMA CAS,从而分配所选择的所述存储器块的特定空闲段。
10.一种计算机实现的过程,包括:
跨两个或更多个联网计算设备分布的共享存储器;
接收所述联网计算设备中充当主机的特定联网计算设备上的特定存储器段的解分配请求;
对所述主机的特定存储器块的空闲段图执行RDMA CAS,以更新所述空闲段图以将所述段标记为空闲,在是所述特定存储器块中,所述存储器段正被解分配;以及
对所述主机的所述特定存储器块的存储器块首部执行RDMA CAS,以更新所述块首部从而将一个附加的段显示为空闲。
11.根据权利要求9所述的***,还包括:
向所述客户端提供对所分配的所述段的引用;以及
应用所述引用,以经由向所述存储器段的对应的RDMA读和RDMA写,来执行对所分配的所述存储器段的读和写的任意组合。
12.根据权利要求9所述的***,其中所述联网服务器中的任意联网服务器同时充当所述主机之一和所述客户端之一的任意组合。
13.根据权利要求10所述的计算机实现的过程,还包括自动地解分配受制于所述解分配请求的所述存储器段的一个或多个复制副本。
14.根据权利要求10所述的计算机实现的过程,还包括:
在对所述存储器块首部执行所述RDMA CAS之前,执行对所述存储器块首部的RDMA读;以及
在所述存储器块首部显示所述存储器块中没有其他存储器段被分配的情况下,对所述存储器块首部执行RDMA CAS,以更新所述存储器块首部从而将所述存储器块显示为空闲。
15.根据权利要求10所述的计算机实现的过程,还包括自动地解分配被显示为空闲的所述存储器块的一个或多个复制副本。
CN201680052870.0A 2015-09-12 2016-09-05 分布式无锁基于rdma的存储器分配和解分配 Active CN108027803B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/852,537 2015-09-12
US14/852,537 US10725963B2 (en) 2015-09-12 2015-09-12 Distributed lock-free RDMA-based memory allocation and de-allocation
PCT/US2016/050327 WO2017044399A1 (en) 2015-09-12 2016-09-05 Distributed lock-free rdma-based memory allocation and de-allocation

Publications (2)

Publication Number Publication Date
CN108027803A true CN108027803A (zh) 2018-05-11
CN108027803B CN108027803B (zh) 2021-12-21

Family

ID=56920951

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680052870.0A Active CN108027803B (zh) 2015-09-12 2016-09-05 分布式无锁基于rdma的存储器分配和解分配

Country Status (4)

Country Link
US (1) US10725963B2 (zh)
EP (1) EP3347826A1 (zh)
CN (1) CN108027803B (zh)
WO (1) WO2017044399A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109377778A (zh) * 2018-11-15 2019-02-22 济南浪潮高新科技投资发展有限公司 一种基于多路rdma和v2x的协同自动驾驶***及方法

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10375167B2 (en) 2015-11-20 2019-08-06 Microsoft Technology Licensing, Llc Low latency RDMA-based distributed storage
US10713211B2 (en) 2016-01-13 2020-07-14 Red Hat, Inc. Pre-registering memory regions for remote direct memory access in a distributed file system
US10901937B2 (en) * 2016-01-13 2021-01-26 Red Hat, Inc. Exposing pre-registered memory regions for remote direct memory access in a distributed file system
US10346315B2 (en) 2017-05-26 2019-07-09 Oracle International Corporation Latchless, non-blocking dynamically resizable segmented hash index
US10803039B2 (en) * 2017-05-26 2020-10-13 Oracle International Corporation Method for efficient primary key based queries using atomic RDMA reads on cache friendly in-memory hash index
CN107205033B (zh) * 2017-06-02 2020-03-24 南京大学 以无锁方式共享rdma连接的方法
US20190044809A1 (en) 2017-08-30 2019-02-07 Intel Corporation Technologies for managing a flexible host interface of a network interface controller
US10956335B2 (en) 2017-09-29 2021-03-23 Oracle International Corporation Non-volatile cache access using RDMA
US10613992B2 (en) * 2018-03-13 2020-04-07 Tsinghua University Systems and methods for remote procedure call
US11792307B2 (en) 2018-03-28 2023-10-17 Apple Inc. Methods and apparatus for single entity buffer pool management
US11347678B2 (en) 2018-08-06 2022-05-31 Oracle International Corporation One-sided reliable remote direct memory operations
US10846224B2 (en) * 2018-08-24 2020-11-24 Apple Inc. Methods and apparatus for control of a jointly shared memory-mapped region
US10666725B2 (en) * 2018-09-26 2020-05-26 Micron Technology, Inc. Data center using a memory pool between selected memory resources
WO2020155417A1 (en) * 2019-01-30 2020-08-06 Huawei Technologies Co., Ltd. Input/output processing in a distributed storage node with rdma
KR102450133B1 (ko) * 2019-04-04 2022-10-05 한국전자통신연구원 분산 잠금 관리를 하는 분산 시스템 및 그것의 동작 방법
US11416392B2 (en) * 2019-06-20 2022-08-16 Microsoft Technology Licensing, Llc Arena-based memory management
US11593169B2 (en) 2019-07-03 2023-02-28 Microsoft Technology Licensing, Llc Memory deallocation across a trust boundary
CN112181915B (zh) * 2019-07-03 2023-12-08 成都华为技术有限公司 执行业务的方法、装置、终端和存储介质
US10817460B2 (en) * 2019-08-28 2020-10-27 Advanced New Technologies Co., Ltd. RDMA data sending and receiving methods, electronic device, and readable storage medium
US11500856B2 (en) 2019-09-16 2022-11-15 Oracle International Corporation RDMA-enabled key-value store
US11477123B2 (en) 2019-09-26 2022-10-18 Apple Inc. Methods and apparatus for low latency operation in user space networking
US11558348B2 (en) 2019-09-26 2023-01-17 Apple Inc. Methods and apparatus for emerging use case support in user space networking
US11829303B2 (en) 2019-09-26 2023-11-28 Apple Inc. Methods and apparatus for device driver operation in non-kernel space
US11606302B2 (en) 2020-06-12 2023-03-14 Apple Inc. Methods and apparatus for flow-based batching and processing
US11775359B2 (en) 2020-09-11 2023-10-03 Apple Inc. Methods and apparatuses for cross-layer processing
US11954540B2 (en) 2020-09-14 2024-04-09 Apple Inc. Methods and apparatus for thread-level execution in non-kernel space
US11799986B2 (en) 2020-09-22 2023-10-24 Apple Inc. Methods and apparatus for thread level execution in non-kernel space
US20220206852A1 (en) * 2020-12-31 2022-06-30 Nutanix, Inc. Lockless handling of buffers for remote direct memory access (rdma) i/o operations
US11444790B1 (en) 2021-07-09 2022-09-13 International Business Machines Corporation Dynamic exclusion of RDMA-based shared memory communication based on performance-related data
US11882051B2 (en) 2021-07-26 2024-01-23 Apple Inc. Systems and methods for managing transmission control protocol (TCP) acknowledgements
US11876719B2 (en) 2021-07-26 2024-01-16 Apple Inc. Systems and methods for managing transmission control protocol (TCP) acknowledgements
US12007842B2 (en) * 2022-10-06 2024-06-11 Salesforce, Inc. Database node soft restart

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040049580A1 (en) * 2002-09-05 2004-03-11 International Business Machines Corporation Receive queue device with efficient queue flow control, segment placement and virtualization mechanisms
US7409525B1 (en) * 2006-03-29 2008-08-05 Emc Corporation Implicit locks in a shared virtual memory system
CN101577716A (zh) * 2009-06-10 2009-11-11 中国科学院计算技术研究所 基于InfiniBand网络的分布式存储方法和***
US20130054726A1 (en) * 2011-08-31 2013-02-28 Oracle International Corporation Method and system for conditional remote direct memory access write
CN103227778A (zh) * 2013-03-26 2013-07-31 华为技术有限公司 内存访问方法、设备和***

Family Cites Families (52)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050204384A1 (en) 1994-08-31 2005-09-15 Gemstar Development Corporation Method and apparatus for displaying television programs and related text
US6418542B1 (en) 1998-04-27 2002-07-09 Sun Microsystems, Inc. Critical signal thread
JP2000020490A (ja) 1998-07-01 2000-01-21 Fujitsu Ltd 遠隔手続き呼出し機構またはオブジェクトリクエストブローカ機構を有する計算機、データ転送方法、および転送方法記憶媒体
US6360220B1 (en) 1998-08-04 2002-03-19 Microsoft Corporation Lock-free methods and systems for accessing and storing information in an indexed computer data structure having modifiable entries
US8255047B1 (en) 1998-09-22 2012-08-28 Medtronic, Inc Cardiac pacing system with improved physiological event classification and heart monitoring based on DSP
US6675200B1 (en) 2000-05-10 2004-01-06 Cisco Technology, Inc. Protocol-independent support of remote DMA
US20020073257A1 (en) 2000-12-07 2002-06-13 Ibm Corporation Transferring foreign protocols across a system area network
US6766480B2 (en) 2001-03-14 2004-07-20 Hewlett-Packard Development Company, L.P. Using task description blocks to maintain information regarding operations
US20030145230A1 (en) 2002-01-31 2003-07-31 Huimin Chiu System for exchanging data utilizing remote direct memory access
US6757105B2 (en) 2002-04-25 2004-06-29 Planop Planar Optics Ltd. Optical device having a wide field-of-view for multicolor images
FI114945B (fi) 2002-09-19 2005-01-31 Nokia Corp Sähköisesti säädettävä diffraktiivinen hilaelementti
US20040150717A1 (en) 2003-01-21 2004-08-05 Page Warren S. Digital in-car video surveillance system
US7610348B2 (en) 2003-05-07 2009-10-27 International Business Machines Distributed file serving architecture system with metadata storage virtualization and data access at the data server connection speed
US7565454B2 (en) 2003-07-18 2009-07-21 Microsoft Corporation State migration in multiple NIC RDMA enabled devices
US7826470B1 (en) 2004-10-19 2010-11-02 Broadcom Corp. Network interface device with flow-oriented bus interface
US7403945B2 (en) 2004-11-01 2008-07-22 Sybase, Inc. Distributed database system providing data and space management methodology
US7617370B2 (en) 2005-04-29 2009-11-10 Netapp, Inc. Data allocation within a storage system architecture
US7761619B2 (en) 2005-05-13 2010-07-20 Microsoft Corporation Method and system for parallelizing completion event processing
US8250047B2 (en) 2005-05-20 2012-08-21 International Business Machines Corporation Hybrid multi-threaded access to data structures using hazard pointers for reads and locks for updates
US7702743B1 (en) 2006-01-26 2010-04-20 Symantec Operating Corporation Supporting a weak ordering memory model for a virtual physical address space that spans multiple nodes
US7756943B1 (en) 2006-01-26 2010-07-13 Symantec Operating Corporation Efficient data transfer between computers in a virtual NUMA system using RDMA
US7917597B1 (en) 2006-11-02 2011-03-29 Netapp, Inc. RDMA network configuration using performance analysis
US8407428B2 (en) 2010-05-20 2013-03-26 Hicamp Systems, Inc. Structured memory coprocessor
US7836226B2 (en) 2007-12-06 2010-11-16 Fusion-Io, Inc. Apparatus, system, and method for coordinating storage requests in a multi-processor/multi-thread environment
US8095727B2 (en) 2008-02-08 2012-01-10 Inetco Systems Limited Multi-reader, multi-writer lock-free ring buffer
US8271996B1 (en) 2008-09-29 2012-09-18 Emc Corporation Event queues
US8688798B1 (en) 2009-04-03 2014-04-01 Netapp, Inc. System and method for a shared write address protocol over a remote direct memory access connection
CN102598019B (zh) 2009-09-09 2015-08-19 才智知识产权控股公司(2) 用于分配存储的设备、***和方法
US8972627B2 (en) 2009-09-09 2015-03-03 Fusion-Io, Inc. Apparatus, system, and method for managing operations for data storage media
US20110103391A1 (en) 2009-10-30 2011-05-05 Smooth-Stone, Inc. C/O Barry Evans System and method for high-performance, low-power data center interconnect fabric
US8607004B2 (en) 2009-11-13 2013-12-10 Richard S. Anderson Distributed symmetric multiprocessing computing architecture
US9104326B2 (en) 2010-11-15 2015-08-11 Emc Corporation Scalable block data storage using content addressing
EP2482191B1 (en) 2011-01-31 2017-03-22 Fujitsu Limited Memory correctness checking in distributed computer systems
US8972696B2 (en) 2011-03-07 2015-03-03 Microsoft Technology Licensing, Llc Pagefile reservations
US9996403B2 (en) 2011-09-30 2018-06-12 Oracle International Corporation System and method for providing message queues for multinode applications in a middleware machine environment
US9047243B2 (en) 2011-12-14 2015-06-02 Ip Reservoir, Llc Method and apparatus for low latency data distribution
US9389905B2 (en) 2012-03-16 2016-07-12 Oracle International Corporation System and method for supporting read-only optimization in a transactional middleware environment
JP5900096B2 (ja) 2012-03-28 2016-04-06 富士通株式会社 レプリケーションシステム、レプリケーションプログラム及びレプリケーション構成の再構築方法
US8676851B1 (en) 2012-08-30 2014-03-18 Google Inc. Executing transactions in distributed storage systems
US9058122B1 (en) 2012-08-30 2015-06-16 Google Inc. Controlling access in a single-sided distributed storage system
US8868604B2 (en) 2012-09-26 2014-10-21 Oracle International Corporation Methods and apparatus for implementing Semi-distributed Lock Management
US9569400B2 (en) 2012-11-21 2017-02-14 International Business Machines Corporation RDMA-optimized high-performance distributed cache
US9311230B2 (en) 2013-04-23 2016-04-12 Globalfoundries Inc. Local direct storage class memory access
US9338193B2 (en) 2013-05-31 2016-05-10 International Business Machines Corporation Remote procedure call with call-by-reference semantics using remote direct memory access
US9313274B2 (en) 2013-09-05 2016-04-12 Google Inc. Isolating clients of distributed storage systems
US9317208B2 (en) 2013-12-31 2016-04-19 Sybase, Inc. Data row cache for an acid compliant in-memory row store in a page-based RDBMS engine
US9626108B2 (en) * 2014-09-16 2017-04-18 Kove Ip, Llc Dynamically provisionable and allocatable external memory
US10079865B2 (en) 2014-12-18 2018-09-18 Software AG USA Inc. Method and system for an ontology based request/reply service
US9525737B2 (en) 2015-04-14 2016-12-20 E8 Storage Systems Ltd. Lockless distributed redundant storage and NVRAM cache in a highly-distributed shared topology with direct memory access capable interconnect
US9792248B2 (en) 2015-06-02 2017-10-17 Microsoft Technology Licensing, Llc Fast read/write between networked computers via RDMA-based RPC requests
US9953006B2 (en) 2015-06-23 2018-04-24 International Business Machines Corporation Lock-free processing of stateless protocols over RDMA
US10810179B2 (en) 2015-09-25 2020-10-20 Microsoft Technology Licensing, Llc Distributed graph database

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040049580A1 (en) * 2002-09-05 2004-03-11 International Business Machines Corporation Receive queue device with efficient queue flow control, segment placement and virtualization mechanisms
US7409525B1 (en) * 2006-03-29 2008-08-05 Emc Corporation Implicit locks in a shared virtual memory system
CN101577716A (zh) * 2009-06-10 2009-11-11 中国科学院计算技术研究所 基于InfiniBand网络的分布式存储方法和***
US20130054726A1 (en) * 2011-08-31 2013-02-28 Oracle International Corporation Method and system for conditional remote direct memory access write
CN103227778A (zh) * 2013-03-26 2013-07-31 华为技术有限公司 内存访问方法、设备和***

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109377778A (zh) * 2018-11-15 2019-02-22 济南浪潮高新科技投资发展有限公司 一种基于多路rdma和v2x的协同自动驾驶***及方法
CN109377778B (zh) * 2018-11-15 2021-04-06 浪潮集团有限公司 一种基于多路rdma和v2x的协同自动驾驶***及方法

Also Published As

Publication number Publication date
WO2017044399A1 (en) 2017-03-16
US10725963B2 (en) 2020-07-28
EP3347826A1 (en) 2018-07-18
US20170075856A1 (en) 2017-03-16
CN108027803B (zh) 2021-12-21

Similar Documents

Publication Publication Date Title
CN108027803A (zh) 分布式无锁基于rdma的存储器分配和解分配
CN108351860A (zh) 低延迟的基于rdma的分布式存储装置
CN108140009A (zh) 分布式自主式基于rdma的b树键值管理器
US20220309007A1 (en) Data Write Method, Apparatus, and System
US10691187B2 (en) Persistent reservations for virtual disk using multiple targets
US8103628B2 (en) Directed placement of data in a redundant data storage system
CN110268380A (zh) 跨云数据存储库的文件***层次结构镜像
CN113287286B (zh) 通过rdma进行分布式存储节点中的输入/输出处理
US9569108B2 (en) Dataset replica migration
US20170316026A1 (en) Splitting and moving ranges in a distributed system
CN107771332A (zh) 经由基于rdma的rpc请求在联网计算机之间的快速读/写
CN101084481A (zh) 在群集存储环境中执行并行数据迁移的方法
CN104937564B (zh) 组表格的数据冲洗
WO2020231753A1 (en) Efficient space management for high performance writable snapshots
US10817325B2 (en) Moving storage volumes for improved performance
US10606489B2 (en) Sidefiles for management of data written via a bus interface to a storage controller during consistent copying of data
CN104636088B (zh) 一种将数据写入数据服务器的方法及存储***
KR101601877B1 (ko) 분산 파일시스템에서 클라이언트가 데이터 저장에 참여하는 장치 및 방법
CN109804365A (zh) 弹性地理数据库复制方法
JP5670369B2 (ja) 情報処理装置、イメージファイル管理方法およびプログラム
CN110019475A (zh) 数据持久化处理方法、装置及***
CN106649141A (zh) 一种基于ceph的存储交互装置及存储***
CN108062308A (zh) 一种分布式数据存储的方法和***
KR20210011039A (ko) 라이브 서비스를 위한 분산 파일 시스템 및 파일 관리 방법
JP2009223400A (ja) コンピュータシステム

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