首页> 中国专利> 利用针对本地检查点的卸载程序模型

利用针对本地检查点的卸载程序模型

摘要

用于使用针对本地检查点的卸载程序模型的方法、装置以及系统。在计算环境中的计算实体被实现为一个或多个源以及大量的宿。作业调度器将包括可执行代码的作业调度到所述源,并且所述作业代码的所述执行由所述源管理。通过创建卸载上下文信息,将所述作业代码中指定用于卸载的代码段卸载到所述宿。结合每一个卸载,生成卸载对象并且将其写入存储设备。所卸载的代码段由所述宿执行,所述宿将结果数据返回到所述源,其例如经由直接的写入到所述卸载上下文信息中指定的存储器缓冲器来进行返回。对所述宿的所述健康进行监控以检测失败,以及当失败时,所述源取回与被卸载到所失败的宿的所述代码段相对应的所述卸载对象,重新生成针对所述代码段的所述卸载上下文信息,并且将其发送到另一个宿以进行执行。

著录项

  • 公开/公告号CN105700907A

    专利类型发明专利

  • 公开/公告日2016-06-22

    原文格式PDF

  • 申请/专利权人 英特尔公司;

    申请/专利号CN201510783466.8

  • 发明设计人 S-W·W·郑;R·J·伍德拉夫;

    申请日2015-11-16

  • 分类号G06F9/445(20060101);G06F9/38(20060101);

  • 代理机构72002 永新专利商标代理有限公司;

  • 代理人张立达;王英

  • 地址 美国加利福尼亚

  • 入库时间 2023-12-18 15:45:39

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-06-18

    授权

    授权

  • 2016-07-20

    实质审查的生效 IPC(主分类):G06F9/445 申请日:20151116

    实质审查的生效

  • 2016-06-22

    公开

    公开

说明书

背景技术

近些年对高性能计算(HPC)的使用和兴趣显著增加。历史上,HPC通常与所谓的“超级计算机”相关联。超级计算机在20世纪60年代被引入,最先并且在数十年来主要由控制数据公司(CDC)的SeymourCray、Cray研究所以及带有Cray的名字或字母组合的后来的公司制造。尽管20世纪70年代的超级计算机仅使用几个处理器,但是在20世纪90年代,开始出现了具有上千个处理器的机器,并且最近已经实现了具有数十万“现成的”处理器的大规模并行超级计算机。

存在许多类型的HPC架构,既有被实现的也面向研究的,其具有各种级别的规模和性能。然而,共同线程是诸如处理器和/或处理器核的大量计算单元(也被称为计算实体或本文中的计算实体)来以并行的方式共同地执行任务的互连。根据最近的片上系统(SoC)设计方案和提议,使用二维(2D)阵列、环面、环或其它配置来在单个SoC上实现数十个处理器核等。另外,研究者已经提议了3DSoC,根据所述3DSoC,数百或甚至数千个处理器核以3D阵列互连。单独的多核处理器和SoC还可以在服务器板上具有小间距(closely-spaced),继而被互连经由底板等进行通信。另一种普遍的方法是在服务器(例如,刀片服务器和模块)的机架中对计算单元进行互连。声称一度是世界最快的超级计算机的IBM的Sequoia包括96个服务器刀片/模块的机架,共1,572,864个核,并且当操作在峰值性能下时,消耗巨大的709兆瓦。

HPC使用并行处理方法来使得用于解决复杂作业或任务的作业载荷能够被分布在多个计算实体间;这可能需要使用数千甚至数十万个实体。考虑到实体失败的统计分布,随着用于HPC作业的实体的数量的增加,在HPC作业期间发生实体失败的速率指数地增长。这个指数性的失败速率已经在HPC界以及商业的云服务提供者之间成为热点。

为了解决实体失败的可能,可以以如下方式执行HPC作业:使得能够从这种失败恢复,而不需要重做该作业(或该作业的重要部分)。这通常通过检查点重启方案来完成。根据一个常规方法,以频繁的速率(检查点之间的时间段被称为历元(epoch))和同步的方式周期地取检查点,其中,对于每一个历元,停止对检查点组中的所有实体的处理,对每一个实体执行检查点操作,以及重启实体。检查点组的粒度是相当分层次的,并且可能涉及数百或数千个实体。

在每一个检查点期间,数据被写入某种形式的非易失性存储设备(例如,通过网络访问的大型存储设备或这种设备的阵列)。数据包括作业处理状态信息和经由在每一个实体上的软件的执行而产生的作为输出的数据二者。这导致显著量的存储消耗,并且整体处理带宽的显著部分被有效地浪费了。在一些实例中,相关联的存储消耗和该常规的检查点重启策略的执行限制使得实际的结果不那么可持续或甚至不那么实际。

附图说明

由于通过参照以下详细描述可以更好地理解本发明的前述方面和许多其附带的优点,因此,当结合附图来理解时,本发明的前述方面和许多其附带的优点将被更容易地理解,其中,除非特别说明,否则贯穿各个视图,相似的参考标记指示相似的部件:

图1是示出了用在HPC环境中的常规并行处理方案的简化视图的示意图;

图2是示出了用于处理与可执行作业相对应的代码段的卸载程序模型的简单实现的示意图;

图3是示出了由源和宿以及故障转移(failover)心跳监控器执行的操作和逻辑的组合流程图和消息流图;

图4是示出了卸载域拓扑的第一示例的示意图,所述卸载域拓扑包括连接到在单域中实现的多个宿的源;

图5是示出了卸载域拓扑的第二示例的示意图,所述卸载域拓扑包括连接到一对源的作业调度器,所述一对源继而被连接到在单域中实现的多个宿;

图6是示出了卸载域拓扑的第三示例的示意图,所述卸载域拓扑包括连接到一对源的作业调度器,所述一对源继而被连接到在第一域和第二域中实现的多个宿;

图7是示出了卸载域拓扑的第四示例的示意图,所述卸载域拓扑包括经由作业调度架构连接到多个源的作业调度器,以及其中,所述源经由卸载架构连接到第一域和第二域中的宿;

图8是示出了包括模块化数据中心(pod)、机架、托盘以及托架的数据中心物理层次的示意框图;

图9是双插槽服务器平台的示意图,在其中实现了多个MIC,以及包括被实现为第一源的第一主机处理器,和被配置为作为第二源操作的第二主机处理器;

图10是示出了根据利用XeonPhiTMMIC协处理器的一个实施例的软件架构的示意框图,其包括MIC协处理器PCIe卡1002上实现的软件部件,该软件部件包括MIC协处理器软件和主机软件;

图11是用来得到MIC中引擎的数量和得到第一引擎的句柄的指令的伪代码列表;

图12a和12b使用COI进程分别地示出了用于卸载函数的示例性源侧和宿侧伪代码列表;以及

图13a和13b分别地示出了用于设置和使用缓冲器的示例性源侧和宿侧伪代码列表。

具体实施方式

本文描述了用于利用针对本地检查点的卸载程序模型的方法、装置以及系统的实施例。在下文描述中,阐述了大量具体细节,以便提供对本发明的实施例的透彻理解。然而,相关领域技术人员将认识到的是,可以在不具有具体细节中的一个或多个的情况下实践本发明,或者利用其它方法、部件、材料等来实践本发明。在其它实例中,没有详细地示出或描述众所周知的结构、材料或操作,以便避免模糊本发明的方面。

贯穿本说明书所引用的“一个实施例”或“实施例”意指结合该实施例描述的特定的特征、结构或特性被包括在本发明的至少一个实施例中。因此,在贯穿本说明书的不同地方出现的短语“在一个实施例中”或“在实施例中”不必全都指代同一个实施例。此外,特定的特征、结构或特性可以以任何适当的方式组合在一个或多个实施例中。

为了清楚,本文附图中的单独部件还可以通过其在附图中的标签进行指代,而不是由特定的附图标记来指代。另外,指代特定类型的部件的附图标记(与特定部件不同)可以使用后接“(typ)”(其意味着“典型的”)的附图标记来示出。应当理解的是,这些部件的配置是可能存在但为了简洁及清楚而未在附图中示出的类似部件的典型配置,或者未用不同的附图标记进行标记的类似部件的典型配置。相反,“(typ)”不应被解释为表示该部件、元件等典型地用于其公开的功能、实现、目的等。

根据本文公开的实施例,并且结合本地检查点方案来使用卸载程序模型,所述本地检查点方案满足高可靠性要求同时改善了性能和减少了存储和/或与常规的检查点相关联的网络业务。在一方面中,该方法针对在HPC环境中的实现,尤其是针对大规模HPC作业是有优势的。然而,其在异构计算环境中也极为好用,所述异构计算环境中的运行实体可以从小型手持设备一直延伸到高容量服务器。

图1示出了用在HPC环境中的常规并行处理方案的简化视图。如在图1中所示,由第一计算实体托管的作业调度器100经由互连104耦合到多个计算实体102。通常,HPC环境将被用于使用并行处理方法来解决整体作业或任务,根据所述并行处理方法,整体作业或任务被划分为在大量计算实体上并行执行的较小的作业。如下面描述的,作业调度器负责将较小的作业调度到计算实体并且协调检查点。此外,大的任务可以涉及以层次等配置的多个作业调度器。可以通过各种术语来指代针对层次中的给定等级的计算实体的聚集,诸如集群、作业组以及其它术语,尽管作业组可能包括多个集群。

通常,计算说明可以包括能够执行对应于作业或任务的软件的任何实体。计算实体包括但不受限于服务器、计算机、计算设备、处理器以及处理器中的核。互连104是代表包括网络链路(例如,以太网、无限宽带(InfiniBand)等)、高速串行互连(例如,外围部件互连快速(PCIExpress或PCIe))以及在处理器片上系统(SoC)内的互连的各种类型的互连的一般互连。此外,在异构环境中,计算实体可以经由包括不同类型的互连的一个或多个互连连接到作业调度器和/或其它计算实体。

如在图1中进一步所示,作业调度器100将作业106调度到相应的计算实体102。通常,每一个作业106可以包括要被计算实体执行的可执行代码。作业106还可以包括要被操作的数据和/或代码,所示代码本身可以指代要由计算实体从存储设备取回、经由代码的执行而被操纵以及随后被存储的数据。出于说明性的目的,数据被存储在网络存储设备108中,其可以包括单个存储设备、存储阵列、或者本领域公知的其它储存装置。实体的集群或计算实体本身还可以包括其中存储有作业相关的数据的本地存储设备。另外,可以使用各种超高速缓存方案来增强系统性能。

在图1中示出了分配给计算实体102-1的作业A的抽象的描述。该作业包括可执行代码,所述可执行代码包括主循环,所述主循环包括被标记为Foo()、Bar()…以及Qux()的多个函数。给定的作业可以包括完全的可执行的应用(例如,独立的应用)、或者可以包括代码模块等。根据一些实现,作业调度器可以首先将可执行的应用或模块调度到计算实体,并且随后发送要由该可执行的应用或模块操作的数据(或以其它方式,标识数据的位置)。为了简单起见,作业106的集合被示为调度到相应的计算实体102。在实际中,新的作业可以当处理整体作业或任务时被动态地生成,并且被异步地调度到各个计算实体。根据一个通用的方案,计算实体“公告”其可用性,并且作业调度器基于诸如可用性、处理能力以及存储器资源的考虑来动态地确定向哪些计算实体发送给定的作业。

由于并行处理架构的特性,所有作业成功地完成是关键的,否则整体任务将失败。由于某些作业的输出供给随后作业的输入,因此甚至单个计算实体的失败可能导致整体失败。存在用于解决该问题的各种方法,包括将同一个作业调度到多个实体,并且将作业的最先成功的完成用于随后的作业。然而,该方法是浪费的,这是因为从事不被最先完成的作业的实体的处理带宽(来自被调度同一个作业的其它实体之间)最终没有被使用。

另一个方法利用周期检查点/重启序列。根据一个常规检查点方案,执行下面的操作:首先,做出(例如,由调度器或在层次中较高的实体)检查点应该在何时和在哪被取的确定。随后,将“停顿”请求发布给批量作业内的每一个运行实体。在进行下去之前,进程等待所有的实体确认停顿请求并且暂停其运行(或以其它方式,确认其处于暂停的状态)。这时,所有实体将其状态(也被称为“上下文”)写出到存储设备。在所有实体确认对存储设备写入的完成期间,发生第二等待。这使得完成被用信号发送到实体。

在用信号发送检查点完成之后,重启序列开始。首先,将作业重新调度进新分配的实体(即,被调度到新的计算实体)。每一个实体随后从存储设备中读取其保存的上下文,并且确认其准备就绪以重新开始。等待时段继而发生,直到所有实体确认其准备就绪,这时,将重新开始信号发送到每一个实体以重新开始。

前述的常规方法具有许多问题,随着规模变大,它们中的一些问题会恶化。第一,仅在向实体发送指令以及返回状态中就涉及大量的网络业务开销。第二,当针对每一个实体的上下文被保存时,在每一个历元期间存在突发存储操作。典型的网络存储方案具有有限的输入/输出(IO)带宽,并且能够提供到存储设备的同时存取。相反的,注意到各种超高速缓存方案通常被用于改善性能,必须以顺序的方式来处置每一个存储设备存取请求。此外,写出每一个实体的上下文需要大量的存储空间,尤其是对于大规模作业。

本文公开的实施例的方面利用了不同的方法。实施例使用卸载程序模型,与根据常规的检查点/重启方案,通过应用编码器和/或操作人员手动的插入相比,所述卸载程序模型自动地以及机会性地定义合适的检查点。其还不暂停运行实体,这产生增强的性能,这是因为由处理器暂停导致的处理带宽丢失不再存在。相对于根据常规方案的全局和冗长的同步开销,同步量(如果存在的话)被显著地减少。状态/上下文保存操作可以被分解并且可以通过整体作业执行来展开。这显著地减少了可能争夺存储带宽以及存储空间的突发存储IO操作。

根据一方面,在域形成期间执行智能的预规划存储设置。这允许计算实体的最佳拓扑布置并且允许存储设备解决大的并行作业规模问题。所保存的状态/上下文的大小显著更小,这是因为其不要求存储完整的进程图像。这使得使用更少的空间以及针对重启的更好的成功率。

建在卸载程序模型之上,所公开的方法将批量作业分解为更小的虚拟作业载荷域。每一个域进行其自己的本地检查点。此外,可以以递归的方式实现该方法。从卸载程序范例继承,该方法针对异构计算环境是尤其有利的,在所述异构计算环境中,所集聚的计算实体可以由不同的CPU架构组成和/或由不同的操作系统支持。

作为概述,图2描绘了用于对与给定作业相对应的代码段进行处理的卸载程序模型的简单的实现的说明。包括主机机器并且操作为“源”200的处理实体经由互连208耦合与包括“宿”202、204以及206的三个卸载机器耦合通信。在这个示例中,图1中的针对作业A的三个函数Foo()、Bar()以及Qux()的执行被从源200卸载到相应的宿202、204以及206。

进一步参照图3中的流程图和消息流图300,如下实现了根据一个实施例的卸载程序模型检查点方案。图3中示出的实体包括源302、故障转移心跳监控器304以及包括宿306的卸载实体。尽管未示出,但是实际的实现将包括多个宿实体。通常,可以在除了源或宿的任何宿之外的源或单独的实体(未示出)中实现故障转移心跳监控器304。

针对源302描绘的操作在块308中开始,在所述块308中,源具有基于卸载程序模型的可执行结构。随后针对可执行结构中的每一个卸载代码段描绘了主循环,如由启动循环块310和结束循环块312所描绘的。随后针对每一个经卸载的代码段来循环地、持续地执行在块314、316以及318中描绘的操作。

首先,在块314中,构造了卸载上下文。通常,卸载上下文应当包含用于卸载在请求时能重启的足够信息。其应当包含诸如下列信息:宿标识、程序二进制参考或库参考、缓冲器数据、环境变量和/或与作业载荷相关的函数参数。在一个实施例中,卸载上下文包括(要执行卸载代码的宿的)链路地址、程序代码段二进制参考或包括与卸载的代码段相对应的一个或多个函数的先前分布的库的参考、环境变量、函数参数以及缓冲器映射信息。可选择地,如下面描述的,可以提前配置缓冲器映射的一些方面。接下来,存在一对被异步地执行的相关操作。在块316中,在块314中生成的卸载上下文被发送到如由宿306描绘的可应用宿设备。与之结合,在块318中,与在块314中生成的卸载上下文相对应的上下文对象被推给诸如由网络存储设备108描绘的非易失性存储设备。可选择地,上下文对象可以被推给由源平台提供的板载存储设备。根据另一个方案,上下文对象被写到与网络存储设备成镜像的板载存储设备。

为了简单起见,被卸载的代码段被描绘为发送到宿306。在实际的实现中,被卸载的代码段会被发送到多个宿,其中给定的宿可能在整体作业的执行期间接收多个被卸载的代码段。

如在块320和宿306的决定块332中描述的,宿设备包括监听来自于源302的请求的监听器。例如,这样的监听器是本领域公知的,并且可以包括监听用于与源302通信的特定端口,或者以其它方式监听来自于源302的通信(例如,使用针对产生自源302的通信的源地址来检测的)。一旦经由所检测的请求接收到卸载上下文,就由宿306运行(即,执行)在卸载上下文代码中定义的函数或多个函数直到完成,如由块324和完成块326描述的。

当代码段完成时,将与函数结果相对应的函数结果数据328返回到源,如上面参照图2讨论的。在一些实施例中,通过直接地向由卸载上下文标识的存储器缓冲器写入数据来将数据返回。在其它实施例中,如当宿远离源时,结果数据328被以分组的方式返回并且包含所分组的数据可以用来确定要写入结果数据328的缓冲器的信息。

在可选的块330中,所卸载的代码段被标记为由源完成。除了明确地将代码段标记为完成之外,存在用于确定哪些代码段已经被完成以及哪些代码段未被完成的其它技术。例如,由于每一个经卸载的上下文的对象上下文标识要执行函数的宿,所以当做出了向同一个宿的随后请求时,这隐式地指示先前的请求已经被完成。

同样在持续过程期间,提供了用于检测宿未能成功地执行被卸载到该宿的代码段单元。这包括由启动循环块332和结束循环块334描绘的操作和逻辑,针对已经被调度到宿以进行执行的每一个被卸载的代码段,来持续地执行所述启动循环块332和结束循环块334,直到确认成功地完成了该执行或者检测到失败。如在图3中进一步指示的,异步地实现由启动循环块310和结束循环块312以及启动循环块332和结束循环块334定义的循环。

根据一个实施例,故障转移心跳监控器304被配置为监控在集群中的宿实体的健康,或者故障转移心跳监控器304可以以其它方式被配置为监控一组或多组操作为宿实体的计算实体。在一个实施例中,使用公知的心跳技术来确定宿实体的健康,其中,监控部件或实体利用心跳消息来周期地“查验(ping)”所监控的实体,并且所监控的实体(在该实例中为宿306)返回用于指示其正在适当地操作的“活着”消息或信号。

在图3示出的实施例中,这被按照如下实现。如由包括块336和决定块338的循环所描绘的,故障转移心跳监控器304利用心跳消息来周期地查验宿306。该循环继续进行,直到宿308不能返回活着消息或信号,这导致对决定块338的应答为NO。在可选的块340中,选择了针对宿306的备用(即,代替)实体。可选择地,可以由源302做出这个选择。例如,在其中每一个代码段被卸载到由源302动态选择的可用宿的机会性实现中,可能不存在在块340中选择备用的需要。

在块342中,故障转移心跳监控器304通知源302关于宿失败。如果故障转移心跳监控器被实现为与源302分离的实体,则通过用于标识失败的宿(例如,通过使用针对宿的地址,作为宿标识符(ID)等)的互连307来向源302发送消息。可选择地,如果在块340中标识了代替宿,那么可以从该代替宿发送失败通知。如果在源302中实现故障转移心跳监控器304,那么不需要通过互连发送失败通知消息,而在源302内来内部地转发失败通知。

决定块344用于确定是否发生了要求重启所卸载的代码段的失败。当从故障转移心跳监控器304接收到失败通知时,对决定块334的应答为YES,这发起宿恢复或故障转移过程。如上面提及的,失败通知标识失败的宿(或者,未能成功地完成对其被卸载的代码段的执行的宿)。因此,宿302可以取回(即,“拉”)与从存储设备108发送到失败的宿的最后的卸载上下文相对应的上下文对象,如由块346描绘的,重构卸载上下文,并且将其发送给针对在块340中的代替所选择的宿。可选择地,源302可以确定向哪个宿发送所重构的卸载内容。

如由决定块348和返回到决定块344的循环描绘的,针对给定的被卸载的代码段来持续地执行失败检测操作,直到完成对所卸载的代码段的执行(或发生了对失败的检测)。如由经过决定块348到结束循环块334的箭头所进一步描绘的,针对已经被并行地调度到多个宿的卸载的代码段来执行循环中的操作和逻辑。

根据可选的方案,超时定时器等可以用于检测宿的失败,以完成对卸载的代码段的执行。例如,可能存在这样的实例:其中,宿仍然适当地操作(并且因此将持续向心跳消息提供“活着”响应),但是在对卸载的代码段的执行期间发生了错误,这阻止完成对代码段的执行。通过使用超时定时器,如果卸载的代码段的指示没在超时时段内返回到源302,那么存在对卸载的代码段的执行已经失败的假设。通常,针对不同的代码段的超时时段可以不同,这取决于代码段的复杂性和代码段所卸载到的宿的处理能力。出于说明性的目的,图3包括启动定时器图标350和到期定时器图标352以及清零或重置定时器图标354。

在一个实施例中,超时定时器实现按如下来作业。使用所卸载的代码段在其期间内被投射为要由其被卸载到的宿来完成的时间段,连同在块316中对被卸载的代码段的调度,启动超时定时器,所述时间段优选地添加了某个误差余量。超时定时器将倒计时,直到其被清零/重置或其到期。返回到完成块326,当完成了所卸载的代码段时,决定块348的结果将为YES,并且在完成块356中,代码段将被指示为完成。这也将清零/重置倒数计时器。然而,如果倒数计时器在检测到所卸载的代码段被完成之前到期,那么将向决定块336提供通知,如由到期定时器图标352描绘的。这将产生YES应答,并且和先前一样,所卸载的代码段将被重构并且被调度到另一个宿。在一个实施例中,倒数计时器的每一个实例包括用于标识与其相关联的所卸载的上下文的标记,从而在块346中,可以从存储设备中拉出正确的上下文对象。

在一些实施例中,以流水线方式建立对各个函数的处理。例如,来自于处理一个函数的结果可以被用作到另一个函数的输入。另外,函数可以被配置为以迭代的方式生成数据的集合,例如,经由处理循环等。在卸载上下文中被传递给宿的存储器缓冲器信息可以给要写入数据集合的FIFO(先入,先出)缓冲器加标注,并且由于该集合中的每一个数据项经由对函数的执行而生成,因此将其写入FIFO缓冲器中的适当“时隙”。这由可选的块358描绘,在其中,与可应用的宿实体互换中间流水线数据。

返回到图2,并且进一步地参照图3,按下面的方式由主机机器200实现示例main()可执行代码的执行。源200负责管理对其从作业调度器接收的作业代码的执行。这包括对在源上的、作业的可执行代码的一部分的执行。随着作业代码被执行,执行该执行的计算机实体(例如,处理器、服务器、处理器核等)将遇到和/或检测到卸载指令或用于指示后面的代码段要被卸载的类似标记。取决于特定的实现,可以以指定所卸载的代码段要发送至哪个特定宿以进行执行的方式来构造对卸载的处理,可以基于可用的宿来动态地选择对宿的选择,或者可以使用二者的组合。

如图2所示,在main()代码段的开始是#Offload_Function_Foo编译指示,其代表生成了对卸载函数Foo()的编译器指令。例如,如下面描述的,要使用被卸载的函数来执行的软件的开发者可以使用源代码中的编译指示等来向编译器指示代码的哪个部分将被卸载。响应于遇到和/或检测卸载指令,在块314中,通过生成卸载上下文来卸载可应用的函数代码,同时在块318中,卸载上下文被发送到宿202,以及相应的上下文对象(CO)210被生成并且被推到网络存储设备108。类似的卸载标记在随后的Main()代码的执行期间被检测到,使得函数Bar()被卸载到宿204,连同将相应的上下文对象212推到网络存储设备108,以及函数Qux()被卸载到宿206,连同将相应的上下文对象214推到网络存储设备108.

宿202、204以及206中的每一个执行被卸载到其的代码段,这导致对Main()代码的并行执行。当完成了对函数的执行时(或者在函数的执行期间,所述函数生成用于支持流水线的执行的数据集合),通过将结果数据写入可应用的存储器缓冲器来向源返回函数结果数据,所述可应用的存储器缓冲器可以经由被包括在卸载上下文中的缓冲器映射数据来标识或者以其它方式来提前设置。例如,缓冲器映射数据可以标识要写入结果数据的缓冲器的开始的地址。针对被卸载的函数Foo()、Bar()以及Qux()中的每一个,以类似的方式执行该操作,同时向源200可访问的可应用的缓冲器写入结果数据。

将结果数据写入缓冲器的该卸载方案的效果是Main()代码可以继续被源执行以及结果数据由宿生成,以与如同该源执行了所卸载的代码本身类似的方式。另一个固有的特征是这可以以具有非常高的可靠性的方式被实现,这是因为失败被立即检测,并且包括已经被发送到失败的宿的卸载代码的对象上下文被(实质上)立即重新生成和发送到另一个宿用以进行执行。

考虑到由宿失败导致的执行时间丢失,如果需要的话,在检测到宿失败之后或者当检测到宿失败时,可以从源向一个或多个其它宿发出“停顿”请求来重新同步并行执行过程。然而,如果针对所卸载的代码段的执行时间是小的和/或考虑到源正在发出所卸载的上下文,那么这通常将是不需要的,并且因此可以通过在进行下去之前简单地等待被发送到代替实体的所卸载的代码段的完成来实现重新同步。

另外,在利用流水线数据结构的一些实施例中,数据结构可以被标记,从而访问代码段可以检测数据是否是有效的。例如,假设向被另一个被卸载的代码段(或者甚至由源执行的代码段)访问的第一缓冲器写入数据的宿失败了。缓冲器可以被标记,从而如果另一个被卸载的代码段尝试访问过期数据,其将等待直到更新的数据被代替宿写入缓冲器。

针对卸载域的示例性拓扑

如上面讨论的,可以使用各种系统配置(包括利用一个或多个层次等级的配置)来实现本文公开的实施例的方面。通常,层次的最低级将包括一组计算实体或被实现为宿的实体。这样的组通常被称为集群,尽管不应当限制对术语集群的使用;实际上,如本文使用的集群通常可以代表计算实体或实体的聚集。在一方面中,基于诸如容量、地理位置或具体能力等选择标准,在被管理的集群内的宿实体可以分组成不同的虚拟的或逻辑的域。在相同域内的每一个实体能够执行相同的任务,其为计算任务、IO存储、web前端或其它。域形成可以是递归的;也就是说,一个域可以存在于另一个域内。

使用各种物理互连结构将一个实现中的各个实体互连,如上面描述的。另外,在这个架构中存在三个虚拟的(概念的)互连:(a)域内的通信(在宿实体之间);(b)在源和宿之间的通信;以及(c)在源之间的通信。(a)和(b)是被要求的。(c)是可选的,但是在一些实现中,期望其类似于MPI(消息传递接口)作业调度网络。不存在对这三个互连是分离的和/或相连的要求。

图4描绘了卸载域拓扑400的第一示例,所述卸载域拓扑400包括经由互连406连接到n个宿404的源402。宿404与单域408相关联。此外,根据该配置,在用于源412的同一个机器上实现针对作业调度器410的函数。取决于用于宿404的实体的类型,源402可以经由互连406或经由另一个互连连接到存储设备412,如由存储设备412和源402中的每一个源之间的虚线以及互连406描绘的。例如,根据下面参照图8描述的配置,互连406包括PCIe互连结构,并且源402经由网络适配器连接到存储设备412。

图5描绘了卸载域拓扑500的第二示例,所述卸载域拓扑500包括连接到一对源504和506的作业调度器502。源504和506中的每一个连接到互连508,单域512中的n个宿510也连接到所述互连508。源504和506还被启用以经由互连508或另一个互连来访问存储设备514。如进一步说明的,源504用于卸载针对域512中的第一组宿510的代码段,而源506用于将代码段卸载到第二组宿510。源504和506中的每一个经由互连508或者经由另一个互连而连接到存储设备514。

图6描绘了卸载域拓扑600的第三示例,所述卸载域拓扑600包括连接到一对源604和606的作业调度器602。源604将代码段卸载到第一域610中的m个宿608中,其中数据通过互连区段612来传送。源606将代码段卸载到第二域616中的n个宿614中,其中数据通过互连区段618来传送。通常,互连区段612和618可以包括单独的互连结构,或者可以是同一个互连结构的一部分(例如,二者可以是同一个局域网(LAN)的互连区段)。源604和606中的每一个经由互连区段612和618或者经由其它互连而连接到存储设备620。

除了系统实体之间的点对点连接之外,还可以实现类似总线的“架构”互连结构,诸如由图7中的卸载域拓扑700描绘的。根据该配置,作业调度器702经由作业调度架构706连接到k个源704。在层次的下一级处,源704经由卸载架构716连接到域712中的m个宿708和域714中的n个宿710。存储设备718也被描绘为被连接到卸载架构716;可选择地,源704中的一个或多个源704可以经由单独的互连(未示出)连接到存储设备718。

通常,可以使用各种系统架构(包括用在数据中心的架构)来实现根据本文中实施例的HPC操作。数据中心通常利用计算的物理层次、网络以及存储设备共享的资源来支持作业载荷要求之外的规模。图8示出了数据中心800中的示例性物理层次的一部分,所述数据中心800包括L个模块化数据中心802,M个机架804,其中的每一个包括针对N个托盘806的槽(slot)。每一个托盘806继而可以包括多个托架808。为了解释的方便,利用诸如模块化数据中心1、机架2、托盘1B等来标记模块化数据中心802、机架804以及托盘806中的每一个。

在每一个机架804顶端描绘的是相应的机架顶端(TOR)交换机810,其也由TOR交换机号来标记。通常,TOR交换机810是TOR交换机和支持在机架804之间的交换的任何其它交换设备二者的代表。常规实践是将这些交换机称为TOR交换机,无论它们是否物理地位于机架的顶端(尽管它们通常是)。

每一个模块化数据中心802还包括模块化数据中心交换机812,模块化数据中心的TOR交换机810耦合到所述模块化数据中心交换机812。继而,模块化数据中心交换机812耦合到数据中心(DC)交换机814。数据中心交换机可以坐落在数据中心交换机层次的顶端处,或者可能存在一个或多个未示出的额外的级别。为了便于解释,本文描述的层次是使用物理LAN的物理层次。在实践中,通常部署使用基础(underlying)物理LAN交换设备的虚拟LAN。

在一些实施例中,部署与实现环境的物理层次的相匹配或者实质上相匹配卸载层次是有优势的。此外,可以针对层次中的不同等级采用不同的检查点方案。通常,宿将占据卸载层次的最低等级。根据数据中心800采用的物理层次,宿将与托架808中的计算实体或实体相对应。应当注意的是,托盘和托架还可以由不同的名称和/或可以在机架中使用的不同的物理部件(诸如包含多个服务器刀片的刀片服务器机箱)指代。

根据一个数据中心实现方案,针对源和宿来实现服务器刀片或服务器模块。例如,托架可以包括多个服务器刀片或服务器模块,其中的每一个具有单独的互连接口并且被逻辑地操作为单独的计算实体。通常,这些计算实体中的每一个计算实体将被实现为单独的服务器,并且以与独立物理服务器类似的方式(但是以小得多的物理封装)运行。服务器刀片或模块还可以被配置为多个微服务器。在该实例中,微服务器可以用于宿。

集成众核(MIC)设备实现

最近,推出了其XeonPhiTM协处理器线,其包括具有在PCIe卡上实现的许多集成核的处理器。这类设备在本文中被称为集成众核设备,或简称为MIC。在一个实施例中,MIC包括大约60个核,将来一代XeonPhiTM协处理器被预期包括超过100个核以及更多。

MIC架构使得单个服务器平台能够支持大量的计算处理核,尤其是当多个MIC被安装在同一个平台中时。这对于HPC环境是高度有利的,尤其是在处理任务涉及高度的局域性和并行性的情况下。通常,具有最小延迟的互连是在处理器和/或SoC设备中的那些互连,这是由于其结合了非常高的带宽和非常短的长度。结果,在MIC中的计算核之间的通信涉及非常低的延时,这对于HPC来说是理想的。

在一个实施例中,使用处理器核MIC来实现宿。图9示出了在其中实现多个MIC的双插槽服务器平台900。该服务器包括两个处理器(akaCPU)902和904,其中的每一个与被描绘为插槽906和插槽908的单独的“插槽”相关联。每一个插槽包括被共同地作为双插槽服务器平台900的单独的服务器子系统操作的部件的集合。针对插槽906,所示出的部件包括主机存储器910、输入-输出集线器(IOH)912、PCIe互连914以及j个PCIeMIC916-1…916-j。类似地,针对插槽908,所示出的部件包括主机存储器920、输入-输出中心(IOH)、PCIe互连924以及n-j个PCIeMIC916-k…916-n以及网络适配器930,所述网络适配器930包括耦合到网络或IB架构932的以太网NIC(网络接口控制器)或无限宽带(IB)主机控制器适配器(HCA)。如在图9中进一步示出的,处理器902和904经由包括插槽到插槽互连的快速通道互连(QPI)链路934来连接。

应当注意的是,在图9中以及本文的其它附图中示出的架构是示例性的,并且具体的部件仅代表了一种类型的可以针对特定的功能、功能的集合或实现来实现更一般的部件。例如,处理器和IOH由一般的CPU和IO子系统代表。

根据服务器平台900,对服务器的软件进行配置,以使得插槽906和908中的每一个插槽操作(host)各自的源,如由源软件936-1和936-2描绘的。根据该配置,针对源1的宿包括MIC916-1…916-j上的处理器核,而针对源2的宿包括MIC916-k…916-n上的处理器核。在一个实施例中,经由插槽1的PCIe槽中安装的MIC中的处理器核实现的宿可以被实现为第一域中的宿,而经由插槽2的PCIe槽中的MIC中的处理器核实现的宿可以被实现为第二域中的宿,诸如在图6中示出的和上面讨论的。在另一个实施例中,在插槽1和2中的主机处理器被实现为相应的源1和2,而在两个插槽的PCIe槽中的MIC中的处理器核被实现为单域中的宿,诸如在图5中示出的和上面讨论的。

为了简单起见,源软件936-1和936-2中的每一个被描绘为包括卸载逻辑940和作业代码942;除了这些软件部件之外,每一个源将包括额外的软件,诸如操作系统和应用。卸载逻辑940包括用于实现图3的源302流程图部分的操作和逻辑以及各种通信功能的逻辑。如果故障转移心跳监控器由源实现,那么用于实现这些功能的软件还被包括在源软件936-1和936-2中。

在可选的配置中,主机处理器中的仅一个主机处理器可以被实现为源。根据该配置,未被实现为源的主机处理器可以用于其它目的,诸如监控MIC的健康以及卸载由源执行的任务中的一些任务。在一个实施例中,未被实现为源的主机处理器用于操作作业调度器。

图10示出了根据采用XeonPhiTMMIC协处理器的一个实施例的软件架构1000,所述软件架构1000包括在MIC协处理器PCIe卡1002上实现的软件部件,其包括MIC协处理器软件1004和主机软件1006。在软件栈中基本上存在四层:卸载工具运行时间、用户级别卸载库、在用户级别库和内核驱动器之间分开的低级别通信层、以及操作系统。针对每一个层存在主机侧和协处理器侧部件。在卸载运行时间以下的任何事物是众核平台软件栈(MPSS)的一部分。

在图10中,将卸载工具运行时间部件、用户级别卸载库以及低级别通信层部件画上浅灰色阴影。通常,在用户模式级别处的针对MIC协处理器软件1004和主机软件1006的软件部件中的许多软件部件是互补的并且支持协处理器卸载基础结构(COI)。MIC协处理器软件1004部件包括被卸载的应用代码1008、COI宿运行时间守护程序1010、用户模式库1012、内核模式驱动器1014以及Linux卡操作系统(OS)1016。主机软件1006部件包括主机应用代码1018、卸载编译器1020、COI源运行时间模块1022、用户模式库1024、内核模式驱动器1026以及Linux主机OS1028。

COI库提供服务来创建协处理器侧进程、创建主机和协处理器之间的FIFO流水线、对代码和数据进行移动、调用协处理器上的代码(函数)、管理跨主机和协处理器的存储器缓冲器、枚举可用的资源等。卸载运行时间实现不被严格地要求使用COI,但是这样做可以减轻开发者的显著的实现以及调整(tuning)努力和复杂性,并且这样做提供到诸如WindowsTM等其它主机OS的可移植性。

根据一种方法,通过使用被添加到源代码的卸载标记来促进卸载代码段指示编译器在由编译器生成的二进制代码中包括指令等,以指示主机处理器(操作作为源)卸载特定的代码段。卸载标记包括:

语言注释标签,例如,由各种编译器使用的#注释标签omp目标数据设备(1)map(),其来自于例如和CAPS(用于嵌入式和超标量处理器工程的编译器和架构)、以及#注释标签卸载,Intel专用扩展;

语言关键字,例如,由编译器使用的共享关键字或者具有由CUDA(计算统一设备架构)或OpenCL使用的语言结构的共享关键字,所述语言结构诸如用于针对协处理器的OpenCL应用XE的SDK;以及

库调用,例如,数学内核库(MKL)、MAGMA(GPU和多核架构上的矩阵代数)或在划分主机和协处理器间的作业的NAG(数值算法组)调用。

通常,卸载注释标签依靠程序员来明确地指定做什么。但是在一些情况下,为了便于编程,存在默认。在一个实施例中,利用map(to:…),map(from:…)以及map(tofrom:…)子句来明确地命名针对被卸载的代码的到协处理器和来自协处理器的变量数据传送,但是map(tofrom:…)子句隐式地用于编译期间在结构的范围中可见的所有变量。协处理器卸载目被明确地指定,例如设备(1)。程序员的责任是按需要明确地同步协处理器之间的数据。

根据用于XeonPhiTMMIC协处理器的术语,每一个MIC设备被称为“引擎”,并且在初始化阶段枚举MIC的设备能力,所述能力包括对可用引擎的标识。例如,图11示出了用来得到引擎的数量和得到第一引擎的句柄的伪代码列表。针对其它引擎获得类似的句柄,并且MIC被配置为要实现为COI引擎。

COI进程用于促进到COI引擎的代码段的卸载。COI进程使在宿上执行的远程进程抽象化。提供API来以开始和停止远程进程,以及负载动态库。COI进程还在远程进程中用于查找函数,所以其可能被调用。

图12a和12b使用COI进程分别地示出了用于卸载函数的示例性源侧和宿侧伪代码列表。如在图12a中所示,创建了第一COI进程,其标识引擎、可执行文件、argc/argv环境变量、代理I/O设置以及用于缓冲器的空间。接下来,获得到函数的句柄。代码的最后一段对应于确定关闭COI进程的原因。如在图12b的宿侧代码中所示,宿执行主进程,所述主进程包括被以流水线方式执行的设置运行函数。

结合枚举MIC设备能力和获得到要被实现为COI引擎的引擎的句柄,设置COI缓冲器。COI缓冲器用来管理MIC设备上的数据。缓冲器被通过以运行函数,但是还可以使用其它API来对其直接地写入/读取。COI运行时间对缓冲器存储器的位置进行管理。其确保缓冲器出现在被需要的地方,例如,在运行函数执行之前。其还通过在主机和MIC设备之间来回寻呼缓冲器来管理MIC设备上的物理缓冲器空间。

图13a和13b分别地示出了用于设置和使用缓冲器的示例性源侧和宿侧伪代码列表。在源侧上,设置缓冲器涉及创建缓冲器并且随后映射该缓冲器。该缓冲器可以随后被源直接地写入(例如,“世界你好! ”示例)、或者调用要由宿执行的运行函数,所述宿将向所标识的缓冲器写入结果。在图13b中的宿侧伪代码列表示出了在缓冲器中“打印”数据的简单示例,这使得数据被写入所标识的缓冲器。

RDMA实现

远程直接存储器存取(RDMA)提供使得远程设备能够直接地向另一个设备上的存储器写入的机制。在图8的数据中心架构上下文中,可以在有具有网络功能的主机的服务器实体之间实现RDMA。最普遍的RDMA部署是使用无限宽带HCA来实现的,这是由于若干无限宽带供应商向无限宽带HCA提供具有定义在可应用的无限宽带标准中的标准化功能的RDMA设备。可选择地,存在通过其它网络互连结构的RDMA实现,诸如会聚以太网上的RDMA(RoCE),其类似地支持在RoCE说明书中定义的标准化功能。

根据本文实施例的用于支持被卸载的代码段的标准中的一个标准是宿向源所使用的主机处理器可访问的缓冲器写入数据的能力。通过无限宽带的RDMA和RoCE二者支持该能力,使得针对宿实现的计算实体(诸如在第一托架或机箱中的服务器刀片或者服务器模块)能够直接地向另一个托架或机箱中的主机所使用的存储器进行写入。

在下面的编号条款中阐述了本文描述的主题的进一步的方面:

1、一种在包括计算实体的计算环境中实现的方法,所述计算实体包括通信地耦合到多个包括宿的计算实体的源,所述方法包括:

使用所述源来管理对包括可执行代码的作业的执行;

将所述可执行代码的段卸载到所述多个宿;

针对被卸载到宿的代码的每一段来存储卸载上下文信息,所述卸载上下文信息用于标识被卸载的所述代码的段以及其被卸载到的所述宿;

针对被卸载的代码的段来接收由所述代码的段被卸载到的所述宿生成的结果;

检测到宿未能成功地执行被卸载到所述宿的代码的段,以及响应于此,

取回与被卸载到所述宿的所述代码的段相对应的所述卸载上下文信息;以及

将所述代码的段卸载到另一个宿以进行执行。

2、根据条款1所述的方法,还包括:

利用所述源来执行所述作业;

在所述作业的执行期间,检测要被卸载到宿的、包括一个或多个第一函数的第一代码段;

构造第一卸载上下文,所述第一卸载上下文包括第一宿的地址、所述第一代码段或者用于标识所述一个或多个第一函数的标记中的一个、以及针对所述一个或多个第一函数的一个或多个函数参数;

向所述第一宿发送所述第一卸载上下文;

在非易失性存储设备中存储与所述第一卸载上下文相对应的第一卸载上下文对象;

当由所述第一宿执行了所述一个或多个第一函数之后,接收由所述第一宿产生的第一函数执行结果数据;以及

继续由所述源来执行所述作业,如同所述源执行了所述一个或多个第一函数一样。

3、根据条款2所述的方法,还包括:

在所述作业的执行期间,检测要被卸载到宿的、包括一个或多个第二函数的第二代码段;

构造第二卸载上下文,所述第二卸载上下文包括第二宿的地址、所述第二代码段或者用于标识所述一个或多个第二函数的标记中的一个、以及针对所述一个或多个第二函数的一个或多个函数参数;

向所述第二宿发送所述第二卸载上下文;

在非易失性存储设备中存储与所述第二卸载上下文相对应的第二卸载上下文对象;

出现以下行为中的一项行为:接收到用于标识所述第二宿已失败的信息、检测到所述第二宿已失败、或者检测到所述第二宿未能完成对所述第二代码段的执行,以及响应于此,

从非易失性存储设备取回所述第二卸载上下文对象;

利用所述第二卸载上下文对象来构造第三卸载上下文,所述第三卸载上下文包括第三宿的地址、所述第二代码段或者用于标识所述一个或多个第二函数的标记、以及针对所述一个或多个第二函数的所述一个或多个函数参数;

向所述第三宿发送所述第三卸载上下文;

在非易失性存储设备中存储与所述第三卸载上下文相对应的第三卸载上下文对象;

当由所述第三宿执行了所述一个或多个第二函数之后,接收由所述第三宿产生的第二函数执行结果数据;以及

继续由所述源来执行所述作业,如同所述源执行了所述一个或多个第二函数一样。

4、根据条款2或3所述的方法,其中,所述第一卸载上下文包括用于标识所述第一函数结果要被写入到的存储器缓冲器的信息,以及其中,所述宿向所述存储器缓冲器写入所述第一函数结果。

5、根据条款4所述的方法,还包括:

设置所述源和所述第一宿之间的远程直接存储器存取(RDMA)机制;以及

利用RDMA写入来直接地向所述存储器缓冲器写入所述第一函数结果。

6、根据条款2至5中的任一项所述的方法,还包括:

在执行所述作业之前,将包含所述一个或多个第一函数的库分发到所述第一宿或者在其中实现所述第一宿的主机设备;以及

在所述第一卸载上下文中包括用于标识要执行什么库函数的标记。

7、根据前述条款中的任一项所述的方法,其中,检测到宿未能成功地执行被卸载到所述宿的代码的段是通过使用用于确定宿已失败的心跳监控方案来检测的。

8、根据前述条款中的任一项所述的方法,其中,检测到宿未能成功地执行被卸载到所述宿的代码的段是通过使用超时定时器来检测的。

9、根据前述条款中的任一项所述的方法,其中,所述源包括服务器平台中的主机处理器,并且所述宿的至少一部分包括被安装在服务器平台中的集成众核(MIC)设备中的处理器核。

10、根据前述条款中的任一项所述的方法,其中,所述源包括其中安装了多个集成众核(MIC)设备的服务器平台,并且所述宿包括所述多个MIC设备中的处理器核。

11、根据前述条款中的任一项所述的方法,其中,所述源将被卸载的代码段调度到正在单域中操作的所述多个宿。

12、根据前述条款中的任一项所述的方法,还包括在单域中操作所述宿,在所述单域下,与所述单域相关联的宿接收和执行由所述源卸载的可执行代码的段。

13、一种具有存储在其上的指令的至少一个有形的非暂时性机器可读介质,所述指令被配置为由多个计算实体执行,以实现根据前述条款中的任一项所述的方法。

14、一种服务器平台,包括:

耦合到主机存储器的主机处理器;

通信地耦合到所述主机处理器的多个扩展槽;

安装在相应的扩展槽中的一个或多个集成众核(MIC)设备,每一个MIC设备包括多个处理器核和板载存储器;以及

网络适配器,所述网络适配器被安装在扩展槽中或者被实现为通信地耦合到所述主机处理器的部件;

其中,所述服务器平台还包括软件指令,所述软件指令被配置为要在所述主机处理器以及在所述MIC设备中的多个所述处理器核上执行以使得所述服务器平台能够:

将所述主机处理器配置为源以及将在所述MIC设备中的所述多个处理器核的至少一部分配置为宿;

在所述板载MIC存储器和所述主机存储器之间配置存储器映射;

管理在所述主机处理器上的对包括可执行代码的作业的执行;

将所述可执行代码的段卸载到所述多个宿;

针对被卸载到宿的每个代码的段,发送卸载上下文信息,以供在耦合到所述网络适配器的、可经由网络访问的非易失性存储设备上存储,所述卸载上下文信息用于标识被卸载的所述代码的段以及其被卸载到的所述宿;

在所述宿上执行所卸载的代码段以生成结果数据;

将所述结果数据存储在可由所述主机处理器访问的存储器缓冲器中;

检测到宿未能成功地执行被卸载到所述宿的代码的段,以及响应于此,

取回先前存储的、与被卸载到所述宿的所述代码的段相对应的所述卸载上下文信息;以及

将所述代码的段卸载到另一个宿以进行执行。

15、根据条款14所述的服务器平台,其中,所述指令的执行还包括使得所述服务器平台能够:

经由所述源来执行所述作业的第一部分;

在所述作业的执行期间,检测要被卸载的、包括一个或多个第一函数的第一代码段;

标识所述第一代码段要卸载到的第一宿;

构造第一卸载上下文,所述第一卸载上下文包括第一宿的地址、所述第一代码段或者用于标识所述一个或多个第一函数的标记中的一个、针对所述一个或多个第一函数的一个或多个函数参数、以及用于映射经由所述一个或多个第一函数的执行所生成的结果数据要被写入到的存储器缓冲器的信息;

向所述第一宿传送所述第一卸载上下文;

在非易失性存储设备中存储与所述第一卸载上下文相对应的第一卸载上下文对象;

经由所述第一宿使用所述一个或多个函数参数来执行所述一个或多个第一函数以生成结果数据;

向所述存储器缓冲器写入所述结果数据;以及

继续由所述源来执行所述作业,如同所述源执行了所述第一函数一样。

16、根据条款15所述的服务器平台,其中,所述指令的执行还包括使得所述服务器平台能够:

在所述作业的执行期间,检测要被卸载的、包括一个或多个第二函数的第二代码段;

构造第二卸载上下文,所述第二卸载上下文包括第二宿的地址、所述第二代码段或者用于标识所述一个或多个第二函数的标记中的一个、针对所述一个或多个第二函数的一个或多个函数参数、以及用于映射经由所述一个或多个第二函数的执行所生成的结果数据要被写入到的存储器缓冲器的信息;

向所述第二宿发送所述第二卸载上下文;

在非易失性存储设备中存储与所述第二卸载上下文相对应的第二卸载上下文对象;

检测到所述第二宿已失败或者检测到所述第二宿未能完成对所述第二代码段的执行,以及响应于此

出现以下行为中的一项行为:接收到用于标识所述第二宿已失败的信息、检测到所述第二宿已失败、或者检测到在所述第二宿上的所述第二代码段的执行导致了错误,以及响应于此,

从非易失性存储设备取回所述第二卸载上下文对象;

利用所述第二卸载上下文对象来构造第三卸载上下文,所述第三卸载上下文包括第三宿的地址、所述第二代码段或者用于标识所述一个或多个第二函数的标记中的一个、针对所述一个或多个第二函数的一个或多个函数参数、以及用于映射经由所述一个或多个第二函数的执行所生成的结果数据要被写入到的存储器缓冲器的信息;

向所述第三宿发送所述第三卸载上下文;

在非易失性存储设备中存储与所述第三卸载上下文相对应的第三卸载上下文对象;

经由所述第三宿使用所述一个或多个函数参数来执行所述一个或多个第二函数以生成结果数据;

向所述存储器缓冲器写入所述结果数据;以及

继续由所述源来执行所述作业,如同所述源执行了所述一个或多个第二函数一样。

17、根据条款16所述的系统,其中,所述系统还被配置为实现心跳监控方案来检测宿的失败。

18、根据条款16或17所述的系统,其中,所述系统还被配置为实现超时定时器来检测在所述第二宿上的所述第二代码段的执行导致错误。

19、根据条款14至18中的任一项所述的服务器平台,其中,所述服务器平台包括双插槽服务器,所述双插槽服务器包括第一插槽和第二插槽,其中,每一个插槽包括耦合到相应的主机存储器中的相应的主机处理器以及通信地耦合到所述主机处理器的至少一个扩展槽,并且其中,条款12中的所述主机处理器和主机存储器包括所述第一插槽中的第一主机处理器和第一主机存储器。

20、根据条款19所述的服务器平台,其中,所述第一插槽和所述第二插槽中的每一个插槽包括相应的MIC设备被安装在其中的一个或多个扩展槽,并且其中,所述第一插槽和所述第二插槽中的所述扩展槽中安装的所述MIC设备的所述处理器核中的所述宿被实现为单域。

21、根据条款20所述的服务器平台,其中,所述第一插槽和所述第二插槽中的每一个插槽包括相应的MIC设安装备在其中的一个或多个扩展槽,并且其中,每一个插槽还包括软件指令,所述软件指令被配置为要在所述插槽的所述主机处理器以及在所述插槽的一个或多个相应的扩展槽中安装的一个或多个MIC设备中的多个所述处理器核上执行以使得每一个插槽能够:

将在所述插槽中的所述主机处理器配置为源以及将在所述MIC设备中的多个所述处理器核的至少一部分配置为宿;

针对在所述插槽的扩展槽中安装的每一个MIC设备来配置所述板载MIC存储器和所述主机存储器之间的存储器映射;

管理在所述主机处理器上的对包括可执行代码的作业的执行;

将所述可执行代码的部分卸载到所述多个宿;

针对被卸载到宿的每个代码的段,发送卸载上下文信息,以供在耦合到所述网络适配器的、可经由网络访问的非易失性存储设备上存储,所述卸载上下文信息用于标识被卸载的所述代码的段以及其被卸载到的所述宿;

在所述宿上执行所卸载的代码段以生成结果数据;

将所述结果数据存储在可由所述主机处理器访问的存储器缓冲器中;

检测到宿未能成功地执行被卸载到所述宿的代码的段,以及响应于此,

取回先前存储的、与被卸载到所述宿的所述代码的段相对应的所述卸载上下文信息;以及

将所述代码的段卸载到另一个宿以进行执行。

22、根据条款21所述的服务器平台,其中,与所述第一插槽的所述扩展槽中安装的所述一个或多个MIC设备的所述处理器核相对应的所述宿被实现在由所述第一源管理的第一域中,并且其中,与所述第二插槽的所述扩展槽中安装的所述一个或多个MIC设备的所述处理器核相对应的所述宿被实现在由所述第二源管理的第二域中。

23、根据条款22所述的服务器平台,其中,在所述第一主机处理器和所述第二主机处理器的至少一者上的所述软件指令的执行使得所述服务器平台能够执行检查点操作,在所述检查点操作之下,与所述第一插槽和所述第二插槽上并行执行的相应作业相对应的状态信息被写入经由所述网络适配器访问的非易失性存储设备。

24、一种具有存储在其上的指令的至少一个有形的非暂时性机器可读介质,所述指令被配置为由服务器平台中的计算实体执行,所述服务器平台包括:

包括第一计算实体的主机处理器;

耦合到所述主机处理器的主机存储器;

通信地耦合到所述主机处理器的多个扩展槽;

安装在相应的扩展槽中的一个或多个集成众核(MIC)设备,每一个MIC设备包括多个包括计算实体的处理器核和板载存储器;以及

网络适配器,所述网络适配器被安装在扩展槽中或者被实现为通信地耦合到所述主机处理器的部件;

其中,所述一个或多个MIC设备中所述主机处理器和处理器核对所述指令的执行使得所述服务器平台能够:

将所述主机处理器配置为源以及将在所述一个或多个MIC设备中的所述多个处理器核的至少一部分配置为宿;

针对每一个MIC设备,配置所述MIC设备的所述板载MIC存储器和所述主机存储器之间的存储器映射;

管理在所述主机处理器上的对包括可执行代码的作业的执行;

将所述可执行代码的段卸载到所述多个宿;

针对被卸载到宿的每个代码的段,发送卸载上下文信息,以供在耦合到所述网络适配器的、可经由网络访问的非易失性存储设备上存储,所述卸载上下文信息用于标识被卸载的所述代码的段以及其被卸载到的所述宿;

在所述宿上执行所卸载的代码段以生成结果数据;

将所述结果数据存储在可由所述主机处理器访问的存储器缓冲器中;

检测到宿未能成功地执行被卸载到所述宿的代码的段,以及响应于此,

取回先前存储的、与被卸载到所述宿的所述代码的段相对应的所述卸载上下文信息;以及

将所述代码的段卸载到另一个宿以进行执行。

25、根据条款24所述的至少一个有形的非暂时性机器可读介质,其中,所述一个或多个MIC设备中所述主机处理器和处理器核对所述指令的执行还使得所述服务器平台能够:

经由所述源来执行所述作业的第一部分;

在所述作业的执行期间,检测要卸载的、包括一个或多个第一函数的第一代码段;

标识所述第一代码段要卸载到的第一宿;

构造第一卸载上下文,所述第一卸载上下文包括第一宿的地址、所述第一代码段或者用于标识所述一个或多个第一函数的标记中的一个、针对所述一个或多个第一函数的一个或多个函数参数、以及用于映射经由所述一个或多个第一函数的执行所生成的结果数据要被写入到的存储器缓冲器的信息;

向所述第一宿传送所述第一卸载上下文;

在非易失性存储设备中存储与所述第一卸载上下文相对应的第一卸载上下文对象;

经由所述第一宿使用所述一个或多个函数参数来执行所述一个或多个第一函数以生成结果数据;

向所述存储器缓冲器写入所述结果数据;以及

继续由所述源来执行所述作业,如同所述源执行了所述第一函数一样。

26、根据条款25所述的至少一个有形的非暂时性机器可读介质,其中,所述一个或多个MIC设备中所述主机处理器和处理器核对所述指令的执行还使得所述服务器平台能够:

在所述作业的执行期间,检测要卸载的、包括一个或多个第二函数的第二代码段;

标识所述第二代码段要卸载到的第二宿;

构造第二卸载上下文,所述第二卸载上下文包括第二宿的地址、所述第二代码段或者用于标识所述一个或多个第二函数的标记中的一个、针对所述一个或多个第二函数的一个或多个函数参数、以及用于映射经由所述一个或多个第二函数的执行所生成的结果数据要被写入到的存储器缓冲器的信息;

向所述第二宿发送所述第二卸载上下文;

在非易失性存储设备中存储与所述第二卸载上下文相对应的第二卸载上下文对象;

出现以下行为中的一项行为:接收到用于标识所述第二宿已失败的信息、检测到所述第二宿已失败、或者检测到在所述第二宿上的所述第二代码段的执行导致了错误,以及响应于此,

从非易失性存储设备取回所述第二卸载上下文对象;

利用所述第二卸载上下文对象来构造第三卸载上下文,所述第三卸载上下文包括第三宿的地址、所述第二代码段或者用于标识所述一个或多个第二函数的标记中的一个、针对所述一个或多个第二函数的一个或多个函数参数、以及用于映射经由所述一个或多个第二函数的执行所生成的结果数据要被写入到的存储器缓冲器的信息;

向所述第三宿发送所述第三卸载上下文;

在非易失性存储设备中存储与所述第三卸载上下文相对应的第三卸载上下文对象;

经由所述第三宿使用所述一个或多个函数参数来执行所述一个或多个第二函数以生成结果数据;

向所述存储器缓冲器写入所述结果数据;以及

继续由所述源来执行所述作业,如同所述源执行了所述一个或多个第二函数一样。

27、根据条款24至26中的任一项所述的至少一个有形的非暂时性机器可读介质,其中,所述主机处理器对所述指令的执行使得所述主机处理器能够通过使用用于确定宿已失败的心跳监控方案来检测到宿未能成功地执行被卸载到所述宿的代码的段。

28、根据条款24至27中的任一项所述的至少一个有形的非暂时性机器可读介质,其中,所述主机处理器对所述指令的执行使得所述主机处理器能够通过使用超时定时器来检测到宿未能成功地执行被卸载到所述宿的代码的段。

29、一种用于执行被划分为多个作业的整体任务并且在包括第一多个计算实体的计算环境中实现的方法,所述第一多个计算实体包括源,所述源通信地耦合到包括宿的第二多个计算实体,所述方法包括:

在每一个源处接收被调度到所述源的相应的作业,其中,每一个作业包括可执行代码;

在每一个源处,

管理被调度到所述源的所述作业的执行;

将所述作业的可执行代码的段卸载到所述多个宿之间的多个宿;

针对被卸载到宿的代码的每一段来存储卸载上下文信息,所述卸载上下文信息用于标识被卸载的所述代码的段以及其被卸载到的所述宿;

针对被卸载的代码的段来接收由所述代码的段被卸载到的所述宿生成的结果;

检测到宿未能成功地执行被卸载到所述宿的代码的段,以及响应于此,

取回与被卸载到所述宿的所述代码的段相对应的所述卸载上下文信息;以及

将所述代码的段卸载到另一个宿以进行执行。

30、根据条款29所述的方法,还包括:

在每一个源处,

利用所述源来执行所述作业;

在所述作业的执行期间,检测要被卸载到宿的、包括一个或多个第一函数的第一代码段;

构造第一卸载上下文,所述第一卸载上下文包括第一宿的地址、所述第一代码段或者用于标识所述一个或多个第一函数的标记中的一个、以及针对所述一个或多个第一函数的一个或多个函数参数;

向所述第一宿发送所述第一卸载上下文;

在非易失性存储设备中存储与所述第一卸载上下文相对应的第一卸载上下文对象;

当由所述第一宿执行了所述一个或多个第一函数之后,接收由所述第一宿产生的第一函数执行结果数据;以及

继续由所述源来执行所述作业,如同所述源执行了所述一个或多个第一函数一样。

31、根据条款30所述的方法,还包括:

在每一个源处,

在所述作业的执行期间,检测要被卸载到宿的、包括一个或多个第二函数的第二代码段;

构造第二卸载上下文,所述第二卸载上下文包括第二宿的地址、所述第二代码段或者用于标识所述一个或多个第二函数的标记中的一个、以及针对所述一个或多个第二函数的一个或多个函数参数;

向所述第二宿发送所述第二卸载上下文;

在非易失性存储设备中存储与所述第二卸载上下文相对应的第二卸载上下文对象;

出现以下行为中的一项行为:接收到用于标识所述第二宿已失败的信息、检测到所述第二宿已失败、或者检测到所述第二宿未能完成对所述第二代码段的执行中的一个,以及响应于此,

从非易失性存储设备取回所述第二卸载上下文对象;

利用所述第二卸载上下文对象来构造第三卸载上下文,所述第三卸载上下文包括第三宿的地址、所述第二代码段或者用于标识所述第二代码段的标记、以及针对所述一个或多个第二函数的所述一个或多个函数参数;

向所述第三宿发送所述第三卸载上下文;

在非易失性存储设备中存储与所述第三卸载上下文相对应的第三卸载上下文对象;

当由所述第三宿执行了所述一个或多个第二函数之后,接收由所述第三宿产生的第二函数执行结果数据;以及

继续由所述源来执行所述作业,如同所述源执行了所述一个或多个第二函数一样。

32、根据条款29至31中的任一项所述的方法,其中,所述多个源经由包括一个或多个区段的网络互连而耦合到所述多个宿,并且所述多个宿被实现为单域。

33、根据条款29至31中的任一项所述的方法,其中,所述多个源经由包括一个或多个区段的网络互连而耦合到所述多个宿,并且所述多个宿被实现为多域。

34、根据条款33所述的方法,其中,每一个源经由相应的网络互连区段而耦合到相应的宿的集合,并且其中,每一个相应的宿的集合被实现为相应域。

35、根据条款29至31中的任一项所述的方法,其中,所述多个源经由卸载架构耦合到所述多个宿。

36、根据条款35所述的方法,其中,所述多个宿被分组为多个宿的集合,其中,每一个宿的集合被实现为相应域。

37、根据条款29至36中的任一项所述的方法,其中,所述多个源经由作业调度架构连接到作业调度器,并且其中,所述作业调度器将作业调度到所述多个源。

38、根据条款29至36中的任一项所述的方法,其中,所述多个源互连到一个或多个作业调度器,并且其中,所述一个或多个作业调度器、所述多个源以及所述多个宿占有层次中的相应级别,其中所述多个宿占有所述层次中的最低级别。

39、根据条款38所述的方法,其中,所述计算环境具有物理层次,所述物理层次具有最低级别,并且其中,所述多个宿包括占有所述物理层次的所述最低级别的计算实体,所述多个源包括占有所述物理层次中的、由所述多个宿占有的所述物理层次中的所述级别之上的级别的计算实体,并且所述一个或多个作业调度器是由占有所述物理层次中的、由所述多个宿占有的所述物理层次中的所述级别之上的级别的计算实体来实现的。

40、根据条款29至39中的任一项所述的方法,其中,至少一个源包括服务器平台中的主机处理器,并且所述宿的至少一部分包括安装在服务器平台中的集成众核(MIC)设备中的处理器核。

41、一种具有存储在其上的指令的至少一个有形的非暂时性机器可读介质,所述指令被配置为由所述多个计算实体执行,以实现根据条款29至40中的任一项所述的方法。

42、一种服务器平台,包括:

耦合到主机存储器的主机处理器;

通信地耦合到所述主机处理器的多个扩展槽;

安装在相应的扩展槽中的一个或多个集成众核(MIC)设备,每一个MIC设备包括多个处理器核和板载存储器;以及

网络适配器,所述网络适配器被安装在扩展槽中或者被实现为通信地耦合到所述主机处理器的部件;以及

用于进行以下各项操作的单元,

将所述主机处理器配置为源以及将在所述MIC设备中的所述多个处理器核的至少一部分配置为宿;

配置所述板载MIC存储器和所述主机存储器之间的存储器映射;

管理在所述主机处理器上的对包括可执行代码的作业的执行;

将所述可执行代码的段卸载到所述多个宿;

针对被卸载到宿的每个代码的段,发送卸载上下文信息,以供在耦合到所述网络适配器的、可经由网络访问的非易失性存储设备上存储,所述卸载上下文信息用于标识被卸载的所述代码的段以及其被卸载到的所述宿;

在所述宿上执行所卸载的代码段以生成结果数据;

将所述结果数据存储在可由所述主机处理器访问的存储器缓冲器中;

检测到宿未能成功地执行被卸载到所述宿的代码的段,以及响应于此,

取回先前存储的、与卸载到所述宿的所述代码的段相对应的所述卸载上下文信息;以及

将所述代码的段卸载到另一个宿以进行执行。

43、根据条款42所述的服务器平台,还包括用于进行以下各项操作的单元:

经由所述源来执行所述作业的第一部分;

在所述作业的执行期间,检测要卸载的、包括一个或多个第一函数的第一代码段;

标识所述第一代码段要卸载到的第一宿;

构造第一卸载上下文,所述第一卸载上下文包括第一宿的地址、所述第一代码段或者用于标识所述一个或多个第一函数的标记中的一个、针对所述一个或多个第一函数的一个或多个函数参数、以及用于映射经由所述一个或多个第一函数的执行所生成的结果数据要被写入到的存储器缓冲器的信息;

向所述第一宿传送所述第一卸载上下文;

在非易失性存储设备中存储与所述第一卸载上下文相对应的第一卸载上下文对象;

经由所述第一宿使用所述一个或多个函数参数来执行所述一个或多个第一函数以生成结果数据;

向所述存储器缓冲器写入所述结果数据;以及

继续由所述源来执行所述作业,如同所述源执行了所述第一函数一样。

44、根据条款43所述的服务器平台,还包括用于进行以下各项操作的单元:

在所述作业的执行期间,检测要卸载的、包括一个或多个第二函数的第二代码段;

标识所述第二代码段要卸载到的第二宿;

构造第二卸载上下文,所述第二卸载上下文包括第二宿的地址、所述第二代码段或者用于标识所述一个或多个第二函数的标记中的一个、针对所述一个或多个第二函数的一个或多个函数参数、以及用于映射经由所述一个或多个第二函数的执行所生成的结果数据要被写入到的存储器缓冲器的信息;

向所述第二宿发送所述第二卸载上下文;

在非易失性存储设备中存储与所述第二卸载上下文相对应的第二卸载上下文对象;

检测到所述第二宿已失败或者检测到所述第二宿未能完成对所述第二代码段的执行,以及响应于此

出现以下行为中的一项行为:接收到用于标识所述第二宿已失败的信息、检测到所述第二宿已失败、或者检测到在所述第二宿上的所述第二代码段的执行导致了错误,以及响应于此,

从非易失性存储设备取回所述第二卸载上下文对象;

利用所述第二卸载上下文对象来构造第三卸载上下文,所述第三卸载上下文包括第三宿的地址、所述第二代码段或者用于标识所述一个或多个第二函数的标记中的一个、针对所述一个或多个第二函数的一个或多个函数参数、以及用于映射经由所述一个或多个第二函数的执行所生成的结果数据要被写入到的存储器缓冲器的信息;

向所述第三宿发送所述第三卸载上下文;

在非易失性存储设备中存储与所述第三卸载上下文相对应的第三卸载上下文对象;

经由所述第三宿使用所述一个或多个函数参数来执行所述一个或多个第二函数以生成结果数据;

向所述存储器缓冲器写入所述结果数据;以及

继续由所述源来执行所述作业,如同所述源执行了所述一个或多个第二函数一样。

45、根据条款44所述的系统,还包括用于实现用来检测宿的失败的心跳监控方案的单元。

46、根据条款44或45所述的系统,还包括用于实现超时定时器,以检测在所述第二宿上的所述第二代码段的执行已导致了错误的单元。

47、根据条款14至18中的任一项所述的服务器平台,其中,所述服务器平台包括双插槽服务器,所述双插槽服务器包括第一插槽和第二插槽,其中,每一个插槽包括耦合到相应的主机存储器中的相应的主机处理器以及通信地耦合到所述主机处理器的至少一个扩展槽,并且其中,条款42中的所述主机处理器和主机存储器包括在所述第一插槽中的第一主机处理器和第一主机存储器。

48、根据条款47所述的服务器平台,其中,所述第一插槽和所述第二插槽中的每一个插槽包括相应的MIC设备被安装在其中的一个或多个扩展槽,并且其中,所述第一插槽和所述第二插槽中的所述扩展槽中安装的所述MIC设备的所述处理器核中的所述宿被实现为单域。

49、根据条款48所述的服务器平台,其中,所述第一插槽和所述第二插槽中的每一个插槽包括相应的MIC设备被安装在其中的一个或多个扩展槽,还针对所述第一插槽和所述第二插槽中的每一个插槽,包括用于进行以下各项操作的单元:

将在所述插槽中的所述主机处理器配置为源以及将在所述MIC设备中的所述多个处理器核的至少一部分配置为宿;

针对在所述插槽的扩展槽中安装的每一个MIC设备,配置所述板载MIC存储器和所述主机存储器之间的存储器映射;

管理在所述主机处理器上的对包括可执行代码的作业的执行;

将所述可执行代码的段卸载到所述多个宿;

针对被卸载到宿的每个代码的段,发送卸载上下文信息,以供在耦合到所述网络适配器的、可经由网络访问的非易失性存储设备上存储,所述卸载上下文信息用于标识被卸载的所述代码的段以及其被卸载到的所述宿;

在所述宿上执行所卸载的代码段以生成结果数据;

将所述结果数据存储在可由所述主机处理器访问的存储器缓冲器中;

检测到宿未能成功地执行被卸载到所述宿的代码的段,以及响应于此,

取回先前存储的、与被卸载到所述宿的所述代码的段相对应的所述卸载上下文信息;以及

将所述代码的段卸载到另一个宿以进行用执行。

50、根据条款49所述的服务器平台,其中,与所述第一插槽的所述扩展槽中安装的所述一个或多个MIC设备的所述处理器核相对应的所述宿被实现在由所述第一源管理的第一域中,并且其中,与所述第二插槽的所述扩展槽中安装的所述一个或多个MIC设备的所述处理器核相对应的所述宿被实现在由所述第二源管理的第二域中。

51、根据条款50所述的服务器平台,还包括用于执行检查点操作的单元,在所述检查点操作之下,与所述第一插槽和所述第二插槽上并行执行的相应任务相对应的状态信息被写入经由所述网络适配器访问的非易失性存储设备。

尽管参照具体实现方式描述了一些实施例,但是根据一些实施例,其它实现方式也是可能的。另外,附图中所示出的和/或本文所描述的要素或其它特征的排列和/或顺序不需要按照所示出和描述的具体方式布置。根据一些实施例,多种其它排列也是可能的。

在附图所示的每一个系统中,在一些情形中的要素可以都具有相同的附图标记或者不同的附图标记,以表明所表示的元素可能是不同的和/或相同的。然而,要素可以足够灵活,以具有不同的实现方式,并且适用于本文所示出或所描述的一些或全部系统。附图中所示的各种要素可以是相同或不同的。哪一个被称为第一要素以及哪一个被称为第二要素是随意的。

在说明书和权利要求书中,可以使用术语“耦合”和“连接”以及它们的派生词。应该理解的是,这些术语并不是指彼此的同义词。相反的,在具体实施例中,“连接”可以用于指示两个或多个元件彼此直接物理接触或电接触。“耦合”可能意味着两个或多个元件直接物理接触或电接触。但是,“耦合”还可以意味着两个或多个元件彼此没有直接接触,但是仍然彼此协作或交互。

实施例是本发明的实现方式或示例。说明书中对“实施例”、“一个实施例”、“一些实施例”或“其它实施例”的引用意味着结合实施例所描述的具体特征、结构或特性包括在本发明的至少一些实施例中,但不必包括在所有的实施例中。出现的各种“实施例”、“一个实施例”或“一些实施例”不必全都涉及相同的实施例。

并非本文描述和示出的所有部件、特征、架构、特性都需要包括在一具体实施例或多个实施例中。如果(例如)说明书陈述了“可以”、“可能”、“可能”或者“可能会”包括部件、特征、结构或特性,则不必须包括该具体部件、特征、结构或特性。如果说明书或权利要求提到了“一”或“一个”要素,这并不意味着仅有一个要素。如果说明书或权利要求提到了“额外的”要素,则并不排除存在超过一个额外的元件。

在此的算法一般被认为是得出期望结果的有条理的一系列动作或操作。这包括对物理量的物理操作。通常,尽管不是必要的,但是这些量表现为能够被保存、传送、组合、比较以及以其他方式操作的电或磁信号的形式。已经证实的是,主要出于惯用的原因,以位、值、要素、符号、特征、术语、数字等指代这些信号在有些时候是便利的。然而,应该理解的是,所有这些以及类似的术语都与适当的物理量相关联,并且仅是适用于这些量的便利标记。

使用斜体字母(诸如在前述的详细描述中的‘i’、‘j’、‘l’、‘m’、‘n’、‘p’等)来描述整数,并且具体字母的使用并不限于具体的实施例。此外,可以在不同的权利要求中使用相同的字母来表示不同的整数,或者可以使用不同的字母。另外,在详细描述中使用的具体字母可能与或者可能不与涉及详细描述中相同主题的权利要求中使用的字母匹配。

如上所述,可以通过相应软件和/或固件部件和应用(诸如由嵌入式处理器等执行的软件和/或固件)来促进本文实施例的各个方面。因此,本发明的实施例可以用作或用于支持软件程序、软件模块、固件和/或在某种形式的处理器、处理核或嵌入式逻辑单元上执行的分布式软件、运行在处理器或核或以其它方式实施或实现在计算机可读或机器可读非暂时性存储介质上或内的虚拟机。计算机可读或机器可读非暂时性存储介质包括用于存储或发送机器(例如,计算机)可读形式的信息的任何机制。例如,计算机可读或机器可读非暂时性存储介质包括用于提供(即,存储和/或发送)可被计算机或计算机器(例如,计算设备、电子系统等)访问的形式的信息的任何机制,诸如可记录/不可记录介质(例如,只读存储器(ROM)、随机存取存储器(RAM)、磁盘存储介质、光存储介质、闪速存储设备等)。内容可以是直接可执行的(“目标”或“可执行”形式)源代码或差分代码(“增量”(delta)或“插入(patch)”代码)。计算机可读或机器可读非暂时性存储介质还可以包括可从其下载内容的存储器或数据库。计算机可读或机器可读非暂时性存储介质还可以包括具有出售或交付时其上就已经存储有内容的设备或产品。因此,交付具有存储的内容的设备或者通过通信介质来提供用于下载的内容可以被理解为提供了包括具有本文所描述这种内容的计算机可读或机器可读非暂时性存储介质的制品。

以上提到的如本文所描述的处理器、服务器或工具等各种部件可以是用于执行所描述的功能的单元。由本文描述的各种部件执行的操作和功能可以通过运行在处理元件上的软件、经由嵌入式硬件等、或者硬件和软件的任意组合来实现。这些部件可以被实现为软件模块、硬件模块、特殊用途硬件(例如,专用硬件、ASIC、DSP等)、嵌入式控制器、固线电路、硬件逻辑单元等。软件内容(例如,数据、指令、配置信息等)可以经由包括计算机可读或机器可读非暂时性存储介质的制品被提供,这些存储介质提供表示可被执行的指令的内容。该内容可以使得计算机执行本文描述的各种功能/操作。

所本文所使用的,结合术语“中的至少一个”的术语列表可以是指所列术语的任意组合。例如,短语“A、B或C中的至少一个”可以是指A;B;C;A和B;B和C;或者A、B和C。

对本发明(包括摘要中描述的内容)的说明性实施例的以上描述并非出于详尽的目的,或者意在将本发明限于所公开的确切形式。虽然本文出于说明性目的描述了本发明的特定实施例和示例,但是,相关领域技术人员将意识到的是,在本发明范围内的各种等同修改是可能的。

可以根据以上的详细描述对本发明做出这些更改。下文的权利要求中使用的术语不应解释为要将本发明限制于说明书和附图所公开的特定实施例。相反的,本发明的范围将完全由下文的权利要求确定,该权利要求应该根据已建立的权利要求的解释原则来解释。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号