经由基于RDMA的RPC请求在联网计算机之间的快速读/写的制作方法

文档序号:13884561阅读:423来源:国知局
经由基于RDMA的RPC请求在联网计算机之间的快速读/写的制作方法



背景技术:

通常,直接存储器访问(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的rpc请求系统”组合远程直接存储器访问(rdma)消息传递和远程过程调用(rpc)请求,以经由在联网计算机之间传输的rdma消息序列来提供快速rpc请求。传输这些rdma消息的过程允许整个基于rdma的rpc请求系统既是无锁的又是线程安全的。

例如,在各种实现中,基于rdma的rpc请求系统从在发送方计算设备(也称为客户端)上执行的过程接收用以向特定的接收方计算设备(也称为服务器)发送rpc请求的请求。然后经由rdma读消息从发送方向接收方传输针对接收方控制数据的请求。

在各种实现中,接收方控制数据包括接收方的rdma消息缓冲器的空闲时隙列表。在另外的实现中,该接收方控制数据还包括但不限于在接收方上的活动的rpc请求的总数。在各种实现中,rpc请求的总数用于控制可以向任何特定接收方发送的并发消息的最大数目。这确保了rdma消息缓冲器不会被过快地填充,以避免由于从一个或多个发送方向rdma缓冲器发送的过多的活动的请求而导致的潜在的竞争情况或缓冲器溢出。换言之,如果在接收方上的活动的rpc请求的当前数目超过某个最大数目(对应于rdma消息缓冲器大小),则发送方将不会向该接收方发送附加的rpc请求,直到在该接收方上存在较少的活动的请求时。

响应于由发送方对所请求的控制数据的接收,发送方通过经由rdma原子比较和交换消息向接收方传输针对空闲时隙之一的预留请求来执行无锁预留。在各种实现中,如果其他过程或客户端在发送方之前成功地预留所请求的空闲时隙,则该预留请求可以被重复(使用其他空闲时隙),直到成功。然后,发送方经由rdma写消息向接收方的预留时隙直接写入rpc请求。

在执行rpc请求之后,接收方通过应用类似于发送方的初始请求的技术来向发送方提供所执行的rpc请求的结果。具体地,在各种实现中,在由接收方对rpc请求的执行之后,经由rdma读消息从接收方向发送方传输针对发送方控制数据的请求。

类似于接收方控制数据,在各种实现中,发送方控制数据包括发送方的rdma消息缓冲器的空闲时隙列表。在另外的实现中,该发送方控制数据还包括但不限于在发送方上的活动的rpc请求的总数。与接收方一样,在各种实现中,在发送方上的活动的rpc请求的总数用于控制可以向任何特定发送方发送的并发消息的最大数目。这确保了发送方的rdma消息缓冲器不会被过快地填充,以避免由于从一个或多个接收方发送到发送方rdma缓冲器的过多的活动的请求而导致的潜在的竞争情况或缓冲器溢出。换言之,如果在发送方上的活动的rpc请求的当前数目超过某个最大数目(对应于rdma消息缓冲器大小),则接收方将不会向该发送方发送附加的rpc请求,直到在该发送方上存在较少的活动的请求时。

响应于由接收方对所请求的控制数据的接收,接收方通过经由rdma原子比较和交换消息向发送方传输针对空闲时隙之一的预留请求来执行无锁预留。在各种实现中,如果其他过程或客户端在接收方之前成功地预留发送方所请求的空闲时隙,则该预留请求可以被重复,直到成功。然后,接收方经由rdma写消息向发送方的预留时隙直接写入发送方的原始rpc请求的结果。

除了提供无锁时隙预留之外,上面概括的过程是线程安全的。换言之,基于rdma的rpc请求系统提供了存储器访问技术,当被来自任何数目的计算设备的同时多个线程访问时,这些技术保证没有竞争情况。显著地,无锁且线程安全通过降低通过商用nic硬件(例如,以太网网络中的启用rdma的网络接口控制器(nic))传输和执行rpc请求的总体系统延迟提高了数据中心和其他网络中的计算机之间的存储器访问的总体性能。

本文中描述的基于rdma的rpc请求系统提供了用于经由在数据中心或其他网络环境中的联网计算机之间使用商用nic传输的rdma消息序列来启用快速rpc请求的各种技术。传输这些rdma消息的过程允许整个基于rdma的rpc请求系统既是无锁的又是线程安全的。除了上述益处之外,基于rdma的rpc请求系统的其他优点将从下文的详细描述中变得显而易见。

附图说明

所要求保护的主题的具体特征、方面和优点关于以下描述、所附权利要求和附图将变得更好理解,在附图中:

图1示出了如本文中描述的经由与“基于rdma的rpc请求系统”一起使用的启用rdma的交换机、路由器和直接连接的任何组合进行通信的多个服务器的示例性数据中心或其他网络。

图2示出了如本文中描述的用于使用基于rdma的rpc请求系统来提供基于rdma的rpc请求的通用架构图。

图3提供了示出如本文中描述的用于实现基于rdma的rpc请求系统的各种实现的程序模块的示例性流程图。

图4示出了示出如本文中描述的用于实现基于rdma的rpc请求系统的各种实现的示例性方法的通用系统流程图。

图5是描绘如本文中描述的用于生效基于rdma的rpc请求系统的各种实现中使用的具有简化的计算和i/o能力的简化的通用计算设备的通用系统图。

具体实施方式

在对“基于rdma的rpc请求系统”的各种实现的以下描述中,参考附图,附图构成其部分并且附图中通过图示的方式示出了其中可以实践基于rdma的rpc请求系统的具体实现。在不脱离其范围的情况下可以利用其他实现并且可以进行结构改变。

在描述本文中描述的各种实现时,将使用特定的术语,并且不旨在将这些实现限于如此选择的特定术语。此外,应当理解,每个特定术语包括以广泛相似的方式操作以实现相似目的的所有其技术等同物。本文中对“一种实现”或“另一实现”或“示例性实现”或“备选实现”或类似短语的引用意指结合该实现描述的特定特征、特定结构或特定特性可以被包括在基于rdma的rpc请求系统的至少一个实现中。此外,整个说明书中这样的短语的出现并不一定都指代相同的实现,并且单独的或备选的实现与其他实现不相互排斥。本文中针对表示基于rdma的rpc请求系统的一个或多个实现的任何处理流程所描述或示出的顺序并不固有地指示要以所描述或示出的顺序实现处理的任何要求,并且本文中对于任何处理流程所描述或示出的任何这样的顺序并不表示对基于rdma的rpc请求系统的任何限制。

如本文中使用的,术语“部件”、“系统”、“客户端”等旨在指代计算机相关实体,其可以是硬件、软件(例如,执行中)、固件或其组合。例如,部件可以是在处理器上运行的过程、对象、可执行文件、程序、函数、库、子例程、计算机、或者软件和硬件的组合。作为说明,在服务器上运行的应用和服务器本身都可以是部件。一个或多个部件可以驻留在过程中,并且部件可以位于一个计算机上和/或分布在两个或更多个计算机之间。此外,在基于rdma的rpc请求系统的上下文中,多个联网服务器中的任何服务器可以并发或单独地充当发送方计算设备和接收方计算设备中的任一项或两者。术语“处理器”通常被理解为指代硬件部件,诸如计算机系统的处理单元。

此外,就术语“包括(includes)”、“包括(including)”、“具有(has)”、“包含(contains)”、其变体以及其他类似词语在具体实施方式或权利要求书中使用的程度而言,这些术语旨在以类似于术语“包括(comprising)”的方式是包含性的,作为开放式过渡词而不排除任何附加或其他要素。

1.0简介:

通常,远程过程调用(rpc)是进程间通信,其允许在一个计算机上运行的计算机程序、进程或线程使得子例程或过程在共享的网络上的不同计算机的地址空间中执行。通常,为了执行rpc,客户端计算机向服务器计算机发送rpc请求。rpc请求包括要由服务器执行的特定过程(例如,子例程、应用、进程等)的id以及要用于该过程的执行的一个或多个可选参数。在各种实现中,“cookie”等也可以与id一起被发送。一般而言,该cookie是标识符(例如,数字、名称等),它以使得由发送方发送的原始消息能够与由发送方最终接收的响应相匹配的方式来唯一地标识发送方。

此外,远程直接存储器访问(rdma)是从一个计算机的存储器到不同计算机的存储器中的直接存储器访问,其经由这些计算机的启用rdma的网络接口控制器(nic)来执行,而不涉及任一计算机的操作系统。换言之,所有的rdma操作由到服务器存储器的nic读写直接执行,而没有中断或通知任一服务器的cpu。服务器的cpu只在其执行由rpc请求指定的过程时或者可能在对从另一服务器接收的rpc请求的响应的反馈中才会被涉及。

如本文中描述的,“基于rdma的rpc请求系统”以如下方式组合rpc和rdma的概念:其能够被实现在商用网络通信硬件上,例如基于以太网的网络中的启用rdma的网络接口控制器(nic)。在各种实现中,基于rdma的rpc请求系统经由在商用nic上的基于rdma的消息序列启用网络中的不同计算机之间的rpc请求的快速无锁和线程安全执行。换言之,基于rdma的rpc请求系统组合rdma消息传递和rpc请求,以经由在数据中心或其他网络环境中的计算机之间传输的rdma消息序列来提供快速rpc请求。这些rpc请求可以被指引到任何可用的过程,并且可以包括任何数目的可选参数。

有利地,无锁和线程安全两者通过降低用于在商用nic硬件上传输和执行rpc请求的总体系统时延来提高联网计算机之间的rpc请求和存储器访问的总体性能。此外,本文中描述的消息传递技术使用商用nic的能力相对于基于专用nic硬件的网络降低了联网成本。另外,使用基于rdma的rpc请求系统实现的网络是非常灵活的,因为充当关于一个或多个其他接收方的发送方的任何服务器可以并发地充当关于一个或多个其他发送方的接收方。此外,基于rdma的rpc请求系统容易地可扩展到来自服务器的多个同时的、并发的或顺序的请求,这些服务器以发送方和接收方能力中的任一项或两者行动,由此提高了网络性能。

如图1所示,基于rdma的rpc请求系统可以被配置为与任何期望的网络配置一起使用,包括经由启用rdma的路由器140、交换机(150和160)和直接连接170的任何组合进行通信的服务器(100、110、120和130)的任何组合。有利地,由基于rdma的rpc请求系统启用的通信和消息传递技术可扩展到任何数目的联网计算机和任何数目的联网计算机之间的任何数目的并发rpc请求。

图2示出了基于rdma的rpc请求系统的示例性架构。具体地,多个服务器(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)的任何rpc请求。基于rdma的消息传递api在本文中也被称为消息传递api模块,或简称为api。最后,服务器(200、205、210、215、220和225)中的每一个包括启用rdma的nic(例如,265、270),其用于向其他服务器中的一个或多个服务器的启用rdma的nic发送rdma消息以及从其接收rdma消息,如本文中描述的。

1.1系统概述:

如上所述,基于rdma的rpc请求系统提供各种技术,这些技术用于经由在数据中心或其他网络环境中的联网计算机之间使用商用nic传输的rdma消息序列来启用快速rpc请求以提供无锁且线程安全的整个系统。上面概括的过程由图3的总体系统图来示出。具体地,图3的系统图示出了如本文中描述的用于实现基于rdma的rpc请求系统的各种实现的程序模块之间的相互关系。此外,虽然图3的系统图示出了基于rdma的rpc请求系统的各种实现的高级视图,但是图3并不旨在提供贯穿本文档描述的基于rdma的rpc请求系统的每个可能实现的详尽或完整的说明。

另外,可以由图3中的间断线或虚线表示的任何框以及框之间的互连表示本文中描述的基于rdma的rpc请求系统的备选实现。此外,如下所述,这些备选实现中的任何或全部备选实现可以与贯穿本文档所描述的其他备选实现结合使用。

一般而言,如图3所示,由基于rdma的rpc请求系统启用的过程通过应用基于rdma的消息传递api模块300被操作以执行各种功能,包括但不限于从操作系统、过程、子例程、应用、进程等接收rpc请求(310),发起并且响应于经由启用rdma的nic与网络中的其他服务器的通信320,更新服务器控制数据330等。

另外,基于rdma的消息传递api模块300的rpc请求监测器模块350应用一个或多个线程来监测rdma消息缓冲器340的相关的rpc请求或响应。rpc请求监测器模块350的线程从rdma消息缓冲器340拉取相关的rpc请求,并且向rpc队列360添加这些请求。另外,rpc请求监测器模块350的线程从rdma消息缓冲器340拉取相关响应并且向在该服务器上发起rpc请求的请求操作系统、过程、子例程、应用、过程等传递那些响应(310)。在各种实现中,服务器主存储器380的一个或多个块被预留以托管控制数据330、rdma消息缓冲器340和rpc队列,使得预留的存储器仅由基于rdma的消息传递api模块300并且经由nic对该存储器的dma读/写调用来被访问。换言之,除了基于rdma的消息传递api模块300或主机服务器的nic之外,在主机服务器上执行的其他过程都不向预留的服务器主存储器380写入。

此外,在特定服务器充当接收方以应用一个或多个线程来监测rpc队列360的相关rpc请求的情况下,rpc请求处理模块370被应用。当任何线程标识相关的rpc请求时,该线程调用由rpc请求标识的过程,并且当该过程已经完成执行时,rpc请求处理模块370将对该rpc请求的响应传递给基于rdma的消息传递api300用于经由启用rdma的nic320返回到发送方服务器。

2.0基于rdma的rpc请求系统的操作细节:

采用上述程序模块用于实现基于rdma的rpc请求系统的各种实现。如上所述,基于rdma的rpc请求系统提供了各种技术,这些技术用于经由在数据中心或其他网络环境中的联网计算机之间使用商用nic传输的rdma消息序列来启用快速rpc请求以提供无锁且线程安全的整个系统。以下部分提供了对基于rdma的rpc请求系统的各种实现的操作以及用于实现在部分1中关于图1所述的程序模块的示例性方法的详细讨论。具体地,以下部分提供了基于rdma的rpc请求系统的各种实现的示例和操作细节,包括:

·基于rdma的rpc请求系统的操作概述;

·rdma动词;

·服务器控制数据;

·预订请求;以及

·rdma消息缓冲器和rpc队列。

2.1操作概述:

如上所述,本文中描述的基于rdma的rpc请求系统的过程提供了各种技术,这些技术用于经由在具有任何数目的服务器的数据中心或其他网络环境中的联网计算机之间使用商用nic传输的rdma消息序列来启用快速rpc请求。在各种实现中,这个消息传递能力通过提供用于经由每个服务器的启用rdma的nic的基于rdma的消息传递的应用编程接口(api)的连接库等来启用。在本文中被称为基于rdma的消息传递api的该连接库封装了用于建立和维持任何数目的联网计算机的nic之间的连接的各种协议。通常,基于rdma的消息传递api基于“内核旁路”技术被实现。

内核旁路是被应用以通过执行各种操作和存储器读写而不访问或通知内核来改善网络性能的概念。在典型的联网场景中,内核对网络分组(例如,tcp)进行解码,并且通过复制数据将该数据从内核空间传递到“用户空间”。术语“用户空间”是指在内核外部(例如,在内核空间外部)运行的代码。用户空间通常是指os用来与内核交互的各种程序和库,诸如例如执行输入/输出、操作文件系统对象、应用软件等的软件。从内核空间到用户空间的复制过程通常涉及保存用户空间过程上下文数据,并且然后加载内核上下文数据。保存用户空间过程上下文数据并且然后加载内核过程信息的这一步骤通常称为上下文切换。然而,已经观察到应用上下文切换构成了大部分网络开销,由此降低了计算机互连的带宽和时延性能。

基于rdma的rpc请求系统适应各种内核旁路技术以使得各种用户空间应用能够与前述的基于rdma的消息传递api通信,基于rdma的消息传递api适于与用户空间应用和在其上执行基于rdma消息传递api的nic两者通信。该过程将内核从用户空间过程与由基于rdma的消息传递api启用的i/o子系统之间的通信路径中取出,该i/o子系统经由启用rdma的nic处理网络通信。有利地,这种配置消除了从内核空间到用户空间的上下文切换和复制。例如,在各种实现中,基于rdma的rpc请求系统通常经由用户空间操作的以下顺序传输rdma读/写/cas消息:

1.在本地服务器上确定rdma消息要被传输到远程服务器;

2.调用本地服务器的基于rdma的消息传递api;

3.应用基于rdma的消息传递api以与本地服务器的nic通信;以及

4.应用本地服务器的nic以与网络的物理联网硬件(例如,启用rdma的交换机、路由器等)通信,以跨网络从本地服务器向远程服务器发送rdma消息。

在各种实现中,由基于rdma的消息传递api实现的库基于rdma动词的组合来提供快速(无锁且线程安全的)rpc服务,rdma动词包括rdma写消息、rdma读消息和rdma原子比较和交换(cas)消息。在任何服务器上运行的任何应用或过程可以访问api来发起rpc请求。然后,api将自动发起服务器之间的通信以处理rpc请求。

例如,在各种实现中,在充当“发送方”的联网服务器之一上执行的应用、过程或线程首先指示该发送方向充当“接收方”的特定联网服务器发送rpc请求。一旦发送方已经接收到向特定接收方发送rpc请求的指令,则基于rdma的消息传递api使得发送方的nic经由rdma读消息向接收方的nic传输用以获取该接收方的“控制数据”的请求,“控制数据”包括接收方的rdma消息缓冲器的空闲时隙列表、以及可选的附加信息,诸如在接收方上的未决的活动的rpc请求的数目。

在各种实现中,rpc请求的总数可选地用于控制可以向任何特定接收方发送的并发消息的最大数目。这确保rdma消息缓冲器不被过快地填充,以避免由于从一个或多个发送方发送到rdma缓冲器的过多的活动的请求而导致的潜在的竞争情况或缓冲器溢出。换言之,如果在接收方上的活动的rpc请求的当前数目超过某个最大数目(对应于rdma消息缓冲器大小),则发送方将不会向该接收方发送附加的rpc请求,直到在该接收方上存在较少的活动的请求时。

在向接收方的nic成功传输请求控制数据的rdma读消息之后,接收方的nic利用所请求的控制数据自动响应发送方的nic。然后,基于rdma的消息传递api通过使得发送方的nic向请求空闲时隙中的所选择的空闲时隙的接收方的nic发出rdmacas消息来使得发送方预留在控制数据中指示的空闲时隙之一。

在成功预留接收方的rdma消息缓冲器的空闲时隙之后,基于rdma的消息传递api使得发送方的nic经由rdma写消息向接收方的预留时隙写入rpc请求。然后,在执行由rpc请求指定的过程之后,该rpc请求的结果使用与由发送方使用以建立和向接收方传输rpc请求的过程相似的过程来被返回给发送方。

例如,在接收方上执行rpc请求之后,接收方应用基于rdma的消息传递api的本地副本以使得接收方的nic向发送方的nic传输rdma读消息来请求发送方控制数据。在向发送方的nic成功传输请求控制数据的rdma读消息之后,发送方的nic使用所请求的控制数据自动地响应接收方的nic,所请求的控制数据包括发送方rdma消息缓冲器的空闲时隙并且还可以包括其他信息,诸如在该发送方上的活动的rpc请求的总数。

与接收方一样,在各种实现中,在发送方上的活动的rpc请求的总数可选地用于控制可以向任何特定发送方发送的并发消息的最大数目。这确保发送方的rdma消息缓冲器不被过快地填充,以避免由于从一个或多个接收方发送到发送方rdma缓冲器的过多的活动的请求而导致的潜在的竞争情况或缓冲器溢出。换言之,如果在发送方上的活动的rpc请求的当前数目超过某个最大数目(对应于rdma消息缓冲器大小),则接收方将不会向该发送方发送附加的rpc请求,直到在该发送方上存在较少的活动的请求时。

然后,接收方的基于rdma的消息发送api通过使得接收方的nic向发送方的nic发出rdmacas消息来使得接收方预留在控制数据中指示的空闲时隙之一。在成功预留发送方的rdma消息缓冲器的空闲时隙之后,基于rdma的消息传递api使得接收方的nic经由rdma写消息向发送方的预留时隙写入rpc请求的结果或响应。

2.2rdma动词:

如上所述,在各种实现中,基于rdma的rpc请求系统适应rda动词序列以启用联网计算机之间的rpc请求的快速的无锁和线程安全执行。应用于此目的的rdma动词包括rdma写消息、rdma读消息和rdma原子比较和交换(cas)消息。

rdma读消息使得发送方能够经由发送方和接收方的rdmanic来读取接收方的存储器的部分。发送方指定接收方的远程虚拟地址和要复制到的本地存储器地址。在各种实现中,基于rdma的rpc请求系统假定受保护的网络,其中所有服务器都具有访问其他计算机的存储器的适当权限。否则,在执行rdma操作之前执行附加的许可步骤,以确保接收方提供适当的权限来访问其存储器。假定这样的许可就位,rdma读操作经由发送方和接收方的nic之间的消息传递来进行,而不通知接收方的操作系统。换言之,rdma读消息使得发送方能够读取接收方的存储器,而无需接收方的操作系统知道该存储器读取。

类似地,rdma写消息使得发送方能够经由发送方和接收方的rdmanic向接收方的存储器的部分进行写入。与rdma读取一样,rdma写入操作在没有对接收方的通知的情况下被执行。

rdma原子比较和交换(cas)消息用于将来自发送方的rdmacas消息中的值与接收方的指定的虚拟地址的值进行原子地比较。如果比较的值相等,则由rdmacas消息指定的值将被存储在接收方的虚拟地址处。换言之,在原子事务中,一系列的数据库操作或者全部发生,或者什么也不发生。原子性的保证防止对存储器地址的更新仅部分发生。因此,rdma事务没有被观察到由接收方进行,因为在某一时刻,它还没有发生,而在下一时刻,它已经整个发生(或者如果事务由于发送的值与接收方保持的值不匹配而失败则什么也不发生)。

2.3服务器控制数据:

网络中的每个服务器在存储器中托管其自己的控制数据的副本,其可以由基于rdma的消息传递api的本地实例经由用户空间操作来访问。此外,该存储器被预留用于由基于rdma的消息传递api使用,以确保服务器或在服务器上执行的其他过程不向预留的存储器写入。因此,网络中的任何发送方的nic可以经由上述rdma读消息直接获得任何接收方的控制数据,而不涉及发送方或接收方的操作系统。因此,在各种实现中,每个单独的服务器的控制数据包括被保持在该服务器的主存储器中的rdma消息缓冲器的空闲时隙的实时列表。更具体地,如上所述,预留服务器主存储器的一个或多个块来托管控制数据、rdma消息缓冲器和rpc队列。该预留的存储器然后只能被基于rdma的消息传递api和经由该服务器的nic对该存储器的dma读/写调用来访问。

如上所述,由每个服务器托管的控制数据包括该服务器的rdma消息缓冲器的空闲时隙的实时或当前列表。空闲时隙是当前未被未决的或活动的rpc请求占用的缓冲器的那些时隙。另外,在各种实现中,每个单独的服务器的控制数据还包括在该服务器上的活动的rpc请求的总数。

通过针对每个服务器使用相同大小的rdma消息缓冲器以及该缓冲器中的相同大小和数目的时隙,接收方上的活动的rpc请求的总数的知识对应于缓冲器中的填充时隙的数目。该信息对于确保从一个或多个发送方到特定接收方的传入消息不覆盖该接收方的rdma消息缓冲器中的未决消息也是有用的。换言之,如上所述,考虑rpc请求的总数目作为允许或阻止向任何特定方发送附加rdma消息的控制机制确保了该服务器的rdma消息缓冲器不被太快地填充。有利地,该特征对于避免潜在的竞争情况和防止由于发送到特定服务器的rdma缓冲器的太多活动的请求而导致的缓冲器溢出都是有用的。

当对rpc调用的响应完成时,即当接收方已经向发送方返回rpc请求的结果时,在由接收方托管的控制数据中,接收方上正在运行rpc请求的线程将rdma消息缓冲器的对应时隙标记为空闲。

有利地,由网络中的每个服务器托管的控制数据的使用使得基于rdma的rpc请求系统能够扩展到非常大数目的联网服务器,由此提高了大型数据中心和其他网络中的rpc请求的效率。

2.4预留请求:

如上所述,服务器(充当发送方或接收方)将通过使得请求服务器的nic向另一服务器的nic发出rdmacas消息以请求该服务器的rdma消息缓冲器的空闲时隙中所选择的空闲时隙,来预留由另一服务器托管的控制数据中指示的空闲时隙中所选择的空闲时隙。

在各种实现中,基于rdma的rpc请求系统简单地选择列表中的第一空闲时隙,并且然后尝试预留该选择的时隙。但是,也可以实现其他时隙选择方法。例如,在各种限制中,备选的时隙选择方法包括但不限于:指定用于由特定服务器使用的一个或多个时隙的特定部分,从空闲时隙列表中随机选择等。例如,通过将缓冲器分成分段或部分,并且将这些部分指定给特定的服务器,由一个服务器向另一服务器提供的空闲时隙列表可以只包括被指定用于由特定服务器使用的缓冲器的部分中的那些空闲时隙。在这种情况下,该服务器然后可以选择被指定用于该服务器的缓冲器的部分中的第一空闲时隙。在随机选择的情况下,尝试访问任何其他服务器的rdma消息缓冲器的每个服务器从空闲时隙列表中进行随机选择。已经观察到随机选择改善关于其中多个服务器可能试图预留相同的第一空闲时隙的可能的竞争场景的性能。

例如,假定发送方向接收方请求,发送方的基于rdma的消息传递api通过使得发送方的nic向接收方的nic发出rdmacas消息来使得发送方请求在控制数据中指示的空闲时隙中所选择的空闲时隙。该rdmacas消息包括标识接收方的所请求的空闲时隙的值。如果所请求的时隙仍空闲,则接收方将为所请求的时隙保持相同的值,并且cas操作将成功,因为当比较的值相等时,由rdmacas消息指定的值将然后被存储在接收方的虚拟地址处。

例如,在各种实现中,每个时隙的单个比特可以用于指示每个特定时隙是否空闲(例如,如果该时隙空闲则为“0”,如果该时隙不空闲则为“1”)。因此,如果rdmacas消息包括针对特定时隙的“0”,并且针对该时隙在接收方上的比特也保持为“0”,则cas消息将使得该时隙保持“1”,由此成功预留该时隙并且防止该时隙响应于其他请求被预留。此外,当接收方使用该时隙完成时(例如,由rdma写请求写入该时隙的rpc请求已经被拉取到rpc队列中),则接收方将通过使得对应位保持为“0”来将该时隙标记为空闲。

如上所述,网络可以包含大量的服务器,其中的任何服务器可以经由本文中描述的rdma消息传递技术利用rpc请求来联系其他服务器。因此,在网络中的其他服务器中的任何服务器上运行的任何数目的过程可以并发地尝试关于不同的rpc请求预留相同的空闲时隙。

因此,这些其他过程之一可能已经预留了经由发送方的nic向接收方的nic传输的rdmacas消息而被请求的空闲时隙。因此,在接收到发送方的rdmacas消息之前空闲时隙被填充(并且因此不再空闲)的情况下,cas操作将失败,因为cas消息中的空闲时隙的值将不再与接收方保持的值相匹配。在各种实现中,如果cas消息失败,则发送方将发出请求其他空闲时隙之一的另一cas消息,或者它将首先向接收方的nic发出另一rdma读消息以获得该接收方的控制数据的更新副本,然后是针对接收方的空闲时隙之一的另一cas请求。该过程继续,直到时隙预留经由rdmacas消息成功。

当时隙预留成功时,其上已经预留了时隙的服务器(发送方或接收方)的控制数据被更新以指示预留时隙不再空闲。因此,除了成功的发送方之外,没有其他服务器将尝试向该时隙写入,因为它们将无法获得针对该时隙的预留,直到其被再次标记为空闲。此外,一旦任何发送方对任何接收方的时隙预留成功,即使特定的请求服务器持有用于接收方的过时的控制数据,该控制数据示出现在预留时隙是空闲的,由请求服务器向接收方发送的针对该时隙的任何rdmacas操作将只会失败。

前面的讨论假定使用单个rdma消息缓冲器和控制数据,控制数据指示单个rdma消息缓冲器的哪些时隙是空闲的。然而,在各种实现中,不是针对来自其他服务器的所有传入连接使用单个rdma消息缓冲器,而是每个服务器可以托管多个单独的rdma消息缓冲器,每个rdma消息缓冲器专用于与请求服务器的特定连接。

为此目的而维持的缓冲器的总数目和大小可以被设置为任何期望的值,其中该总数目和大小对应于连接和来自每个连接的可以由服务器在任何时候处理的活动的rpc请求的总数。在这种情况下,由每个服务器托管的控制数据将包括空闲缓冲器列表,并且可以包括这些缓冲器中的每一个的空闲时隙列表。然后,取代于简单地预留特定的时隙,预留请求将被指向空闲缓冲器中所选择的空闲缓冲器和这些缓冲器的空闲时隙之一。在成功预留空闲缓冲器时,其他服务器将不能写入或预留该缓冲器,直到在托管该缓冲器和控制数据的服务器的控制数据中该缓冲器再次被标记为空闲。

类似地,在各种实现中,由服务器托管的特定缓冲器专用于由特定请求服务器单独使用,而不需要首先预留那些缓冲器。换言之,对于任何主机服务器与任何客户端服务器之间的任何连接,主机可以维持专用于该客户端的单个缓冲器。例如,如果特定的主机服务器旨在与三个客户端服务器连接,则该主机服务器将维持三个单独的rdma消息缓冲器,每个客户端服务器一个。

这种每客户端缓冲器特征使得基于rdma的rpc请求系统能够关于控制数据做出若干假定,这些假定启用进一步的网络性能改善。例如,因为只有一个发送方正在写入接收方的特定缓冲器,所以发送方可以在不首先请求空闲时隙控制数据的情况下保持对其分配的缓冲器的所有空闲时隙的跟踪。此外,发送方将知道正被发送的并发消息的数目(例如,活动的请求的数目),因此其可以避免溢出其分配的rdma消息缓冲器而不请求包括在接收方上的活动的rpc请求的总数的控制数据。此外,在各种实现中,发送方可以“批量”收集空闲消息时隙信息,因为如果它没有填充时隙,则它在不请求空闲时隙控制数据的情况下知道时隙仍然空闲。有利地,已经观察到为了该目的而对多个缓冲器的使用提供网络性能上的进一步增加连同整体时延上的附加的降低。

2.5rdma消息缓冲器和rpc队列:

为了解释的目的,以下讨论涉及用于实例化rdma消息缓冲器的循环缓冲器的使用。但是,基于rdma的rpc请求系统不需要为此目的而使用循环缓冲器。任何期望的缓冲器类型或大小可以与任何数目和大小的时隙一起使用,而不偏离本文中描述的基于rdma的rpc请求系统的预期范围。如果其他缓冲器类型被使用,则rdma消息缓冲器的缓冲器访问方法与用于访问循环缓冲器的方法略有不同。

通常,经由从发送方到接收方的rdma写消息而写入rdma缓冲器中的预留时隙的rpc请求可以包括与一个或多个可选过程参数相结合的数个不同过程中的任何过程的id。此外,在各种实现中,用于传输rpc请求的rdma写消息除了过程id和过程参数之外还可以包括cookie等。在各种实现中,“cookie”等也可以与id一起被发送。一般而言,该cookie是标识符(例如,数字、名称等),它以使得由发送方发送的原始消息能够与由发送方最终接收的响应相匹配的方式来唯一地标识发送方。

在各种实现中,与一个或多个过程或应用相关联的一个或多个线程在接收方上是活动的,以针对具有与那些线程之一相关的id的rpc请求来监测或侦听接收方的rdma消息缓冲器。每当任何特定的线程在rdma消息缓冲器中定位到相关的rpc请求时,该线程就从rdma消息缓冲器中拉取相关的rpc请求,并且将其写入接收方存储器中的rpc队列用于由接收方执行。

如上所述,在网络中的任何服务器(充当发送方)上运行的任何数目的过程可以向rdma消息缓冲器的空闲时隙主动写入不同的rpc请求。因此,多个rpc请求通常在任何时间点在服务器中的任何服务器上是活动的。在各种实现中,rpc队列被实例化为fifo缓冲器或队列,使得rpc请求由接收方按照这些rpc请求从rdma消息缓冲器中被拉取并且被活动线程之一放入rpc队列中的顺序来服务。

然而,在各种实现中,其他服务顺序被启用。例如,优先级可以与rpc队列中的特定rpc请求相关联。在特定的rpc请求比已经缓存的rpc请求具有更高优先级的情况下,可以首先执行更高优先级的请求。类似地,一些发送方可以比其他发送方具有更高的优先级。在这种情况下,来自具有较高优先级的发送方的rpc队列中的rpc请求可以在来自具有较低优先级的发送方的rpc队列中的rpc请求之前由接收方执行。类似地,某些rpc请求可以包括执行截止期限作为参数。在这种情况下,rpc请求可以按照执行截止期限的顺序被排序,rpc队列中具有最快截止期限的rpc请求在具有稍晚截止期限的prc请求之前被执行。

如上所述,无论任何优先级或截止期限是否与任何rpc请求或发送方相关联,一旦接收方已经执行rpc请求,则该请求的结果经由rdma写消息被返回到发送方的rdma消息缓冲器。此外,与接收方一样,与一个或多个过程或应用相关联的一个或多个线程在发送方上是活动的,以针对与那些线程之一相关的接收的rpc响应(或请求)来监测或侦听发送方的rdma消息缓冲器。通常但不一定,发出原始rpc请求的发送方的线程也可以针对对于该请求的响应来监测rdma消息缓冲器。当线程标识该响应时,它从rdma消息缓冲器拉取响应,并且经由基于rdma的消息传递api将其提供给适当的应用或过程。

在各种实现中,无论何时从发送方或接收方的rdma消息缓冲器拉取rpc请求或rpc响应,对应缓冲时隙随后在对应发送方或接收方的控制数据中被标记为空闲。在各种实现中,每当时隙状态发生变化时,每个服务器的控制数据的空闲时隙列表(以及其他信息,诸如活动的rpc请求的数目)被更新。每个服务器的控制数据的连续更新启用基于rdma的rpc请求系统的前述无锁和线程安全的通信能力。

3.0基于rdma的rpc请求系统的操作概述:

上面关于图1到图3以及进一步鉴于以上在部分1和2中提供的详细描述所描述的过程可以通过图4的总体操作流程图来示出。具体地,图4提供了总结基于rdma的rpc请求系统的各种实现中的一些实现的操作的示例性操作流程图。图4并不旨在是本文中描述的基于rdma的rpc请求系统的各种实现中的所有实现的详尽表示,并且图4中表示的实现被提供仅用于解释的目的。

另外,可以由图4中的间断线或虚线表示的任何框以及框之间的互连表示本文中描述的基于rdma的rpc请求系统的可选或备选实现,并且如下所述的这些可选或备选实现中的任何或全部实现可以与贯穿本文档所描述的其他备选实现结合使用。

一般而言,如图4所示,在各种实现中,基于rdma的rpc请求系统通过从在发送方上执行的过程接收(400)向接收方发送rpc请求用于执行的请求来开始操作。然后,基于rdma的rpc请求系统经由在发送方和接收方的nic之间传输的rdma读消息来从发送方向接收方传输(410)针对接收方控制数据的请求。如上所述,接收方控制数据至少包括接收方的空闲时隙列表。

然后,响应于由发送方对所请求的控制数据的接收,基于rdma的rpc请求系统经由在发送方和接收方的nic之间传输的rdma原子比较和交换消息来从发送方向接收方传输(420)针对空闲时隙之一的预留请求。在成功的预留请求之后,发送方经由在发送方和接收方的nic之间传输的rdma写消息来向接收方的预留时隙写入(430)rpc请求(即,使用特定参数执行特定功能的请求)。

接收方然后执行(440)rpc请求。在该执行之后,接收方经由在接收方和发送方的nic之间传输的rdma读消息来向发送方传输(450)针对发送方控制数据的请求。如上所述,发送方控制数据至少包括发送方的空闲时隙列表。

然后,响应于由接收方对所请求的控制数据的接收,接收方经由接收方和发送方的nic之间的rdma原子比较和交换消息来向发送方传输(460)针对空闲时隙之一的预留请求。在成功的预留请求之后,接收方经由在接收方和发送方的nic之间传输的rdma写消息来向发送方的预留时隙写入(470)rpc请求的结果(即,使用特定参数的对特定功能的响应)。

4.0用于基于rdma的rpc消息的示例性实现:

以下段落总结了可以在本文档中要求保护的实现的各种示例。下面总结的实现并不旨在限制鉴于基于rdma的rpc请求系统的详细描述而要求保护的主题。此外,下面总结的实现中的任何或全部实现可以以与在整个详细描述中描述的实现中的一些或全部实现以及在一个或多个附图中示出的任何实现以及下面描述的任何其他实现和示例的任何期望的组合来被要求保护。下面的实现和示例旨在鉴于贯穿本文档所描述的详细描述和附图来被理解。

在各种实现中,基于rdma的rpc请求系统通过用于经由在数据中心或其他网络环境中的联网计算机之间使用商用nic传输的rdma消息序列来启用快速rpc请求的装置、过程或技术来实现。传输这些rdma消息的过程允许整个基于rdma的rpc请求系统既是无锁的又是线程安全的。有利地,无锁和线程安全两者通过降低用于在商用nic硬件上传输和执行rpc请求的总体系统时延来提高联网计算机之间的rpc请求和存储器访问的总体性能。此外,相对于基于专用nic硬件的网络,本文中描述的消息传递技术使用商用nic的能力降低了联网成本。另外,使用基于rdma的rpc请求系统实现的网络是非常灵活的,因为充当关于一个或多个其他接收方的发送方的任何服务器可以同时充当关于一个或多个其他发送方的接收方。此外,基于rdma的rpc请求系统容易地可扩展到来自服务器的多个同时的、并发的或顺序的请求,这些服务器以发送方和接收方能力中的任一项或两者行动,由此提高了网络性能。

作为第一示例,在各种实现中,一种计算机实现的过程经由用于从在发送方上执行的过程接收用以向接收方发送rpc请求用于执行的请求的装置、过程或技术来实现。在各种实现中,计算机实现的过程然后经由rdma读消息从发送方向接收方传输针对接收方控制数据的请求,接收方控制数据包括接收方的空闲时隙列表。接下来,响应于由发送方对所请求的控制数据的接收,经由rdma原子比较和交换消息从发送方向接收方传输针对空闲时隙之一的预留请求。在各种实现中,计算机实现的过程然后经由rdma写消息从发送方向接收方的预留的时隙写入rpc请求。在各种实现中,然后在接收方上执行rpc请求。

作为第二示例,在各种实现中,第一示例经由用于经由rdma读消息从接收方向发送方传输针对发送方控制数据的请求的装置、过程或技术被进一步修改,发送方控制数据包括发送方的空闲时隙列表。此外,响应于由接收方对所请求的控制数据的接收,经由rdma原子比较和交换消息从接收方向发送方传输针对空闲时隙之一的预留请求。最后,经由rdma写消息向发送方的预留时隙写入来自接收方的rpc请求的结果。

作为第三示例,在各种实现中,第二示例经由用于在接收方控制数据中包括在接收方上活动的rpc请求的总数并且在发送方控制数据中包括在发送方上活动的rpc请求的总数的装置、过程或技术被进一步修改。

作为第四示例,在各种实现中,第一示例、第二示例和第三示例中的任一项经由用于在发送方和接收方的启用rdma的nic之间传输所有rdma消息而没有到发送方或接收方的cpu的中断或通知的装置、过程或技术被进一步修改。

作为第五示例,在各种实现中,第一示例、第二示例、第三示例和第四示例中的任一项经由用于发送方托管发送方的控制数据和接收方托管接收方的控制数据的装置、过程或技术被进一步修改。

作为第六示例,在各种实现中,第一示例、第二示例、第三示例、第四示例和第五示例中的任一项经由用于在接收方主存储器中托管rdma消息缓冲器的装置、过程或技术比诶进一步修改,并且其中接收方控制数据中的空闲时隙列表表示接收方的rdma消息缓冲器的对应空闲时隙。

作为第七示例,在各种实现中,第六示例经由用于应用接收方的rpc请求监测器的装置、过程或技术被进一步修改,接收方的rpc请求监测器被配置为应用一个或多个线程来监测接收方的rdma消息缓冲器的相关的rpc请求,并且从rdma消息缓冲器拉取相关的rpc请求,并且将拉取的rpc请求添加到接收方的rpc队列。

作为第八示例,在各种实现中,第七示例经由用于应用接收方的rpc请求监测器的装置、过程或技术被进一步修改,rpc请求监测器被配置为应用rpc请求处理模块,rpc请求处理模块被配置为应用一个更多的线程来监测rpc队列的相关rpc请求,并且调用由相关rpc请求标识的过程用于在接收方上执行rpc请求中使用。

作为第九示例,在各种实现中,一种系统经由用于提供经由启用rdma的nic通信的多个联网服务器的装置、过程或技术被实现,每个联网服务器充当关于其他联网服务器中的一个或多个联网服务器的发送方或接收方。基于rdma的消息传递api被托管在每个服务器上。在各种实现中,应用充当发送方的服务器之一的api以拦截由发送方发起的rpc请求。然后应用发送方的api以指引发送方的nic向充当接收方的服务器之一的nic传输rdma读消息,rdma读消息被配置为请求控制数据,该控制数据包括被托管在接收方上的rdma消息缓冲器的空闲时隙列表。在各种实现中,然后应用发送方的api以指引发送方的nic向接收方的nic传输rdmacas消息,rdmacas消息被配置为预留接收方的rdma消息缓冲器的空闲时隙中的所选择的空闲时隙。在各种实现中,然后应用发送方的api以指引发送方的nic向接收方的nic传输rdma写消息,rdma写消息被配置为向rdma消息缓存的预留时隙写入rpc请求。最后,在各种实现中,应用接收方的api以在接收方上执行rpc请求。

作为第十示例,在各种实现中,第九示例经由用于应用接收方的api以指引接收方的nic向发送方的nic传输rdma读消息的装置、过程或技术被进一步修改,rdma读消息被配置为请求控制数据,该控制数据包括被托管在发送方上的rdma消息缓冲器的空闲时隙列表。然后,应用接收方的api以指引接收方的nic向发送方的nic发送rdmacas消息,rdmacas消息被配置为预留发送方的rdma消息缓冲器的空闲时隙中的所选择的空闲时隙。然后,应用接收方的api以指引接收方的nic向发送方的nic传输rdma写消息,rdma写消息被配置为向发送方的rdma消息缓冲器的预留时隙写入所执行的rpc请求的结果。

作为第十一示例,在各种实现中,第九示例和第十示例中的任一项经由用于在接收方控制数据中提供在接收方上活动的rpc请求的总数的装置、过程或技术被进一步修改。

作为第十二示例,在各种实现中,第九示例、第十示例和第十一示例中的任一项经由用于在发送方控制数据中提供在发送方上活动的rpc请求的总数的装置、过程或技术被进一步修改。

作为第十三示例,在各种实现中,第九示例、第十示例、第十一示例和第十二示例中的任一项经由用于应用接收方的rpc请求监测器的装置、过程或技术被进一步修改,接收方的rpc请求监测器被配置为应用一个或多个线程来监测接收方的rdma消息缓冲器的相关rpc请求,并且从rdma消息缓冲器拉取相关的rpc请求,并且向接收方的rpc队列添加拉取的rpc请求。

作为第十四示例,在各种实现中,第十三示例经由用于通过应用rpc请求处理模块在接收方上执行rpc请求的装置、过程或技术被进一步修改,rpc请求处理模块被配置为应用一个或多个线程来监测rpc队列的相关rpc请求,并且调用由相关rpc请求标识的过程。

作为第十五示例,在各种实现中,一种方法经由用于提供从在发送方上执行的过程接收用以向接收方传输rpc请求用于执行的请求的装置、过程或技术被实现。在各种实现中,该方法然后从发送方的nic向接收方的nic发送预留请求,以经由rdmacas消息来预留被托管在接收方上的rdma消息缓冲器的特定空闲时隙。在各种实现中,该方法然后经由到接收方的nic的rdma写消息来从发送方的nic向rdma消息缓冲器的预留时隙发送rpc请求。在各种实现中,该方法然后应用在接收方上执行的线程来从rdma消息缓冲器拉取rpc请求,并且传递该rpc请求以在接收方上被执行。

作为第十六示例,在各种实现中,第十五示例经由用于经由rdmacas消息从接收方的nic向发送方的nic发送预留请求以预留被托管在发送方上的rdma消息缓冲器的特定空闲时隙并且经由到发送方的nic的rdma写消息从接收方的nic向发送方的rdma消息缓冲器的预留时隙传输所执行的rpc请求的结果的装置、过程或技术被进一步修改。

作为第十七示例,在各种实现中,第十五示例和第十六示例中的任一项经由用于通过应用发送方的nic以向接收方的nic传输rdma读消息来标识被托管在接收方上的rdma消息缓冲器的空闲时隙的装置、过程或技术被进一步修改,rdma读消息被配置为请求控制数据,该控制数据包括被托管在接收方上的rdma消息缓冲器的空闲时隙列表。

作为第十八示例,在各种实现中,第十六示例经由用于通过应用接收方的nic以向发送方的nic传输rdma读消息来标识被托管在发送方上的rdma消息缓冲器的空闲时隙的装置、过程或技术被进一步修改,rdma读消息被配置为请求控制数据,该控制数据包括被托管在发送方上的rdma消息缓冲器的空闲时隙列表。

作为第十九示例,在各种实现中,第十五示例、第十六示例、第十七示例和第十八示例中的任一项经由用于应用线程以在执行rpc请求之前向rpc队列添加拉取的rpc请求的装置、过程或技术被进一步修改。

作为第二十示例,在各种实现中,第十九示例经由用于在rpc队列中包括多个未决rpc请求的装置、过程或技术被进一步修改,rpc队列在fifo的基础上服务于来自rpc队列的多个未决rpc请求。

5.0示例性操作环境:

本文中描述的基于rdma的rpc请求系统实现在多种类型的通用或专用计算系统环境或配置内操作。图5示出了可以在其上实现如本文中描述的基于rdma的rpc请求系统的各种实现和元件的通用计算机系统的简化示例。在图5中所示的简化的计算设备500中由间断线或虚线表示的任何框表示简化的计算设备的备选实现。如下所述,这些备选实现中的任何或全部备选实现可以与贯穿本文档描述的其他备选实现结合使用。

简化的计算设备500通常存在于具有至少一些最小计算能力的设备中,诸如个人计算机(pc)、服务器计算机、手持计算设备、膝上型或移动计算机、诸如手机和个人数字助理的通信设备(pda)、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络pc、小型计算机、大型计算机以及音频或视频媒体播放器。

为了允许设备实现在本文中描述的基于rdma的rpc请求系统实现,设备应当具有足够的计算能力和系统存储器以启用基本的计算操作。特别地,图5中所示的简化的计算设备500的计算能力通常由一个或多个处理单元510示出,并且还可以包括与系统存储器520通信的一个或多个图形处理单元(gpu)515。简化的计算设备500的处理单元510可以是专用微处理器(诸如数字信号处理器(dsp)、超长指令字(vliw)处理器、现场可编程门阵列(fpga)或其他微控制器),或者可以是具有一个或多个处理核并且还可以包括多核处理器中的一个或多个基于gpu的核或其他专用核的传统的中央处理单元(cpu)。

另外,简化的计算设备500还可以包括其他部件,诸如例如网络接口控制器530。简化的计算设备500还可以包括一个或多个传统的计算机输入设备540(例如,触摸屏、触敏表面、定点设备、键盘、音频输入设备、基于语音或声音的输入和控制设备、视频输入设备、触觉输入设备、用于接收有线或无线数据传输的设备等)或这样的设备的任何组合。

类似地,与简化的计算设备500以及与基于rdma的rpc请求系统的任何其他部件或特征(包括对与基于rdma的rpc请求系统相关联的一个或多个用户或其他设备或系统的输入、输出、控制、反馈和响应)的各种交互由各种自然用户界面(nui)场景启用。由基于rdma的rpc请求系统启用的nui技术和场景包括但不限于允许一个或多个用户以“自然”方式与基于rdma的rpc请求系统进行交互的接口技术,而不受诸如鼠标、键盘、遥控器等输入设备所施加的人为约束。

这样的nui实现通过使用各种技术来启用,包括但不限于使用从经由麦克风或其他输入设备540或系统传感器505捕获的用户语音或发声所导出的nui信息。这样的nui实现也通过使用各种技术来启用,包括但不限于根据用户的面部表情以及根据用户的手、手指、手腕、手臂、腿、身体、头部、眼睛等位置、运动或取向从系统传感器505或其他输入设备540导出的信息,其中这样的信息可以使用各种类型的2d或深度成像设备(诸如立体或飞行时间相机系统、红外相机系统、rgb(红,绿和蓝)相机系统等、或这样的设备的任何组合)来捕获。这样的nui实现的另外的示例包括但不限于从触摸和触笔识别、姿势识别(在屏幕上或与屏幕或显示表面相邻)、空中或基于接触的姿势、用户触摸(各种表面、对象或其他用户)、基于悬停的输入或动作等导出的nui信息。这样的nui实现还可以包括但不限于使用各种预测性机器智能过程,其单独地或者与其他nui信息结合地评估当前或过去的用户行为、输入、动作等,以预测诸如用户的意图、愿望和/或目标等信息。不管基于nui的信息的类型或来源如何,这样的信息然后可以用于发起、终止或以其他方式控制基于rdma的rpc请求系统的一个或多个输入、输出、动作或功能特征,或与之交互。

然而,前述示例性nui场景可以通过将人工约束或附加信号的使用与nui输入的任何组合进行组合来进一步增强。这样的人工约束或附加信号可以通过输入设备540(诸如鼠标、键盘和遥控器)或者通过各种远程或用户佩戴的设备来施加或生成,诸如加速度计、用于接收表示用户肌肉生成的电信号的肌电信号的肌电描记术(emg)传感器、心率监测器、用于测量用户出汗的电流皮肤传导传感器、用于测量或以其他方式感测用户大脑活动或电场的可佩戴或远程生物传感器、用于测量用户体温变化或差异的可佩戴或远程生物传感器等。从这些类型的人工约束或附加信号导出的任何这样的信息可以与任何一个或多个nui输入组合,以发起、终止或以其他方式控制基于rdma的rpc请求系统的一个或多个输入、输出、动作或功能特征,或与之交互。

简化的计算设备500还可以包括其他可选部件,诸如一个或多个传统的计算机输出设备550(例如,显示设备555、音频输出设备、视频输出设备、用于传输有线或无线数据传输的设备等)。用于通用计算机的典型的网络接口控制器(nic)530、输入设备540、输出设备550和存储设备560对于本领域的技术人员来说是公知的,并且在本文中不再详细描述。

图5所示的简化的计算设备500还可以包括各种计算机可读介质。计算机可读介质可以是计算设备500能够经由存储设备560访问的任何可用介质,并且包括易失性和非易失性介质,其是可移除介质570和/或不可移除介质580,用于存储诸如计算机可读或计算机可执行指令、数据结构、程序模块或其他数据的信息。

计算机可读介质包括计算机存储介质和通信介质。计算机存储介质指代有形的计算机可读或机器可读介质或存储设备,诸如数字多功能盘(dvd)、蓝光盘(bd)、光盘(cd)、软盘、磁带驱动器、硬盘驱动器、光学驱动器、固态存储器设备、随机访问存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、cd-rom或其他光盘存储装置、智能卡、闪速存储器(例如,卡、棒和钥匙驱动器)、磁带盒、磁带、磁盘存储装置、磁条或其他磁性存储设备。此外,传播的信号不被包括在计算机可读存储介质的范围内。

诸如计算机可读或计算机可执行指令、数据结构、程序模块等的信息的留存也可以通过使用各种前述通信介质(与计算机存储介质相对)中的任一项以对一个或多个调制的数据信号或载波或其他传输机制或通信协议进行编码来实现,并且可以包括任何有线或无线信息传递机制。术语“调制的数据信号”或“载波”通常是指其一个或多个特性以在信号中编码信息的方式被设置或改变的信号。例如,通信介质可以包括诸如有线网络或直接有线连接的携带一个或多个调制的数据信号的有线介质,以及诸如声学、射频(rf)、红外、激光和其他无线介质的用于传输和/或接收一个或多个调制的数据信号或载波的无线介质。

此外,实施本文中描述的各种基于rdma的rpc请求系统实现中的一些或全部实现的软件、程序和/或计算机程序产品或其部分可以以计算机可执行指令或其他数据结构形式、从计算机可读或机器可读介质或存储设备和通信介质的任何期望的组合中被存储、接收、传输或读取。另外,要求保护的主题可以被实现为使用标准编程和/或工程技术来产生软件、固件525、硬件或其任何组合来控制计算机实现所公开的主题的方法、装置或制造品。本文中使用的术语“制造品”旨在包含从任何计算机可读设备或介质可访问的计算机程序。

本文中描述的基于rdma的rpc请求系统实现可以在由计算设备执行的计算机可执行指令(诸如程序模块)的一般上下文中被进一步描述。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、部件、数据结构等。基于rdma的rpc请求系统实现还可以在分布式计算环境中实践,其中任务由一个或多个远程处理设备执行,或者在通过一个或多个通信网络链接的一个或多个设备的云内执行。在分布式计算环境中,程序模块可以位于包括媒体存储设备的本地和远程计算机存储介质中。另外,上述指令可以部分地或全部地实现为硬件逻辑电路,其可以包括或不包括处理器。

备选地或附加地,本文中描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如而非限制,可以使用的说明性类型的硬件逻辑部件包括现场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、片上系统(soc)、复杂可编程逻辑器件(cpld)等。

6.0其他实现:

已经出于说明和描述的目的呈现了对基于rdma的rpc请求系统的前述描述。其不旨在是穷尽的或将所要求保护的主题限制为所公开的确切形式。鉴于上述教导,很多修改和变化是可能的。此外,上述备选实现中的任何或全部实现可以以期望的任何组合来使用,以形成基于rdma的rpc请求系统的附加混合实现。意图是,基于rdma的rpc请求系统的范围不受该详细描述的限制,而是受所附权利要求的限制。尽管已经以特定于结构特征和/或方法动作的语言描述了主题,但是应当理解,所附权利要求中限定的主题不一定限于上面描述的特定特征或动作。相反,上述具体特征和动作被公开作为实现权利要求的示例形式,并且其他等同的特征和动作旨在落在权利要求的范围内。

以上已经描述的内容包括示例实现。当然,不可能为了描述所要求保护的主题而描述部件或方法的每个可能的组合,但是本领域普通技术人员可以认识到,很多另外的组合和排列是可能的。因此,所要求保护的主题旨在涵盖落入上述基于rdma的rpc请求系统的详细描述的精神和范围内的所有这样的改变、修改和变型。

关于由上述部件、设备、电路、系统等执行的各种功能,用于描述这些部件的术语(包括对“装置”的引用)旨在对应(除非另有指示)于执行所描述的部件的规定功能的任何部件(例如,功能等同物),即使在结构上不等同于执行所要求保护的主题的本文所示示例性方面中的功能的所公开的结构。在这方面,还将认识到,前述实现包括系统以及具有用于执行所要求保护的主题的各种方法的动作和/或事件的计算机可执行指令的计算机可读存储介质。

存在实现前述实现的多种方式(诸如适当的应用编程接口(api)、工具包、驱动器代码、操作系统、控件、独立或可下载的软件对象等),其使得应用和服务能够使用本文中描述的实现。所要求保护的主题从api(或其他软件对象)的观点以及根据本文中阐述的实现操作的软件或硬件对象的角度来考虑这种使用。因此,本文中描述的各种实现可以具有完全为硬件、或者部分为硬件并且部分为软件、或者完全为软件的方面。

已经关于几个部件之间的交互描述了上述系统。将要理解,这样的系统和部件可以包括根据前述的各种排列和组合的那些部件或指定的子部件,指定的部件或子部件中的一些部件或子部件、和/或附加的部件。子部件也可以被实现为在通信上耦合到其他部件、而不是被包括在父部件内的部件(例如,分层部件)。

另外,可以将一个或多个部件组合成提供集合功能性的单一部件,或将其分成若干个单独的子部件,并且可以提供任何一个或多个中间层(诸如管理层)以在通信上耦合到这样的子部件以便提供集成功能。本文中描述的任何部件还可以与未在本文中具体描述但是通常已知能够实现这样的交互的一个或多个其他部件交互。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1