版权声明
本专利文件的公开内容的一部分包含受版权保护的材料。版权所有者不反对专利文件或专利公开内容中的任何一个的复制,如其在专利与商标局专利文档或记录中出现的,但是除此之外无论如何保留所有的版权权利。
相关申请的交叉引用
本申请要求于2016年3月7日提交的美国临时专利申请no.62/304,348的利益,其通过引用并入本文。
发明背景
1.发明领域
本发明涉及用于实时通信的网络布置和网络协议。更具体地,本发明涉及通过远程直接存储器访问的信息或其他信号在存储器、输入/输出设备或中央处理单元之间的互连和转移。
2.相关技术的描述
本文使用的某些首字母缩略词和缩写的意义在表1中给出。
表1-首字母缩略词和缩写
rdma是从一台计算机的存储器到其它计算机的存储器的直接存储器访问,而不涉及任一台计算机的操作系统。常见的rdma实现方式包括通过融合以太网的rdma(roce)、infiniband和iwarp。rdma支持一组受限的原子操作:
(1)提取和添加(faad)。这里原子性地修改存储器位置的内容:将x设置为x+a,其中,x是存储器位置,而a是某个值。
在添加操作之前的位置中的数据被返回给请求者。当该操作在并发环境中执行时,其它进程从未看见中间结果。
(2)比较和交换(cas)。这个操作读取远程数据,将其与比较值进行比较,并且如果它们相等,则将远程数据与给定的交换数据进行交换。cas操作的原子性确保新值是基于最新信息计算的;如果远程数据与此同时已经被另一线程更新,则置换将会失败。操作的结果应指示置换是成功还是失败。
rdma通常由消息传递协议作为媒介。消息传递接口(mpi)是通信协议,其被广泛用于高性能计算系统中的进程间的消息交换。这种系统通常使用rdma传输。用户利用mpi可定义一组进程,称为通信器。每个通信器具有相对于系统上的所有其它通信器的唯一通信器标识符(整数)。
在一个示例中,公开号为2010/0106948的美国专利申请提出涉及对队列的rdma访问的共享消息队列的管理。处理设备合作以处理队列数据。当一个处理设备成功访问队列数据时,队列数据被锁定用于该处理设备的独占使用。处理设备能够处理数据并返回已处理的队列数据。
发明概述
本发明的实施方式通过实现对通用对象池的原子访问来扩展当前支持的通过rdma传输的原子操作。对象池可由网络接口控制器以完全卸载的方式通过网络来访问,即,没有主机处理器的任何参与。甚至在存在多个代理访问相同的数据结构的情况下,也保证了在应答者节点上的操作的原子性。对象池可包含任何大小或任何类型的一系列对象,并且该数据具有任何结构。
根据本发明的实施方式提供了通信的方法,其在包括第一网络元件和第二网络元件的网络元件的架构中实现。第二网络元件具有储存在其存储器中的将被访问的对象池。该方法通过以下动作实现:在第一网络元件中发起对第二网络元件的存储器的远程直接存储器访问的请求;将该请求通过架构发送到第二网络元件;通过原子性地执行该请求来访问对象池的指定成员;并通过架构将请求的执行的结果返回到第一网络元件。
根据方法的一个方面,访问池由取得池的对象中的一个的原子获取操作来执行。
根据方法的另一个方面,池被布置成先进先出队列,并且返回结果包括取得队列的下一对象。访问可包括使下一对象出列。
根据方法的再一个方面,池被布置成后进先出队列,并且返回结果包括取得队列的下一对象。访问可包括使下一对象出列。
根据方法的其它方面,访问池由在原子压入操作中将新对象添加到池中来执行。
根据方法的附加方面,池被布置成先进先出队列,并且添加新对象包括使新对象入列。
根据方法的又一个方面,池被布置成后进先出队列,并且添加新对象包括使新对象入列。
根据方法的另一个方面,原子性地执行请求通过被连接到主机计算机的设备独立地控制。
根据本发明的实施方式还提供了网络元件的架构,其包括第一网络元件和第二网络元件。第二网络元件具有存储器和储存在存储器中的对象的池。第一网络元件可操作用于发起对第二网络元件的存储器的远程直接存储器访问的请求;将该请求通过架构发送到第二网络元件;通过原子性地执行该请求来访问池;并通过架构将请求的执行的结果返回到第一网络元件。
第一网络元件可包括网络接口卡。用于控制原子操作的执行的原子控制器可位于网络接口卡中。
附图简述
为了更好的理解本发明,通过示例的方式对本发明的详细描述进行参考,本发明的详细描述将结合附图来阅读,其中,相似的元件被给定相似的参考数字,并且,其中:
图1示意性地示出其中应用了本发明的原理的计算机系统;
图2是图1中所示的系统中的计算节点的框图;
图3是示出根据本发明的实施方式的原子获取操作的图示;
图4是用于根据本发明的实施方式的对对象池的原子访问的布置的框图;以及
图5是根据本发明的实施方式的原子控制器的操作的功能示意图。
发明的详细描述
在下面的描述中,阐述了许多具体的细节以提供对本发明的各种原理的彻底理解。然而,对于本领域技术人员将明显的是,对于实践本发明并不总是必然需要全部的这些细节。在这个实例中,用于传统的算法和过程的众所周知的电路、控制逻辑和计算机程序指令的细节没有被详细示出,以免不必要地混淆一般概念。
通过引用并入本文的文档被视为本申请的组成部分,就在这些并入的文档中以与本说明书中明确地或隐含地做出的定义冲突的方式所定义的任何术语的方面来说,仅应考虑本说明书中的定义。
定义
“交换架构”或“架构”是指其中网络节点通常通过许多端口经由一个或多个网络交换机(诸如,纵横交换机)互连的网络拓扑。互连是可配置的,使得数据经由指定端口从一个节点传输到另一个节点。对于交换架构的常见应用是高性能底板。
“对象池”是驻留在存储器中的一组可达数据对象。当该组被排序时,池中的“下一对象”是当对象按顺序被处理时将被下一个访问的对象。
在共享存储器上作用的“原子操作”表现为相对于其它进程或线程在单一步骤中完成。当原子存储在共享变量上执行时,没有其它线程或进程会观察到修改半完成。当原子加载在共享变量上执行时,其在出现在单一时刻时读取整个值。当原子修改操作被执行时,没有其它线程或进程会观察到中间值。
概览
本发明的实施方式提供使用rdma传输网络对对象池的访问。对象池是用于以特定方式组织数据的通用数据结构。在对象池中组织数据的一般方式包括fifo、lifo和列表:
列表-在特定顺序中的一定数量的对象。不同的对象通常经由索引来访问。
fifo-用于组织和操纵对象缓冲器的方法。在fifo中,在缓冲器中最旧的对象最先被处理。
lifo-在lifo中,放置在缓冲器(或堆栈顶部)中的最新的对象最先被处理。
在此上下文中的对象是位的集合并且可以是任何大小。
提取和添加以及比较和交换提供对于rdma应用的有限功能。应用程序编写者使用它们来实现信号量或对数组的分布式访问。但是,这些操作不能直接用于实现更复杂的算法,诸如从整数池中选择下一个整数。这种选择可以在mpi通信器创建中使用,从而以完全卸载的方式给出下一个通信器标识符。在通信器创建中,所有通信器进程从整数池接收下一个整数,并将其用作通信器标识符。当通信器被销毁时,通信器标识符返回到整数池。
在另一示例中,应用准备数据段的全局池以供架构中的远程进程使用。需要数据的每个进程从全局池获取其下一个数据段。当完成一个数据段时,它可以再次访问全局池以获取下一个数据段。通常,这通过提取和添加操作与之后的rdma读取操作(rdma_read)的组合来执行。这涉及使用对象池通过架构的两次往返。然后,请求进程必须处理原子响应,并创建rdma_read操作。因此,存在两个相关操作,而不是一个原子操作。
系统构架
现在参考图1,其示意性地示出其中应用了本发明的原理的示例性计算机系统10。系统10被配置为在infiniband架构中使用,但是其对于本领域技术人员来说可以适用于其它网络。系统10包括由诸如infiniband交换架构的包网络19互连的节点12、14、16、18。在图示的实施方式中,节点12和14是发起者节点,而节点16和18是应答者节点,但是通常任何给定节点可以同时是发起者和应答者。在该示例中,存在来自在主机22上执行的一组进程20的发起者进程。充当发起者的节点12或节点14向nic24(例如,infiniband主机通道适配器)提交对资源的请求,以将消息发送至在目标(应答者)节点16、18的主机22上执行的一组进程20中的目标进程。接收到工作请求后,发起者节点的nic向应答者节点的nic发送包,以建立连接。如上所述,任何可靠的协议都适合于该连接。
现在参考图2,其是根据本发明的实施方式的计算节点的框图,其示意性地示出节点12、14、16、18的功能组件,以及具体地示出在提供传输服务中涉及的nic24的元件。虽然nic在图2中被示出,但是本发明的原理可适用于具有处理电路的其它网络元件。主机22包括运行进程20(图1)的中央处理单元cpu26和主机应用28,并具有可由cpu26访问的主机存储器30。存储器30通常用于保存进程和系统数据以及由nic24使用的上下文信息。nic24包括用于经由总线34与主机22通信的主机接口32以及用于将包发送到网络19和从网络19接收包的网络接口36。网络接口36包括包发送者40和原子控制器42。下面描述的功能通过与适当的存储器缓存46、包发送者40和原子控制器42合作的处理电路44来实现。
对对象池的原子操作
本发明的实施方式通过实现对通用对象池的原子访问来扩展rdma原子提取和添加以及比较和交换操作。rdma传输上的原子访问操作被完全卸载,即它们不需要主机处理器或主机cpu的软件参与。相反,它们在附加设备中实现,诸如链接到主机的nic。甚至在存在多个代理访问相同的数据结构的情况下,也保证了在应答者节点上的操作的原子性。对象池可以包含任何大小或类型的对象,并且数据可以具有任何结构。在存在多个代理或进程访问对象池中的相同的数据结构的情况下,也保证了在网络的应答者节点上的操作的原子性。本发明的实施方式与对象池的组织无关。例如,对象池可以被组织为fifo、lifo或列表。对象池位置可以在任何网络元件中,例如主机存储器、nic或交换机中。
用于根据本发明的实施方式处理对象池的命令,例如原子获取和原子压入操作,以及诸如在不出列的情况下访问队列的顶部的动作和访问队列中的特定元素的动作。原子获取操作导致池中的“下一对象”被返回给请求者。下一对象取决于对象池的组织。例如,如果对象池是对象{a1,a2,a3......}的有序列表,并且对象a1是在将要在该对象池上执行的原子获取操作之前访问的最后一个对象,那么对象a2是下一个对象并将在原子获取操作中被返回。对于fifo和lifo对象池的下一个对象将同样被理解,并且可以但不一定包括使下一对象出列。
可以通过应用本发明的原理实现的示例性原子操作的列表如下:
压入-使下一元素入列。
弹出-使下一元素出列。
取顶-读取第一元素。
读取(i)-读取在位置i的元素。
计数-获取池中的元素的数量。
清除-从池中移除所有元素。
删除(i)-删除第i个元素。
现在参考图3,其是示出根据本发明的实施方式的位于网络中的对象池中的原子获取操作的图示。网络包括连接到交换机56、58的节点48、50、52、54。对象池60由块62表示。块62表示包含对象池的网络元件,在这个示例中是fifo。实际上,对象池可分布在多个节点之间,原子操作同时定向到该多个节点。在这种情况下,请求者维护来自目标中的每个的返回信息以验证结合的原子性。此外,应答者必须知道对象池的位置。通常其将在与应答者相同的节点上。然而,在更复杂的情况下,对象池可以在其它节点上,应答者需要知道该其它节点,因为应答者需要发起对那些远程对象池的远程操作。在任何情况下,对象池60的下一对象当前是对象64。节点48例如使用mpi和常规的路由和交换技术通过到交换机56的消息将原子获取操作定向到对象池60。该消息被中继到与块62相对应的网络元件位置。对象64(fifo的头)从对象池60中被提取,并经由交换机56返回到节点48。序列的原子性由原子控制器保证,其在下面描述。
现在参考图4,其是根据本发明的实施方式的用于对对象池68进行原子访问的布置66的框图。断线70上方的元件通常位于主机计算机中,而线70下方的元件在诸如网络接口卡的网络元件中实现。尽管布置66被示为包括多个单独的功能块,但是这些块不一定是单独的物理实体,而是表示存储在处理器可访问的存储器中的不同的计算任务或数据对象。这些任务可以在单个处理器上或在多个处理器上运行的软件中执行。软件可以体现在用于与计算机系统一起使用的各种已知非暂时性介质(诸如磁盘或硬盘驱动器或cd-rom)中的任一个上。代码可以分布在这样的介质上,或者可以通过网络从另一计算机系统(未示出)的存储器或储存器分布到布置66。可选地或另外地,布置66可以包括数字信号处理器、现场可编程门阵列或硬连线逻辑。布置66关于infiniband实现被描述,但是加以必要修改可以适用于其它网络通信标准。
应用72包括使用硬件驱动器74以便访问远程或本地存储器对象池(诸如对象池68)并获得池中的下一对象的软件代码。当对象池是无组织的时,原子操作可能导致随机元素的访问。在一个实施方式中,驱动器74将infiniband动词转换成硬件特定命令。在列表1中给出了根据本发明的原理实现定向到对象池的原子操作的infiniband实施方式中的示例性动词定义。
列表1
ibv_exp_obj_pool_access(ibv_qp*qp,ibv_obj_poolpool,ibv_obj_pool_opoperation,void*data)
列表1中的参数如下:
qp:请求者队列对(qp),操作在请求者队列对(qp)上执行。qp的传输必须是可靠的。
池:请求者打算访问的远程对象池。
op:将要对对象池执行的操作,例如弹出/压入/取顶。
数据:根据操作的特定字段。例如,压入操作需要对象指针,对象指针需要被压入。弹出操作需要存储器指针来存储弹出响应。
infiniband动词在互联网上可获得或从加利佛尼亚州95054的圣塔克拉拉2900stenderway的mellanoxtechnologies公司可获得的文献mellanoxib-verbsapi(vapi),mellanoxsoftwareprogrammer'sinterfaceforinfinibandverbs,(2001)中被描述,其通过引用并入本文。驱动器74控制包发送者76,包发送者76负责将数据包发送到架构中。原子控制器78经由架构处理原子操作,并且负责确保操作的原子性。另外,原子控制器78响应于原子操作将信息传递至包发送者76以用于中继到操作的请求者。
在原子获取操作中,应用72调用相应的功能或动词,诸如标准动词ibv_post_sent的适当修改的版本,其由驱动器74转换成用于nic或其它网络元件的命令。在infiniband实现中,该命令是工作队列元件80(wqe)。工作队列元件80被传送到包发送者76,并且从那里经由架构被传送到远程目标(未示出)中的对象池,例如对象池68。可选地,工作队列元件80可以访问本地对象池,在这种情况下,包发送者76执行环回操作。
在远程目标处,原子控制器78控制原子获取的执行的定时、协调关于正在对象池68上执行的其它原子操作的执行。当原子控制器78确定原子获取可以被执行时,原子控制器78根据池中对象的特定组织,使用rdma从对象池68读取下一对象,如上所述。当提取下一对象时,原子控制器78将其传递到包发送者76,用于中继到请求者,在该示例中,请求者是应用72。
用于原子压入操作的顺序与原子获取操作类似,除了新的元素被插入到对象池68中。在fifo和lifo队列的情况下,原子压入操作使新对象入列。在另一示例中,原子压入操作可以将元素插入到链表中。原子控制器78将原子压入操作的结果中继给请求者,例如对象池68的状态,其可以是空的、满的或处于两者之间。
现在参考图5,其是根据本发明的实施方式的原子控制器78(图4)的操作的功能示意图。原子控制器78的输入是执行原子操作82的请求,其可以使用任何合适的rdma协议作为消息被传达。当消息在原子控制器78中被接收时,要访问的对象池在池解析块84中被解析,并且该请求被放置在用于特定对象池的等待队列86中。等待队列86是由另一等待队列88表示的等待队列集合的成员。等待队列86、88被动态地分配并且与相应的对象池相关联。根据对于原子操作82的请求中的字段选择适当的等待队列。
对于原子操作82的请求在等待队列86中等待其将被服务的轮次。如果队列中没有定向到对象池的相同区域的在前的其它操作,则原子操作可以被服务。换句话说,定向到对象池的不相交区域的不同原子操作可以并发执行,这是因为不同操作中不会影响其它操作的结果。所需的原子排序由控制等待队列86、88的原子控制器78中的逻辑执行。
当对于原子操作82的请求达到等待队列86的头部时,它可以在相关联的对象池90上操作。根据对象池90的特性,单一原子操作可以涉及使用rdma在对象池90中的多次写入或读取。
当原子操作完成时,其从等待队列86中被移除。原子控制器78创建适于特定原子操作的结果的发送描述符。假如等待队列86变为空,则它被释放并且可以被重新分配用于随后的原子操作。重新分配的工作队列可以涉及对象池90或不同的对象池。
本领域中的技术人员将认识到,本发明不被限制于上文所具体示出和描述的内容。相反,本发明的范围包括上文所描述的各种特征的组合和子组合以及本领域技术人员在阅读以上描述之后将想到的且未在现有技术中公开的其变型和修改。