利用机架规模架构中的池化存储器进行的网络通信的制作方法

文档序号:11935824阅读:226来源:国知局
利用机架规模架构中的池化存储器进行的网络通信的制作方法与工艺

传统的计算机数据中心大体上基于服务器作为计算的基本单元。每个服务器通常包括其自己的专用计算资源,包括处理器、存储器、磁盘存储设备以及联网硬件和软件。个体服务器可以以高密度一起堆叠到机架中,并且多个机架可以布置在数据中心中。

一些当前的数据中心技术目的在于解聚(disaggregate)计算资源。特别地,机架规模的架构将计算机架重组为用于大型数据中心的计算的基本单元。每个机架可以包括池化(pooled)计算节点、池化存储器和池化存储设备的集合。通过解聚并且池化计算资源,机架规模的架构可以改善数据中心的灵活性和可扩展性,例如通过允许在工作负荷当中动态添加和/或分割计算资源(例如,计算节点和/或存储器)。另外,机架规模的架构可以改善数据中心热管理和电力消耗,这反过来改善了计算密度、性能和效率。

附图说明

通过举例而非限制的方式在附图中示出了本文描述的概念。为了图示的简单和清晰,在图中示出的元件不一定是按比例绘制的。当被认为合适时,在图中重复参考标记以表示对应的或类似的元件。

图1是用于利用机架规模计算架构中的池化存储器进行网络通信的系统的至少一个实施例的简化框图;

图2是图1的系统的若干环境的至少一个实施例的简化框图;

图3是可以由图1和2的池化存储器控制器执行的用于利用池化存储器进行网络通信的方法的至少一个实施例的简化流程图;

图4是可以由图1和图2的计算节点执行的用于利用池化存储器发送网络数据的方法的至少一个实施例的简化流程图;以及

图5是可以由图1和图2的计算节点执行的用于利用池化存储器接收网络数据的方法的至少一个实施例的简化流程图。

具体实施方式

虽然本公开的概念易受到各种修改和替代形式,但是其具体的实施例已经通过例子在附图中示出并将在本文详细描述。然而,应该理解的是,并不意图将本公开的概念限制为所公开的特定形式,而是相反的,意图覆盖于本公开和随附权利要求一致的所有修改、等价和替代。

在说明书中提及“一个实施例”、“实施例”、“示例性的实施例”等表示所描述的实施例可以包括特定特征、结构或特性,但是每个实施例可以或不必包括所述特定特征、结构或特性。此外,这种阶段不必指代同一实施例。此外,当结合实施例描述特定特征、结构或特性时,在本领域技术人员的认为范围内,不管是否明确描述,都可以结合其它实施例实现这种特征、结构或特性。另外,可以理解的是,在列表中包含的“至少一个A、B和C”形式的项可以表示(A);(B);(C);(A和B);(B和C);(A和C);或者(A、B和C)。类似地,在“至少一个A、B或C”的形式中列出的项可以表示(A);(B);(C);(A和B);(B和C);(A和C);或者(A、B和C)。

在一些情况下,公开的实施例可以实现在硬件、固件、软件或其任意组合。所公开的实施例还可以实现为由瞬态或非瞬态机器可读(例如,计算机可读)存储介质携带或存储的指令,其可以被一个或多个处理器读取和执行。机器可读存储介质可以实现为任意存储设备、机构或用于存储或传输机器(例如,易失性或非易失性存储器、磁盘或其它介质设备)可读形式的信息的其它物理结构。

在附图中,可以以特定布置和/或次序示出一些结构或方法特征。然而,可以理解的是,并不要求这种特定的布置和/或次序。而是,在一些实施例中,这种特征可以以不同与附图所示的方式和/或次序布置。另外,特定图中包含的结构或方法特征并不表示暗示这种特征在所有实施例中都要求,并且在一些实施例中,可以不被包含或可以与其它特征组合。

现在参考图1,利用机架规模计算架构中的池化存储器进行网络通信的示例性的系统100包括计算机架102,其包括网络交换机104、池化计算壳体106、以及池化存储器壳体108。池化计算壳体106包括一个或多个计算节点110。每个计算节点110能够使用池化存储器壳体108的池化存储器作为系统存储器。在使用中,在相同计算机架102内从源计算节点110去往目的地计算节点110的网络分组被计算节点110的一个或多个虚拟网络接口控制器(vNIC)处理。不同于经由网络交换机104传输分组数据,计算节点110将消息发送到池化存储器壳体108,并且池化存储器壳体108在池化存储器内复制分组数据,而不会引起网络交换机104上的网络流量。因此,计算机架102可以通过避免在池化存储器壳体108、计算节点110和/或网络交换机104之间多次复制数据,来改善联网吞吐量并减少延迟。

计算机架102可以实现为模块化计算设备,其单独或与其它计算机架102组合能够执行本文描述的功能。例如,计算机架102可以实现为底盘(chassis)或用于机架安装模块化计算单元的其它壳体,例如计算托盘、存储托盘、网络托盘、或传统的机架安装部件(例如服务器或交换机)。在图1中还示出了,计算机架102示例性地包括网络交换机104、池化计算壳体106、以及池化存储器壳体108。计算机架102还可以包括额外的池化计算资源,例如,池化存储设备和池化联网,以及相关联的互连、外围设备、电源、热管理系统和其它部件。另外,虽然图示为包括单个网络交换机104、池化计算壳体106和池化存储器壳体108,但是可以理解的是,在一些实施例中,计算机架102可以包括多于一个每个这些设备。

池化计算壳体106可以实现为任意底盘、托盘、模块、或能够支撑计算节点110和任意相关联的互连、电源、热管理系统或其它相关联部件的其它壳体。虽然图示为包括两个计算节点110,但是可以理解的是,在其它实施例中,池化计算壳体106可以包括三个或更多计算节点110,并且在一些实施例中,这些计算节点110可以是热插拔的或以其它方式配置的。

每个计算节点110可以实现为能够执行本文描述的功能的任意类型的设备。例如,计算节点110可以实现为而非限制为:一个或多个服务器计算设备、计算机主板、子卡或扩展卡、片上系统、计算机处理器、消费者电子设备、智能家电、和/或能够处理网络通信的任意其它计算设备或设备集合。如图1所示,每个图示的计算节点110包括处理器120、I/O子系统122、通信子系统124,并可以包括存储器128。自然,计算节点110可以包括其它或额外的部件,例如在其它实施例中,在服务器计算机(例如,各种输入/输出设备)中常见的那些部件。另外,在一些实施例中,一个或多个图示部件可以并入或以其它方式形成另一部件的一部分。例如,在一些实施例中,存储器128或其一部分可以并入到处理器120中。

处理器120可以实现为任意类型的处理器,其能够执行本文描述的功能。例如,处理器可以实现为单核或多核处理器、数字信号处理器、微控制器、或其它处理器或处理/控制电路。虽然图示为单个处理器120,但是在一些实施例中,每个计算节点100可以包括多个处理器120。类似地,I/O子系统122可以实现为电路和/或部件以促进与处理器120、通信子系统124、存储器128和计算节点110的其它部件的输入/输出操作。例如,I/O子系统122可以实现为或包括存储器控制器中心、输入/输出控制中心、固件设备、通信链路(即,点对点链路、总线链路、电线、电缆、光导、印刷电路板迹线等)和/或其它部件和子系统以促进输入/输出操作。在一些实施例中,I/O子系统122可以形成片上系统(SoC)的一部分,并可以与处理器120、通信子系统124、存储器128和计算节点110的其它部件并入到单个集成电路芯片上。

计算节点110还包括通信子系统124,其可以实现为任意通信电路、设备或其集合,能够在计算节点110、网络交换机104和/或其它远程设备之间进行通信。通信子系统124可以配置为使用任意一个或多个通信技术(例如,有线或无线通信)和相关联的协议(例如,以太网、WiMAX等)来实现这种通信。在示例性的实施例中,通信子系统124包括网络接口控制器(NIC)126,用于与网络交换机104通信网络分组。

存储器128可以实现为任意类型的易失性或非易失性存储器或数据存储设备,其能够执行本文描述的功能。在操作中,存储器128可以存储在计算节点110(例如,操作系统、应用、程序、库和驱动器)操作期间使用的各种数据和软件。在一些实施例中,存储器128可以临时高速缓存或以其它方式存储由池化存储器壳体108维持的数据。如图所示,在一些实施例中,计算节点110可以不包括任意专用板上存储器128。

池化存储器壳体108可以实现为任意底盘、托盘、模块、或能够容纳待被池化且被计算节点110访问的存储器模块的其它壳体。池化存储器壳体108包括池化存储器控制器140和池化存储器142。池化存储器控制器140可以实现为任意的计算机、处理器、微控制器或能够提供计算节点110访问池化存储器142和以其它方式执行本文描述的功能的其它计算设备。例如,池化存储器控制器140可以实现为而非限制于:服务器计算设备、计算机主板或子卡、片上系统、计算机处理器、消费者电子设备、智能家电、和/或能够执行本文描述的功能的任意其它计算设备。

池化存储器142可以实现为任意类型的易失性或非易失性存储器或数据存储设备,其能够执行本文描述的功能。例如,池化存储器142可以实现为大量传统的RAM IDMM。在操作中,每个计算节点110可以使用池化存储器142作为主存储器。因此,池化存储器142可以存储在每个计算节点100(例如,操作系统、应用、程序、库和驱动器)的操作期间使用的各种数据和软件。在一些实施例中,池化存储器控制器140可以在计算节点110中分割或以其它方式隔离池化存储器142的部分。

如图1所示,池化存储器壳体108经由互连144耦合到每个计算节点110。互连144可以实现为任意高速互连,其能够转移数据同时支持存储器语义。互连144可以实现为或包括:存储器控制器中心、输入/输出控制中心、固件设备、通信链路(即,点对点链路、总线链路、电线、电缆、光导、印刷电路板迹线等)和/或其它部件和子系统以促进在计算节点110和池化存储器壳体108之间转移数据。例如,在一些实施例中,互连144可以实现为或包括硅光子交换结构和多个光互连。作为另一例子,互连144可以实现为或包括铜背板。

网络交换机104可以实现为任意联网设备,其能够在计算节点110和/或其它远程计算设备(例如,其它计算机架102的计算节点110)之间交换网络分组。例如,网络交换机104可以实现为机架顶交换机或其它以太网交换机。

计算机架102可以配置为利用远程设备(例如,其它计算机架(未示出))通过网络112发送和接收数据。网络112可以实现为任意数量的各种有线和/或无线网络。例如,网络112可以实现为或包括有线或无线局域网(LAN)、有线或无线广域网(WAN)、和/或公共可访问的全局网络(例如,互联网)、这样,网络112可以包括任意数量的额外设备,例如,额外的计算机、路由器和交换机,以促进系统100的设备间的通信。

现在参考图2,在示例性的实施例中,每个计算节点110在操作期间建立环境200。示例性的环境200包括应用202、联网堆栈206以及虚拟NIC(vNIC)模块210。环境200的各种模块可以实现为硬件、固件、软件或其组合。例如,环境200的每个模块、逻辑和其它部件可以形成处理器120的一部分,或由处理器120建立,或由计算节点110的其它硬件部件建立。

应用202配置为与计算机架102的一个或多个其它计算节点110发送和接收网络分组数据。例如,应用202可以实现为服务器应用、客户端应用或网络应用的任意组合。应用202可以维持用于存储分组数据的一个或多个应用缓冲器204。每个应用缓冲器204可以建立在用户模式存储器空间中,并可以由计算节点110的物理存储器地址标识出。每个应用缓冲器204可以通过池化存储器控制器140存储于池化存储器142中。

联网堆栈206配置为向应用202提供联网服务。例如,联网堆栈206可以向应用202提供TCP/IP联网服务。联网堆栈206可以实现为一个或多个支持应用、库、操作系统部件、设备驱动器、或用于提供联网服务的其它部件。联网堆栈206可以包括一个或多个联网堆栈缓冲器208,其用于存储分组数据。在一些实施例中,每个联网堆栈缓冲器208可以被维持在内核存储器空间中,并可以由计算节点110的物理存储器地址标识出。每个联网堆栈缓冲器208可以通过池化存储器控制器140存储于池化存储器142中。

vNIC模块210配置为对NIC进行仿真并与池化存储器控制器140交换控制消息以与另一计算节点110通信分组数据。在一些实施例中,vNIC模块210可以实现为内核模块、设备驱动器或者能够与联网堆栈206接口的其它部件。vNIC模块210可以包括用于存储分组数据的一个或多个vNIC缓冲器212。在一些实施例中,每个vNIC缓冲器212可以维持在内核存储器空间中,并可以由计算节点110的物理存储器地址标识出。每个vNIC缓冲器212可以通过池化存储器控制器140存储于池化存储器142中。

vNIC模块210还配置为生成、存储或者以其他方式确定唯一标识符,其被称为vNIC ID。vNIC模块210还配置为确定与网络分组的目的地网络地址相关联的目的地vNIC ID。vNIC模块210配置为生成“发送”消息,其包括当前vNIC模块210的源vNIC ID、目的地vNIC模块210的目的地vNIC ID、分组数据的大小、以及分组数据的物理存储器地址。vNIC模块210还配置为将所述发送消息发送到池化存储器控制器140。另外,vNIC模块210配置为从池化存储器控制器140接收“接收”消息,并且响应于该接收消息,识别池化存储器缓冲器的物理存储器地址来接收分组数据(例如,vNIC缓冲器212、联网堆栈缓冲器208、或应用缓冲器204),并将接收到的缓冲器的物理存储器地址发送到池化存储器控制器140。vNIC模块210还可以配置为处理通过计算节点110从池化存储器控制器140接收到的一个或多个中断。在一些实施例中,这些功能可以由子模块执行,例如vNIC ID模块214、发送模块216和/或接收模块218。

仍旧参考图2,在示例性的实施例中,池化存储器控制器140在操作期间建立环境240。示例性的环境240包括vNIC接口模块242、vNIC ID模块244、数据复制模块246以及池化存储器访问模块248。环境240的各种模块可以实现为硬件、固件、软件、或其组合。例如,环境240的每个模块、逻辑和其它部件可以形成池化存储器控制器140或池化存储器壳体108的其它硬件部件的一部分或由其进行建立。

vNIC接口模块242配置为与一个或多个计算节点110的vNIC模块210通信发送消息和接收消息。vNIC接口模块242可以建立用于每个vNIC模块210(例如,一个或多个控制寄存器)的专用I/O空间。所述I/O空间可以被映射到相关联的计算节点110的物理存储器空间。因此,池化存储器控制器140和计算节点110可以通过在预先定义的存储器地址写入数据来通信消息。vNIC接口模块242还可以配置为生成对计算节点110的一个或多个中断以协调消息的传输。

vNIC ID模块244配置为将每个vNIC模块210的vNIC ID与相关联的计算节点110的网络地址相关联。网络地址可以包括例如,与计算节点110相关联的IP地址或其它高级网络地址。vNIC ID模块244可以例如确定与在从计算节点110接收到的“发送”消息中指定的目的地vNIC ID相关联的目的地计算节点110。

数据复制模块246配置为在池化存储器142内将数据从与源vNIC模块210相关联的发送方物理地址复制到与目的地vNIC模块210相关联的接收方物理地址。响应于从目的地计算节点110处接收到接收方物理地址,数据复制模块246复制数据。数据复制模块246可以直接在存储于池化存储器142内的数据缓冲器之间(例如,在vNIC缓冲器212、联网堆栈缓冲器208和/或应用缓冲器204之间)复制数据。

池化存储器访问模块248被配置为允许计算节点110远程访问池化存储器142。应用202和/或环境200的其它模块可以访问池化存储器142作为系统存储器。特别地,如上所述,应用缓冲器204、联网堆栈缓冲器208和vNIC缓冲器212可以被存储于池化存储器142内,并经由池化存储器访问模块248被访问。在一些实施例中,一些或所有池化存储器142可以被隔离、分割或以其它方式专用于特定计算节点110。

现在参考图3,在使用中,池化存储器控制器140可以执行利用池化存储器进行网络通信的方法300。方法300开始于框302,其中池化存储器控制器140初始化与计算机架102的计算节点110相关联的vNIC ID。特别地,池化存储器控制器140使得每个计算节点110的vNIC ID与对应计算节点110的网络地址(例如,IP地址)相关联。在初始化之后,池化存储器控制器140和所有的计算节点110可以能够在网络地址和vNIC ID之间进行映射。因此,vNIC ID可以类似地用于传统的MAC地址,以在MAC层识别计算节点110。池化存储器控制器140可以使用任意技术来从计算节点110获得vNIC ID并将vNIC ID传播到其它计算节点110。在一些实施例中,在框304中,池化存储器控制器140可以监视从计算节点110接收到的vNIC ID。计算节点110例如可以将vNIC ID直接发送到池化存储器控制器140,或者可以将vNIC ID广播到许多附接设备。在一些实施例中,在框306中,池化存储器控制器140可以将接收到的vNIC ID重新传输到其它计算节点110。

在框308中,池化存储器控制器140监视从计算节点110接收到的“发送”消息。池化存储器控制器140可以使用任意技术来监视来自计算节点110的消息。在框310中,在一些实施例中,池化存储器控制器140可以从专用于每个计算节点110的vNIC的I/O空间进行读取。I/O空间可以实现为计算节点110可访问的任意存储器区域,并能用于将信息转移到池化存储器控制器140。例如,I/O空间可以包括池化存储器控制器140的一个或多个控制寄存器。在框312中,池化存储器控制器140确定是否已经接收到任意发送消息。如果否,则方法300循环回框308,以继续监视发送消息。如果已经接收到发送消息,则方法300前进到框314。

在框314中,池化存储器控制器140读取发送消息并提取其包含的值。特别地,池化存储器控制器140从发送消息读取源vNIC ID、目的地vNIC ID、分组大小以及发送方物理存储器地址。源vNIC ID和目的地vNIC ID分别表示对应于源计算节点110和目的地计算节点110的vNIC ID。分组大小表示待被转移的分组数据量(例如,字节(byte)或八位字节(octet)的数量)。发送方物理存储器地址表示池化存储器142内分组数据的起始物理地址。因此,发送方物理存储器地址表示源计算节点110使用的分组数据的存储器地址。

在框316中,池化存储器控制器140发送“接收”消息到由发送消息的目的地vNIC ID指定的目的地vNIC。在框318中,池化存储器控制器140在接收消息中包括源vNIC ID、目的地vNIC ID和分组大小。在框320中,池化存储器控制器140将接收消息写入专用于目的地vNIC的I/O空间。在框322中,池化存储器控制器140生成对与目的地vNIC ID相关联的计算节点110的中断。池化存储器控制器140可以识别计算节点110的网络地址或以其它方式识别计算节点110,以便识别目的地计算节点110和/或生成中断。如下文结合图5进一步描述的,目的地计算节点110可以在接收中断之后从其专用I/O空间读取接收消息。

在框324中,池化存储器控制器140从目的地vNIC读取接收方物理存储器地址。接收方物理存储器地址表示可以接收分组数据的池化存储器142内的缓冲器的起始物理地址。因此,接收器物理存储器地址表示目的地计算节点110使用的缓冲器的存储器地址。池化存储器控制器140可以使用任意技术来读取接收方物理存储器地址。在一些实施例中,在框326中,池化存储器控制器140可以读取专用于目的地vNIC的I/O空间。

在框328中,在池化存储器142中,池化存储器控制器140将分组数据从发送方物理存储器地址复制到接收方物理存储器地址。换句话说,池化存储器控制器140将分组大小的量的数据从源计算节点110的分组数据复制到目的地计算节点110的接收缓冲器中。因为分组数据是在池化存储器142内复制的,所以分组数据并不跨池化存储器壳体108和计算节点110之间的互连144而复制,并且分组数据也不跨网络交换机104和/或网络112而复制。

在框330中,池化存储器控制器140通知源计算节点110和目的地计算节点110“分组数据复制已完成”。池化存储器控制器140可以使用任意技术来通知计算节点110。在一些实施例中,在框332中,池化存储器控制器140可以生成对每个计算节点110的中断。在通知计算节点110之后,方法300循环回到框308以监视额外的发送消息。

现在参考图4,在使用中,计算节点110可以执行用于利用池化存储器发送网络数据的方法400。方法400开始于框402,其中计算节点110将其vNIC ID发送到池化存储器控制器140和/或计算机架102的其它计算节点110。计算节点110例如可以直接将其vNIC ID发送到池化存储器控制器140或可以将其vNIC ID广播到许多附接设备。在框404中,计算节点110从池化存储器控制器140和/或其它计算节点110接收vNIC ID和相关联的网络地址。例如,计算节点110可以直接从池化存储器控制器140接收vNIC ID,或者可以监听来自其它设备的广播消息。在接收到vNIC ID和网络地址之后,计算节点110可以能够确定与计算机架102的任意计算节点110的网络地址相关联的vNIC ID。

在框406中,计算节点110监视待发送到计算机架102的另一计算节点110的网络分组。计算节点110可以使用任意技术来监视网络分组。例如,计算节点110可以确定应用202是否已经提交了用于传输到联网堆栈206的网络分组。计算节点110还可以确定网络分组是否定址到计算机架102内的计算节点110。虽然被示为计算节点110监视网络分组,但是应该理解的是,在一些实施例中,应用202可以直接发起网络传输操作,而无需计算节点110执行对网络分组的任何轮询。在一些实施例中,应用202可以绕过联网堆栈206,并将网络分组直接提交给vNIC模块210用于传输。在框408中,计算节点110确定网络分组是否准备好被传输。如果否,则方法400循环回框406,以继续监视分组。如果网络分组准备好被传输,则方法400前进到框410。

在框410中,计算节点110确定与网络分组的目的地网络地址相关联的目的地vNIC ID。例如,计算节点110可以基于网络分组的目的地IP地址来确定目的地vNIC ID。当然,如果目的地IP地址未解析到计算机架102内的计算节点110,则不存在相关联的vNIC ID,并且计算节点110可以利用联网堆栈206和NIC 126来处理网络分组。

在框412中,计算节点110确定池化存储器142内的分组数据的物理地址。物理地址指的是在将被传输到目的地vNIC的分组数据的池化存储器142中的源位置。例如,物理地址可以指的是分别由应用202、联网堆栈206、以及vNIC模块210维持的下列之一:应用缓冲器204、联网堆栈缓冲器208、或vNIC缓冲器212。在一些实施例中,在框414中,计算节点110可以将分组数据从由联网堆栈206管理的联网堆栈缓冲器208复制到由vNIC模块210管理的vNIC缓冲器212中。在这些实施例中,分组数据的物理地址可以位于vNIC缓冲器212中。例如,在许多实施例中,分组数据可以从应用缓冲器204复制到联网堆栈缓冲器208,然后再被复制到vNIC缓冲器212中。因此,因为缓冲器204、208、212存储于池化存储器142中,在这些实施例中,可以通过计算节点110和池化存储器壳体108之间的互连144多次复制相同的分组数据。

在一些实施例中,在框416中,计算节点110可以将数据从应用缓冲器204直接复制到vNIC缓冲器212中。在这些实施例中,分组数据的物理地址还可以位于vNIC缓冲器212中。因此,与从应用缓冲器204到联网堆栈缓冲器208的复制相比,可以避免在计算节点110和池化存储器壳体108之间的分组数据的一个或多个复制。在一些实施例中,在框418中,计算节点110可以识别在应用缓冲器204本身中分组数据的物理地址。在这些实施例中,通过计算节点110和池化存储器壳体108之间的互连144没有传输分组数据的额外复制。

在框420中,计算节点110生成“发送”消息,其包括目的地vNIC ID、源vNIC ID、分组数据的物理存储器地址、以及分组大小。在框422中,计算节点110将发送消息传输到池化存储器控制器140。计算节点110可以使用任意技术来传输发送消息。在一些实施例中,在框424中,计算节点110可以将发送消息写入到专用于vNIC模块210的I/O空间。如以上结合图3的框310描述的,池化存储器控制器140可以监视用于从vNIC模块210发送消息的专用I/O空间。

在框426中,计算节点110等待来自池化存储器控制器140的“网络分组发送已完成”的通知。如上结合图3所描述的,响应于接收发送消息,池化存储器控制器140将分组数据从与源计算节点110相关联的物理存储器位置复制到在池化存储器142中与目的地计算节点110相关联的另一物理位置。计算节点110可以使用任意技术来等待来自池化存储器控制器140的通知。在一些实施例中,在框428中,计算节点110等待由池化存储器控制器140生成的中断。在接收“发送操作已完成”的通知之后,方法400循环回框406以监视额外的网络分组。

现在参考图5,在使用中,计算节点110可以执行用于利用池化存储器接收网络分组的方法500。方法500开始于框502,其中计算节点110监视从池化存储器控制器140接收到的接收消息。如上所述,池化存储器控制器140可以响应于从源计算节点110接收“发送”消息,而将“接收”消息传输到目的地计算节点110。计算节点110可以使用任何技术监视从池化存储器控制器140接收的消息。在一些实施例中,在框504中,计算节点110可以等待来自池化存储器控制器140的中断。在框506中,计算节点110确定是否已经接收到接收消息。如果否,则方法500循环回框502,以继续监视接收消息。如果接收到接收消息,则方法500前进到框508。

在框508中,计算节点110读取接收消息并提取其包含的值。特别地,计算节点110从接收消息读取源vNIC ID、目的地vNIC ID、以及分组大小。计算节点110可以从专用于vNIC模块210的I/O空间读取接收消息。

在框510中,计算节点110识别用于池化存储器142中的分组数据的接收缓冲器。接收缓冲器可以由池化存储器142中的接收缓冲器的起始物理存储器地址来标识。接收缓冲器足够大以容纳所有分组数据;也就是说,接收缓冲器可以与接收消息内指定的分组数据一样大或比其更大。计算节点110可以使用任意技术来识别接收缓冲器。例如,计算节点110可以分配新的缓冲器、识别先前分配的缓冲器、或重新使用现有缓冲器。在一些实施例中,在框512中,计算节点110可以识别由vNIC模块210管理的vNIC缓冲器212。vNIC缓冲器212可以位于内核空间中,或以其他方式由vNIC模块210管理,并因此分组数据可在被接收之后被复制到用户空间中以便被应用202使用。在一些实施例中,在框514中,计算节点110可以识别由联网堆栈206管理的联网堆栈缓冲器208。联网堆栈缓冲器208可以位于内核空间中或以其他方式由计算节点110的操作系统管理,并因此分组数据可在被接收之后被复制到用户空间中以便由应用202使用。然而,通过在联网堆栈缓冲器208中直接接收分组数据,可以避免分组数据的一个或多个复制(例如,可以避免从vNIC缓冲器212到联网堆栈缓冲器208的复制)。

在一些实施例中,在框516中,计算节点110可以识别由应用202维持的应用缓冲器204。应用缓冲器204可以位于用户空间中并由应用202直接管理。因此,在应用缓冲器204中直接接收分组数据还可以减少分组数据的复制次数(例如,通过消除从vNIC缓冲器212和/或联网堆栈缓冲器208到应用缓冲器204的复制)。

在框518中,计算节点110将接收缓冲器的物理地址传输到池化存储器控制器140。如上所述,响应于接收到物理地址,池化存储器控制器140在池化存储器142中将分组数据从源计算节点110可访问的存储器复制到目的地计算节点110可访问的接收缓冲器中。计算节点110可以使用任何技术来传输物理地址。在一些实施例中,在框520中,计算节点110可以将物理地址写入到专用于vNIC模块210的I/O空间。

在框522中,计算节点110等待来自池化存储器控制器140的“网络分组接收已完成”的通知。计算节点110可以使用任何技术来等待来自池化存储器控制器140的通知。在一些实施例中,在框524中,计算节点110等待由池化存储器控制器140生成的中断。在分组接收完成之后,计算节点可以将接收到的分组数据输送到应用202,例如,通过将分组数据复制到联网堆栈缓冲器208、应用缓冲器204,或者以其它方式通知应用202。在接收到“发送操作已完成”的通知之后,方法500循环回框502以监视额外接收消息。

例子

在下文提供了本文公开的设备、系统和方法的示例性的例子。设备、系统和方法的实施例可以包括任意一个或多个下述例子以及其任意组合。

例子1包括一种用于在池化存储器架构中进行节点间通信的池化存储器控制器,所述池化存储器控制器包括:池化存储器访问模块,用于管理通过第一计算节点和第二计算节点对池化存储器的远程访问;虚拟网络接口控制器(vNIC)接口模块,用于:从第一计算节点接收发送消息,其中所述发送消息包括与第一计算节点相关联的源vNIC标识符(vNIC ID)、与第二计算节点相关联的目的地vNIC ID、以及发送方物理存储器地址,并且其中所述发送方物理存储器地址标识所述池化存储器内的分组数据;将接收消息传输到第二计算节点,其中所述接收消息包括源vNIC ID和目的地vNIC ID;以及响应于传输接收消息,从第二计算节点接收接收方物理存储器地址,其中所述接收方物理存储器地址标识所述池化存储器内的存储器位置;以及数据复制模块,用于响应于接收到所述接收方物理存储器地址,在所述池化存储器内将分组数据从发送方物理存储器地址复制到接收方物理存储器地址。

例子2包括例子1所述的主题,并且其中,接收所述发送消息包括:读取所述池化存储器控制器的专用于所述第一计算节点的第一输入/输出(I/O)空间内的第一存储器位置。

例子3包括例子1和2中任一项所述的主题,并且其中,传输所述接收消息包括:写入所述池化存储器控制器的专用于所述第二计算节点的第二I/O空间内的第二存储器位置;以及响应于写入第二存储器位置,生成对第二计算节点的中断。

例子4包括例子1-3中任一项所述的主题,并且其中,接收所述接收方物理存储器地址包括:读取在第二I/O空间内的第二存储器位置。

例子5包括例子1-4中任一项所述的主题,并且其中,所述发送消息还包括分组数据的分组大小;所述接收消息还包括所述分组数据的分组大小;以及复制分组数据包括复制与分组数据的分组大小相等的量的数据。

例子6包括例子1-5中任一项所述的主题,并且其中,所述vNIC接口模块还响应于复制分组数据来通知第一计算节点和第二计算节点复制已完成。

例子7包括例子1-6中任一项所述的主题,并且其中通知第一计算节点和第二计算节点复制已完成包括:生成对第一计算节点的第一中断;以及生成对第二计算节点的第二中断。

例子8包括一种用于在池化存储器架构中进行节点间通信的计算节点,所述计算节点包括:虚拟网络接口控制器标识符(vNIC ID)模块,用于确定与网络分组的目的地网络地址相关联的目的地vNIC ID;以及发送模块,用于:确定网络分组的分组数据的物理地址,其中所述物理地址标识计算节点可访问的池化存储器内的存储器位置;生成发送消息,其中所述发送消息包括与计算节点相关联的源vNIC ID、目的地vNIC ID以及物理地址;以及将所述发送消息传输到池化存储器控制器,其中所述计算节点将经由池化存储器控制器远程访问所述池化存储器。

例子9包括例子8所述的主题,并且其中,确定物理地址包括:复制分组数据到位于所述物理地址处的内核模式驱动器缓冲器。

例子10包括例子8和9中任一项所述的主题,并且其中,复制分组数据包括:从位于池化存储器内的内核模式联网堆栈缓冲器复制分组数据。

例子11包括例子8-10中任一项所述的主题,并且其中复制分组数据包括:从位于池化存储器内的用户模式应用缓冲器复制分组数据。

例子12包括例子8-11中任一项所述的主题,并且其中确定物理地址包括:确定位于所述池化存储器内的用户模式应用缓冲器的物理地址。

例子13包括例子8-12中任一项所述的主题,并且其中,传输发送消息包括:写入在池化存储器控制器的专用于计算节点的输入/输出(I/O)空间内的第一存储器位置。

例子14包括例子8-13中任一项所述的主题,并且其中发送消息还包括分组数据的分组大小。

例子15包括例子8-14中任一项所述的主题,并且其中发送模块还响应于传输发送消息,等待来自池化存储器控制器的完成发送的通知。

例子16包括例子8-15中任一项所述的主题,并且其中等待通知包括:等待来自池化存储器控制器的中断。

例子17包括一种用于在池化存储器架构中进行节点间通信的计算节点,所述计算节点包括接收模块,用于:接收来自池化存储器控制器的接收消息,其中所述计算节点经由池化存储器控制器远程访问存储于池化存储器中的分组数据;识别计算节点可访问的池化存储器的接收缓冲器的物理存储器地址,其中所述接收缓冲器能够存储分组数据;以及响应于接收到所述接收消息,将所述接收缓冲器的物理存储器地址传输到池化存储器控制器。

例子18包括例子17所述的主题,并且其中,所述接收缓冲器包括位于所述池化存储器内的内核模式联网堆栈缓冲器。

例子19包括例子17和18中任一项所述的主题,并且其中,所述接收缓冲器包括位于所述池化存储器内的内核模式联网堆栈缓冲器。

例子20包括例子17-19中任一项所述的主题,并且其中所述接收缓冲器包括位于所述池化存储器内的用户模式应用缓冲器。

例子21包括例子17-20中任一项所述的主题,并且其中接收所述接收消息包括:从池化存储器控制器接收中断;以及响应于接收到中断,从池化存储器控制器的专用于计算节点的输入/输出(I/O)空间内的第一存储器位置进行读取。

例子22包括例子17-21中任一项所述的主题,并且其中传输物理存储器地址包括:写入在I/O空间内第一存储器位置。

例子23包括例子17-22中任一项所述的主题,并且其中,所述接收消息还包括分组数据的分组大小;以及接收缓冲器能够存储分组大小的量的数据。

例子24包括例子17-23中任一项所述的主题,并且其中接收模块还响应于传输物理存储器地址,等待来自池化存储器控制器的完成接收的通知。

例子25包括例子17-24中任一项所述的主题,并且其中等待通知包括:等待来自池化存储器控制器的中断。

例子26包括一种用于在池化存储器架构中进行节点间通信的系统,所述系统包括池化存储器控制器、第一计算节点以及第二计算节点,其中所述池化存储器控制器包括:池化存储器访问模块,用于管理通过第一计算节点和第二计算节点到池化存储器的远程访问;虚拟网络接口控制器(vNIC)接口模块,用于:从第一计算节点接收发送消息,其中所述发送消息包括与第一计算节点相关联的源vNIC标识符(vNIC ID)、与第二计算节点相关联的目的地vNIC ID、以及发送方物理存储器地址,并且其中所述发送方物理存储器地址标识所述池化存储器内的分组数据;将接收消息传输到第二计算节点,其中所述接收消息包括源vNIC ID和目的地vNIC ID;以及响应于传输接收消息,从第二计算节点接收接收方物理存储器地址,其中所述接收方物理存储器地址标识所述池化存储器内的存储器位置;以及数据复制模块,用于响应于接收到所述接收方物理存储器地址,在所述池化存储器内将分组数据从发送方物理存储器地址复制到接收方物理存储器地址。

例子27包括例子26所述的主题,并且其中所述第一计算节点包括:虚拟网络接口控制器标识符(vNIC ID)模块,用于确定与网络分组的目的地网络地址相关联的目的地vNIC ID;以及发送模块,用于:确定网络分组的分组数据的发送方物理地址,其中所述发送方物理地址标识在第一计算节点可访问的池化存储器内的存储器位置;生成发送消息,其中所述发送消息包括源vNIC ID、目的地vNIC ID以及物理地址;以及将所述发送消息传输到池化存储器控制器,其中所述计算节点将经由池化存储器控制器远程访问所述池化存储器。

例子28包括例子26和27中任一项所述的主题,并且其中第二计算节点包括接收模块,用于:接收来自池化存储器控制器的接收消息,其中第二计算节点经由池化存储器控制器远程访问存储于池化存储器中的分组数据;识别在池化存储器内接收缓冲器的接收方物理存储器地址,其中所述接收缓冲器能够存储分组数据;以及响应于接收到所述接收消息,将所述接收缓冲器的接收方物理存储器地址传输到池化存储器控制器。

例子29包括一种用于在池化存储器架构中进行节点间通信的方法,所述方法包括:通过池化存储器控制器,从第一计算节点接收发送消息,其中所述发送消息包括与第一计算节点相关联的源虚拟网络接口控制器标识符(vNIC ID)、与第二计算节点相关联的目的地vNIC ID、以及发送方物理存储器地址,并且其中所述发送方物理存储器地址标识第一计算节点可访问的池化存储器内的分组数据;通过所述池化存储器控制器,将接收消息传输到第二计算节点,其中所述接收消息包括源vNIC ID和目的地vNIC ID;通过所述池化存储器控制器,响应于传输接收消息,从第二计算节点接收接收方物理存储器地址,其中所述接收方物理存储器地址标识对于第二计算节点可访问的池化存储器内的存储器位置;以及通过所述池化存储器控制器,在所述池化存储器内将分组数据从发送方物理存储器地址复制到接收方物理存储器地址。

例子30包括例子29所述的主题,并且其中,接收所述发送消息包括:从所述池化存储器控制器的专用于所述第一计算节点的第一输入/输出(I/O)空间内的第一存储器位置进行读取。

例子31包括例子29和30中任一项所述的主题,并且其中,传输接收消息包括:写入所述池化存储器控制器的专用于所述第二计算节点的第二I/O空间内的第二存储器位置;以及响应于写入第二存储器位置生成对第二计算节点的中断。

例子32包括例子29-31中任一项所述的主题,并且其中,接收所述接收方物理存储器地址包括:读取第二I/O空间内的第二存储器位置。

例子33包括例子29-32中任一项所述的主题,并且其中,发送消息还包括分组数据的分组大小;接收消息还包括所述分组数据的分组大小;以及复制分组数据包括复制与分组数据的分组大小相等的量的数据。

例子34包括例子29-33中任一项所述的主题,并且还包括:通过池化存储器控制器,响应于复制分组大小的量的数据来通知第一计算节点和第二计算节点复制已完成。

例子35包括例子29-34中任一项所述的主题,并且其中通知第一计算节点和第二计算节点复制已完成包括:生成对第一计算节点的第一中断;以及生成对第二计算节点的第二中断。

例子36包括一种用于在池化存储器架构中进行节点间通信的方法,所述方法包括:通过计算节点,确定与网络分组的目的地网络地址相关联的目的地虚拟网络接口控制器标识符(vNIC ID);通过计算节点,确定网络分组的分组数据的物理地址,其中所述物理地址标识计算节点可访问的池化存储器的存储器位置;通过计算节点,生成发送消息,其中所述发送消息包括与计算节点相关联的源vNIC ID、目的地vNIC ID以及物理地址;以及通过计算节点,将所述发送消息传输到池化存储器控制器,其中所述计算节点经由池化存储器控制器远程访问池化存储器。

例子37包括例子36所述的主题,并且其中,确定物理地址包括:复制分组数据到位于所述物理地址处的内核模式驱动器缓冲器。

例子38包括例子36和37中任一项所述的主题,并且其中,复制分组数据包括:从位于池化存储器内的内核模式联网堆栈缓冲器复制分组数据。

例子39包括例子36-38中任一项所述的主题,并且其中复制分组数据包括:从位于池化存储器内的用户模式应用缓冲器复制分组数据。

例子40包括例子36-39中任一项所述的主题,并且其中确定物理地址包括:确定位于所述池化存储器内的用户模式应用缓冲器的物理地址。

例子41包括例子36-41中任一项所述的主题,并且其中,传输发送消息包括:写入在池化存储器控制器的专用于计算节点的输入/输出(I/O)空间内的第一存储器位置。

例子42包括例子36-41中任一项所述的主题,并且其中发送消息还包括分组数据的分组大小。

例子43包括例子36-42中任一项所述的主题,还包括:通过计算节点响应于传输发送消息,等待来自池化存储器控制器的完成发送的通知。

例子44包括例子36-43中任一项所述的主题,并且其中等待通知包括:等待来自池化存储器控制器的中断.

例子45包括一种用于在池化存储器架构中进行节点间通信的方法,所述方法包括:通过计算节点,接收来自池化存储器控制器的接收消息,其中所述计算节点经由池化存储器控制器远程访问存储于池化存储器中的分组数据;通过计算节点,识别计算节点可访问的池化存储器内的接收缓冲器的物理存储器地址,其中所述接收缓冲器能够存储分组数据;以及通过计算节点,响应于接收到所述接收消息,将所述接收缓冲器的物理存储器地址传输到池化存储器控制器。

例子46包括例子45所述的主题,并且其中,识别接收缓冲器包括:识别位于池化存储器内的内核模式驱动器缓冲器。

例子47包括例子45和46中任一项所述的主题,并且其中,识别接收缓冲器包括:识别位于池化存储器内的内核模式联网堆栈缓冲器。

例子48包括例子45-47中任一项所述的主题,并且其中,识别接收缓冲器包括:识别位于池化存储器内的用户模式应用缓冲器。

例子49包括例如45-48中任一项所述的主题,并且其中,接收所述接收消息包括:从池化存储器控制器接收中断;以及响应于接收到中断,从池化存储器控制器的专用于计算节点的输入/输出(I/O)空间内的第一存储器位置进行读取。

例子50包括例子45-49中任一项所述的主题,并且其中传输物理存储器地址包括:写入在I/O空间内第一存储器位置。

例子51包括例子45-50中任一项所述的主题,并且其中,所述接收消息还包括分组数据的分组大小;以及接收缓冲器能够存储分组大小的量的数据。

例子52包括例子45-51中任一项所述的主题,并且还包括:通过计算节点,响应于传输物理存储器地址,等待来自池化存储器控制器的完成接收的通知。

例子53包括例子45-52中任一项所述的主题,并且其中等待通知包括:等待来自池化存储器控制器的中断。

例子54包括一种计算设备,其包括:处理器;以及存储有多个指令的存储器,当被所述处理器执行时,所述指令使得计算设备执行例子29-53中任一项所述的方法。

例子55包括一种或多种包括存储于其上的多个指令的机器可读存储介质,响应于被执行,所述指令导致计算设备执行例子29-53中任一项所述的方法。

例子56包括一种计算设备,其包括用于执行例子29-53中任一项所述的方法的单元。

例子57包括一种用于在池化存储器架构中进行节点间通信的池化存储器控制器,所述池化存储器控制器包括:用于从第一计算节点接收发送消息的单元,其中所述发送消息包括与第一计算节点相关联的源虚拟网络接口控制器标识符(vNIC ID)、与第二计算节点相关联的目的地vNIC ID、以及发送方物理存储器地址,并且其中所述发送方物理存储器地址标识第一计算节点可访问的池化存储器内的分组数据;用于将接收消息传输到第二计算节点的单元,其中所述接收消息包括源vNIC ID和目的地vNIC ID;以及用于响应于传输接收消息从第二计算节点接收接收方物理存储器地址的单元,其中所述接收方物理存储器地址标识所述池化存储器内第二节点可访问的存储器位置;以及用于在池化存储器内将分组数据从发送方物理存储器地址复制到接收方物理存储器地址的单元。

例子58包括例子57所述的主题,并且其中,用于接收所述发送消息的单元包括:用于读取所述池化存储器控制器的专用于所述第一计算节点的第一输入/输出(I/O)空间内的第一存储器位置的单元。

例子59包括例子57和58中任一项所述的主题,并且其中,用于传输所述接收消息的单元包括:用于写入所述池化存储器控制器的专用于所述第二计算节点的第二I/O空间内的第二存储器位置的单元;以及用于响应于写入第二存储器位置生成对第二计算节点的中断的单元。

例子60包括例子57-59中任一项所述的主题,并且其中,用于接收所述接收方物理存储器地址的单元包括:用于读取在第二I/O空间内的第二存储器位置的单元。

例子61包括例子57-60中任一项所述的主题,并且其中,所述发送消息还包括分组数据的分组大小;所述接收消息还包括所述分组数据的分组大小;以及用于复制分组数据的单元包括用于复制与分组数据的分组大小相等的量的数据的单元。

例子62包括例子57-61中任一项所述的主题,并且还包括:用于响应于复制分组大小的量的数据来通知第一计算节点和第二计算节点复制已完成的单元。

例子63包括例子57-62中任一项所述的主题,并且其中用于通知第一计算节点和第二计算节点复制已完成的单元包括:用于生成对第一计算节点的第一中断的单元;以及用于生成对第二计算节点的第二中断的单元。

例子64包括一种用于在池化存储器架构中进行节点间通信的计算节点,所述计算节点包括:用于确定与网络分组的目的地网络地址相关联的目的地虚拟网络接口控制器标识符(vNIC ID)的单元;以及用于确定网络分组的分组数据的物理地址的单元,其中所述物理地址标识计算节点可访问的池化存储器内的存储器位置;用于生成发送消息的单元,其中所述发送消息包括与计算节点相关联的源vNIC ID、目的地vNIC ID以及物理地址;以及用于将所述发送消息传输到池化存储器控制器的单元,其中所述计算节点将经由池化存储器控制器远程访问所述池化存储器。

例子65包括例子64所述的主题,并且其中,用于确定物理地址的单元包括:用于复制分组数据到位于所述物理地址处的内核模式驱动器缓冲器的单元。

例子66包括例子64和65中任一项所述的主题,并且其中,用于复制分组数据的单元包括:用于从位于池化存储器内的内核模式联网堆栈缓冲器复制分组数据的单元。

例子67包括例子64-66中任一项所述的主题,并且其中,用于复制分组数据的单元包括:用于从位于池化存储器内的用户模式应用缓冲器复制分组数据的单元。

例子68包括例子64-67中任一项所述的主题,并且其中,用于确定物理地址的单元包括:用于确定位于所述池化存储器内的用户模式应用缓冲器的物理地址的单元。

例子69包括例子64-68中任一项所述的主题,并且其中,用于传输发送消息的单元包括:用于写入在池化存储器控制器的专用于计算节点的输入/输出(I/O)空间内的第一存储器位置的单元。

例子70包括例子64-69中任一项所述的主题,并且其中,发送消息还包括分组数据的分组大小。

例子71包括例子64-70中任一项所述的主题,并且还包括:用于响应于传输发送消息等待来自池化存储器控制器的完成发送的通知的单元。

例子72包括例子64-71中任一项所述的主题,并且其中,用于等待通知的单元包括:用于等待来自池化存储器控制器的中断的单元。

例子73包括一种用于在池化存储器架构中进行节点间通信的计算节点,所述计算节点包括:用于接收来自池化存储器控制器的接收消息的单元,其中所述计算节点经由池化存储器控制器远程访问存储于池化存储器中的分组数据;用于识别计算节点可访问的池化存储器内的接收缓冲器的物理存储器地址的单元,其中所述接收缓冲器能够存储分组数据;以及用于响应于接收到所述接收消息将所述接收缓冲器的物理存储器地址传输到池化存储器控制器的单元。

例子74包括例子73所述的主题,并且其中,用于识别接收缓冲器的单元包括用于识别位于所述池化存储器内的内核模式缓冲器的单元。

例子75包括例子73和74中任一项所述的主题,并且其中,用于识别接收缓冲器的单元包括用于识别位于所述池化存储器内的内核模式联网堆栈缓冲器。

例子76包括例子73-75中任一项所述的主题,并且其中,用于识别接收缓冲器的单元包括用于识别位于所述池化存储器内的用户模式应用缓冲器的单元。

例子77包括例子73-76中任一项所述的主题,并且其中,用于接收所述接收消息的单元包括:用于从池化存储器控制器接收中断的单元;以及用于响应于接收到中断从池化存储器控制器的专用于计算节点的输入/输出(I/O)空间内的第一存储器位置进行读取的单元。

例子78包括例子73-77中任一项所述的主题,并且其中,用于传输物理存储器地址的单元包括:用于写入在I/O空间内第一存储器位置的单元。

例子79包括例子73-78中任一项所述的主题,并且其中,所述接收消息还包括分组数据的分组大小;以及接收缓冲器能够存储分组大小的量的数据。

例子80包括例子73-79中任一项所述的主题,并且还包括用于响应于传输物理存储器地址等待来自池化存储器控制器的完成接收的通知的单元。

例子81包括例子73-80中任一项所述的主题,并且其中,用于等待通知的单元包括:用于等待来自池化存储器控制器的中断的单元。

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