CN108140009B - 分布式自主式基于rdma的b树键值管理器 - Google Patents
分布式自主式基于rdma的b树键值管理器 Download PDFInfo
- Publication number
- CN108140009B CN108140009B CN201680060341.5A CN201680060341A CN108140009B CN 108140009 B CN108140009 B CN 108140009B CN 201680060341 A CN201680060341 A CN 201680060341A CN 108140009 B CN108140009 B CN 108140009B
- Authority
- CN
- China
- Prior art keywords
- node
- key
- value
- rdma
- memory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations 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/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
- G06F15/17306—Intercommunication techniques
- G06F15/17331—Distributed shared memory [DSM], e.g. remote direct memory access [RDMA]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/10—Packet switching elements characterised by the switching fabric construction
- H04L49/103—Packet switching elements characterised by the switching fabric construction using a shared central buffer; using a shared memory
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols 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)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
Abstract
“键值管理器”应用基于RDMA的存储器分配器来实现分布式且无锁的基于B树的键值存储库。在各种实现中,键值管理器被实现为在大量联网计算设备上并发运行的独立库。键值管理器的基于RDMA的存储器分配器经由各种RDMA消息序列(例如,RDMA读取、RDMA写入和RDMA原子比较和交换(CAS)操作)分配和访问键值存储库的存储器。因此,托管键值存储库的存储器的计算设备的CPU不需要被通知或涉及对该存储器的基于RDMA的读取和写入。因此,托管键值存储库的任何部分的任何计算设备的CPU利用率是最小的,由此使得键值管理器能够缩放到非常大量的计算设备的大量的并发访问。
Description
背景技术
通常,直接存储器存取(DMA)提供使得本地主机计算设备的设备或过程能够在不中断主机的(多个)CPU的情况下直接读取和写入该主机设备的本地存储器的各种技术。相反,越来越多地部署在数据中心中的远程直接存储器访问(RDMA)扩展了传统的基于DMA的技术,以使得远程设备或过程能够在不中断远程计算设备的(多个)CPU的情况下直接读取和写入远程计算设备的存储器。现有的基于RDMA的技术(诸如,例如InfiniBand、iWARP、融合以太网(RoCE)上的RDMA等)使用RDMA激活的网络接口控制器(NIC)。
典型的键值存储库(也被称为键值数据库)实现诸如字典或散列等关联数组的存储、检索和管理。键值存储库通常包含一组对象或记录,这些对象或记录内又具有很多不同的字段,每个字段包含数据。这些记录使用唯一地标识记录并且用于定位和访问数据库中的特定数据的键值存储库中的键进行存储和检索。
发明内容
提供以下“发明内容”以便以简化的形式介绍将在以下“具体实施方式”中进一步描述的一些概念。本发明内容并非旨在标识所要求保护的主题的关键特征或基本特征,也不旨在用作确定所要求保护的主题的范围的辅助手段。此外,虽然本文中可以讨论其他技术的某些缺点,但是所要求保护的主题不旨在限于可以解答或解决这些其他技术的任何或全部缺点的实现。本“发明内容”的唯一目的是以简化的形式呈现所要求保护的主题的一些概念,作为以下呈现的更详细描述的序言。
如本文中描述的“键值管理器”提供了分布式且无锁的基于RDMA的B树键值存储库。任何数目的单独的键值存储库可以由键值管理器经由各种单向RDMA消息序列(例如,RDMA读取、RDMA写入以及RDMA原子比较和交换(CAS)操作)来创建、维护和访问。因此,托管键值存储库的存储器的计算设备的CPU不需要被通知或涉及对于该存储器的基于RDMA的读取、写入或CAS操作。因此,托管键值存储库的任何部分的任何计算设备的CPU利用率是最小的,从而使得键值管理器能够缩放到非常大量的计算设备的大量的并发访问。
在各种实现中,键值管理器被实现为在大量联网的计算设备上并发运行的独立库。保持键值存储库的存储器使用任何期望的存储器管理技术跨越多个计算设备进行管理和分布。但是,在各种实现中,该存储器由键值管理器的可选的基于RDMA的存储器分配器组件进行管理。无论哪种情况,在存储器被分配用于由键值管理器使用之后,键值管理器利用该存储器来经由RDMA消息传递来构建、维护并且提供对键值存储库的无锁访问。此外,托管键值存储库的存储器可以跨越多个计算设备被复制以用于冗余。
由在每个客户端上运行的键值管理器的自主实例实现的键值存储库的分布式性质表示:不需要中央计算机(或多个计算机)来控制或维护键值存储库。此外,使用RDMA消息传递来管理每个节点的元数据部分使得任何联网的计算机能够并发访问托管在任何计算设备上的键值存储库(例如,并发读取、写入和/或CAS操作),而不考虑任何其他联网计算机是否并发尝试访问同一存储器。在各种实现中,通过将任何客户端的键值管理器应用于键值存储库的特定节点来执行RDMA CAS操作以翻转保留位(例如,托管在单独的保留位图等中)以保留该节点(例如,如果空闲则为“0”,如果保留则为“1”来避免节点写入冲突。在各种实现中,托管键值存储库的任何存储器的每个计算机包括与该特定存储器相对应的单独保留位图等。一旦保留,其他客户端就不能写入该节点。在对保留节点的写入的成功完成之后,然后执行第二CAS操作以将该位翻转回来,使得节点可用于任何客户端来进一步写入。
因为键值存储库的存储器跨越多个计算设备而分布,所以任何特定客户端可以跨越一个或多个主机计算设备遍历B树,以通过跟随从B树的根节点到B树的叶节点的存储器引用来从键值存储库获得特定值。通常,该遍历在B树的根节点开始,并且继续通过B树的一个或多个分支(也称为子节点或内部节点)到B树的叶节点,以获得对客户端正在查找的值的存储器位置的参考。基于B树的键值存储库的根被存储在安全存储器位置,安全存储器位置在位置库等中可用并且被发布给基于RDMA的网络中的每个客户端(或在其请求上提供)。根节点通常不会改变或移动。此外,在各种实现中,根节点(以及基于B树的键值存储库的任何其他节点)被复制,使得如果托管任何特定节点的机器由于任何原因而脱机或失败,则在已知或发布位置的一个或多个复制备份将可用于任何客户使用。
例如,在各种实现中,键值管理器跨越经由RDMA激活的网络接口卡(NIC)进行通信的多个联网的计算设备来实现。键值管理器提供动态的基于B树的键值存储库,动态的基于B树的键值存储库跨越用作主机的联网的计算设备中的两个或更多个而分布。用作客户端的多个联网的计算设备并发执行键值存储库的自主无锁读取。此外,用作服务器的多个联网的计算设备并发执行对键值存储库的特定存储器位置的自主无锁写入。此外,每个无锁写入经由基于RDMA的读取和CAS操作的组合来执行以保留特定的存储器位置,然后是对该保留的存储器位置的基于RDMA的写入。
本文中描述的键值管理器提供了用于应用RDMA消息传递以在跨越基于RDMA的网络中的多个服务器而分布的共享存储器中提供快速的无锁的基于B树的键值存储库的各种技术。键值存储库的分布式和无锁性质减小了延迟并且提高了基于RDMA的网络中的吞吐量,同时使得基于B树的键值存储库能够缩放到多个客户端的大量并发访问。除了上述益处之外,根据下文中的详细描述,键值管理器的其他优点将变得很明显。
附图说明
所要求保护的主题的具体特征、方面和优点将关于以下描述、所附权利要求和附图而变得更好理解,在附图中:
图1示出了如本文中描述的用于与“键值管理器”一起使用的经由RDMA激活的交换机、路由器和直接连接的任何组合进行通信的示例性数据中心或其他服务器网络。
图2示出了用于应用键值管理器来提供基于RDMA的B树键值存储库的总体架构图。
图3提供了示出用于实行对B树键值存储库的基于RDMA的读取的各种示例性技术的总体流程图。
图4提供了示出用于实行对B树键值存储库的基于RDMA的写入的各种示例性技术的总体流程图。
图5示出了由键值管理器控制的示例性分布式存储器结构。
图6示出了图示用于实行基于RDMA的分布式存储器分配的各种示例性技术的总体流程图。
图7示出了用于实现基于RDMA的B树键值存储库的示例性过程。
图8示出了用于实现基于RDMA的B树键值存储库的示例性过程。
图9示出了用于实现基于RDMA的B树键值存储库的示例性过程。
图10是描绘如本文中描述的具有简化的计算和I/O能力的简化的通用计算设备的总体系统图,其用于实行键值管理器的各种实现。
具体实施方式
在以下关于“键值管理器”的各种实现的描述中,对附图进行参考,附图构成其一部分,并且在附图中通过图示的方式示出了其中可以实践实践键值管理器的具体实现。可以使用其他实现,并且可以在不脱离其范围的情况下进行结构改变。
在描述本文中描述的各种实现时将采用特定的术语,并且这些实现并非旨在限于如此选择的特定术语。此外,应当理解,每个特定术语包括以大致类似的方式操作以达到类似目的的所有技术等同物。本文中对“一种实现”或“另一实现”或“示例性实现”或“替代实现”或类似短语的引用表示结合该实现描述的特定特征、特定结构或特定特性可以被包括在键值管理器的至少一个实现中。此外,整个说明书中这些短语的出现并不一定都是指同一实现,并且单独的或替代的实现不与其他实现相互排斥。本文中针对表示键值管理器的一个或多个实现的任何过程流程而描述或示出的顺序并不固有地指示针对以所描述或图示的顺序来实现这些过程的任何要求,并且本文中针对任何过程流程而描述或示出的任何这样的顺序并不表示键值管理器的任何限制。
如本文中使用的,术语“组件”、“系统”、“客户端”、“主机”、“服务器”等旨在指代计算机相关实体,其是硬件、软件(例如,执行软件)、固件或其组合。例如,组件可以是在处理器上运行的进程、对象、可执行文件、程序、函数、库、子例程、计算机或软件和硬件的组合。举例来说,在服务器上运行的应用和服务器本身都可以是组件。一个或多个组件可以驻留在进程中,并且组件可以位于一个计算机上和/或分布在两个或更多个计算机之间。此外,在键值管理器的上下文中,多个联网的服务器中的任何服务器可以并发地或单独地用作客户端计算设备和主机计算设备中的任一者或两者。术语“处理器”通常被理解为是指硬件组件,诸如计算机系统的处理单元。
此外,就术语“包括”、“包含”、“具有”、“含有”、其变体以及其他类似词语在本详细描述或权利要求书中使用的程度而言,这些术语旨在以类似于术语“包括”的方式作为开放过渡词,而不包含任何附加或其他要素。
1.0介绍:
在各种实现中,键值管理器使得多个服务器(例如,客户端和主机的任何组合)能够在不使用中央控制器等的情况下执行基于B树的键值存储库的并发自主读取和写入。保持键值存储库的存储器使用任何期望的存储器管理技术跨越多个计算设备进行管理和分布。但是,在各种实现中,该存储器由键值管理器的、可选的基于RDMA的存储器分配器组件进行管理。此外,由键值管理器启用的共享存储器和基于B树的键值存储库的分布式性质表示,如果根节点指向分支A,分支A又指向分支B,分支B又指向叶子C,则这些节点中的每个可以,但不一定,由相同的计算设备或者由基于RDMA的网络中的任何两个或更多个不同的计算设备托管。
当为了读取特定键值/指针对的目的而遍历树时,键值管理器执行键值存储库的每个节点的单独的RDMA读取以获得存储器引用序列,其中每个引用指向要读取的下一节点,直到到达期望节点。键值存储库的每个节点除了包括该节点的键值/指针对之外还包括元数据部分。在各种实现中,该元数据包括但不限于从节点的所有键值/指针对计算出的单个校验和。这样,执行节点读取的每个客户端从节点的键值/指针对来计算校验和,并且将计算出的校验和与从节点读取的校验和相比较。只要校验和相匹配,键值/指针对就被认为是有效的。
此外,当任何键值/指针对被写入到节点时,在执行对该节点的RDMA写入之前,写入客户端首先经由RDMA CAS操作保留该节点以翻转与该节点相对应的保留位(例如,托管在节点保留位图等中)。在各种实现中,托管键值存储库的任何存储器的每个计算机包括与该特定存储器相对应的单独的本地保留位图等。然而,在各种实现中,可选的全局保留位图可以单独被托管在任何服务器上以允许键值存储库的任何节点的保留。在该RDMA写入成功完成之后,客户端然后通过将该位翻转回来以示出该节点为空闲来释放该节点的保留。当执行对节点的RDMA写入时,客户端首先读取节点。然后,客户端根据要写入节点的新键值/指针对和节点中任何剩余的键值/指针对计算节点的新校验和。然后,在对节点执行RDMA写入时,将新校验和与节点的所有键值/指针对一起写入节点的元数据。
这样,在节点上的RDMA写入正在由客户端执行的非常短的时间段期间,经由RDMA读取操作读取节点的任何其他客户端可以计算不与元数据中的校验和相匹配的校验和。在数据可能处于未知状态的情况下,使用这种校验和可以防止潜在的读取/写入或写入/写入冲突。因此,如果校验和不匹配,客户端将重复读取,直到计算出的校验和与元数据中的校验和相匹配。写入发生得非常快,以至于如果校验和不匹配,则在执行第二读取(通常大约几十微秒)时,写入通常完成并且校验和将匹配。
如图1所示,键值管理器可以被配置为用于与包括经由RDMA激活的路由器140、交换机(150和160)和直接连接170的任何组合进行通信的服务器(100、110、120和130)的任何组合的任何期望的网络配置一起使用。有利地,由键值管理器启用的通信和消息传递技术经由任何数目的联网的计算机之间的无锁RDMA读取和写入可缩放到对任何数目的联网的计算机以及键值存储库上的任何数目的并发读取和写入操作。
图2图示了键值管理器的高级示例性架构,其示出键值管理器的各种实现。然而,图2并非旨在提供贯穿本文档而描述的键值管理器的每个可能实现的详尽或完整说明。另外,图2中可以用折线或虚线表示的任何框间的互连和框表示本文中描述的键值管理器的替代实现。此外,如本文中描述的这些替代实现中的任何或全部可以与贯穿本文档而描述的其他替代实现结合使用。
特别地,多个服务器(200、205、210、215、220和225)经由RDMA激活的的网络通信硬件230(诸如路由器、交换机或其他联网硬件或基础设施)被配置为网络。服务器(200、205、210、215、220和225)中的每个可以关于网络中的任何其他服务器而操作为客户端(例如,读取和写入到键值存储库)和主机(托管键值存储库的分布式共享存储器的一部分)。另外,关于一个或多个其他主机而用作客户端的任何服务器可以关于一个或多个其他客户端并发用作主机。
此外,在各种实现中,服务器(200、205、210、215、220和225)中的每个被配置为运行操作系统(例如,235、240),操作系统又可以执行一个或多个程序(例如,245、250)。B树键值管理器API(255、260)驻留在每个服务器(200、205、210、215、220和225)上,并且被应用以经由每个服务器的RDMA激活的NIC(265、270)来对键值存储库执行基于RDMA的读取、写入和CAS操作。
键值存储库放置在可以由任何或所有服务器(200、205、210、215、220和225)托管的分布式保留存储器(275、280)中。如上所述,使用任何期望的存储器管理技术跨越多个计算设备管理和分布保持键值存储库的存储器。然而,在各种实现中,该存储器由驻留在每个服务器(200、205、210、215、220和225)上的可选的基于RDMA的存储器分配器API模块(285、290)进行管理,并且被应用以拦截和处理来自B树键值管理器API(255、260)的任何存储器分配请求。在各种实现中,可选的基于RDMA的存储器分配器API模块(285、290)还可以拦截和处理来自在每个特定服务器上执行的任何过程(例如,245、250)或操作系统(例如,235、240)的任何存储器分配请求。键值管理器API在本文中也被称为存储器分配器API模块,或简称为API。
当访问由键值管理器启用的任何键值存储库时,在各种实现中,客户端可以经由放置库295等获得任何特定键值存储库和任何副本的根节点的地址。换言之,放置库295提供了一种用于经由友好名称或与键值存储库相关联并且对每个客户端已知的其他标识符来放置和发现特定键值存储库(和可选副本)的位置的机制。放置库295可以托管在任何服务器上并且可选地被复制。
另外,如上所述,当向键值存储库写入时,客户端首先通过利用RDMA CAS操作翻转该位经由保留位等来保留该节点。在各种实现中,节点保留位图(277、282)被托管在相应服务器(200、205、210、215、220和225)的保留存储器(275、280)中或与其相结合,或者可选地被实现为全局保留位图297(或其他数据结构)。在任何一种情况下,应用节点保留位图(277、282或297)以保留任何特定节点,用于由任何特定客户端写入。更具体地,在各种实现中,托管键值存储库的任何存储器(275、280)的每个服务器(200、205、210、215、220和225)包括与该特定存储器相对应的单独的本地保留位图(277、282)。
由于对任何特定节点的地址的任何知识将固有地提供托管该节点的存储器的服务器上的相应保留位图的地址,因此对每个服务器的保留存储器使用本地保留位图(277、282)简化了保留过程。然而,通过使用一些附加的记录保持功能(例如,跟踪服务器是否在线或以其他方式操作、解决针对同一节点的不同服务器之间的潜在保留请求竞争等),整个键值存储库(或键值存储库的特定部分)的节点保留位图297的一个或多个可选全局实例可以被托管在任何服务器上并且可选地被复制。在这种情况下,节点保留位图297的位置或地址可以经由放置库295来获取。
1.1系统概述:
如上所述,键值管理器提供用于应用RDMA消息传递以在跨越基于RDMA的网络中的多个服务器而分布的共享存储器中提供快速的无锁的基于B树的键值存储库的各种技术。以上总结的过程由图3和4的总体系统图来说明。图3示出了键值存储库的基于RDMA的读取。图4示出了对键值存储库的基于RDMA的写入。
图3的系统图示出了用于执行键值存储库的基于RDMA的读取的各种实现。另外,虽然图3的系统图示出了键值管理器的各种实现的高级视图,但是图3并非旨在提供贯穿本文档而描述的键值管理器的每个可能实现的详尽或完整说明。有利地,键值的基于RDMA的读取是自主的,其中客户端管理自己的读取,而不管托管正在被读取的节点的存储器存储在基于RDMA的网络内的何处。此外,如前所述,任何客户端对键值存储库的基于RDMA的读取与其他客户端对键值存储库的自主的基于RDMA的读取、写入和CAS操作并发执行,从而使得键值存储库能够缩放到非常大量的并发客户端访问,同时保持对键值存储库的读取和写入的延迟非常低。
例如,如图3所示,在各种实现中,读取过程通过以下方式开始操作:通过查询已知源(例如,上述放置库或任何其他源)或响应于自动推送给每个客户的地址的发布来获得(300)基于B树的键值存储库的特定实例的根节点的地址。接下来,客户端执行根节点的RDMA读取(310)以获取对包含客户端正在查找的数据值的路径中的下一节点的地址的引用。可选地,客户端可以将键值/指针对高速缓存在根节点中,用于将来读取根节点下的分支。
每当读取根节点时,客户端根据根节点中的键值/指针对来计算(320)校验和,并且将计算出的校验和与在根节点的读取期间获得的节点的元数据部分中的校验和值相比较(330)。如果需要,客户端然后重复根节点的RDMA读取(310),直到计算出的校验和与节点元数据中的校验和相匹配。
在读取根节点之后,客户端然后基于从先前读取中获得的该节点的地址来执行路径中的下一节点的RDMA读取(340)。执行该读取以获得对包含客户端正在查找的数据值的路径中的下一节点的地址的引用。如同根节点的读取一样,客户端再次根据正在被读取的节点中的键值/指针对来计算(350)校验和,并且将计算出的校验和与计算出的校验和与该节点的元数据部分中的校验和值相比较(360)。如果需要,客户端然后重复节点的RDMA读取(340),直到计算出的校验和与节点元数据中的校验和相匹配。
一旦针对当前节点确认了校验和相匹配,则确定(370)当前节点是否是叶节点,从而指示树的底层。如果当前节点是叶节点,则键值管理器向客户端返回(380)客户端正在叶节点中查找的值或地址。否则,如果节点不是叶节点,则客户端循环并且基于从先前读取中获得的该节点的地址来执行路径中的下一节点的RDMA读取(340)。该过程继续进行节点读取、校验和比较和节点级别作为分支或叶节点的确定,直至达到叶节点并且所查找的值或地址被返回给客户端。
然而,在各种实现中,如果计算出的校验和在一些预定次数的读取尝试之后不匹配元数据中的校验和,这可以表明节点中存在一个或多个坏的或损坏的条目,或者仅仅表明可能由于某种原因而发生了存储器错误。在这种情况下,键值管理器然后或者从有效副本中恢复节点(例如,保留主节点上的节点,从有效副本中读取相应的节点,并且然后将该数据写入主节点的相应节点,然后释放相应的保留位)或者在上述放置库中将该节点标记为坏的(参见图2的元素277、282和297),并且然后移动到现在是主节点的副本以执行读取过程。此外,无论何时任何数据被写入任何节点,该数据最终被复制到每个副本,以确保主节点与每个副本之间的一致性。
图4的系统图示出了用于执行对键值存储库的基于RDMA的写入的各种实现。另外,虽然图4的系统图示出了键值管理器的各种实现的高级别视图,但是图4并非旨在提供贯穿本文档而描述的键值管理器的每种可能实现的详尽或完整说明。另外,图4中可以用折线或虚线表示的任何框之间的互连和框表示本文中描述的键值管理器的替代实现。此外,如本文中描述的这些替代实现中的任何或全部可以与贯穿本文档而描述的其他替代实现结合使用。
通常,如图4所示,在各种实现中,写入过程通过确定(400)要执行写入的键值存储库的节点的地址来开始操作。该地址可以从提供要写入一个或多个键值/指针对的特定节点内的地址的某个进程或应用中获取,或者通过执行B树的基于RDMA的读取(例如,通过应用关于图3所示的过程)以获得适当的地址来获取。
一旦确定了要写入的节点的地址,则键值管理器然后对前述节点保留位图执行RDMA CAS操作(405)(例如,参见图2的元素277、282和297)以翻转与该特定节点相关联的位以指示该节点被保留用于写入。如果CAS操作不成功(410),则表示节点已经被保留用于由其他客户端写入。在这种情况下,客户简单地重复RDMA CAS操作(405),直到CAS操作成功,由此保留该节点用于由客户端写入。
在节点的成功保留之后,客户端执行节点的RDMA读取(415)以获得节点的当前键值/指针对和元数据中的相应校验和。给定要写入节点的一个或多个新的键值/指针对条目,然后,键值管理器根据节点中没有被改变的所有现有的键值/指针对和正在写入的所有新的键值/指针对的组合来计算(420)新的校验和。然后执行单个RDMA写入(425)以向整个节点写入节点中没有被改变的所有现有的键值/指针对和所有新的键值/指针对以及元数据中的新的校验和。一旦该写入完成,键值管理器通过对与该节点相关联的保留位执行RDMA CAS操作或RDMA写入以将该位翻转以指示该节点不再被保留来释放该节点的保留。
在各种实现中,无论何时要执行节点写入,键值管理器添加可选的错误检查步骤,以在写入该节点之前确认节点中的数据的有效性。特别地,如图4所示,在节点的初始RDMA读取(415)之后,键值管理器从节点中的现有的键值/指针对来计算(435)校验和。如上所述,只要计算出的校验和与元数据中的校验和相匹配(440),则键值管理器继续步骤(420)。然而,如果计算出的校验和与元数据中的校验和不匹配,则指示(445)节点中存在一个或多个坏的或损坏的条目,或者仅仅表明可能由于某种原因而发生了存储器错误。在这种情况下,键值管理器然后或者从有效副本中恢复(450)节点并且从步骤(415)重新开始写入过程,或者在上述放置库中将该节点标记为坏的(参见图2的元素295),并且然后移动到现在是主节点的副本,并且从步骤(415)重新开始写入过程。
2.0键值管理器的操作细节:
采用上述程序模块来实现键值管理器的各种实现。如上所述,键值管理器提供了各种技术用于应用RDMA消息传递以在跨越基于RDMA的网络中的多个服务器而分布的共享存储器中提供快速的无锁的基于B树的键值存储库。以下部分提供键值管理器的各种实现的操作以及用于实现关于图1至图4在1章节中描述的程序模块和特征的示例性方法的详细讨论。特别地,以下各节提供了键值管理器的各种实现的示例和操作细节,包括:
·键值管理器的操作概述;
·RDMA消息传递;
·基于B树的键值存储库;
·键值存储库的基于RDMA的读取;
·键值存储库的基于RDMA的写入;
·可选的基于RDMA的存储器分配;
·基于RDMA的存储器分配考虑因素;
·用于实现键值管理器的基于RDMA的RPC消息;以及
·跨越多个服务器的键值存储库的节点的复制。
2.1操作概述:
如上所述,键值管理器提供了用于应用RDMA消息传递以在跨越基于RDMA的网络中的多个服务器而分布的共享存储器中提供快速的无锁的基于B树的键值存储库的各种技术。换言之,保持键值存储库的节点(例如,根、分支和叶节点)的存储器遍布网络中的多个服务器而分布。因此,不需要服务器来处理用于对键值存储库的大量并发读取和写入的负载,从而减少了用于对键值存储库的读取和写入的服务器负载和延迟。因此,键值存储库访问的其他重大网络流量可以通过键值存储库的分布式和自主特性得到缓解。在各种实现中,不管节点类型如何,每个节点具有相同的大小,以提供小型连续缓冲区,其可以完全地经由单个RDMA读取来读取并且经由单个RDMA写入来写入。
有利的是,无锁通过减少与多个联网的计算机对B树的分布式存储器的大量并发读取和写入相关联的延迟改进了键值存储库器的整体性能。此外,本文中描述的消息传递技术使用基于商品RDMA的NIC的能力相对于基于专用NIC硬件的网络降低了联网成本。另外,使用键值管理器而实现的网络非常灵活,因为关于一个或多个其他主机(例如,托管键值存储库的分布式共享存储器的某个部分)而用作客户端的任何服务器(例如,读取和写入到键值存储库并且可选地请求存储器分配)可以关于一个或多个其他客户端并发用作主机。此外,键值管理器可以轻松地缩放到来自既可以在客户端也可以在主机端进行操作的服务器的多个同时、并发或顺序请求,从而提高了网络性能。
在各种实现中,键值管理器的RDMA消息传递能力通过提供应用程序编程接口(API)的连接库等来启用,API用于经由每个服务器的RDMA激活的NIC的基于RDMA的消息传递的使用。该连接库封装了各种协议,以建立和维护任何数目的联网的计算机的NIC之间的连接。在任何服务器上运行的任何应用或进程可以访问API以与键值管理器进行接口以对键值存储库执行读取和写入操作。然后,API将经由RDMA激活的NIC自动发起服务器之间的通信,以处理读取和写入请求。
例如,键值管理器提供使得任何客户端能够创建键值存储库并且读取、写入并且可选地删除键值存储库中的记录的各种API。由键值管理器启用的读取提供经由一系列RDMA读取和键值存储库的校验和比较而执行的事务性的“获取”操作。由键值管理器启用的写入操作提供经由一系列RDMA读取、RDMA写入和RDMA CAS操作而执行的事务性“放入”操作。同样地,由键值管理器启用的可选删除提供经由一系列RDMA读取、RDMA写入和RDMA CAS操作而执行以删除指定键(key)的映射的事务性“删除”操作。
使用RDMA激活的NIC来处理读取和写入请求使得键值管理器能够应用“内核旁路(Kernel Bypass)”技术,“内核旁路”技术进一步减少了服务器上用于访问键值存储库的CPU负载。内核旁路是一种应用于通过执行各种操作以及存储器读取和写入而不访问或通知内核来提高网络性能的概念。例如,在典型的网络场景中,内核解码网络分组,例如TCP,并且通过复制将数据从内核空间传递到“用户空间”。术语“用户空间”是指在内核之外(例如,在内核空间之外)运行的代码。用户空间通常是指OS用来与内核进行交互的各种程序和库,诸如例如执行输入/输出、操作文件系统对象、应用软件等的软件。从内核空间到用户空间的复制过程通常包括保存用户空间进程上下文数据并且然后加载内核上下文数据。保存用户空间进程上下文数据并且然后加载内核进程信息的该步骤通常被称为上下文切换。然而,已经观察到应用上下文切换构成了很大一部分网络开销,由此降低了计算机互连的带宽和延迟性能。
键值管理器适配各种内核旁路技术,以使得用户空间应用能够与键值管理器进行通信,键值管理器适用于与键值管理器正在其上执行的计算设备上的用户空间应用和NIC两者进行通信。该进程将内核移出用户空间进程与由经由RDMA激活的NIC处理网络通信的键值管理器启用的I/O子系统之间的通信路径。有利的是,该配置消除了上下文切换并且从内核空间复制到用户空间。例如,在各种实现中,键值管理器通常经由以下用户空间操作顺序来传输RDMA读取、写入和CAS操作:
1.在用作客户端的本地服务器上确定要将RDMA消息传输到用作共享分布式存储器的某部分主机的远程服务器。通常,该确定响应于读取或写入由键值管理器接收或以其他方式截取的键值存储库的请求来进行;
2.在客户端上应用键值管理器的本地实例以与客户端的NIC进行通信;
3.应用客户端的NIC以与网络的物理网络硬件(例如,RDMA激活的交换机、路由器等)进行通信,以通过网络将适当的RDMA消息(例如,读取、写入和CAS操作)发送到主机的NIC(例如,托管正在被读取或写入的键值存储库的节点的计算机);以及
4.响应于主机的NIC对RDMA消息的接收,应用主机的NIC以经由该NIC与该主机上的存储器之间的DMA操作对主机的存储器执行所请求的读取、写入或CAS操作。换言之,每个服务器响应于由NIC从其他服务器接收的RDMA消息来执行本地DMA操作(例如,读取、写入和CAS操作)。
例如,在各种实现中,在联网的客户端中的一个上执行的应用、进程或线程指示该客户端对键值存储库执行读取或写入。在各种实现中,键值管理器接收或以其他方式截取该读取或写入请求,并且执行一系列RDMA读取(用于键值存储库的读取)或者一系列RDMA读取、CAS操作和写入(用于键值存储库的写入)。
有利的是,做出读取或写入请求的实际进程、线程或应用可能不一定意识到或关心托管键值存储库的分布式存储器存在于网络中的不同的服务器(或多个服务器)上。该进程、线程或应用只是简单地使用从键值存储库的节点获得的存储器引用,以经由键值管理器来向该存储器读取或写入。换言之,RDMA读取、写入和CAS操作的各种组合与对特定节点的地址的引用结合使用,以读取和/或写入键值存储库的那些节点。因此,与通过访问仅本地服务器存储器时可能出现的情况相比,键值管理器为这些联网的服务器提供对分布在显著更大的共享存储器空间(跨越多个服务器)内的键值存储库的快速无锁访问。
2.2 RDMA消息传递:
远程直接存储器访问(RDMA)是从一个计算机的存储器到不同计算机的存储器的直接存储器访问,其经由这些计算机的RDMA激活的网络接口控制器(NIC)执行而不涉及任一计算机的操作系统。换言之,所有RDMA操作由对服务器存储器的NIC读取和写入直接执行而不会中断或通知任何服务器的CPU。更具体地,客户端NIC向主机的NIC发送RDMA消息或请求。接收到RDMA消息或请求的任何主机然后应用其自己的NIC以经由主机的NIC与主机的存储器之间的相应的本地直接存储器访问(DMA)操作,来与其自己的本地存储器交互以服务于接收到的RDMA请求。然而,出于解释的目的,以下讨论将简单地引用使用由客户端向主机发送的RDMA消息或请求,以应用RDMA消息传递来在跨越基于RDMA的网络中的多个服务器而分布的共享存储器中提供快速的无锁的基于B树的键值存储库。
在各种实现中,键值管理器利用各种RDMA动词来启用分布式存储器中的键值存储库并且提供分布式存储器的可选的基于RDMA的分配以用于键值存储库的构建和生长。例如,在各种实现中,这些RDMA动词包括但不限于RDMA写入、RDMA读取以及RDMA原子比较和交换(CAS)操作的各种序列。
此外,远程过程调用(RPC)是进程间通信,其允许在一个计算机上运行的计算机程序、进程或线程引起子例程或过程在共享网络上的不同计算机的地址空间中执行。通常,为了执行RPC,客户端计算机向服务器计算机发送RPC请求。RPC请求包括要由服务器执行的特定过程(例如,子例程、应用、进程等)的ID以及要用于该过程执行的一个或多个可选参数。在各种实现中,“网络追踪器(cookie)”等也可以与ID一起发送。一般来说,该cookie是一种标识符(例如,数字、名称等),它以一种方式唯一标识客户端/发送方,使得由客户端发送的原始消息能够与由客户端最终接收的响应相匹配。
如上所述,在各种实现中,键值管理器使用基于RDMA的消息传递来对键值存储库执行读取和写入,并且为键值存储库执行可选的存储器分配。因此,键值存储库的这些存储器分配和访问是在不涉及客户端或主机的CPU的情况下执行的。但是,在各种实现中,键值管理器组合RDMA消息传递和远程过程调用(RPC)请求,以对键值存储库执行读取和写入,以及为键值存储库执行可选的存储器分配。在这种情况下,客户端和主机服务器的CPU只有在访问键值存储库时才被涉及,或者执行由在客户端与主机服务器之间传输的RPC请求指定的存储器分配请求,该请求经由通过基于RDMA的消息传递而发送的RPC请求来传输。
在各种实现中,键值管理器假定受保护的网络,其中所有服务器具有访问其他计算机的共享存储器的一个或多个保留区域的适当权限,以读取和写入键值存储库。否则,在执行RDMA操作之前执行附加的许可步骤,以确保主机向特定客户端提供适当的权限以允许客户端访问其存储器。假定有这样的权限,则经由客户端的NIC与主机之间的消息传递来进行存储器访问,而不通知主机的操作系统。
RDMA读取使得客户端能够经由客户端和主机的RDMA NIC来读取主机的存储器的一部分。换言之,RDMA读取消息使得客户端能够读取主机的存储器(例如,键值存储库的节点),而主机的操作系统不知道该存储器读取。类似地,RDMA写入使得客户端能够经由发送者和主机的RDMA NIC来向主机的存储器的一部分(例如,键值存储库的节点)写入。与RDMA读取一样,RDMA写入操作在没有通知主机的情况下执行。
RDMA原子比较和交换(CAS)操作用于原子地比较来自客户端的RDMA CAS消息中的值与主机的指定虚拟地址的值。如果比较值相等,则由RDMA CAS消息指定的值将被存储在主机的虚拟地址处。换言之,在原子事务中,一系列数据库操作或者全部发生,或者什么也不发生。原子性的保证可以防止仅部分发生存储器地址的更新。因此,RDMA事务没有由主机观察到正在进行,因为在某一时刻,它尚未发生,并且在下一时刻,它已经整个发生(或者如果事务因为发送的值与主机所保持的值不匹配而失败,则不发生任何事情)。
在各种实现中,在对键值存储库执行RDMA写入之前,结合经由键值存储库的RDMA读取获得的元数据,键值管理器应用RDMA CAS操作,以保留特定节点,并且可选地经由在那些头部(Header)和空闲板(Slab)图上的RDMA CAS操作修改分配的存储器的元数据头部和空闲板图来分配特定的存储器块和存储板用于由键值存储库使用,如下面的段落进一步详细讨论的。
2.3基于B树的键值存储库:
通常,B树是用于构造键值存储库的结构,键值存储库通过经由在树的叶节点中对数据值的基于树的引用序列,从B树的根节点进行遍历来将客户端向下指向该数据值的存储器位置。换言之,从树的根节点经过多个分支的路径被顺序地遍历以到达包含对客户端正在查找的数据值的引用的叶节点。树的每个叶节点由多个条目组成,每个条目包括到客户端正在查找的数据的键值/指针对。根节点和每个分支节点由多个条目(例如,键范围)组成,这些条目是到被遍历以到达叶节点的下一较低子分支的键值/指针对。
更具体地,在典型的B树中,B树的每个节点包含到较低节点的键和指针(例如,键值/指针对)。这些键用作划分其子树(例如,另外的分支节点或叶节点)的分离值,而相应的指针提供对下一较低节点的存储器的引用。例如,如果内部分支节点具有3个子节点,则该内部节点将具有2个键:k1和k2(例如,分别为5和10)。最左边的子树中的值将小于k1(例如,值1、2、3小于键值5),中间子树中的值将在k1和k2之间(例如,6、8和9在键值5和10之间),并且最右边的子树中的值将大于k2(例如,15和356大于键值10)。叶子保持经由B树读取而查找的数据记录,或者叶子保持指向保持数据记录的存储器的指针。
键值管理器通过跨越多个联网的服务器分布托管键值存储库的存储器来提高对键值存储库的读取和写入的性能。此外,键值管理器实现对键值存储库的自主读取和写入。因此,通过避免中央计算机的使用来协调或控制这些读取和写入,改进了由键值管理器启用的基于B树的键值存储库的可缩放性。此外,键值管理器还提供了一种基于元数据的机制,用于确保键值存储库保持读取和写入的一致性,而无需执行大量锁定。
在各种实现中,键值管理器为键值存储库提供仅生长结构。换言之,在仅生长的情况下,一旦为B树的新分支或叶节点分配了存储器,即使该节点中的数据已经被删除,存储器保持被分配(并且可用于将来的读取和写入)。此外,在仅生长场景中,任何特定节点中的键值/指针对仍然指向相同的子节点。换言之,在仅生长情况下,节点被添加或附加到树,但是不会从树中移除。此外,在生长树时,叶节点可以转换为具有适当的键值/指针对的分支节点,以包括树的附加的较低级别。
或者,在各种实现中,键值管理器不是提供键值存储库的仅生长配置,而是允许从B树修剪或删除节点。此外,可以基于树的较低级别的修剪将分支转换为叶子。类似地,当将新的子节点添加到树时,叶节点可以转换成分支。然而,在这种非仅生长场景中,任何特定的父节点或子节点可以由于在父节点的读取之后并且在相应子节点的读取之前的中间的写入操作或先前的节点添加或删除操作而可能包含陈旧的数据(例如,无效的键值/指针对)。
因此,为了解决非仅生长情况下的这些问题,在各种实现中,每个节点的元数据进一步包括到父节点的反向指针(即,紧接在到键值存储库中的特定较低级别节点(即,子节点)的键值/指针对之前并且包含其的更高级别节点)。这些反向指针使得键值管理器能够验证:当它正在遍历树时,它不会跳到不正确的分支或叶节点,这是由于节点写入和先前的节点删除和添加的任何组合。特别地,当为了读取特定的键值/指针对而遍历树时,键值管理器将从任何子节点的元数据读取的反向指针与从子节点到达的父节点的地址相比较。在子节点中的反向指针与从该子节点到达的父节点的地址不匹配的情况下,可能在父节点的读取之后并且在子节点的读取之前,发生对子节点和/或父节点的中间节点添加或删除操作和/或节点写入操作。因此,最初从父节点读取的键值/指针对可能是陈旧的。
如果反向指针与父节点的地址不匹配,则键值管理器重复父节点的读取,并且将该新读取的键值/指针对与先前的读取相比较。如果父节点的新旧键值/指针对不同,则表明父节点已经经由新节点写入操作被更新。在这种情况下,使用通过父节点的新读取而获得的父节点的新键值/指针对,键值管理器继续遍历树,同时继续比较反向指针,如上所述。
然而,如果父节点的新旧键值/指针对在新读取与先前读取之间相同,这表明父节点可以保持陈旧数据。在这种情况下,键值管理器向上冒泡一层(即,到当前父节点的直接父节点)并且执行直接父节点的新读取。然后,键值管理器将直接父节点的该新读取的键值/指针对与直接父节点的先前读取相比较。如果直接父节点的新旧键值/指针对不同,这表明直接父节点已经经由新节点写入操作被更新。在这种情况下,键值管理器使用由直接父节点的新读取而获得的直接父节点的新键值/指针对继续遍历树,同时继续比较反向指针,如上所述。否则,如果直接父节点的新旧键值/指针对相同,则键值管理器迭代地向上冒泡到下一更高的父节点,直到达到树的其中下一较高父节点的新旧键值/指针对不同的水平,此时给定该下一较高父节点的新键值/指针对,键值管理器继续遍历树,同时继续比较反向指针,如上所述。
在各种实现中,由键值管理器启用的键值存储库的节点具有小于或等于网络中的RDMA激活的NIC硬件所启用的最大帧大小的固定大小。这使得整个节点可以经由单个RDMA读取或写入来被读取或写入。例如,在经过测试的实现中,使用由任何期望存储器分配进程或由键值管理器的可选的基于RDMA的存储器分配器组件分配的固定大小的存储器板来配置节点。例如,当使用基于RDMA的存储器分配器时,板大小被设置为在一个字节与最大RDMA读取大小之间的任何大小,中间大小以2的幂增加(例如,2个字节、4个字节、8个字节、16个字节、32个字节、64个字节、128个字节、256个字节等)。然而,键值管理器可以用任何期望的存储器分配过程进行操作,并且本文中仅为了解释和示例的目的而描述基于RDMA的存储器分配器组件。
每个B树具有公开姓名(例如,“友好姓名”),客户端首先通过该姓名寻找适当的键值存储库。例如,在各种实现中,客户端联系已知地址(其可以具有多个备份用于冗余),并且将特定B树的友好名称提供给返回对相应B树的根节点的存储器引用的进程。客户端然后读取该存储器地址以获得根节点的分支列表。在各种实现中,一旦客户端接收到特定B树的存储器地址,客户端维持该地址以便执行键值存储库的未来B树读取或写入。换言之,任何客户端只需要获得特定B树的根节点的地址一次,并且然后可以维持该地址的副本用于与该B树的进一步交互。
可选地,在各种实现中,每当在任何服务器上创建任何B树时,每个B树的根节点被传播到每个客户端。这消除了由单个客户端对每个B树的根节点的初始RDMA读取,以提供小的性能改进。然而,给定客户端与特定B树之间的大量交互,消除客户端对根节点的单个RDMA读取并不会显著减少整个系统延迟。
2.3.1初始化键值存储库:
当键值管理器初始创建特定键值存储库时,友好名称与该键值存储库相关联,并且与该特定键值存储库的根节点的地址一起被提供给上述放置库。该键值存储库的根被存储在安全存储器位置,该安全存储器位置在放置库等中可用的并且根据与该键值存储库相关联的友好名称被发布(或按要求提供)给每个客户端。友好名称(例如,“数据库1”)是客户端引用特定键值存储库的简单方法。通常,但不一定,友好名称由请求键值存储库的创建的客户端指定。
此外,当键值管理器首先创建任何键值存储库时,键值管理器初始地为一个根节点分配存储器,并且为整个一组空叶节点分配附加存储器。另外,当键值存储库被首次创建时,键值管理器在根节点中填充键值/指针对以指向每个相应叶节点的分配地址。
用于根节点(或任何其他分支节点)的叶节点的数目被设置为某个指定值。通常,树的深度(即层数)与从根或其他分支节点可寻址的分支节点和叶节点的数目成反比增加。换言之,宽树(来自每个节点的更多分支或叶子)倾向于具有比窄树更少的等级。该根分支可以被缓存在任何客户端上,因为它不太可能改变,特别是在键值存储库设置为仅生长配置的情况下,如2.3.3章节中详细讨论的。
2.3.2分割或更新节点:
一般而言,随着键值存储库的生长,现有的叶节点被转换为分支节点以使用附加等级向下扩展B树。在将叶节点转换为分支节点时,对于取决于转换为分支的节点的每个新的叶节点,新条目首先被添加到保留位图中。此外,每个新的叶节点和转换为分支的节点的保留位都被翻转以保留那些节点,直到对所有那些节点的节点写入操作被完成,以向那些节点写入适当的键值/指针对。这些保留然后在转换过程完成之后被释放,使得可以执行经转换的节点和新的叶节点的读取和写入,如本文所述。
相反,当从特定叶节点删除数据时,该叶节点可能不再保持指向任何数据的任何键值对。在这种情况下,叶节点可以用空数据来维持,空数据可以经由基于RDMA的写入在某个点处用键值/指针来填充。或者,在某些情况下,通过将父分支节点转换为叶节点来从B树修剪叶节点。与从叶节点到分支节点的转换一样,每当节点从分支转换为叶节点时,通过翻转保留位图的相应位来保留所有受影响的节点,直到转换过程经由到转换为叶节点的节点的新的键值/指针对的写入而完成。
例如,当扩展树时,树通过将一个或多个叶节点转换为分支并且为在新转换的分支以下的新叶节点分配存储器来生长。每当叶节点被转换为分支时,键值管理器将使用本文中描述的节点写入技术来执行RDMA写入,以利用键值/指针对来填充经转换的分支以在新分配的存储器中引用新的叶节点。换言之,键值管理器在网络中的一个或多个服务器上为新的整个一组空叶节点分配附加存储器,并且向新的转换的分支节点写入新的键值/指针对,以指向每个相应叶节点的新分配的地址。另外,可以将从分支转换为叶节点的节点中的一些原始键值/指针对写入新分配的叶节点。
如此,这些技术能够高速缓存节点而不需要验证高速缓存。例如,在各种实现中,当分支被分成键值/指针对条目(例如,分支包含键1至1000)时,该分支从不被重新创建。特别地,当分支被创建时,键值/指针对条目被初始化为空指针。这样,在各种实现中,键值管理器不预先分配分支以备将来使用,从而节省了大量的存储器空间。然后,一旦需要将空指针转换为实际分支(具有实际数据),则键值管理器按需执行分配,并且使用本文中描述的基于RDMA的写入技术启用对新分配的存储器的写入。例如,当键值存储库被初始创建时,根节点被分成若干分支。随着写入被执行,这些分支被填充,并且新分支(例如,叶节点到分支的转换)被分配并且根据需要被填充数据。
2.3.3仅生长场景的优化:
在各种实现中,通过键值管理器经由仅生长场景来改进对键值存储库的读取和写入访问的效率。换言之,一旦为键值存储库分配了存储器,即使一个或多个分支或叶节点在逻辑上从B树中被删除,该存储器保持被分配。因此,从客户的角度来看,可以在逻辑上删除特定的键值/指针对,或者可以逻辑地删除整个分支或叶节点而不缩小树。然而,该特定键或节点的空间然后可用于新写入,因为无论何时需要新的键或节点,都会重新使用相同的分配的存储器。因此,一旦为树分配了存储器,它保持被分配用于该树,而不管该存储器是否保持任何数据。
例如,考虑应用键值管理器来构建和提供对顾客购买历史的键值存储库的访问的示例。客户任何时候进行交易(例如,在商店网站,在实体店等),相应的条目可以被添加到键值存储库。在仅生长的情况下,交易永远不会撤消,即使客户退货。退货仅被视为附加的退款交易。因此,使用仅生长实现来优化键值管理器可以提高现实世界的效率。
2.4键值存储库的基于RDMA的读取:
在各种实现中,键值存储库上的读取开始于通过查询已知源(例如,上述放置库或任何其他已知源),或者响应于发布被自动推送给每个客户端的根节点的地址来获得基于B树的键值存储库的特定实例的根节点的地址。换言之,客户端已经具有根节点的地址,或者通过读取被映射到相应键值存储库的根节点的地址的友好名称的列表或集合来获得该地址。对键值存储库的所有读取操作然后由客户端使用RDMA执行单向读取来执行。此外,基于写入保留大小(参见2.5.1章节对保留注意事项的讨论),多个客户端可以同时读取同一节点,同时任何数目的客户端并发执行对任何其他节点的写入。
特别地,给定根节点的地址,客户端执行根节点的RDMA读取以获得对包含客户端正在查找的数据值的路径中的下一节点的地址的引用。可选地,客户端可以将键值/指针对高速缓存在根节点中,以便执行对根节点下的分支的将来读取。例如,根节点通常具有很多分支,并且每个分支具有一定范围的数字(例如,键1至1000、1001至2000等)。客户端选择它感兴趣的任何分支,执行其感兴趣的任何子分支的另一RDMA读取,并且重复,直到它到达适当的叶节点。换言之,客户端执行根节点的RDMA读取以获得每个子分支(即,内部节点)的根节点的地址。然后,客户端执行逐渐降低或更深的内部节点的RDMA读取以遍历B树,直到达到适当的叶节点以读取该叶节点的数据(例如,最终指针或对客户端正在查找的值的引用)。
无论何时读取任何节点,客户端从节点中的键值/指针对来计算校验和值,并且将计算出的校验和与节点的元数据部分中的校验和相比较。例如,读取过程以根节点的RDMA读取开始(除非根节点已经本地高速缓存)。然后,客户端根据根节点中的键值/指针对来计算校验和,并且将该计算出的校验和与在根节点的RDMA读取期间获得的节点的元数据部分中的校验和值相比较。如果需要,客户端然后重复根节点的RDMA读取,直到计算出的校验和与节点元数据中的校验和相匹配。
在成功读取根节点(例如,匹配校验和)之后,客户端然后基于从先前读取获得的那个节点的地址来执行路径中的下一节点的RDMA读取。执行该读取以获得对包含客户端正在查找的数据值的路径中的下一节点的地址的引用。与读取根节点一样,客户端再次从正在读取的节点中的键值/指针对来计算校验和,并且将该计算出的校验和与该节点的元数据部分中的校验和值相比较。如果需要,客户端然后重复节点的RDMA读取,直到计算出的校验和与节点元数据中的校验和相匹配。
一旦针对当前节点确认校验和相匹配,则确定当前节点是否是叶节点,由此指示树的底层。如果当前节点是叶节点,则键值管理器将在叶节点中客户端正在查找的值或地址返回给客户端。否则,如果节点不是叶节点,则客户端循环并且基于从先前读取获得的该节点的地址对路径中的下一节点执行RDMA读取。该过程继续进行节点读取、校验和比较以及节点级别作为分支或叶节点的确定,直至达到叶节点并且将正在查找的值或地址返回给客户端。
在存在对特定节点的大量写入或简单地重叠对节点的读取和写入时间的情况下,节点的校验和可能不匹配由客户端计算出的校验和,直到任何特定的写入已经完成(参见2.5章节的基于RDMA的写入的讨论)。因此,在各种实现中,通过在执行节点读取和随后的校验和的计算和比较之前,经由RDMA读取检查节点的保留位来减少系统开销。在这样的实现中,重复保留位图的RDMA读取,直到节点的特定保留位示出节点空闲,此时,经由RDMA读取来读取节点。
2.5对键值存储库的基于RDMA的写入:
每当任何客户端想要写入特定节点时,客户端首先保留该节点。一旦节点成功保留,只有保留客户端可以写入该节点,直到保留被释放。因此,该保留可以确保在两个或更多个客户端尝试向同一节点并发写入时不会发生任何写入冲突。通常,保留是针对正在写入的整个节点。然而,如下面进一步详细讨论的,通过键值管理器的各种实现,也启用对整个分支的较大保留以及对节点中的各个条目的较小保留。
在各种实现中,写入过程通过确定将要执行写入的键值存储库的节点的地址来开始操作。该地址可以从在要写入一个或多个键值/指针对的特定节点内提供地址的某个进程或应用中获得,或者通过执行基于RDMA的B树读取以获得适当的地址来获得。例如,根节点中的每个键值/指针对提供到单独的子节点(例如,分支或叶节点,取决于树的深度)的映射表。因此,通过从根节点中选择特定键范围,然后从键值存储库的分布式存储器中顺序读取子节点地址,键值管理器将树遍历到一个叶节点,在该节点处执行RDMA写入以将新值的键和地址(即键值/指针对)插入到由键值存储库提供的映射表中。
这些基于RDMA的写入被保护以确保键值存储库的一致性。例如,给定要写入的节点的地址,键值管理器对前述节点保留位图执行RDMA CAS操作以翻转与该特定节点相关联的位,以指示该节点被保留用于写入(例如,如果空闲则为“0”,如果保留则为“1”)。如果CAS操作不成功,则表示该节点已经被保留用于由其他客户端写入。在这种情况下,客户端只需简单地重复RDMA CAS操作,直到CAS操作成功,从而保留节点用于由客户端写入。
在成功保留节点之后,客户端执行节点的RDMA读取以获得节点的当前键值/指针对,并且可选地获取元数据中的相应校验和。给定要写入节点的一个或多个新的键值/指针对条目,然后,键值管理器根据节点中没有改变的所有现有的键值/指针对的和正在写入的所有新的键值/指针对的组合来计算新的校验和。整个节点可以被写入作为单个基于RDMA的写入操作。因此,任何节点中的一个或多个条目可以被单个RDMA写入替换。换言之,执行单个RDMA写入以利用节点中没有被改变的所有现有的键值/指针对和所有新的键值/指针对以及元数据中的新的校验和来写入整个节点。一旦该写入完成,键值管理器通过对与该节点相关联的保留位执行RDMA CAS操作或RDMA写入以将该位翻转以指示该节点不再被保留来释放该节点的保留。
在各种实现中,无论何时要执行节点写入,键值管理器添加可选的错误检查步骤,以在写入该节点之前确认节点完整性。例如,在对节点进行初始RDMA读取之后,键值管理器根据节点中的现有的键值/指针对来计算校验和。只要计算出的校验和与元数据中的原始校验和相匹配,则键值管理器继续进行包括新校验和在内的写入操作,如上所述。然而,如果计算出的校验和与元数据中的校验和不匹配,则表明节点中存在一个或多个坏的或损坏的条目,或者仅仅表明可能由于某种原因而发生了存储器错误。在这种情况下,键值管理器或者从有效副本中恢复节点,并且重新开始写入过程,或者在上述放置库中将该节点标记为坏的,并且然后移动到现在是主节点的副本,并且然后重新开始写入过程。
2.5.1保留注意事项:
通常,键值管理器保留正在写入的整个节点。然而,在各种实现中,取决于特定键值存储库的特定用途和流量配置文件,键值管理器可以被配置为保留由多个节点组成的较大路径。然而,通过只保留正在写入的节点,通常可以提高读取和写入效率。此外,在各种实现中,键值管理器可以被配置为保留正在写入的节点的各个元素或条目,使得多个用户可以对同一节点执行并发写入。在这种情况下,不是在整个节点上提供校验和,而是为节点的每个元素使用单独的校验和。换言之,校验和是最大保留大小。因此,为了保留比整个节点更小的元素,将会有更多的校验和。该配置可以取决于特定的工作负载和流量模式提供性能改进。
换言之,取决于工作负载和网络流量,键值管理器可以被配置为保留:1)整个分支和所有子分支和叶节点,从根节点向下的任何地方;2)整个节点;或3)单个节点的单个元素。在每种情况下,校验和对应于特定的保留级别。然而,给定单个节点的相对较小的大小,对节点的各个元素的基于RDMA的写入与写入整个节点相比不会花费更多时间(如果有的话)。因此,就延迟而言,与保留整个节点相比,保留单个节点元素通常没有多大好处。然而,是否观察到延迟益处将取决于特定的工作负载(例如,正在对特定叶节点执行多少个并发写入)。例如,如果在节点的各个元素之间存在大致均匀分布的高争用,则相对于保留整个节点,为这些单独元素提供保留通常会而降低整个系统的延迟。
2.5.2解决潜在写入故障案例:
与任何计算系统一样,在任何客户端对键值存储库的任何节点的写入操作期间可能发生各种故障。例如,在保留特定节点之后并且在执行成功写入之前,执行写入的客户端可能由于某种原因而离线,并且因此无法移除该节点的保留位或标志。类似地,在保留特定节点并且成功写入该节点之后,执行写入的客户端可能由于某种原因而离线,并且因此无法移除该节点的保留位或标志。有利的是,在任何一种情况下,如果根本没有执行写入操作,或者如果写入已经完成而没有清除保留位,则该节点的校验和将是正确的。因此,无论写入是否在保留之后执行,校验和都会指示节点中的数据是否有效。
因此,为了解决由于任何原因而未被释放的节点保留的问题,在各种实现中,键值管理器假定键值存储库正在适当地操作,但是也对可以保留任何特定节点的时间长度施加最大限度(例如,时间t)。例如,考虑以下场景,即服务器A想要写入经由保留位图而被保留的节点n(托管在服务器B上),而最初保留节点n的服务器C由于某种原因而在写入节点n之前或之后但是在释放保留之前脱机。在这种情况下,服务器A将等待预定时间t以释放保留。如果在该时间段到期后不再释放保留,则服务器A向服务器B发送RPC消息以通知服务器B其为节点n托管的存储器已经被保留太久,要求释放该保留。假定节点n的保留位图由服务器B本地托管,则服务器B然后可以经由内部DMA CAS操作翻转保留位,以释放用于节点n的保留。或者,键值管理器可以通过向托管所讨论的存储器的服务器发送RPC消息来获取所有保留,并且然后主机可以在超时期限之后释放保留。
此外,在由于某种原因而在节点中出现某种存储器损坏的情况下,元数据校验和将不再与计算出的校验和相匹配,从而指示节点中不正确的、错误的或以其他方式损坏的数据。在这种情况下,如上所述,键值管理器可以或者从该节点的有效副本中恢复损坏的节点,或者将该节点标记为坏的并且然后移动到有效副本用于将来读取和写入。
2.6可选的基于RDMA的存储器分配:
保持键值存储库的存储器使用任何期望的存储器管理技术跨越多个计算设备被管理和分布。然而,在各种实现中,该存储器由键值管理器的可选的基于RDMA的存储器分配器组件进行管理(例如,参见图2,基于RDMA的存储器分配器API模块(285、290),并且参见图5和6,下面讨论)。以下段落描述了该可选的基于RDMA的存储器分配过程。
通常,网络中的多个服务器托管被保留用于由键值管理器使用的共享分布式存储器的一个或多个存储器区域。保留这些存储器区域用于由键值管理器使用确保了网络中的服务器或在这些服务器上执行的其他进程不会写入保留的存储器的存储器区域,除了经由键值管理器,从而避免了由键值管理器管理的存储器的冲突或损坏。任何特定服务器上的保留的存储器然后仅由键值管理器响应于服务器的NIC接收的、为了对键值存储库的读取和写入的目的RDMA消息经由该服务器的NIC对该存储器的DMA读取、写入和CAS操作来访问。
通常,每个存储器区域被定义为被保留用于由键值管理器使用的存储器的连续部分。在各种实现中,使用2GB的存储器区域大小,其中这些区域中的一个或多个被保留在任何联网的服务器上。然而,基于本文中描述的技术可以使用任何期望大小的存储器区域。这些保留的存储器区域可以由RDMA激活的NIC响应于每个服务器的RDMA激活的NIC传输和接收的RDMA读取、写入和CAS操作来直接寻址(经由DMA操作)。
此外,每个单独的存储器区域包含以块头部和空闲板图的形式为元数据保留的一部分存储器(例如,一个或多个存储器块)。在各种实现中,块头部区域的大小和空闲板图的大小可以与每个区域被划分成的块的大小相同。然而,不要求块头部与空闲板图大小相同,或者它们的大小与同一存储器区域中的块大小相同。另外,取决于存储器区域大小以及块头部和空闲板图中的元数据量,多个块头部分和多个空闲板图可以被包括在任何特定存储器区域中。
在各种实现中,块头部的元数据包括信息,包括但不限于关于特定存储器区域中的每个块是空闲还是分配的指示、每个分配的块的块大小、以及在存储器区域的每个分配的块中的分配的板的数目的计数(或者空闲板的数目的计数)。在各种实现中,这些块头部中的元数据还包含用于B树的节点的上述保留位图的本地托管的实例,其中每个单独节点可以对应于存储器区域的特定块中的特定板。然而,可选地,保留位图可以托管在任何分配的存储器中,并且不需要被包括在块头部的元数据中。空闲板图包括元数据,包括但不限于位图或其他元数据,以指示特定存储器区域的每个存储器块中的每个单独板是空闲的还被分配(例如,如果空闲则为“0”,如果使用或分配给任何特定板则为“1”)。
在各种实现中,每个存储器区域的其余部分(除了元数据部分之外)由基于RDMA的存储器分配器API的块分配器被分成相等大小的块。然而,取决于系统配置,不同存储器区域中的块大小可以与其他存储器区域的块大小不同。类似地,在各种实现中,每个存储器块由基于RDMA的存储器分配器API的板分配器被分成相等大小的存储器板。但是,取决于系统配置,不同块中的板大小可以与其他块的板大小不同。
通常,基于RDMA的存储器分配器API的块分配器组件为元数据保留其存储器区域中的两个或更多个第一块。作为至少一个块的第一组块包含整个存储器区域的所有块头部。这些块头部包含在分配器中执行无锁操作所需要的所有共享信息。下一组块是存储器区域中所有可分配块的空闲板图。用于该元数据的块的数量基于块的数目、块大小和块中的最大板数。换言之,存储器块是由基于RDMA的存储器分配器API的块分配器组件从存储器区域分配的。
每个块分配器负责分配来自特定区域内的块。块分配器还负责设置块的大小,并且在块中不再使用板时将块标记为未使用(经由与该块关联的块头部)。在各种实现中,块分配器应用“最佳拟合”分配策略来在下一适当大小的板和/或块中查找空间。这导致内部碎片增加与系统延迟之间的折衷。
这些块分配器根据基于RDMA的存储器分配器API的需要被实例化,并且设置从存储器区域分配的块的大小。在各种实现中,块大小被设置为1MB。但是,并不要求块具有任何特定大小,并且因此,块大小可以是任何期望大小直到存储器区域的整个大小(少于为元数据保留的存储器区域的部分)。
类似地,存储器板由基于RDMA的存储器分配器API的板分配器组件从存储器块分配。这些板分配器根据与特定存储器区域相关联的任何块分配器的需要被实例化。一般来说,板是分配器中的最小单元,并且它是任何客户端可以分配用于存储器读取和写入的实际单个分配单元。如上所述,不同块之间的板的大小可以不同,但是在单个块内通常具有相同大小。
例如,在各种实现中,可能的板大小被设置为在一个字节与一个兆字节之间的任何大小,或者不管最大块大小已经被设置为多少,中间大小以2的幂增加(例如,2个字节、4个字节、8个字节、16个字节、32个字节、64个字节、128个字节、256个字节等)。在单独的块中分配相同大小的板使得通过基于块中的板技术确定补偿来计算到分配的板的引用变得简单。然而,通过在空闲板图或块头部中包括附加元数据以允许确定对保留板的引用,可以在块内将板设置为任何希望大小。此外,在各种实现中,板大小被设置为等于或小于单个RDMA写入的最大写入大小的值,这使得整个节点(包括单个板)能够被写入单个RDMA写入。
图5示出了划分成包括用于由键值管理器使用的块头部的元数据部分的区域的示例性分布式存储器结构。例如,如图5所示,可选的基于RDMA的存储器分配器API模块285根据需要实例化一个或多个块分配器500和板分配器。如上所述,块分配器500从存储器的连续区域分配存储器块。此外,块分配器500不需要驻留在它们正在为其分配块的计算设备上。类似地,板分配器505在块分配器500需要时被实例化,用于分配各个存储器块的存储器板。如块分配器500一样,板分配器505不需要驻留在它们正在为其分配板的计算设备上。
此外,如图5所示,可选的基于RDMA的存储器分配器API模块285驻留在一个或多个联网的计算设备或服务器(510、515和520)上。这些联网的计算设备或服务器(510、515和520)中的一个或多个托管被保留用于由键值管理器使用的、一个或多个存储器区域(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)。
图6示出了键值管理器的基于RDMA的存储器分配器API组件的可选的基于RDMA的存储器分配特征的各种实现。另外,虽然图6的系统图示出了键值管理器的各种实现的高级视图,但是图6并非旨在提供贯穿本文档而描述的键值管理器的每种可能实现的详尽或完整说明。另外,图6中的可以用折线或虚线表示的任何框之间的互连和框表示本文中描述的键值管理器的替代实现。此外,如本文中描述的这些替代实现中的任何或全部可以与贯穿本文档而描述的其他替代实现结合使用。
通常,如图6所示,由键值管理器的基于RDMA的存储器分配器API组件启用的存储器分配过程通过从客户端600接收605存储器分配(malloc)请求,以及确定用于该malloc请求的适当板大小的存储器大小来开始操作。该malloc的大小通常基于客户端的某个应用、进程、线程等对特定存储器量的请求。例如,在键值存储库的情况下,板大小通常设置为等于或小于可以经由单个RDMA写入而写入的最大大小,因此使得分配的板中的整个节点可以使用单个RDMA读取或写入操作来被读取或写入。基于RDMA的存储器分配器API然后选择610从其服务于客户端600的malloc请求的特定主机和/或存储器区域。响应于客户端malloc请求,基于RDMA的存储器分配器API执行615包含该存储器区域的块头部的所选择的存储器区域的部分的RDMA读取。然后,基于RDMA的存储器分配器API评估620这些块头部以确定主机的存储器区域是否包含适当大小的存储器板的任何分配的块(例如,大小适合于预期的malloc请求的板)。
假定适当大小的存储器板在所选择的存储器区域的一个或多个块中可用,则基于RDMA的存储器分配器API然后对具有合适大小的板的那些块中的所选择的块(称为“适当块”)的块头执行625RDMA CAS操作。该CAS操作用于更新适当块的块头部以指示在该块中正在使用附加板。换言之,适当块中的空闲板的计数经由对块头部的该RDMA CAS操作的成功完成630减1。在各种实现中,在对于所选择的存储器区域内的特定板大小存在多个适当块的情况下,特定适当块的选择基于各种选择方法,包括但不限于“最佳拟合”分配策略、随机选择、基于块地址顺序的选择等。
此外,一旦成功完成RDMA CAS以更新适当的块头以减少空闲板的数目,则基于RDMA的存储器分配器API然后执行635对所选择的存储器区域的空闲板图的RDMA读取。接下来,给定空闲板图,基于RDMA的存储器分配器API选择适当块中的一个空闲板,并且对空闲板图执行640 RDMA CAS操作以更新空闲板图以将所选择的板示出为被分配(例如,在空闲板图中将0改为1以指示所选择的空闲板现在是分配的板)。换言之,如果成功645,则对空闲板图的该CAS操作通过更新空闲板图中的相应条目来保留适当块的所选择的空闲板。响应于经由CAS消息的板的成功645预留,基于RDMA的存储器分配器API计算650对分配的板的引用并且将该引用提供给客户端600,从而完成malloc请求。
如上所述,客户端评估620经由所选择的主机的块头部的RDMA读取615而接收的块头部,以确定主机是否包含适当大小的存储器板的任何块。在主机的一个或多个块中不存在适当大小的存储器板的情况下,客户端进一步评估655这些块头部以确定主机是否保持任何空闲或未分配块(例如,对于特定的板大小尚未被保留的存储器块,表示该块尚未被分成板,并且因此可用于分配)。在这种情况下,假定主机包含一个或多个空闲块,则客户端对所选择的一个空闲块的块头部执行660RDMA CAS操作以保留或分配该块。如果成功665,则该CAS操作通过更新相应块头部中的元数据来指定用于该块的板大小并且将该块中的自由板的数目减1来将为适当的板大小配置所选择的空闲块。一旦已经为适当的板大小配置该先前的空闲块,则基于RDMA的存储器分配器API然后继续进行以经由执行635对空闲板图的RDMA读取、对空闲板图执行640 RDMA CAS操作并且计算650和向客户端600提供相应的引用以完成malloc请求的上述序列来保留新配置的块中的一个板。
如上所述,在评估620以确定主机是否包含适当大小的板的块之后,基于RDMA的存储器分配器API对所选择的适当块的块头部执行625CAS操作。然而,如果该CAS操作由于某种原因(例如,某些其他客户端经由malloc请求进行预先保留)而不成功630,则在各种实现中,基于RDMA的存储器分配器API通过为malloc请求选择610a新主机来重新开始malloc过程。但是,响应于相同或其他客户端的请求,存储器通常在主机中以相对较高的频率分配。因此,在各种实现中,基于RDMA的存储器分配器API不是选择610新的主机,而是通过对最初选择的存储器区域执行615块头的新的RDMA读取来在同一主机上重新开始原始malloc请求。在任一情况下,如图6所示,重新开始的malloc过程如上所述继续。
类似地,如果确定主机是否包含任何空闲或未分配块的评估655指示没有未分配块可用,则在各种实现中,基于RDMA的存储器分配器API通过为malloc请求选择610新的主机或者重复所选择的主机的存储器块头的RDMA读取的执行615来重新开始malloc过程。如图6所示,重新开始的malloc过程然后如上所述继续。
类似地,如上所述,在各种情况下,基于RDMA的存储器分配器API对所选择的一个空闲块的块头部执行660 RDMA CAS操作以保留或分配该块。但是,如果该CAS操作由于某种原因(例如,某些其他客户端经由malloc请求预先保留)而不成功665,则在各种实现中,基于RDMA的存储器分配器API通过为malloc请求选择610新的主机或者重复所选择的主机的存储器块头部的RDMA读取的操作615来重新开始malloc过程。如图6所示,重新开始的malloc过程然后如上所述继续。
2.7分布式存储器分配注意事项:
如上所述,键值管理器的基于RDMA的存储器分配器API组件执行跨越网络而分布的共享存储器的分配。此外,对所分配的存储器的引用被提供给客户端用于在对所分配的存储器板的读取和写入时使用。以下段落讨论用以应用基于RDMA的存储器分配器API来仅基于RDMA消息传递来执行存储器分配的各种实现的一些注意事项。下面在2.8章节中提供使用RDMA和RPC组合进行存储器分配的讨论。
在各种实现中,基于RDMA的存储器分配器API在若干约束下运行,其中没有一个约束是强制的,以便简化总体系统配置并且减少用于执行存储器分配的带宽和延迟。例如,在各种实现中,基于RDMA的存储器分配器API强制在任何特定网络上的键值管理器的初始设置期间指定的最大分配大小(例如,2GB存储器区域、1MB块等)。
在各种实现中,基于RDMA的存储器分配器API使用预定的或静态的开销来进行分配。例如,考虑2GB存储器区域大小用于分配。在这种情况下,基于RDMA的存储器分配器API可以使用该存储器区域的静态量(例如,0.1GB)用于元数据,而剩余的量(例如,1.9GB)用于块分配。但是,在各种实现中,基于RDMA的存储器分配器API基于区域的大小、块大小以及每个块中的块的数目和大小来为元数据应用可变开销大小。
在各种实现中的附加约束是,一旦存储器已经被保留,该存储器就不被移动。这可以确保分配的存储器可以经由RDMA读取和写入可访问。此外,在各种实现中,基于RDMA的存储器分配器API不使用任何种类的阻止代码(例如,关键部分,等待单个对象等),因为基础内核代码将引入比RDMA读取、写入或CAS操作更大的延迟。但是,即使延迟可以增加,使用阻止代码也可以应用于基于RDMA的存储器分配器API的各种实现中以解决特定应用的特定网络考虑事项。
以下讨论总结了在由键值管理器的基于RDMA的存储器分配器API组件进行的示例性存储器分配期间,两个联网的计算机(例如,“客户端”和“主机”)之间的通信。以下事件序列并不旨在描述或包括键值管理器的基于RDMA的存储器分配器API组件的所有各种实现,并且仅用于示例目的。
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的存储器分配器计算对分配的板的引用,并且将该引用提供给客户端以完成malloc操作。
2.8使用基于RDMA的RPC消息:
如上所述,在各种实现中,键值管理器组合RDMA消息传递和远程过程调用(RPC)请求以提供对键值存储库的读取和写入并且可选地提供对跨越基于RDMA的网络中的多个服务器而分布的共享存储器的快速无锁存储器分配。在这种情况下,客户端和主机服务器的CPU仅在执行由在客户端与主机服务器之间经由基于RDMA的消息传递而传输的RPC请求指定的读取、写入或存储器分配请求时才会涉及。
例如,在各种实现中,在任何联网的服务器上执行的应用、进程或线程做出被键值管理器API拦截的读取、写入或malloc请求。该服务器的键值管理器API然后应用RDMA写入来向另一服务器(可能是相同或不同的服务器)的存储器缓冲区输入RPC读取、写入或malloc请求。接收服务器上的一个或多个本地线程然后监测该缓冲区以接收RPC malloc请求。
响应于该基于RPC的请求的接收,接收服务器的CPU(而不是在基于RDMA的请求的情况下的NIC)对保留的存储器执行RDMA读取、写入和CAS操作的相同序列以对键值存储库执行读取和写入操作并且执行可选的无锁存储器分配。响应于节点读取,接收服务器然后通过将该节点的内容的RDMA写入到请求服务器的存储器缓冲区来将该节点的内容发送到请求服务器。请求服务器上的一个或多个本地线程监测该服务器的缓冲区以接收节点内容。类似地,响应于malloc请求,接收服务器通过将对新分配的存储器的地址的引用的RDMA写入请求服务器的存储器缓冲区来将该引用发送到请求服务器。请求服务器上的一个或多个本地线程监测该服务器的缓冲区以接收存储器引用。
经由RDMA发送RPC消息的开销和延迟高于本文中描述的仅依赖于RDMA消息传递的技术。但是,该过程的优点之一是CPU响应于接收RPC消息而执行的读取、写入和CAS操作通常比NIC响应于接收RDMA消息而执行的读取、写入和CAS操作要快得多。
2.9跨越多个服务器复制节点:
在各种实现中,键值管理器可选地跨越一个或多个附加服务器复制单独节点或整个B树,以在出于任何原因而发生特定服务器上的数据损坏或特定服务器的丢失的情况下提供数据冗余。类似地,分配的存储器板、块或整个存储器区域也可以被复制。在最简单的情况下,整个存储器区域被复制。
例如,当复制分配的存储器的状态时,首先使用本文中描述的基于RDMA的技术将该存储器分配给主要位置。一旦存储器已经在主节点上被分配,键值管理器可选地将每个相应的存储器区域复制到一个或多个副本(在同一或不同的服务器上)。因此,如果没有正在进行的分配,则每个副本将与主节点相同。
通常,在各种实现中,由键值管理器执行的可选复制过程被实现为由键值管理器API的基于RDMA的存储器分配器API组件执行的分配过程的简化版本,如如上所述。然而,可以由键值管理器应用用于复制存储器的任何已知技术。
例如,在分配的情况下,一旦特定的块和板已经被分配给主节点,键值管理器API准确知道哪个块和板已经被分配到特定的存储器区域中。因此,在该分配已经完成之后,键值管理器API通过执行以下描述的步骤来应用上述基于RDMA的技术来创建每个副本(其应当鉴于前面关于基于RDMA的存储器分配的详细描述来理解)。但是,如上所述,在任何存储器已经由键值管理器分配之后,可以应用用于复制存储器的任何已知技术来创建副本。假定使用本文中描述的基于RDMA的技术,经由以下步骤完成复制(对于主节点的每个副本):
1.应用RDMA CAS操作来更新副本存储器区域的适当块头部中的空闲板的数目;
2.应用RDMA CAS操作来将适当的板标记为在副本的空闲板图中使用;以及
3.将对主节点上的分配的板的任何写入传播到每个副本。在各种实现中,在执行对副本的节点的写入之前,如上所述验证主节点的校验和。
3.0键值管理器的操作概述:
以上关于图1至图6描述并且进一步鉴于上面在章节1和2中提供的详细描述而描述的过程由图7至图9的总体操作流程图示出。特别地,图7至图9提供了概述键值管理器的各种实现中的一些的操作的示例性操作流程图。图7至图9并非旨在提供本文中描述的键值管理器的所有各种实现的详尽表示,并且这些图中表示的实现被提供仅用于解释的目的。
此外,图7至图9中可以由折线或虚线表示的任何框之间的互连和框表示本文中描述的键值管理器的可选或替代实现,并且如下所述的这些可选或替代实现中的任何或全部可以与贯穿本文中描述的其他替代实现结合使用。
通常,如图7所示,在各种实现中,键值管理器通过提供(700)经由RDMA激活的NIC来通信的多个联网的计算设备来开始操作。另外,键值管理器提供(710)动态的基于B树的键值存储库,其包括跨越两个或更多个用作主机的联网的计算设备而分布的节点。这些节点中的每个进一步包括多个键值/指针对。另外,键值管理器使得用作客户端的多个联网计算设备中的任何一个能够并发执行(720)键值存储库的自主无锁读取。此外,键值管理器使得用作客户端的多个联网计算设备中的任何一个能够并发执行(730)对键值存储库的特定存储器位置的自主无锁写入。最后,经由基于RDMA的CAS操作的组合来执行每个无锁写入(740)以保留特定存储器位置,随后是对该保留的存储器位置的基于RDMA的写入。
类似地,如图8所示,在各种实现中,键值管理器通过提供(800)跨越经由RDMA激活的NIC进行通信的两个或更多个联网的计算设备而分布的共享存储器来开始操作。此外,键值管理器遍布整个共享存储器来分布(810)动态的基于B树的键值存储库的节点。这些节点中的每个进一步包括多个键值/指针对。键值管理器使得多个联网的计算设备中的任何联网的计算设备能够执行(820)键值存储库的特定节点的并发自主无锁读取。另外,键值管理器使得多个联网计算设备中的任何联网的计算设备能够执行(830)对键值存储库的特定节点的并发自主无锁写入。最后,通过以下方式来执行(840)每个无锁写入:应用对节点保留位图中的相应条目的RDMA CAS操作以保留键值存储库的特定节点,应用对特定节点的RDMA写入,以及应用对节点保留位图中的相应条目的RDMA CAS操作以释放对特定节点的保留。
类似地,如图9所示,在各种实现中,键值管理器通过应用(900)基于RDMA的存储器分配器来分配共享分布式存储器以用于跨越经由RDMA激活的NIC进行通信的多个联网的计算设备托管动态的基于B树的键值存储库来开始操作。此外,键值存储库的每个节点包括(910)多个键值/指针对和从节点的每个键值/指针对计算出的元数据校验和值。另外,键值管理器使得多个联网的计算设备中的任何联网的计算设备能够执行(920)键值存储库的特定节点的并发自主RDMA读取。结合地,键值管理器使得多个联网的计算设备中的任何联网的计算设备能够在对节点保留位图中的相应条目应用RDMA CAS操作以保留键值存储库的特定节点之后执行(930)对键值存储库的特定节点的并发自主RDMA写入。最后,键值管理器在RDMA写入完成之后对节点保留位图中的相应条目应用(940)RDMA CAS操作以释放对特定节点的保留。
4.0键值管理器的示例性实现:
以下段落概述可以在本文档中要求保护的实现的各种示例。以下概述的实现并非旨在鉴于键值管理器的详细描述来限制可与要求保护的主题。此外,下面概述的任何或全部实现可以以与在整个详细描述中描述的一些或全部实现以及在一个或多个附图中示出的任何实现以及下面描述的任何其他实现和示例的任何期望的组合来要求保护。鉴于贯穿本文档而描述的详细描述和附图,意图理解以下实现和示例。
在各种实现中,键值管理器结合基于RDMA的存储器分配器来应用RDMA消息传递以实现分布式且无锁的基于B树的键值存储库。在各种实现中,键值管理器被实现为在大量联网计算设备上并发运行的独立库。键值管理器的基于RDMA的存储器分配器经由各种RDMA消息序列(例如,RDMA读取、RDMA写入和RDMA原子比较和交换(CAS)操作)分配和访问键值存储库的存储器。就这一点而言,托管键值存储库的存储器的计算设备的CPU不需要被通知或涉及对该存储器的基于RDMA的读取和写入。因此,托管键值存储库的任何部分的任何计算设备的CPU利用率是最小的,从而使得键值管理器能够缩放到非常大量的计算设备的大量的并发访问。
作为第一示例,在各种实现中,一种动态的基于B树的键值存储库系统经由用于提供经由用RDMA激活的NIC进行通信的多个联网的计算设备的装置、过程或技术来实现。动态的基于B树的键值存储库包括跨越两个或更多个联网计算设备而分布的节点,每个节点进一步包括多个键值/指针对。另外,多个联网的计算设备并发执行键值存储库的自主无锁读取。此外,多个联网的计算设备并发执行对键值存储库的特定存储器位置的自主无锁写入。在各种实现中,这些无锁写入中的每个经由基于RDMA的CAS操作的组合来执行以保留特定存储器位置,然后是对该保留的存储器位置的基于RDMA的写入。
作为第二示例,在各种实现中,第一示例经由用于通过在执行对节点的基于RDMA的写入之前,对节点保留位图中的相应条目执行基于RDMA的CAS操作以保留键值存储库的特定节点来保留特定存储器位置的装置、过程或技术被进一步修改。
作为第三示例,在各种实现中,第一示例和第二示例中的任一个经由用于在执行对键值存储库的特定节点的特定元素的基于RDMA的写入之前,对节点保留位图中的相应条目执行基于RDMA的CAS操作以保留元素的装置、过程或技术被进一步修改。
作为第四示例,在各种实现中,第一示例、第二示例和第三示例中的任一个经由用于在每个节点中包括元数据部分的装置、过程或技术被进一步修改,该元数据部分包括从节点的每个键值/指针对来计算出的校验和值。
作为第五示例,在各种实现中,第四示例经由用于执行节点读取的装置、过程或技术被进一步修改,节点读取从节点中的多个键值/指针对来计算校验和值,并且重复节点的读取,直到计算出的校验和值与节点的元数据中的校验和值相匹配。
作为第六示例,在各种实现中,第一示例、第二示例、第三示例、第四示例和第五示例中的任一者经由其中键值存储库的自主无锁读取是基于RDMA的读取的装置、过程或技术被进一步修改。
作为第七示例,在各种实现中,第一示例、第二示例、第三示例、第四示例、第五示例和第六示例中的任一者经由用于每当创建父节点时为父节点的叶节点分配存储器并且使用到叶节点的分配的存储器的键值/指针对来自动填充父节点的装置、过程或技术被进一步修改。
作为第八示例,在各种实现中,第一示例、第二示例、第三示例、第四示例、第五示例、第六示例和第七示例中的任一者经由用于应用基于RDMA的分布式存储器分配器来为每个节点分配存储器的装置、过程或技术被进一步修改。
作为第九示例,在各种实现中,第一示例、第二示例、第三示例、第四示例、第五示例、第六示例、第七示例和第八示例中的任一者经由用于应用任何联网的计算设备以并发用作为键值存储库的一部分节点分配的存储器的主机和用于执行分布在任何联网的计算设备上的节点的无锁读取和写入的任何组合的客户端的任何组合的装置、过程或技术被进一步修改。
作为第十示例,在各种实现中,一种计算机实现的过程经由用于跨越经由RDMA激活的NIC进行通信的两个或更多个联网的计算设备分布共享存储器的装置、过程或技术来实现。在各种实现中,动态的基于B树的键值存储库的节点遍布共享存储器分布,每个节点进一步包括多个键值/指针对。在各种实现中,应用多个联网的计算设备中的任何联网的计算设备来执行键值存储库的特定节点的并发自主无锁读取。此外,多个联网计算设备中的任何联网的计算设备被应用于以对键值存储库的特定节点执行并发自主无锁写入。在各种实现中,通过以下方式来执行每个无锁写入:应用对节点保留位图中的相应条目的RDMACAS操作以保留键值存储库的特定节点,应用对特定节点的RDMA写入,并且应用对节点保留位图中的相应条目的RDMA CAS操作以释放对特定节点的保留。
作为第十一示例,在各种实现中,第十示例经由其中每个节点进一步包括元数据部分的装置、过程或技术被进一步修改,该元数据部分包括从节点的每个键值/指针对计算出的校验和值。
作为第十二示例,在各种实现中,第十示例和第十一示例中的任一者经由用于通过从节点的键值/指针对来计算校验和值并且重复节点的读取直到计算出的校验和值与节点的元数据中的校验和值相匹配来执行任何节点的任何读取的装置、过程或技术被进一步修改。
作为第十三示例,在各种实现中,第十示例、第十一示例和第十二示例中的任一者经由用于执行对键值存储库的自主无锁读取是RDMA读取的装置、过程或技术被进一步修改。
作为第十四示例,在各种实现中,第十示例、第十一示例、第十二示例和第十三示例中的任一者经由用于每当创建父节点时为父节点的多个叶节点中的每个叶节点自动分配存储器并且使用到叶节点的分配的存储器的键值/指针对来自动填充父节点的装置、过程或技术被进一步修改。
作为第十五示例,在各种实现中,第十示例、第十一示例、第十二示例、第十三示例和第十四示例中的任一者经由用于在执行对由任何联网的计算设备托管的共享存储器的任何部分的读取和写入的任何组合的同时应用任何联网计算设备以并发托管共享存储器的一部分的装置、过程或技术被进一步修改。
作为第十六示例,一种具有计算机可执行指令的计算机可读存储设备通过引起计算设备经由用于应用基于RDMA的存储器分配器来分配共享分布式存储器以在经由RDMA激活的NIC进行通信的多个联网的计算设备上托管动态的基于B树的键值存储库的装置、过程或技术来执行方法来实现。在各种实现中,键值存储库的每个节点包括多个键值/指针对和从节点的每个键值/指针对来计算出的元数据校验和值。此外,在各种实现中,应用多个联网的计算设备中的任何多个联网的计算设备来执行键值存储库的特定节点的并发自主RDMA读取。此外,在各种实现中,在对节点保留位图中的相应条目的RDMA CAS操作的应用之后,应用多个联网计算设备中的任何多个联网的计算设备来执行到键值存储库的特定节点的并发自主RDMA写入以保留键值存储库的特定节点。此外,在各种实现中,在RDMA写入完成之后,应用对节点保留位图中的相应条目的RDMA CAS操作以释放对特定节点的保留。
作为第十七示例,在各种实现中,第十六示例经由用于通过从节点的键值/指针对来计算校验和值,并且重复节点的读取直到计算出的校验和值与节点的元数据中的校验和值相匹配来执行任何节点的任何RDMA读取的装置、过程或技术被进一步修改。
作为第十八示例,在各种实现中,第十六示例和第十七示例中的任一者经由用于通过比较在保留之后从节点中的多个键值/指针对的值计算出的校验和并且如果计算出的校验和与元数据校验和不匹配则将节点标记为“坏”并且执行到节点的副本的写入来执行对任何节点的任何RDMA写入的装置、过程或技术被进一步修改。
作为第十九示例,在各种实现中,第十六示例、第十七示例和第十八示例中的任一者经由用于每当创建父节点时为父节点的多个叶节点中的每个叶节点自动分配存储器并且使用到叶节点的分配的存储器的键值/指针对来自动填充父节点的装置、过程或技术来被一步修改。
作为第二十示例,在各种实现中,第十六示例、第十七示例、第十八示例和第十九示例中的任一者经由用于在执行对由任何联网计算设备托管的共享分布式存储器的任何部分的RDMA读取和RDMA写入的任何组合的的同时应用任何联网计算设备以并发托管共享分布式存储器的一部分的装置、过程或技术被进一步修改。
5.0示例性操作环境:
本文中描述的键值管理器实现在很多类型的通用或专用计算系统环境或配置内操作。图10示出了其上可以实现如本文中描述的键值管理器的各种实现和元件的总体计算机系统的简化示例。在图10中所示的简化计算设备1000中由折线或虚线表示的任何框表示简化计算设备的替代实现。如下所述,这些替代实现中的任何或全部可以与贯穿本文档而描述的其他替代实现结合使用。
简化的计算设备1000典型地存在于具有至少一些最小计算能力的设备中,诸如个人计算机(PC)、服务器计算机、手持计算设备、膝上型或移动计算机、诸如蜂窝电话和个人数字助理(PDA)等通信设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络PC、小型计算机、大型计算机以及音频或视频媒体播放器。
为了允许设备实现本文中描述的键值管理器实现,设备应当具有足够的计算能力和系统存储器以实现基本的计算操作。特别地,图10所示的简化计算设备1000的计算能力通常由一个或多个处理单元1010来示出,并且还可以包括与系统存储器1020通信的一个或多个图形处理单元(GPU)1015。简化计算设备1000的处理单元1010可以是专用微处理器(诸如数字信号处理器(DSP)、超长指令字(VLIW)处理器、现场可编程门阵列(FPGA)或其他微控制器),或者可以是传统中央处理单元(CPU),其具有一个或多个处理核并且还可以包括多核处理器中的一个或多个基于GPU的核或其他特定用途核。
另外,简化计算设备1000还可以包括其他组件,诸如例如网络接口控制器1030。简化计算设备1000还可以包括一个或多个传统计算机输入设备1040(例如,触摸屏、触敏表面、指示设备、键盘、音频输入设备、基于声音或语音的输入和控制设备、视频输入设备、触觉输入设备、用于接收有线或无线数据传输的设备等)或这样的设备的任何组合。
类似地,与简化计算设备1000以及与键值管理器的任何其他组件或特征的各种交互(包括输入、输出、控制、反馈以及对与键值管理器相关联的一个或多个用户或其他设备或系统的响应)可以通过各种自然用户界面(NUI)场景来启用。由键值管理器启用的NUI技术和场景包括但不限于允许一个或多个用户以“自然”方式与键值管理器进行交互而不受由诸如鼠标、键盘、遥控器等输入设备施加的人为限制的接口技术。
这样的NUI实现通过使用各种技术来实现,包括但不限于使用从经由麦克风或其他输入设备1040或系统传感器1005捕获的用户语音或发声而获取的NUI信息。这样的NUI实现还通过使用各种技术来被启用,包括但不限于从系统传感器1005或其他输入设备1040根据用户的面部表情以及从用户的手、手指、手腕、手臂、腿、身体、头部、眼睛等等的位置、运动或取向而导出的信息,其中这样的信息可以使用各种类型的2D或深度成像设备来捕获,诸如立体或飞行时间相机系统、红外相机系统、RGB(红、绿和蓝)相机系统等、或这些设备的任何组合。
这样的NUI实现的其他示例包括但不限于从触摸和触笔识别、姿势识别(屏幕上和屏幕或显示表面附近)、空中或基于接触的姿势、用户触摸(在各种表面、对象或其他用户上)、基于悬停的输入或动作等导出的NUI信息。这样的NUI实现还可以包括但不限于使用各种预测性机器智能过程,其或者单独地或者与其他NUI信息组合来评估当前或过去的用户行为、输入、动作等,以预测诸如用户意图、愿望和/或目标等信息。无论基于NUI的信息的类型或来源如何,这些信息都可以用于发起、终止或以其他方式控制或与键值管理器的一个或多个输入、输出、动作或功能特征交互。
然而,通过将人为约束或附加信号的使用与NUI输入的任何组合进行组合,可以进一步增强前述示例性NUI场景。这种人为约束或附加信号可以通过诸如鼠标、键盘和遥控器等输入设备1040或者通过各种远程或用户佩戴的设备(诸如加速度计、用于接收代表由用户肌肉产生的电信号的肌电图(EMG)传感器、心率监测器、用于测量用户出汗的电流皮肤传导传感器、用于测量或以其他方式感测用户大脑活动或电场的可佩戴或远程生物传感器、用于测量用户体温变化或差异的可佩戴或远程生物传感器等)来施加或生成。从这些类型的人工约束或附加信号中导出的任何这样的信息可以与任何一个或多个NUI输入组合,以发起、终止或以其他方式控制或与键值管理器的一个或多个输入、输出、动作或功能特征交互。
简化计算设备1000还可以包括其他可选组件,诸如一个或多个传统计算机输出设备1050(例如,显示设备1055、音频输出设备、视频输出设备、用于传输有线或无线数据传输的设备等)。用于通用计算机的典型网络接口控制器(NIC)1030、输入设备1040、输出设备1050和存储设备1060对于本领域技术人员来说是公知的,在此不再详细描述。
图10中所示的简化计算设备10还可以包括各种计算机可读介质。计算机可读介质可以是计算设备1000可以经由存储设备1060访问的任何可用介质,并且包括用于存储诸如计算机可读或计算机可执行指令、数据结构、程序模块或其他数据的可移除1070和/或不可移除1080的易失性和非易失性介质。
计算机可读介质包括计算机存储介质和通信介质。计算机存储介质是指有形的计算机可读或机器可读介质或存储设备,诸如数字多功能盘(DVD)、蓝光盘(BD)、光盘(CD)、软盘、磁带驱动器、硬盘驱动器、光学驱动器、固态存储器设备、随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、CD-ROM或其他光盘存储器、智能卡、闪存(例如,卡、棒和钥匙驱动器)、磁带盒、磁带、磁盘存储器、磁条或其他磁存储设备。此外,传播的信号不包括在计算机可读存储介质的范围内。
诸如计算机可读或计算机可执行指令、数据结构、程序模块等信息的保留也可以通过使用多种前述通信介质(与计算机存储介质相对)中的任何一种对一个或多个调制数据信号或载波或其他传输机制或通信协议进行编码来实现,并且可以包括任何有线或无线信息或内容传送机制。术语“调制数据信号”或“载波”通常是指其一个或多个特性被设置或改变以便在信号中对信息进行编码的信号。例如,通信介质可以包括诸如携带一个或多个调制数据信号的有线网络或直接有线连接等有线介质、以及诸如声学、射频(RF)、红外、激光和其他无线介质等用于传输和/或接收一个或多个调制数据信号或载波的无线介质。
此外,实施本文中描述的各种键值管理器实现中的一些或全部或其部分的软件、程序和/或计算机程序产品可以从计算机可读或机器可读介质或存储设备以及计算机可执行指令或其他数据结构形式的通信介质的任何期望组合中存储、接收、传输或读取。另外,所要求保护的主题可以被实现为使用标准编程和/或工程技术来产生软件、固件1025、硬件或其任何组合以控制计算机实现所公开的主题的方法、装置或制造品。本文中使用的术语“制造品”旨在包含可从任何计算机可读设备或介质访问的计算机程序。
本文中描述的键值管理器实现可以在由计算设备执行的计算机可执行指令(诸如程序模块)的一般上下文中进一步描述。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。键值管理器实现也可以在其中任务由一个或多个远程处理设备执行的分布式计算环境中实施,或者在通过一个或多个通信网络链接的一个或多个设备的云内执行。在分布式计算环境中,程序模块可以位于包括介质存储设备的本地和远程计算机存储介质中。此外,上述指令可以部分或全部实现为硬件逻辑电路,其可以包括或不包括处理器。
替代地或另外地,本文中描述的功能可以至少部分由一个或多个硬件逻辑组件来执行。例如但不限于,可以使用的示例性类型的硬件逻辑组件包括现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、系统级芯片系统(SOC)、复杂可编程逻辑器件(CPLD)等。
6.0其他实现:
已经出于说明和描述的目的呈现了键值管理器的前述描述。并非旨在穷举或将所要求保护的主题限制为所公开的精确形式。鉴于上述教导,很多修改和变化是可能的。此外,可以以期望的任何组合来使用前述替代实现中的任何或全部,以形成键值管理器的附加混合实现。意图在于,键值管理器的范围不受该详细描述的限制,而是受到所附权利要求的限制。虽然已经用特定于结构特征和/或方法动作的语言描述了主题,但是应当理解,在所附权利要求中限定的主题不一定限于上述特定特征或动作。相反,上述特定特征和动作是被公开作为实施权利要求的示例形式,并且其他等同特征和动作旨在落入权利要求的范围内。
以上描述的内容包括示例实现。当然,不可能为了描述所要求保护的主题而描述组件或方法的每个可想到的组合,但是本领域普通技术人员可以认识到,很多进一步的组合和置换是可能的。因此,要求保护的主题旨在涵盖落入上述键值管理器的详细描述的精神和范围内的所有这些变更、修改和变化。
关于由上述组件、设备、电路、系统等执行的各种功能,用于描述这些组件的术语(包括对“装置”的引用)旨在对应于(除非另有指示)执行所描述的组件的指定功能的任何组件(例如,功能等效物),即使在结构上与所公开的结构不等同,其执行所要求保护的主题的本文中示出的示例性方面中的功能。就这一点而言,还将认识到,前述实现包括具有用于执行所要求保护的主题的各种方法的动作和/或事件的计算机可执行指令的系统和计算机可读存储介质。
有多种实现前述实现的方式(诸如适当的应用程序编程接口(API)、工具套件、驱动程序代码、操作系统、控制、独立或可下载的软件对象等),其使得应用和服务能够使用本文中描述的实现。所要求保护的主题从API(或其他软件对象)的观点以及根据本文中阐述的实现操作的软件或硬件对象的角度来考虑这种使用。因此,本文中描述的各种实现可以具有完全硬件,或部分硬件并且部分软件,或者完全软件的方面。
已经针对几个组件之间的交互描述了前述系统。应当理解,这样的系统和部件可以包括那些部件或指定的子部件、一些指定的部件或子部件、和/或附加的部件,并且根据上述各种排列和组合。子组件也可以被实现为通信地耦合到其他组件的组件,而不是被包括在父组件中(例如,分层组件)。
另外,可以将一个或多个组件组合成提供聚合功能的单一组件或将其分成若干分离的子组件,并且可提供任何一个或多个中间层(例如,管理层)以通信地耦合到这样的子组件以提供集成功能。本文中描述的任何组件还可以与本文中没有具体描述的一个或多个其他组件进行交互,但是通常已知这些组件能够实现这种交互。
Claims (20)
1.一种用于管理键值的系统,包括:
多个联网的计算设备,所述多个联网的计算设备经由远程直接存储器访问激活的网络接口控制器进行通信;
动态的基于B树的键值存储库,包括跨越所述联网的计算设备中的两个或更多个联网的计算设备而分布的节点,每个节点进一步包括多个键值/指针对;
所述联网的计算设备中并发执行所述键值存储库的自主无锁读取的多个联网计算设备;
所述联网的计算设备中的对所述键值存储库的特定存储器位置并发执行自主无锁写入的多个联网计算设备;以及
每个无锁写入通过以下方式经由基于远程直接存储器访问的比较和交换操作的组合对所述键值存储库的所述特定存储器位置中的一个特定存储器位置执行:通过经由所述远程直接存储器访问的比较和交换操作的组合来修改保留位图,然后是对所述保留的存储器位置的基于远程直接存储器访问的写入,以及在对所述保留的存储器位置的所述基于远程直接存储器访问写入的成功完成后,另一基于远程直接存储器访问的比较和交换操作进一步修改所述保留位图来指示所述保留存储器位置是可用的。
2.根据权利要求1所述的系统,其中保留所述特定存储器位置进一步包括在对所述键值存储库的特定节点执行所述基于远程直接存储器访问的写入之前对节点保留位图中的相应条目执行所述基于远程直接存储器访问的比较和交换操作以保留所述键值存储库的所述特定节点。
3.根据权利要求1所述的系统,其中保留所述特定存储器位置进一步包括在对所述键值存储库的特定节点的特定元素执行所述基于远程直接存储器访问的写入之前对节点保留位图中的相应条目执行所述基于远程直接存储器访问的比较和交换操作以保留所述键值存储库的所述特定节点的所述特定元素。
4.根据权利要求1所述的系统,其中每个节点进一步包括每个节点的元数据部分,所述元数据部分包括从所述节点的每个键值/指针对计算出的校验和值。
5.根据权利要求4所述的系统,其中任何节点的任何读取进一步包括:
从所述节点中的所述多个键值/指针对计算校验和值;以及
重复所述节点的所述读取,直到计算出的所述校验和值与所述节点的所述元数据中的校验和值相匹配。
6.根据权利要求1所述的系统,其中所述键值存储库的所述自主无锁读取是基于远程直接存储器访问的读取。
7.根据权利要求1所述的系统,进一步包括:
每当创建父节点时,为所述父节点的叶节点分配存储器;以及
将具有键值/指针的所述父节点填充到所述叶节点的分配的所述存储器。
8.根据权利要求7所述的系统,进一步包括应用基于远程直接存储器访问的分布式存储器分配器来为每个节点分配所述存储器。
9.根据权利要求1所述的系统,其中所述联网计算设备中的任何设备并发用作存储器主机和客户端的任何组合,所述存储器主机被分配用于所述键值存储库的所述节点的一部分,以及所述客户端用于执行分布在所述联网计算设备中的任何设备上的节点的无锁读取和写入的任何组合。
10.一种计算机实现的用于管理键值的方法,包括:
跨越经由远程直接存储器访问激活的网络接口控制器进行通信的两个或更多个联网计算设备而分布的共享存储器;
遍布所述共享存储器来分配动态的基于B树的键值存储库的节点,每个节点进一步包括多个键值/指针对;
应用多个所述联网的计算设备中的任何联网的计算设备来执行所述键值存储库的特定节点的并发自主无锁读取;
应用多个所述联网计算设备中的任何联网计算设备来对所述键值存储库的特定节点执行并发自主无锁写入;以及
每个无锁写入进一步包括:
应用远程直接存储器访问比较和交换操作来对节点保留位图中的相应条目进行修改,以保留所述键值存储库的特定节点;
对所述特定节点应用远程直接存储器访问写入;以及
在对所述特定节点的所述远程直接存储器访问写入的成功完成后,对所述节点保留位图中的所述相应条目应用远程直接存储器访问比较和交换操作以进一步对所述节点保留位图进行修改,以指示释放对所述特定节点的保留。
11.根据权利要求10所述的方法,其中每个节点进一步包括元数据部分,所述元数据部分包括从所述节点的每个键值/指针对计算出的校验和值。
12.根据权利要求11所述的方法,其中任何节点的任何读取进一步包括:
从所述节点的键值/指针对计算校验和值;以及
重复所述节点的所述读取,直到计算出的所述校验和值与所述节点的元数据中的校验和值相匹配。
13.根据权利要求10所述的方法,其中所述键值存储库的所述自主无锁读取是远程直接存储器访问读取。
14.根据权利要求10所述的方法,进一步包括:
应用基于远程直接存储器访问的存储器分配器以每当创建父节点时,为所述父节点的叶节点分配存储器;以及
将具有键值/指针的所述父节点自动地填充到所述叶节点的分配的所述存储器。
15.根据权利要求10所述的方法,其中所述联网的计算设备中的任何联网计算设备并发托管所述共享存储器的一部分,同时对由所述联网的计算设备中的任何联网计算设备托管的所述共享存储器的任何部分执行读取和写入的任何组合。
16.一种计算机可读存储设备,具有存储其中的计算机可执行指令,所述指令引起计算设备执行包括以下各项的方法:
应用基于远程直接存储器访问的存储器分配器来分配共享的分布式存储器以用于跨越经由远程直接存储器访问激活的网络接口控制器进行通信的多个联网的计算设备来托管动态的基于B树的键值存储库;
所述键值存储库的每个节点包括多个键值/指针对和从所述节点的所述键值/指针对中的每个键值/指针对计算出的元数据校验和值;
应用多个所述联网的计算设备中的任何联网的计算设备来执行所述键值存储库的特定节点的并发自主远程直接存储器访问读取;
在远程直接存储器访问比较和交换操作的应用来对节点保留位图中的相应条目进行修改以保留所述键值存储库的所述特定节点之后,应用所多个述联网计算设备中的任何联网计算设备来对所述键值存储库的特定节点执行并发自主远程直接存储器访问写入;以及
在对所述特定节点的所述远程直接存储器访问写入的成功完成后,应用对所述节点保留位图中的相应条目的远程直接存储器访问比较和交换操作以进一步对所述相应条目进行修改,以指示对所述特定节点的保留的释放。
17.根据权利要求16所述的计算机可读存储设备,其中任何节点的任何远程直接存储器访问读取进一步包括:
从所述节点中的所述多个键值/指针对计算校验和值;以及
重复所述节点的所述远程直接存储器访问读取,直到计算出的所述校验和值与所述节点的所述元数据中的校验和值相匹配。
18.根据权利要求16所述的计算机可读存储设备,其中到任何节点的任何远程直接存储器访问写入进一步包括:
比较在所述保留之后从所述节点中的所述多个键值/指针对的值计算出的校验和;以及
如果计算出的所述校验和与所述元数据校验和不匹配,则将所述节点标记为坏并且执行到所述节点的副本的写入。
19.根据权利要求16所述的计算机可读存储设备,进一步包括:
每当创建父节点时,为所述父节点的多个叶节点中的每个叶节点自动分配存储器;以及
将具有键值/指针的所述父节点填充到所述叶节点的分配的所述存储器。
20.根据权利要求16所述的计算机可读存储设备,其中所述联网的计算设备中的任何联网计算设备并发托管所述共享的分布式存储器的一部分,同时对由所述联网的计算设备中的任何联网计算设备托管的所述共享的分布式存储器的任何部分执行远程直接存储器访问读取和远程直接存储器访问写入的任何组合。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/882,357 | 2015-10-13 | ||
US14/882,357 US10713210B2 (en) | 2015-10-13 | 2015-10-13 | Distributed self-directed lock-free RDMA-based B-tree key-value manager |
PCT/US2016/056224 WO2017066110A1 (en) | 2015-10-13 | 2016-10-10 | Distributed self-directed rdma-based b-tree key-value manager |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108140009A CN108140009A (zh) | 2018-06-08 |
CN108140009B true CN108140009B (zh) | 2022-06-24 |
Family
ID=57200125
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680060341.5A Active CN108140009B (zh) | 2015-10-13 | 2016-10-10 | 分布式自主式基于rdma的b树键值管理器 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10713210B2 (zh) |
EP (1) | EP3362907A1 (zh) |
CN (1) | CN108140009B (zh) |
WO (1) | WO2017066110A1 (zh) |
Families Citing this family (33)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6579916B2 (ja) * | 2015-10-28 | 2019-09-25 | 株式会社日立製作所 | 仮想計算機間の通信経路制御方法および計算機システム |
CN105354315B (zh) * | 2015-11-11 | 2018-10-30 | 华为技术有限公司 | 分布式数据库中子表分裂的方法、子表节点和系统 |
US11314792B2 (en) | 2016-12-06 | 2022-04-26 | Sap Se | Digital assistant query intent recommendation generation |
CN107040582B (zh) * | 2017-02-17 | 2020-08-14 | 创新先进技术有限公司 | 一种数据处理方法及装置 |
US10402223B1 (en) * | 2017-04-26 | 2019-09-03 | Xilinx, Inc. | Scheduling hardware resources for offloading functions in a heterogeneous computing system |
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 |
US10346315B2 (en) | 2017-05-26 | 2019-07-09 | Oracle International Corporation | Latchless, non-blocking dynamically resizable segmented hash index |
CN107205033B (zh) * | 2017-06-02 | 2020-03-24 | 南京大学 | 以无锁方式共享rdma连接的方法 |
US10552607B2 (en) * | 2017-08-03 | 2020-02-04 | NexiTech, Inc. | Moving target defenses for data storage devices |
US10956335B2 (en) | 2017-09-29 | 2021-03-23 | Oracle International Corporation | Non-volatile cache access using RDMA |
CN110727675B (zh) * | 2018-07-17 | 2023-06-27 | 阿里巴巴集团控股有限公司 | 一种链表的处理方法及装置 |
US11061609B2 (en) * | 2018-08-02 | 2021-07-13 | MemVerge, Inc | Distributed memory object method and system enabling memory-speed data access in a distributed environment |
US11347678B2 (en) | 2018-08-06 | 2022-05-31 | Oracle International Corporation | One-sided reliable remote direct memory operations |
CN110888675B (zh) * | 2018-09-11 | 2021-04-06 | 深圳云天励飞技术有限公司 | 硬件系统和电子设备 |
CN109388371B (zh) * | 2018-09-26 | 2021-01-26 | 中兴飞流信息科技有限公司 | 一种数据的排序方法、系统、协处理装置和主处理装置 |
GB2579849B (en) * | 2018-12-18 | 2021-08-25 | Advanced Risc Mach Ltd | Integrity tree for memory integrity checking |
CN109684307B (zh) | 2018-12-26 | 2021-06-22 | 百度在线网络技术(北京)有限公司 | 一种数据存储方法、装置、设备及存储介质 |
US11636152B2 (en) * | 2019-02-15 | 2023-04-25 | Oracle International Corporation | Scalable range locks |
CN111581451B (zh) * | 2019-03-28 | 2021-08-06 | 北京忆芯科技有限公司 | 分布式kv存储系统的更新与查询 |
US10803006B1 (en) * | 2019-04-01 | 2020-10-13 | MemVerge, Inc | Persistent memory key-value store in a distributed memory architecture |
KR102450133B1 (ko) | 2019-04-04 | 2022-10-05 | 한국전자통신연구원 | 분산 잠금 관리를 하는 분산 시스템 및 그것의 동작 방법 |
US10936379B2 (en) * | 2019-05-17 | 2021-03-02 | Citrix Systems, Inc. | Automatically replicate API calls to separate data centers |
US11500856B2 (en) * | 2019-09-16 | 2022-11-15 | Oracle International Corporation | RDMA-enabled key-value store |
CN112596960B (zh) * | 2020-11-25 | 2023-06-13 | 新华三云计算技术有限公司 | 一种分布式存储服务切换方法及装置 |
CN112612803B (zh) * | 2020-12-22 | 2022-07-12 | 浙江大学 | 基于持久性内存的键值对存储系统及数据并发插入方法 |
CN112527803B (zh) * | 2020-12-30 | 2024-01-26 | 北京百家科技集团有限公司 | 一种数据处理方法、装置以及计算机设备 |
CN113204435B (zh) * | 2021-07-01 | 2021-12-03 | 阿里云计算有限公司 | 数据处理方法以及系统 |
US20230066835A1 (en) * | 2021-08-27 | 2023-03-02 | Keysight Technologies, Inc. | Methods, systems and computer readable media for improving remote direct memory access performance |
US11963215B2 (en) | 2021-10-27 | 2024-04-16 | Hewlett Packard Enterprise Development Lp | Resource unit assignment for selective fading |
CN114138780B (zh) * | 2021-11-28 | 2024-10-01 | 北京理工大学 | 基于同构自适应学习索引的分布式键值存储方法及装置 |
CN118202336A (zh) * | 2022-02-07 | 2024-06-14 | 华为云计算技术有限公司 | 用于在客户端节点中存储本地内存映射表的内存控制器和方法 |
CN115712684B (zh) * | 2022-11-24 | 2023-10-24 | 南京鼎山信息科技有限公司 | 一种物联网中物品动态信息的存储方法及系统 |
CN117992638B (zh) * | 2024-03-01 | 2024-10-22 | 中国人民解放军96911部队 | 部队管理和使用单位动态树的构建方法 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6418542B1 (en) * | 1998-04-27 | 2002-07-09 | Sun Microsystems, Inc. | Critical signal thread |
CN1522409A (zh) * | 2001-06-09 | 2004-08-18 | 存储交易株式会社 | 用于数据库系统的考虑了高速缓存的并行控制方案 |
CN100401755C (zh) * | 1994-08-31 | 2008-07-09 | 骏升发展(美国)有限公司 | 用于显示电视节目及相关正文的方法与设备 |
CN101657802A (zh) * | 2006-12-06 | 2010-02-24 | 弗森多系统公司(dba弗森-艾奥) | 用于远程直接存储器存取固态存储设备的装置、系统及方法 |
CN102546612A (zh) * | 2011-12-23 | 2012-07-04 | 华中科技大学 | 用户态下基于rdma协议的远程过程调用实现方法 |
CN102681892A (zh) * | 2012-05-15 | 2012-09-19 | 西安热工研究院有限公司 | Key-Value型单写多读锁池软件模块及其运行方法 |
CN102708065A (zh) * | 2011-03-07 | 2012-10-03 | 微软公司 | 页面文件预留 |
CN104133661A (zh) * | 2014-07-30 | 2014-11-05 | 西安电子科技大学 | 基于列存储的多核并行哈希分区优化方法 |
CN104461912A (zh) * | 2013-09-24 | 2015-03-25 | 国际商业机器公司 | Rdma资源泄漏检测和报告 |
Family Cites Families (55)
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 |
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 |
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 |
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 |
US7409525B1 (en) | 2006-03-29 | 2008-08-05 | Emc Corporation | Implicit locks in a shared virtual memory system |
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 |
EP2476079A4 (en) | 2009-09-09 | 2013-07-03 | Fusion Io Inc | APPARATUS, SYSTEM, AND METHOD FOR STORAGE ALLOCATION |
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 |
WO2011060366A2 (en) | 2009-11-13 | 2011-05-19 | Anderson Richard S | Distributed symmetric multiprocessing computing architecture |
CN102486753B (zh) * | 2009-11-30 | 2015-09-16 | 国际商业机器公司 | 构建及允许访问高速缓存的方法、设备及存储系统 |
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 |
WO2012109677A2 (en) | 2011-02-11 | 2012-08-16 | Fusion-Io, Inc. | Apparatus, system, and method for managing operations for data storage media |
US8832216B2 (en) * | 2011-08-31 | 2014-09-09 | Oracle International Corporation | Method and system for conditional remote direct memory access write |
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 |
US10133596B2 (en) | 2012-03-16 | 2018-11-20 | Oracle International Corporation | System and method for supporting application interoperation in a transactional middleware environment |
JP5900096B2 (ja) * | 2012-03-28 | 2016-04-06 | 富士通株式会社 | レプリケーションシステム、レプリケーションプログラム及びレプリケーション構成の再構築方法 |
US9058122B1 (en) | 2012-08-30 | 2015-06-16 | Google Inc. | Controlling access in a single-sided distributed storage system |
US8676851B1 (en) | 2012-08-30 | 2014-03-18 | Google Inc. | Executing transactions in distributed storage systems |
US20130262238A1 (en) * | 2012-09-06 | 2013-10-03 | Mikhail Leonidovich Liubachev | System and method for customer involvement |
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 |
US20150286414A1 (en) * | 2014-04-03 | 2015-10-08 | Strato Scale Ltd. | Scanning memory for de-duplication using rdma |
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 |
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 |
-
2015
- 2015-10-13 US US14/882,357 patent/US10713210B2/en active Active
-
2016
- 2016-10-10 CN CN201680060341.5A patent/CN108140009B/zh active Active
- 2016-10-10 WO PCT/US2016/056224 patent/WO2017066110A1/en active Application Filing
- 2016-10-10 EP EP16785640.0A patent/EP3362907A1/en not_active Withdrawn
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100401755C (zh) * | 1994-08-31 | 2008-07-09 | 骏升发展(美国)有限公司 | 用于显示电视节目及相关正文的方法与设备 |
US6418542B1 (en) * | 1998-04-27 | 2002-07-09 | Sun Microsystems, Inc. | Critical signal thread |
CN1522409A (zh) * | 2001-06-09 | 2004-08-18 | 存储交易株式会社 | 用于数据库系统的考虑了高速缓存的并行控制方案 |
CN101657802A (zh) * | 2006-12-06 | 2010-02-24 | 弗森多系统公司(dba弗森-艾奥) | 用于远程直接存储器存取固态存储设备的装置、系统及方法 |
CN102708065A (zh) * | 2011-03-07 | 2012-10-03 | 微软公司 | 页面文件预留 |
CN102546612A (zh) * | 2011-12-23 | 2012-07-04 | 华中科技大学 | 用户态下基于rdma协议的远程过程调用实现方法 |
CN102681892A (zh) * | 2012-05-15 | 2012-09-19 | 西安热工研究院有限公司 | Key-Value型单写多读锁池软件模块及其运行方法 |
CN104461912A (zh) * | 2013-09-24 | 2015-03-25 | 国际商业机器公司 | Rdma资源泄漏检测和报告 |
CN104133661A (zh) * | 2014-07-30 | 2014-11-05 | 西安电子科技大学 | 基于列存储的多核并行哈希分区优化方法 |
Non-Patent Citations (2)
Title |
---|
Building Fast, CPU-Efficient Distributed;Christopher R.Mitchell;《https://cs.nyu.edu/media/publications/mitchell_christopher.pdf》;20150930;第1,3,11,13-14,26,58-62,86-90页 * |
Designing A Low-Latency Cuckoo Hash Table for Write-Intensive Workloads Using RDMA;Tyler Szepesi 等;《https://cs.uwaterloo.ca/~bernard/nessie.pdf》;20141231;第1-6页 * |
Also Published As
Publication number | Publication date |
---|---|
EP3362907A1 (en) | 2018-08-22 |
US10713210B2 (en) | 2020-07-14 |
CN108140009A (zh) | 2018-06-08 |
US20170103039A1 (en) | 2017-04-13 |
WO2017066110A1 (en) | 2017-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108140009B (zh) | 分布式自主式基于rdma的b树键值管理器 | |
CN108351860B (zh) | 低延迟的基于rdma的分布式存储装置 | |
CN108027803B (zh) | 分布式无锁基于rdma的存储器分配和解分配 | |
US10275489B1 (en) | Binary encoding-based optimizations at datastore accelerators | |
CN113287286B (zh) | 通过rdma进行分布式存储节点中的输入/输出处理 | |
US11636089B2 (en) | Deferred reclamation of invalidated entries that are associated with a transaction log in a log-structured array | |
Sha et al. | A new design of in-memory file system based on file virtual address framework | |
CN111033481B (zh) | 非易失性存储器上的直接映射的缓冲区高速缓存 | |
CN111095225B (zh) | 使用rdma读取非易失性高速缓存中存储的数据的方法 | |
US11409454B1 (en) | Container ownership protocol for independent node flushing | |
JP2021517684A (ja) | トラック・ロックおよびストライド・グループ・ロックを使用したキャッシュ動作の管理 | |
WO2023231336A1 (zh) | 执行交易的方法和区块链节点 | |
US11842051B2 (en) | Intelligent defragmentation in a storage system | |
US20230118155A1 (en) | Resource allocation techniques using a metadata log | |
US20160267015A1 (en) | Mapping virtual memory pages to physical memory pages | |
US10146833B1 (en) | Write-back techniques at datastore accelerators | |
US11144243B2 (en) | Method and device for managing redundant array of independent disks and computer program product | |
CN114365109A (zh) | 启用rdma的键-值存储库 | |
US11803314B2 (en) | Techniques for performing metadata updates | |
US20230409218A1 (en) | Container flush ownership assignment | |
US10936544B2 (en) | Enabling consistency in push order for network caching | |
US12131200B2 (en) | Balanced winner assignment for deadlock resolution | |
US11243930B2 (en) | System and method for scalable and space efficient hardening of a fixed sized hash table over an unreliable tier | |
US11442633B2 (en) | Method, electronic device and computer program product for storage management | |
Shankar | Designing Fast, Resilient and Heterogeneity-Aware Key-Value Storage on Modern HPC Clusters |
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 |