首页> 中国专利> 用于复杂系统分析的实时交互式仿真的影子追踪

用于复杂系统分析的实时交互式仿真的影子追踪

摘要

电子计算系统通过以下操作来保存处理单元的错误前状态:接收输入的第一流;缓冲输入的第一流以生成与输入的第一流相同的输入的缓冲流;将第一流传送到第一程序的主实例;将缓冲流传送到第一程序的辅助实例;利用第一流实时执行主实例;相对于利用第一流执行主实例,以预定义的时间延迟来利用缓冲流执行辅助实例;检测由于执行主实例而导致的错误状态;以及响应于检测到错误状态,暂停辅助实例并保存辅助实例的当前状态,其中,辅助实例的当前状态对应于主实例的错误前状态。

著录项

  • 公开/公告号CN112204529A

    专利类型发明专利

  • 公开/公告日2021-01-08

    原文格式PDF

  • 申请/专利权人 谷歌有限责任公司;

    申请/专利号CN201980036500.1

  • 发明设计人 多夫·齐姆林;保罗·莱文蒂斯;

    申请日2019-11-14

  • 分类号G06F11/07(20060101);G06F11/14(20060101);G06F11/34(20060101);

  • 代理机构11219 中原信达知识产权代理有限责任公司;

  • 代理人李宝泉;任庆威

  • 地址 美国加利福尼亚州

  • 入库时间 2023-06-19 09:29:07

说明书

技术领域

本申请总体上涉及计算机技术,包括但不限于用于在处理实时用户交互式应用的过程中保存一个或多个错误前状态的方法和系统。

背景技术

如果实时交互式应用进入异常或失败状态,则很难对该实时交互式应用进行故障排除。故障可能导致崩溃转储和日志,在某些情况下,其指示已执行的代码路径。但是,试图了解导致应用进入异常或失败状态的输入集或刺激的开发者并没有许多工具可供他们支配。因此,需要一种在应用失败之前提供有关其状态的更详细和有用的信息的系统。

发明内容

在本说明书中描述的实施方式针对提供一种处理系统,以实现实时交互式应用的主实例的时延的版本。时延的版本使用与主实例相同的输入进行操作,但在主实例之后的可配置延迟下运行。如果主实例进入不希望的状态,则这允许使时延的实例在出现不希望的状态之前被暂停,从而实现检查、步进和其他诊断功能。

在一个方面,一些实施方式包括一种在具有一个或多个处理器和存储一个或多个程序以供一个或多个处理器执行的存储器的计算机系统上实现保存处理单元的错误前状态的方法。该方法包括接收输入的第一流;缓冲输入的第一流以生成与输入的第一流相同的输入的缓冲流;将第一流传送到第一程序的主实例;将缓冲流传送到第一程序的辅助实例;利用第一流实时执行主实例;相对于利用第一流执行主实例,以预定义的时间延迟来利用缓冲流执行辅助实例;检测由于执行主实例而导致的错误状态;以及响应于检测到错误状态,暂停辅助实例并保存辅助实例的当前状态,其中,该辅助实例的当前状态对应于主实例的错误前状态。

在一些实施方式中,错误状态是由于利用第一流中的第一输入执行主实例而导致的(例如,第一输入导致错误状态),并且该方法包括在处理缓冲流中的、与第一流中的第一输入相对应的输入之前暂停辅助实例(例如,在辅助实例有机会处理第一输入的等同物之前暂停辅助实例,从而防止在辅助实例中发生错误状态)。

在一些实施方式中,辅助实例在预定义的时间延迟后与主实例并发地运行。在一些实施方式中,辅助实例在主实例终止(例如,由于故障)之后运行。

在一些实施方式中,错误状态掩盖主实例的错误前状态的方面;并且保存辅助实例的当前状态包括记录辅助实例的当前状态的方面,该辅助实例的当前状态的方面与主实例的错误前状态的方面相对应,从而保存如果实例尚未及时暂停则会被隐藏的错误前状态的方面。在一些实施方式中,主实例的错误前状态的方面是与主实例相关联的第一存储数据,辅助实例的当前状态的方面是与辅助实例相关联的第二存储的数据,并且第二存储数据与第一存储数据相对应,从而允许保存原本在发生故障时将丢失或无法读取的数据。

在一些实施方式中,执行主实例包括使用第一处理单元生成第一输出流;执行辅助实例包括使用第二处理单元生成第二输出流。在一些实施方式中,检测错误状态包括在第一输出流中检测错误状态的指示符(例如,故障数据、标志、缺少期望数据等)。在一些实施方式中,检测错误状态包括从由第一处理单元生成的指示符(例如,故障信号)检测错误状态。

在一些实施方式中,该方法进一步包括,在保存辅助实例的当前状态之后,(i)继续辅助实例以获得辅助实例的后续状态,以及(ii)保存辅助实例的后续状态,辅助实例的后续状态与主实例的后续错误前状态相对应,从而允许保存更接近故障状态的状态并且结果,提供有关在故障发生之前潜在的故障原因的更多相关数据。在一些实施方式中,暂停辅助实例包括停止将缓冲流传送到辅助实例,并且继续辅助实例包括将缓冲流中的单个输入传送到辅助实例,从而允许对即将发生的故障的更可控制的抵近,结果导致更大的数据访问性。

在一些实施方式中,保存辅助实例的当前状态包括提供辅助实例的当前状态以进行检查(例如,由故障排除程序或程序员进行检查)。

在一些实施方式中,可以组合上述一些操作或操作子集和/或可以改变一些操作或操作子集的顺序。

根据本申请的一些方面,一种计算机系统包括存储器,该存储器存储用于使该计算机系统执行上述任何操作的指令。

此外,根据本申请的一些方面,存储在计算机系统的存储器中的指令包括用于使计算机系统执行上述任何操作的指令。

根据本说明书中的描述和附图,其他实施例和优点对于本领域的技术人员而言是显而易见的。

附图说明

为了更好地理解各个所描述的实施方式,应结合以下附图参考以下具体实施方式,在附图中,相似的附图标记指代各附图中的相应部分。

图1是根据一些实施方式的示例在线交互式游戏环境。

图2是图示根据一些实施方式的游戏环境的示例客户端设备的框图。

图3是图示根据一些实施方式的游戏环境的示例媒体设备的框图。

图4是图示根据一些实施方式的游戏环境的示例服务器的框图。

图5A描绘根据一些实施方式的示例游戏环境。

图5B和图5C描绘根据一些实施方式的示例游戏场景。

图6是根据一些实施方式的游戏娱玩过程的流程图。

图7是根据一些实施方式的示例处理系统。

图8是图示根据一些实施方式的示例处理系统的框图。

图9图示根据一些实施方式的游戏娱玩过程的示例场景。

图10是图示根据一些实施方式的、用于在处理系统中保存错误前状态的示例方法的流程图。

在所有附图中,相似的附图标记指代相应的部分。

具体实施方式

本说明书中描述的实施方式旨在提供一种处理环境,以启用实时交互式应用的主实例的时延的版本。时延的版本(在本文中也称为“影子进程”)以与主实例相同的输入进行操作,但相对于主实例以可配置的延迟进行操作。如果主实例进入不希望的状态,则时延的实例在不希望的状态出现之前暂停,从而实现检查、步进和其他诊断功能。

示例游戏环境

为了为本文描述的一些实施方式提供更多的场境(context),现在描述示例游戏环境。本章节中描述的示例游戏环境的实施方式旨在提供云平台和API,以实现对包括第三方游戏内容的云游戏内容的有效率、可移植、低延时托管。一些实施方式动态分配云游戏硬件资源(例如,CPU、GPU、内存、输入/输出和视频流编码器),并监视和利用个体最终用户可用的网络带宽,以同时向游戏玩家的社区提供最佳的在线游戏体验。一些实施方式提供多个性能层,包括支持高性能、实时游戏会话以及面向最终用户的高清媒体流的层。一些实施方式支持不同的订用模型和/或被配置成提供一个或多个并发的实时游戏娱玩(gameplay)和/或评阅几乎没有延时或者没有延时地与一个或多个实际游戏流(例如,经由移动应用或基于浏览器的程序输出到参与在线/云游戏会话的用户的客户端设备的视频流)相一致的媒体流。在一些实施方式中,通过诸如YouTube的媒体流网站向一个或多个用户几乎没有延时或者没有延时地提供实时游戏娱玩和/或评阅媒体流。

在云游戏环境的一些实施方式中,服务器系统为实时、交互式游戏会话提供硬件资源,以用于处理玩家输入并生成输出流以显示给一个或多个玩家以及可选地显示给游戏观众。响应于建立实时交互式游戏会话的请求,服务器系统确定请求客户端设备(即,玩家的控制器设备)的设备能力(例如,硬件和/或软件能力)、网络连接的连接能力(例如,带宽、延时和/或错误率)、以及游戏会话的一个或多个目标质量参数(例如,输出视频流的分辨率、游戏响应延时等),并且因此,将其虚拟机之一与实时交互式会话相关联以建立会话。

在一些实施方式中,针对服务器系统中的一个或多个处理核(例如,GPU核和编码器核)管理游戏数据的处理和编码能力(例如,为玩家和/或观众产生输出视频流),该服务器系统托管实时、在线和交互式游戏环境。例如,在一些实施方式中,一个或多个处理核与多个处理切片一起操作(例如,每个处理切片在核上执行16.67ms),并且服务器系统将多个处理切片中的每个分配给将在其上执行的多个在线游戏会话的子集。对于处理切片之一,服务器系统确定分时共享处理排程,使得游戏会话的相应子集共享处理切片的占空比,并根据它们相应的实时数据处理需要并行执行。另外,为了在时间间隔内加快图像编码,服务器系统的编码器不需要等待直到GPU已经使图像帧的所有数据可用为止。而是,在一些实施方式中,一由GPU提供对编码帧的一部分所需的信息就对图像帧的一部分进行编码,独立于图像帧的与已编码的部分无关的其他部分是否对GPU可用。

此外,服务器系统可以响应于从玩在线游戏会话的用户接收到的用户命令来动态地生成多个帧。根据用户命令的类型,服务器系统确定预期的响应延时、实际的通信和处理延时以及实际的传输延时。然后,通过生成反映命令的效果的帧集来在在线游戏会话中执行用户命令。当以预定帧速率传输时帧集占用与实际传输时延相对应的传输时间,并且可以在与预期响应延时相对应的时间内在用户的客户端设备处接收。

图1是根据一些实施方式的示例在线交互式游戏环境100。在线交互式游戏环境100包括一个或多个客户端设备(例如,客户端设备102和104)。每个客户端设备102执行一个或多个游戏应用。游戏会话可以在特定的游戏应用上运行,以允许客户端设备102的用户玩由服务器系统114托管的在线交互式游戏。在一些实施方式中,客户端设备102(例如,主机客户端)被配置成邀请一个或多个其他客户端设备102加入特定游戏应用的游戏场景。这些客户端设备102的游戏会话被同步以显示相同的游戏场景,其可选地具有与它们相应的用户相对应的不同透视图。

相反,服务器系统114托管在线交互式游戏平台以支持客户端设备102以玩包括特定游戏应用的一个或多个游戏应用。具体地,服务器系统114包括与客户端设备102相关联的多个用户账户,并且与一个或多个游戏应用中的每一个相关联地验证客户端设备的用户。服务器系统114在其加入与该场景相关联的相应游戏会话的客户端设备102上渲染并刷新在线交互式游戏的场景。在一些实施方式中,服务器系统114评估客户端设备102的能力和/或服务器系统114与每个客户端设备102之间的通信连接的质量,并自适应地生成用于与客户端设备102相关联的游戏会话的同步数据流。通过这些手段,服务器系统114被配置成促进同时并且以大体上低延时地同步两个或更多客户端设备102上的在线交互式游戏的游戏会话。

在一些实施方式中,服务器系统114包括游戏服务器122和媒体流服务器124。游戏服务器122被配置成同时为在第一客户端设备102A上运行的在线交互式游戏会话提供两个或更多媒体流。两个或更多个媒体流包括分别经由一个或多个通信网络112提供给第一客户端设备102A和评阅者客户端设备104的低延时流和正常延时流。可选地,提供正常延时流用于教学目的。当第一客户端设备102的用户在第一客户端设备102A上玩游戏会话时,游戏会话被记录并经由正常延时流广播到一个或多个观众,即,观众可以在评阅者客户端设备104上评阅游戏会话。低延时流对应于在线交互式游戏会话的游戏娱玩,并且比对应于相关联的评阅会话的正常延时流具有更快的响应速率和更低的传延时。例如,低延时流具有每秒60帧(fps)的预定义帧速率,并且在每个16.67ms的时间间隔期间向第一客户端设备102A提供至少一个帧,并且正常延时流具有30fps的预定义帧速率,并在每个33.33ms的时间间隔内向评阅者客户端设备104提供至少一帧。在一些实施方式中,正常延时流具有比低延时流更低的分辨率。

在一些实施方式中,客户端设备102或104具有集成在其中的用于显示媒体内容的显示屏。在一些实施方式中,客户端设备102或104耦合到媒体设备106和输出设备108。具体地,客户端设备102或104可以直接(例如,经由蓝牙或其他无线通信链接)、经由本地网络110(例如,Wi-Fi网络)或经由一个或多个通信网络112可通信地耦合到媒体设备106。在一些实施方式中,客户端设备(102或104)和媒体设备106彼此位于本地(例如,在同一个房间、在同一所房子等)。媒体设备106进一步耦合到一个或多个可以输出视觉和/或音频内容的输出设备108(例如,电视、显示监视器、声音系统、扬声器等)。媒体设备106被配置成将内容输出到输出设备108。在一些实施方式中,媒体设备106是投放(casting)设备(例如,Google有限公司的CHROMECAST)或否则包括投放功能的设备。

在一些实施方式中,一个或者多个客户端设备102或104能够与彼此、中央服务器或云计算系统(例如,服务器系统114)和/或被网络连接的其他设备(例如,另一个客户端设备102或104、媒体设备106和输出设备108))进行数据通信和信息共享。可以使用各种自定义或标准无线协议(例如,IEEE 802.15.4、Wi-Fi、ZigBee、6LoWPAN、Thread、Z-Wave、Bluetooth Smart、ISA100.11a、WirelessHART、MiWi等)中的任何一种和/或各种自定义或标准有线协议(例如,以太网、HomePlug等)中的任何一种,或包括截至本文档提交之日尚未开发的通信协议的任何其他合适的通信协议来执行数据通信。在一些实施例中,在线交互式游戏环境100包括常规网络设备(例如,路由器),客户端设备102和104以及它们的对应媒体和输出设备(如果有的话)的集合经由该常规网络设备在本地网络110(例如,局域网)上彼此通信地耦合,并且本地网络110被通信地耦合到通信网络112(例如,广域网和因特网)。在一些实施例中,可选地,客户端设备102和104中的每个客户端设备使用一个或多个无线电通信网络(例如,ZigBee、Z-Wave、Insteon、蓝牙、Wi-Fi和/或其他无线电通信网络)与一个或者多个其它客户端设备、相应媒体设备106或者相应输出设备108通信。

在一些实施方式中,客户端设备102彼此远离,即,它们不位于相同房间或甚至建筑物中。可以通过启动游戏应用(例如,图2中的游戏应用228)来开始游戏,以在每个客户端设备102上执行。在一些实施方式中,对于每个客户端设备102,游戏应用与服务器系统114独立建立在线游戏会话116。两个或更多个客户端设备102(例如,102A和102B)的在线游戏会话116彼此相关(例如,因为它们都在游戏应用的相同游戏域中玩游戏),并且因此,在游戏应用中共享游戏场景。相关的在线游戏会话116彼此同步,并且每个在线游戏会话116可选地以对应于相应客户端设备102的独特玩家视角示出相同游戏场景。因此,每个客户端设备102的用户可以在相应客户端设备上玩游戏,并影响其他客户端设备102上的在线游戏会话116的输出。

替选地,在一些其他实施方式中,在第一客户端设备102A的游戏应用建立在线游戏会话116之后,通过邀请消息邀请一个或多个第二客户端设备102B加入在线游戏会话116,并且例如,将具有加入在线游戏会话116的链接(例如,URL地址)的消息发送到第二客户端设备102B中的每个。适当的控制器配置被提供给被邀请加入在线游戏会话116的每个第二客户端设备102B。在此应用中,当第二客户端102B加入在线游戏会话116时,服务器系统114为每个个体第二客户端设备102B创建单独的游戏会话。相应的第二客户端设备102B的每个个体游戏会话116与第一客户端设备102A的游戏会话116同步并且与该游戏会话116共享相同的场景,但是可以具有与相应第二客户端设备102B相对应的独特玩家视角。在每个第二客户端设备102B已经接收到适当的控制器配置并加入在线游戏会话116(更准确地,开始其相关的在线游戏会话116)之后,用户可以在相应第二客户端设备102B上玩游戏并且影响在其他客户端设备102上运行的在线游戏会话116的输出。

客户端设备102是包括并且可以运行包括游戏应用的一个或多个不同用户应用的设备。在一些实施方式中,客户端设备102是智能手机、平板设备、膝上型计算机、台式计算机或多媒体设备。在一些实施方式中,客户端设备102是专用的游戏控制器,其包括被配置成当激活或以其他方式操纵时控制游戏娱玩的某些方面的游戏控件(例如,一个或多个按钮、操纵杆、触摸屏可供性(affordance)、运动控件、压力控件、视觉控件、音频控件和/或其他触觉界面)。在一些实施方式中,客户端设备102包括被配置成与媒体设备106结合操作的一个或多个用户应用。在一些实施方式中,应用包括用于将客户端设备102与媒体设备106配对并且配置媒体设备106的媒体设备应用。应用还包括可以将相关联的内容投放到媒体设备106的一个或多个应用。在一些实施方式中,通过(例如,经由本地网络)直接将数据/内容发送到媒体设备106和/或通过将媒体设备106定向到从其媒体设备106能够流送或者以其它方式接收数据/内容的远程位置(例如,到服务器系统处的某个位置的URL或其他链接),应用将数据和/或内容投放到媒体设备106。媒体设备106从应用和/或远程位置接收数据/内容,并将与接收到的数据/内容相对应的视觉和/或音频内容输出到输出设备108。因此,在客户端设备102上运行的游戏应用、远程服务器系统114和媒体设备106之间建立在线游戏会话116。

在一些实施方式中,作为链接相关的在线游戏会话116的过程的一部分,服务器系统114评估每个对应客户端设备102的能力和/或服务器系统114与客户端设备102之间的通信连接的质量。在一些实施方式中,服务器系统114测量客户端设备102和服务器系统114之间的网络延时。如果所测量到的延时高于阈值并且较低延时的连接可用,则服务器系统114可以建议客户端设备102更改为较低延时的连接,或邀请客户端设备102的用户将客户端设备102更改为较低延时的连接。例如,如果客户端设备102在蜂窝无线连接118上,并且本地网络可用,则服务器系统114可以建议客户端设备102通过可用本地网络进行连接。在一些实施方式中,延时阈值要求在游戏之间有所不同。例如,一些游戏(例如,动作游戏)在较低延时的连接上体验最好,而其他一些游戏(例如,在线棋盘游戏或纸牌游戏)对延时的要求不高。服务器系统114可以鉴于与不同类型的游戏相关联的这些不同要求来做出连接推荐。

在一些实施方式中,作为开始或加入游戏会话116的客户端设备102的一部分,服务器系统114与客户端设备102通信以在客户端设备102上设置控制器(例如,游戏控制器配置和/或接口)。在一些实施方式中,这包括服务器系统114评估客户端设备102是否具有控制器所需的资源和通信能力。取决于客户端设备102处的可用资源、连接质量和游戏要求,可以在客户端设备102处不同地实现控制器。在一些实施方式中,可以使用基于网页的控制器界面来玩游戏。例如,游戏的控制器界面可以被嵌入在网页中,并且该网页被渲染在客户端设备102上的网页浏览器中。可替选地,在一些实施方式中,标准化控制器被实现在并非特定于游戏或直接与游戏相关联的预定义应用(例如,投放设备应用,诸如Google有限公司的CHROMECAST或GOOGLECAST,或其他媒体设备应用)中,或客户端设备102的操作系统中。例如,客户端设备102上的设备操作系统或预定义的应用可以具有控制器子模块。控制器子模块包括一个或多个标准化控制器配置、模板等。每个标准化控制器配置将控制器子模块配置成以一些方式利用客户端设备102上的输入设备和/或传感器来实现虚拟控制器。使用的标准化控制器配置可能随游戏和/或客户端设备的类型而变化。

此外,在一些实施方式中,游戏具有可以在控制器子模块上实现的特定控制器配置。这样的配置可以被存储在服务器系统114处并且被传输到客户端设备102,作为客户端设备102加入或开始在线游戏会话116的过程的一部分。在一些实施方式中,特定控制器配置可以是完全自定义控制器或标准控制器和自定义控制器的混合。另外,在一些实施方式中,游戏需要与该游戏相关联的特定应用。例如,游戏可能需要专门与该游戏相关联的控制器应用。在一些实施方式中,可以指命客户端设备102下载特定应用或预定义的应用作为开始或加入会话116的一部分。例如,如果客户端设备102还没有预定义的应用(和控制器子模块)或者与游戏相关联的特定应用,并且这样的应用被需要用于玩游戏,则服务器系统114指令客户端设备102提示其用户需要下载并向用户请求许可来进行。

在一些实施方式中,服务器系统114存储与托管在服务器系统114上的一个或多个游戏应用中的每个(例如,图2的游戏应用228)的用户账户相关联的用户信息。用户信息的示例包括但不限于,用户账户信息(例如,标识和密码)、成员资格类型、偏好和活动历史。在一些实施方式中,服务器系统114存储与在客户端设备102上娱玩的在线游戏会话相关联的会话数据。每个在线游戏会话的会话数据的示例包括但不限于帧速率、渲染规格、正常延时要求、GPU分配信息、编码器分配信息、相关会话的标识以及最新状态信息。

在一些实施方式中,服务器系统114提供游戏API和云平台,以实现在线游戏会话116中使用的第三方游戏内容的高效、便携式、低延时托管。在一些实施方式中,游戏API和云平台由服务器系统114实现,该服务器系统114进一步包括下述中的一个或者多个:前端服务器134、媒体流服务器124、游戏服务器122和一个或多个第三方内容服务器136。在一些实施方式中,游戏API平台由游戏服务器122创建和/或托管,并结合前端服务器134和内容服务器136一起实现游戏会话116。前端服务器134被配置成向游戏会话116的用户提供服务,并且管理用户的账户。可选地,用户经由前端服务器134订用游戏服务。内容服务器136提供与游戏会话116有关的游戏内容。

在一些实施方式中,前端服务器134管理与客户端设备102和104相关联的用户账户,例如,通过用户账户对一个或多个在线交互式游戏的成员资格的订用。在客户端设备102登录其相应的用户账户并加入其在线游戏会话116之后,游戏服务器122设置游戏会话116,并通过以下来管理相应客户端设备102的每个特定游戏会话116:从内容服务器136中获取游戏内容,将游戏内容发送到在客户端设备102上执行的游戏应用,识别用户请求或动作,响应于用户请求或动作为客户端设备102渲染游戏娱玩输出,以及在相应游戏会话116期间存储游戏状态数据。游戏服务器122包括一个或多个处理单元(例如,CPU 138、GPU 140和编码器142)、存储器146和数据缓冲器144,其临时存储GPU 140生成的多媒体内容并且将多媒体内容提供给编码器142以进行进一步的编码(例如,标准化或压缩)。数据缓冲器144可选地集成在存储器146中或独立于存储器146。

在一些实施方式中,游戏服务器122动态分配云游戏硬件资源(例如,GPU 140和编码器142),并且监视和利用可用于个体最终用户的网络带宽以提供最佳的云游戏体验。在一些实施方式中,游戏服务器122提供多个性能层,包括利用高清视频/媒体流支持高性能、实时游戏会话的层。在一些实施方式中,游戏服务器122支持不同的订用模型和/或被配置成提供一个或多个并发的实时游戏娱玩和/或评阅媒体流,其几乎没有延时或没有延时地与一个或多个实际游戏流(例如,输出到经由移动应用或基于浏览器的程序参与在线/云游戏会话的用户的客户端设备的视频流)相一致。具体地,游戏服务器122被配置成生成用于游戏娱玩的并发媒体流和评阅视频,并且向媒体流服务器104提供用于并发游戏娱玩的评阅视频。经由媒体流网站,诸如YouTube,向一个或多个用户几乎没有延时或没有延时地提供此类评阅视频。媒体流站点可选地由媒体流服务器124管理。

一些实施方式使得能够结合游戏竞赛来进行公共事件的托管。例如,结合基于已托管的游戏的多玩家游戏事件或竞赛,由游戏服务器122托管的云游戏站点可以可选地经由媒体流服务器123将以下广播或流送到特定评阅者客户端设备104:(a)一个或多个并发辅助或补充媒体流,包括相关联的解说轨/流,(b)来自于不同竞争者的视角的游戏流,基于云服务器分析和/或对与游戏事件相关联的多个游戏会话的评分来显示特别引人注目的游戏动作的精彩片段(highlight)流,(c)反映一个或多个活跃玩家的游戏娱玩会话116的一个或多个游戏视点流,和/或(d)来自一个或多个活跃玩家和/或评阅者的教学轨,可能包括活跃玩家发送给云游戏服务器系统114的实时画中画(PIP)视频以及他们相应的游戏娱玩响应。

根据一些实施方式,可以由内容服务器136有效地托管的第三方内容的示例包括但不限于体育游戏、竞速游戏、角色扮演游戏(RPG)和第一人称射击(FPS)游戏。这些游戏的不同实例可能基于不同的相关联延时要求和预期、输出视频分辨率和游戏服务器计算工作量和视频编码/流传输资源、以及网络带宽而具有广泛变化的云硬件要求和网络(例如,以确保最佳的用户游戏体验-在某些情况下与不同的订用性能层一致)。

在一些实施方式中,前端服务器134提供账户管理API和/或软件模块,该账户管理API和/或软件模块监视游戏娱玩活动和订户的相关请求(例如,最终用户邀请其他玩家参与游戏会话,升级他们的游戏工具、和/或游戏性能的请求),并且通过API将相关联的信息传输到第三方内容服务器136或使该相关联的信息对第三方内容服务器136可用,以使内容提供者能够追踪他们的订户和/或关注者的设置(包括但不限于计费信息、游戏内绩分(in-game credit)、订用级别等)。在一些实施方式中,托管的内容的内容提供者可以经由相同的托管平台为托管的内容提供一个或多个不同的订用模型。在一些实施方式中,向用户(例如,游戏服务的订户)授予对由内容提供者在托管平台上提供的所有游戏的无限访问和游戏娱玩。在一些实施方式中,用户被授予对内容提供者在托管平台上提供的一个或多个特定游戏特许经营权(例如,特定的足球或第一人称射击特许经营权)的无限制访问和游戏娱玩。在一些实施方式中,订用是用于用户的有限参与-可以根据游戏娱玩时间、最终用户所委托的硬件资源级别或最终用户设备类型/位置来限制参与。在一些实施方式中,账户API和模块配置和监视游戏娱玩会话,并且使内容提供者能够根据其最新订用信息来追踪相应订户的游戏活动—甚至在活动游戏娱玩期间也是如此。

服务器系统114实现云功能,该云功能允许用户来回移动,例如,挂起在第一客户端设备102上执行的第一游戏会话的第一游戏流,并且在第二客户端设备102的第二游戏会话上继续启动第一游戏流以继续第一游戏会话。服务器系统114还大规模地支持多个玩家,并提供更丰富、更持久的基于云的世界。服务器系统114使用基于云的系统来存储与相同用户的不同游戏会话116或不同用户的不同游戏会话116有关的会话数据。

服务器系统114在多个客户端设备102和104上渲染游戏内容,所述多个客户端设备包括但不限于移动电话、平板计算机、台式计算机和电视。可选地,游戏内容被动态地调整以符合这些客户端设备102和104的规格。在一些实施方式中,客户端设备102和104具有有限的存储能力或没有存储能力,因为游戏API平台提供即时访问并且不要求或要求极小的用户设备存储(例如,用户可以在5秒钟内开始娱玩并节省250GB的控制台硬盘驱动器空间)。

除了游戏内容之外,服务器系统114还向客户端设备102和104流送附加内容,例如,新的联赛名册、统计数据以及对前瞻标题(early title)的预览访问,其被可选地定期更新(例如,随时更新、每天或每小时升级)。在一些实施方式中,附加内容包括互联网搜索或数据库搜索的搜索结果。

在一些实施方式中,服务器系统114支持与游戏应用相关联的实时在线社区。用户(例如,服务的订户)全天参与对应游戏API平台上的现场事件、锦标赛或活动。现场事件、锦标赛或活动的示例包括观看其他用户玩的现场游戏会话、将成就发布到公共域(例如,YouTube)、以及得到现场提示和指导视频。例如,响应于用户动作,游戏服务器122提供两个或更多个实时流130和132。在将第一游戏流130保持在游戏玩家的第一客户端设备102A的第一游戏会话116上的同时,服务器系统114还向(例如,订户的)一个或多个其他客户端设备104广播第二实时评阅流132(例如,YouTube流)。第二实时评阅流132允许用户与听众分享他的或者她的游戏体验。可选地,第二实时流是玩家的第一客户端设备102A的屏幕画面的再现。服务器系统114可以获得玩家解释第一游戏会话116的音频流,或者玩家游玩并解释第一游戏会话116的视频流。在为听众播放第二实时评阅流132的同时为听众可选地播放音频流。视频流可选地在第二实时评阅流132中的嵌入式窗口中播放。

一些实施方式提供随行(on-the-go)游戏,允许用户将他或她的所预期的游戏带到任何位置或者客户端设备。例如,用户可以在他或她的通勤中在移动设备102A上开始在线游戏会话116,然后在膝上型计算机102B上在他或她的目的地无缝地继续游戏会话116。而且,在一些实施方式中,基于当游戏会话116在不同设备102之间切换时用户可用的不同客户端设备资源,服务器系统114(具体地,游戏服务器122)可以动态地部署不同的硬资源集合(例如,GPU 140和编码器142)以基于不同的最终用户当前设备资源(例如,客户端硬件能力和网络带宽)来优化用户的游戏体验。

在服务器系统114中,前端服务器134和游戏服务器122可以具有相应用户账户系统。在示例中,用于前端服务器134的用户账户系统被用于管理对特定游戏内容和服务的订用,并且用于游戏服务器122的用户账户系统(例如,YouTube或Google账户)被用于管理游戏体验(例如,渲染游戏内容以满足特定游戏标准)和许多其他目的。在一些实施方式中,这两个用户账户系统共享客户和使用数据(例如,社交、朋友、存在(presence)、认证、账户信息、账单信息)。而且,内容前端服务器134提供在由游戏服务器122实现的技术层的之上的服务层。在一些实施方式中,游戏内容服务器管理用于访问他们的内容的附加用户账户系统。可选地,用于游戏内容的附加用户账户系统与用于管理用户订用的前端服务器134的用户账户系统集成在一起。

在一些实施方式中,服务器系统包括用于处理游戏应用的实时实例和延迟的实例的状态保存系统170。下面参考图7-10描述状态保存系统170的各种实施方式。

图2是图示根据一些实施方式的、游戏环境100的示例客户端设备102的框图。贯穿本申请,除非另有说明,否则对客户端设备102的引用对应于参考图1描述的客户端设备102A、102B和104中的一个或多个。客户端设备102的示例包括但不限于移动电话、平板计算机、膝上型计算机、台式计算机和可穿戴个人设备。在一些实施方式中,客户端设备102是专用的游戏控制器,其包括游戏控制输入210(例如,一个或多个按钮、操纵杆、触摸屏元件、运动控件、压力控件、视觉控件、音频控件和/或配置成在激活时控制游戏娱玩的某些方面的其它触觉接口元件)。客户端设备102包括一个或多个处理单元(CPU)202、一个或多个网络接口204、存储器206以及用于互连这些组件(有时称为芯片组)的一个或多个通信总线208。客户端设备102包括促进用户输入的一个或多个输入设备210,诸如键盘、鼠标、语音命令输入单元或麦克风、触摸屏显示器、触敏输入板、手势捕获相机、或其他输入按钮或控件。此外,一些客户端设备200可以使用麦克风和语音识别或者相机和手势识别来补充或替代要求接触的接口(例如,键盘和按钮)。在一些实施方式中,客户端设备102包括一个或多个相机、扫描仪或照片传感器单元,用于捕获例如印制在电子设备上的图形系列代码的图像。在一些实施方式中,客户端设备102包括能够呈现用户界面和显示内容的一个或多个输出设备212,包括一个或多个扬声器和/或一个或多个可视显示器。可选地,客户端设备102包括位置检测设备214,诸如GPS(全球定位卫星)或其他地理位置接收器,用于确定客户端设备102的位置。客户端设备102还可以包括接近度检测设备215,例如,IR传感器,用于确定媒体设备106和/或其它客户端设备102的接近度。客户端设备102还可以包括一个或多个传感器213(例如,加速度计、陀螺仪等),用于感测客户端设备102的运动、定向、和其他参数,其可以用作输入(例如,用于在上面描述的输入210)。

存储器206包括高速随机存取存储器,诸如DRAM、SRAM、DDRRAM或其他随机存取固态存储器设备;并且可选地,包括非易失性存储器,诸如一个或多个磁盘存储设备、一个或多个光盘存储设备、一个或多个闪存设备或一个或多个其他非易失性固态存储设备。存储器206可选地包括与一个或多个处理单元202远程定位的一个或多个存储设备。存储器206或可替选地,存储器206内的非易失性存储器,包括非暂时性计算机可读存储介质。在一些实施方式中,存储器206或存储器206的非暂时性计算机可读存储介质存储下述程序、模块和数据结构或其子集或超集:

操作系统216,包括用于处理各种基本系统服务和用于执行硬件相关任务的过程;

网络通信模块218,用于经由一个或多个网络接口204(有线或无线)和诸如互联网、其他广域网、局域网、城域网等的一个或多个网络110和/或112将客户端设备102连接到其他设备(例如,服务器系统114、媒体设备106和其他客户端设备102);

用户界面模块220,用于实现经由一个或多个输出设备212(例如,显示器、扬声器等)在客户端设备102处呈现信息(例如,用于呈现应用、微件、网站和其网页、和/或游戏、音频和/或视频内容、文本等的图形用户界面);

输入处理模块222,用于检测来自一个或多个输入设备210之一的一个或多个用户输入或交互,并解释检测到的输入或交互;

输入事件报告模块223,用于向服务器系统114报告输入标识和/或时间戳信息,以用于延时计算;

Web浏览器模块225,用于导航、请求(例如,经由HTTP)和显示网站和其网页,包括用于加入会话116的web界面;

媒体设备应用226,用于与媒体设备106进行交互,包括登录到与媒体设备106相关联的用户账户,在与该用户账户相关联的情况下控制媒体设备106,以及编辑和评阅与媒体设备106相关联的设置和数据;

游戏应用228,用于在客户端设备102上提供游戏,包括促进对应游戏娱玩和促进其他玩家的邀请;

游戏控制器模块230,用于向游戏应用228提供游戏娱玩输入界面;

数据下载模块231,用于从服务器系统114和其他内容主机和提供者下载数据(例如,游戏控制器配置456(图4)、游戏应用228和其他应用、对模块和应用以及存储器206中的数据的更新);和

客户端设备数据232,至少存储与游戏应用228和其他应用/模块相关联的数据,包括:

ο客户端设备设置234,用于存储与客户端设备102本身相关联的信息,包括公共设备设置(例如,服务层、设备模型、存储容量、处理能力、通信能力等);

ο媒体设备设置236,用于存储与媒体设备应用226的用户账户相关联的信息,包括账户访问信息以及设备设置(例如,服务层、设备模型、存储容量、处理能力、通信能力等)的信息中的一个或多个;

ο游戏应用设置238,用于存储与游戏应用228的用户账户相关联的信息,包括账户访问信息、游戏内用户偏好、游戏娱玩历史数据和关于其他玩家的信息中的一项或多项;

ο游戏控制器配置240,用于存储与用于游戏应用228的游戏控制器模块230的配置(例如,从图4的游戏控制器配置456接收的配置)相关联的信息;以及

ο位置/接近度数据242,包括与客户端设备102以及媒体设备106中的任何一个的存在、接近度或位置相关联的信息。

在一些实施方式中,游戏控制器模块230是媒体设备应用226或存储器206中的另一应用的一部分(例如,子模块)。在一些实施方式中,游戏控制器模块230是操作系统216的一部分。在一些实施方式中,游戏控制器模块230是不同的模块或应用。

在客户端设备102的一些实施方式中,媒体设备应用226(以及对应的媒体设备设置236)和游戏应用228(以及对应的游戏应用设置238)是可选的。取决于邀请客户端设备102加入的特定游戏,不必需媒体设备应用226和游戏应用228来进行娱玩。如果为了玩游戏需要这些应用中的任何一个(例如,游戏使用媒体设备应用226中的游戏控制器模块230),并且该应用不在存储器206中,则可以提示客户端设备102下载该应用。

上面识别的元素中的每个可以被存储在一个或多个前面提到的存储设备中,并且对应于用于执行上述功能的指令集。上面识别的模块或程序(即,指令集)不需要被实现为单独的软件程序、过程、模块或数据结构,并且因此这些模块的各种子集可以在各种实施方式中被组合或以其他方式重新排列。在一些实施方式中,存储器206可选地存储在上面识别的模块和数据结构的子集。此外,存储器206可选地存储以上未描述的附加模块和数据结构。

图3是图示根据一些实施方式的游戏环境100的示例媒体设备106的框图。媒体设备106通常包括一个或多个处理单元(CPU)302、一个或多个网络接口304、存储器306以及用于互连这些组件(有时称为芯片组)的一个或多个通信总线308。可选地,媒体设备106包括接近度/位置检测单元310,诸如IR传感器,用于确定客户端设备102的接近度。

存储器306包括高速随机存取存储器,诸如DRAM、SRAM、DDRRAM或其他随机存取固态存储器设备;并且可选地包括非易失性存储器,诸如一个或多个磁盘存储设备、一个或多个光盘存储设备、一个或多个闪存设备或一个或多个其他非易失性固态存储设备。存储器306可选地包括与一个或多个处理单元302远程定位的一个或多个存储设备。存储器306或可替选地存储器306内的非易失性存储器包括非暂时性计算机可读存储介质。在一些实施方式中,存储器306或存储器306的非暂时性计算机可读存储介质存储以下程序、模块和数据结构或其子集或超集:

操作系统316,包括用于处理各种基本系统服务和用于执行硬件相关任务的过程;

网络通信模块318,用于经由一个或多个网络接口304(有线或无线)和一个或多个网络110和/或112(诸如互联网、其他广域网、局域网、城域网、有线电视系统、卫星电视系统、IPTV系统等)将媒体设备106连接到其他计算机或系统(例如,服务器系统114和客户端设备102);

内容解码模块320,用于解码从一个或多个内容源(例如,从游戏会话116输出的服务器系统114)接收到的内容信号,并且将解码后的信号中的内容输出到耦合到媒体设备106的输出设备108;

接近度/位置确定模块322,用于基于接近度检测单元310检测到的或服务器系统114提供的接近度相关信息,确定客户端设备102的接近度;

媒体显示模块324,用于控制媒体显示;以及

显示事件报告模块325,用于向服务器系统114报告显示事件标识和/或时间戳信息,以用于延时计算;

延时计算模块326,用于基于游戏环境中的其他组件报告的延时数据334计算延时值;

媒体设备数据328,用于至少存储包括下述的数据:

ο媒体设备设置330,用于存储与媒体设备应用的用户账户相关联的信息,包括账户访问信息和设备设置信息(例如,服务层、设备模型、存储能力、处理能力、通信能力等)中的一项或多项;

ο位置/接近度数据332,包括与客户端设备102以及媒体设备106中的任何一个的存在、接近度或位置相关联的信息;以及

ο延时数据334,其包括延时计算模块326计算延时值所必需的信息(例如,时间戳)。

上面识别的每个元素可以存储在一个或多个前面提到的存储器设备中,并且对应于用于执行上述功能的指令集。上面识别的模块或程序(即,指令集)不需要被实现为单独的软件程序、过程、模块或数据结构,并且因此这些模块的各种子集可以在各种实施方式中被组合或以其他方式重新排列。在一些实施方式中,存储器306可选地存储以上识别的模块和数据结构的子集。此外,存储器306可选地存储以上未描述的附加模块和数据结构。

图4是图示根据一些实施方式的游戏环境100的服务器系统114中的示例服务器的框图。服务器系统114通常包括一个或多个处理单元(例如,CPU 138、GPU 140和编码器142)、一个或多个网络接口404、存储器146以及用于互连这些组件(有时称为芯片组)的一个或多个通信总线408。服务器系统114可以可选地包括促进用户输入的一个或多个输入设备410,诸如键盘、鼠标、语音命令输入单元或麦克风、触摸屏显示器、触敏输入板、手势捕获相机或其他输入按钮或控件。此外,服务器系统114可以使用麦克风和语音识别或者相机和手势识别来补充或替代键盘。在一些实施方式中,服务器系统114可选地包括一个或多个相机、扫描仪或照片传感器单元,用于捕获例如印制在电子设备上的图形系列代码的图像。服务器系统114还可以包括能够呈现用户界面和显示内容的一个或多个输出设备412,包括一个或多个扬声器和/或一个或多个可视显示器。

存储器146包括高速随机存取存储器,诸如DRAM、SRAM、DDRRAM或其他随机存取固态存储器设备;并且可选地包括非易失性存储器,诸如一个或多个磁盘存储设备、一个或多个光盘存储设备、一个或多个闪存设备或一个或多个其他非易失性固态存储设备。存储器146可选地包括与一个或多个处理单元远程定位的一个或多个存储设备。存储器146或可替选地存储器146内的非易失性存储器,包括非暂时性计算机可读存储介质。在一些实施方式中,存储器146或存储器146的非暂时性计算机可读存储介质存储下述程序、模块和数据结构或其子集或超集:

操作系统416,包括用于处理各种基本系统服务和用于执行硬件相关任务的过程;

网络通信模块418,用于通过一个或多个网络接口404(有线或有线)和一个或多个网络110和/或112(诸如互联网、其他广域网、局域网、城域网等)将服务器系统114连接到其他设备(例如,服务器系统114中的各种服务器、客户端设备102和媒体设备106);

用户界面模块420,用于能够在客户端设备102处呈现信息(例如,用于呈现应用、微件、网站和其网页和/或游戏、音频和/或视频内容、文本等的图形用户界面);

媒体设备模块422(可选),被执行来提供服务器端功能,以用于与媒体设备106相关联的设备供应、设备控制和用户账户管理;

接近度/位置确定模块424,用于基于客户端设备102和媒体设备106中的任何一个的位置信息来确定客户端设备102与媒体设备106的接近度;

游戏服务器模块426,用于提供与游戏(例如,游戏应用228)相关联的服务器端功能,包括但不限于设置游戏会话、存储会话状态数据和其他与游戏相关的数据、处理来自客户端设备102的游戏娱玩输入、以及响应于游戏娱玩输入而渲染游戏娱玩输出;

媒体流服务器模块438,用于托管媒体流站点,接收与在线游戏会话相关联的并发辅助或补充媒体流,并且将并发媒体流提供给客户端设备104以与在相同客户端设备104或不同客户端设备102的游戏应用228上正在执行的在线游戏会话并发显示;

前端服务器模块440,用于管理与客户端设备102相关联的用户账户,例如,通过用户账户对一个或多个在线交互式游戏的会员资格的订用,实现用于将订户请求转发到游戏服务器模块426的对订户的服务,并监控游戏娱玩活动和订户的相关请求;

媒体内容服务器模块442,用于提供对由一个或多个第三方内容提供者托管的游戏内容的访问;

设备/网络评估模块444,用于评估客户端设备102的设备和网络能力,包括但不限于评估与客户端设备102的连接的网络带宽以及评估客户端设备102是否具有玩游戏所需的模块或应用;

数据传输模块446,用于向客户端设备102提供数据(例如,游戏控制器配置456、软件更新等);以及

服务器系统数据448,包括:

ο客户端设备设置450,用于存储与客户端设备102相关联的信息,包括公共设备设置(例如,服务层、设备模型、存储容量、处理能力、通信能力等);

ο媒体设备设置452(可选),用于存储与媒体设备应用422的用户账户相关联的信息,包括账户访问信息和设备设置信息(例如,服务层、设备型号、存储容量、处理能力、通信能力等)中的一个或者多个;

ο位置/接近度数据454,包括与客户端设备102以及媒体设备106中的任何一个的存在、接近度或位置相关联的信息;

ο游戏控制器配置456,用于存储各种游戏的控制器配置;以及

ο用户信息458,用于存储与托管在服务器系统114上的一个或多个游戏应用(例如,图2中的游戏应用228)中的每个的用户账户相关联的信息,包括例如用户账户信息(例如,标识和密码)、会员资格类型、偏好和活动历史;以及

ο游戏会话事件日志460,用于存储与游戏会话相关联的事件数据(例如,游戏状态数据、输入事件、显示事件、其他与游戏相关的数据),包括例如第一游戏会话的数据460-1和第二游戏会话的数据460-2,其中每个游戏会话的会话数据460包括但不限于帧速率、渲染规格、正常延时要求、GPU分配信息、编码器分配信息、相关会话的标识、与相应游戏会话相关联的最新状态信息、输入事件的日志和显示事件的日志;

ο响应时间设置462,用于存储各种用户命令类型的预期延时值;

ο资源存储库464,用于存储虚拟机资源简档和容器图像;以及

ο资源设置466,用于基于用户容限水平来存储可用资源的配置;和

数据缓冲器144,用于与一个或多个输出媒体流相关联地临时存储由GPU 140生成的游戏性多媒体内容。

在一些实施方式中,游戏服务器模块426包括以下程序、模块或其子集或超集:

意图确定模块428,用于将用户输入传输时间(例如,在客户端设备102和服务器系统114之间)与显示传输时间(例如,在媒体设备106和服务器系统114之间)进行比较,并且通过将输入事件与相应的触发帧进行匹配确定特定输入背后的用户的意图;

延时调整模块430,用于确定GPU 140在(i)在接收到用户输入时正在处理的当前帧与(ii)示出接收到的输入的结果的响应帧之间插入的中间帧的数量:

资源分配模块432(在本文中可选地称为“会话协调器”),用于从端点(例如,控制器102)接收会话请求并确定哪些资源分配给该会话;和

资源调节模块434,用于确定特定用户的延时容限。

在一些实施方式中,存储器146还包括数据缓冲器144,其被配置成将编码器142耦合到GPU 140。具体地,数据缓冲器144与一个或多个输出媒体流相关联地临时存储由GPU140生成的游戏娱玩多媒体内容,使得编码器142可以从数据缓冲器144中检索游戏娱玩多媒体内容,并将检索到的内容编码到一个或多个媒体流中,例如,用于标准化、速度或压缩。

上面识别的元素中的每个可以被存储在一个或多个前面提到的存储器设备中,并且对应于用于执行上述功能的指令集。上面识别的模块或程序(即,指令集)不需要被实现为单独的软件程序、过程、模块或数据结构,并且因此这些模块的各种子集可以在各种实施方式中被组合或以其他方式重新排列。在一些实施方式中,存储器146可选地存储以上识别的模块和数据结构的子集。此外,存储器146可选地存储以上未描述的附加模块和数据结构。

上述基于云的游戏平台的各种实施方式提供许多好处(例如,可移植、可扩展性、效率、易于访问和控制等)。但是,这些游戏平台的基于云的性质带来各种挑战,诸如网络和处理资源的可变性,如果不加以适当考虑,可能会对游戏娱玩体验产生负面影响。由于在玩家设备102和服务器系统114之间的网络110/112中引入的可变延迟,这样的挑战可能潜在地创建不均匀的游戏体验。以下公开内容描述检测和补偿可能存在于实时交互的基于云的游戏环境中的不同类型的延时的各种实施方式。通过补偿这些延迟,本文描述的实施方式为每个玩家提供平滑统一的游戏体验,而不论可用的网络和处理资源如何。

图5A描绘示例游戏环境500,从该示例游戏环境500将描述数个延时来源。游戏环境500是游戏环境100(图1)的示例实施方式,具有类似地标记的相应组件。游戏环境500包括客户端设备102(在本文中也称为“游戏控制器”或“控制器”),玩家(或“用户”)使用该客户端设备102例如通过激活或操纵输入210(图2)来控制游戏(或“游戏娱玩”)的各个方面。游戏环境500还包括媒体设备106(例如,机顶盒)和输出设备108(例如,电视或其他输出显示器)。控制器102和媒体设备106分别经由本地通信链路502和504(例如,通过WiFi)通信地耦合到本地网络110(在该示例中被描绘为无线路由器)。本地网络110通过通信链路506经由通信网络112(例如,互联网)通信地耦合到服务器系统114。服务器系统114包括游戏服务器122(图1)。

虽然图中所描绘的游戏环境500仅包括具有单个控制器102的单个本地网络110,但是游戏环境500的一些实施方式可以包括多个本地网络110,其中一些本地网络110包括多于一个控制器102(例如,用于共享相同游戏会话的多玩家游戏,如上面参考图1至图4所描述的)。

游戏环境500中存在的数个元素可以引入可感知的(例如,影响至少一个帧)并且随时间变化的延时。例如,本地网络110(例如,WiFi)可以在通信链路502和504中引入各种量的延时。如果在信道上没有竞争,则平均延时可以非常低(例如,<1ms)。但是,在诸如具有重叠WiFi网络的公寓楼或具有多个无线客户端设备的游戏娱玩环境的繁忙环境中,延时的平均量在10-50ms范围内更为常见,离群值超过200+ms。

此外,通信网络112(例如,互联网)可以在通信链路506中引入延时。对于大多数用户而言,此延时的可变性可能不如WiFi高;但是,在高峰的游戏时间(傍晚),媒体共享(例如,在电缆调制解调器上)以及网络饱和会导致分组延迟或丢失。平均延时将取决于从本地网络110到服务器系统114的边服务器的距离,其中示例延时量在20-30ms范围内。

由于网络需求和链路容量的不对称性,上述网络引入的延迟可以基于业务流的方向(例如,从控制器102到服务器122,对比从服务器122到媒体设备106)而变化。因此,从路由器到服务器的链路506上的延时可能与从服务器返回到路由器的延时不匹配等等。

此外,游戏服务器122可以引入延时。从输入事件到达GPU 140到来自编码器142的帧输出存在延时。但是,在一些实施方式中,此延时是完全可追踪的,并且因此,游戏服务器122已知该延时。

最后,在帧到达输出设备108(例如,电视)与该帧的显示之间存在延时。这可能取决于输出设备中的处理的性质,包括显示模式(例如,游戏模式对比非游戏模式)。例如,电视的显示滞后可能低至15-30ms,或者显示滞后可能高达50-60ms。不好的电视可能会具有120ms以上的显示滞后。

上述不同类型的延时可能会对游戏娱玩体验产生重大影响。图5B和5C示出两个示例游戏娱玩体验,其包括相同的用户输入,但由于不同水平的延时而导致输出完全不同。但是,在详细描述这些示例之前,首先有必要描述示例游戏娱玩过程。

图6是根据一些实施方式的游戏娱玩过程600的流程图。该过程可以在具有一个或多个处理器(例如,CPU 138和/或GPU 140)和存储用于通过一个或者多个处理器执行的一个或者多个程序的存储器(例如,存储器146)的电子服务器(例如,服务器系统114,或更具体地说,游戏服务器122);具有一个或多个处理器(例如,CPU 302)和存储用于由一个或多个处理器执行的一个或多个程序的存储器(例如,存储器306)的媒体设备(例如,媒体设备106);和/或具有一个或多个处理器(例如,CPU 202)和存储用于通过一个或多个处理器执行的一个或多个程序的存储器(例如,存储器206)的用户设备(例如,控制器102)处执行。在一些实施方式中,服务器、媒体设备和用户设备包括一个或多个程序以及存储用于通过一个或多个相应处理器执行的一个或多个相应程序的存储器,并且一个或多个程序包括用于执行过程600的指令。在一些实施方式中,相应的非暂时性计算机可读存储介质存储一个或多个相应程序,该一个或多个相应程序包括指令,指令当由电子服务器、媒体设备和用户设备执行时,使具有一个或多个相应处理器的电子服务器、媒体设备和用户设备执行过程600。

控制器102的用户(在本文中也称为“玩家”)使用控制器102影响游戏中的事件,这些事件由显示在输出设备108上的视频帧(例如,510)描绘(参见图5A)。当玩家决定影响游戏娱玩(例如,通过移动虚拟玩家、曲棍球射门等等)时,玩家激活(602)或以其他方式操纵控制器102上的输入210(例如,按下按钮)。有时将控制器102上的输入210的激活或操纵称为“输入事件”或“命令”。经由通信链路502和506(通过网络110和112)将输入事件传达(604)到服务器系统114(例如,到与游戏会话相关的事件日志460)。

在接收到输入事件(606)时,服务器系统114(例如,游戏服务器122的意图确定模块428)确定(608)用户激活与接收到的输入事件相关联的输入时在输出设备108上显示哪一个帧。在用户激活输入时向用户显示的帧在本文中称为“触发帧”,因为其触发用户通过激活输入做出响应。例如,在曲棍球游戏中,如果帧显示空位射门(open shot),这将触发玩家通过激活映射到“冰球射门(shoot puck)”功能的输入控件做出响应。触发帧是示出空位射门的帧510(例如,图5B中的帧510-1),并且输入事件是用户响应于已看到触发帧510而激活控制器102上的“冰球射门”控件。

在确定触发帧之后,游戏服务器122(例如,意图确定模块428)确定(610)在向用户显示触发帧时游戏的状态(在本文中称为“触发状态”)。在一些实施方式中,意图确定模块428通过查阅事件日志460(图4)中维护的游戏状态的日志来确定触发状态。在一些实施方式中,事件日志460包括由帧指纹、帧ID和/或游戏时间数据(例如,时间戳或时钟数据)索引的游戏状态的日志。在一些实施方式中,意图确定模块428通过确定与触发帧相关联的游戏时间索引,并查阅事件日志460以确定在与该触发帧相关联的游戏时间索引时存在的游戏状态,来确定触发状态。取决于在输出设备108上显示触发帧和在游戏服务器122上接收输入事件之间流逝多少时间,相对于在游戏服务器122上正在处理的当前状态,触发状态可以是过去的。

返回到前面的示例,如果触发帧(示出对球门的空位射门)与游戏时间索引T1相关联,则时间索引T1处的游戏状态包括虚拟射门者、虚拟防守者、虚拟冰球、虚拟球门以及这些对象中的每一个的位置。根据时间索引T1处的游戏状态,或更具体地,根据时间索引T1处的每个前述虚拟对象的位置,在冰球和球门之间存在无阻碍路径。换句话说,控制游戏娱玩规则的一个或多个算法将允许在显示触发帧时的某个时刻(时间索引T1)虚拟冰球从射门该冰球的虚拟玩家行进到虚拟球门而不被射门者和球门之间的任何其他虚拟玩家停止。但是,在一些情况下,当输入事件(例如“冰球射门”)到达服务器时,服务器当前正在处理后续状态T2的游戏娱玩,该状态T2可能包括虚拟冰球不再具有到球门的无阻碍路径的游戏娱玩的进一步状态。在这些情况下,如果服务器将触发状态正确地确定为T1,则触发状态相对于服务器当前正在处理的状态T2是过去状态。

已经确定触发状态后,游戏服务器122(例如,GPU 140)根据(i)输入事件(例如,“冰球射门”)以及(ii)触发状态(例如,包括从冰球到球门的无阻碍路径)处理(612)随后的游戏状态(有时在本文中称为“游戏娱玩输出”)。在一些实施方式中,处理游戏娱玩输出包括将输入事件输入到算法或游戏引擎中,其基于输入事件和对应的游戏状态来确定游戏娱玩输出。例如,游戏引擎可以基于在当前游戏状态期间每个玩家和冰球相对于球门的状态/位置以及在当前游戏状态期间关于虚拟玩家接收到的任何输入命令(例如,“移动”、“射门”或“阻挡”)来确定下一个游戏状态。在一些实施方式中,根据输入事件和触发状态来处理后续游戏状态(游戏娱玩输出)包括,处理输入事件,就好像服务器在处理接近于触发状态的游戏状态(例如,触发状态之后的下一个状态,或紧随触发状态之后的状态)时该输入事件对于服务器而言是可用的。

在处理游戏娱玩输出时,游戏服务器122渲染(614)描绘所处理的游戏娱玩输出的一帧或一系列帧。描绘游戏娱玩输出的帧(或一系列帧中的第一帧)在本文中称为“响应帧”。例如,如果输入事件和触发状态导致包括特定虚拟玩家的运动的游戏娱玩输出,则响应帧是这样的帧:其描绘与用户输入指定的方向保持一致的、相对于该帧中的其他对象在修改的空间位置中的特定虚拟玩家。可替选地,如果输入事件和触发状态导致特定虚拟玩家冰球射门的游戏娱玩输出,则响应帧是描绘特定虚拟玩家进行曲棍球射门的一系列帧中的第一帧(例如,图5B的帧510-3)。在一些实施方式中,呈现响应帧包括:根据处理的游戏娱玩输出在响应帧中引入新虚拟对象,修改现有的虚拟对象或修改游戏娱玩的任何其他方面并且包括新虚拟对象、经修改的现有虚拟对象或修改后的游戏娱玩的任何其他方面。

服务器系统114(例如,使用编码器142)对响应帧进行编码,并将编码后的响应帧传输(616)到媒体设备106。在从服务器系统114接收到编码后的响应帧后,媒体设备106(例如,使用内容解码模块320)对响应帧进行解码,并使得(例如,使用输出设备108)向用户显示(620)解码后的响应帧。

返回到图5B和5C,描述两个序列的视频帧(510和520),其示出相同的输入事件(冰球射门)但是由于游戏环境500中存在不同的延时量而响应帧不同(成功的射门510-2与被阻挡的射门520-3)。这些序列是应用于游戏环境500的游戏娱玩过程600的示例。

图5B描绘第一场景550,包括一系列视频帧510,其示出三个玩曲棍球游戏的虚拟玩家(A、B和C)以及游戏状态T1-T3的表格512(例如,存储在图4的日志460中)。玩家A由控制器102的用户控制,并且玩家B和C由其他控制器的其他用户、通过计算机控制的算法或其组合来控制。在状态T1处,玩家A对球门有无阻碍的射门(在表512中表示为“无阻碍”);因此,游戏服务器将表示该状态的帧510-1传输到用户的显示器108。当控制玩家A的用户查看显示器108上的帧510-1时,用户看到玩家A对球门具有无阻碍的射门,并且因此决定命令玩家A冰球射门。换句话说,帧510-1触发用户输入“射门”命令。将“射门”命令作为输入事件发送到游戏服务器122。当游戏服务器122接收到“射门”输入(在表512中表示为“In”)时,游戏服务器当前正在处理状态T2,此时玩家A不再有无阻碍的射门(在表512中表示为“无射门”)。但是,游戏服务器122正确地确定触发帧(在表512中表示为“T”)是帧510-1。根据显示帧510-1时的游戏状态(触发状态T1),玩家A仍然对球门具有无阻碍的射门;因此,游戏服务器122根据“射门”命令和T1状态(无阻碍射门)处理后续状态T3。根据游戏引擎,如果在玩家有无阻碍的射门的同时进行射门,则随后的状态包括成功射门序列,并且该序列在状态T3(表512中表示为“得分”)进行处理。这样,游戏服务器渲染描绘玩家A越过玩家C进行冰球射门的响应帧510-2,并将响应帧传输给用户。从用户的角度来看,响应帧描述用户在输入事件时期望的动作。这样,通过正确确定与用户输入相对应的触发状态,游戏服务器根据用户的意图来处理游戏娱玩。

图5C描绘第二场景552,其包括示出与场景550相同的游戏和玩家的一序列的视频帧520,以及游戏状态T1-T3的表522(例如,存储在图4的日志460中)。与先前的场景类似,在状态T1处,玩家A对球门具有无阻碍的射门(在表522中表示为“无阻碍”);因此,游戏服务器将表示该状态的帧520-1传输到用户的显示器108。当用户在屏幕108上观看帧520-1时,用户看到玩家A在对球门具有无阻碍的射门,并且因此决定命令玩家A冰球射门。将“射门”命令作为输入事件发送到游戏服务器122。与先前的场景一样,当游戏服务器122接收到“射门”输入(在表522中表示为“In”)时,游戏服务器当前正在处理状态T2,此时玩家A不再具有无阻碍的射门(在表522中被称为“无射门”)。但是,与先前的场景不同,游戏服务器122没有正确地确定触发帧(在表522中表示为“T”)。而是,游戏服务器认为触发帧是根据当前状态T2渲染的最后一帧,在此示例中其为帧520-2。可替选地,游戏服务器可能甚至没有视图确定触发帧,而是基于当前状态T2(无射门)处理游戏娱玩输出。无论哪一情况下,游戏服务器都根据“射门”命令和T2状态(无射门)处理后续状态T3。根据游戏引擎,如果玩家在没有无阻碍射门的情况下射门,则随后的状态包括被阻挡的射门序列,并且该序列在状态T3被处理(在表522中称为“阻挡”)。这样,游戏服务器渲染描绘玩家A试图冰球射门但被玩家C阻挡的响应帧520-3,并将该响应帧传输给用户。从用户的角度来看,响应帧描述用户在输入事件时不期望的动作。具体地说,用户期望让玩家A在玩家C没有阻挡的同时射门;相反,玩家A没有如用户期望的那么快射门并且因此射门被阻挡。这样,由于未能正确确定与用户输入相对应的触发状态,游戏服务器可能会处理与用户意图相反的游戏娱玩事件,这有可能导致用户(和许多其他用户)对玩游戏并且/或使用游戏环境500失去兴趣。

在上述两种场景的每一种中,输入事件同时发生;但是,取决于输入事件到达游戏服务器所耗费的时间,响应帧描述两种截然不同的结果。这是因为,如果服务器在处理比触发用户进行输入的游戏状态(例如,T1)更晚的时间的游戏状态(例如,T2)时接收到用户的输入,则服务器可能会基于关于用户输入的定时的不正确的信息来错误地处理游戏输出。因为对于游戏平台而言避免这种不一致是至关重要的,所以对于游戏平台而言检测并补偿导致这些延迟的游戏环境中引入的各种延时是很重要的。通过检测各种延时,游戏平台可以更准确地将输入事件与实际触发状态相关(如在场景550中)。通过进行这些相关,游戏平台通过以与用户意图一致的方式处理每个输入事件来减少无法控制和/或无法检测的延时的影响。这样,本文所述的各种实施方式是对没有试图确定或错误地确定与用户输入相对应的准确触发状态的游戏平台的改进。

在某些场景下,取决于触发状态与游戏服务器正在处理的当前状态之间流逝多少时间,特定游戏娱玩输出可能与已经显示给一个或多个用户的内容相矛盾。例如,在图5C中,帧520-3描绘被阻挡的射门。但是,如果游戏服务器在状态T3期间确定触发状态为T1,则在一些实施方式中,游戏服务器会尝试使用户的意图与游戏的当前状态进行追溯协调。换句话说,用户的意图是在玩家A进行无阻碍射门的同时冰球射门,而游戏的当前状态(T3)在玩家A和球门之间显示玩家C。为了使用户的意图(冰球向球门移动)与当前状态(玩家C在冰球路径上)协调,游戏服务器可以渲染冰球向球门移动的一系列响应帧,尽管玩家C挡道(例如,图5B的帧510-3)。响应帧可能看起来与当前游戏状态不一致;但是,它们与过去(触发)游戏状态期间的用户意图一致。游戏开发者可以例如通过设计协调不一致游戏状态的动画来预先计划这些意外情况。示例协调动画包括立即将虚拟角色或对象位移到期望位置(即使这可能看起来违反游戏中的物理学),或以期望方式推进游戏状态同时不示出正确的动画(例如,在不示出冰球到达球门的情况下更新分数,或将怪兽归类为已受伤,即使该怪兽在被射击前似乎已经让开)。在一些实施方式中,使当前游戏状态与在用户交互时用户期望的游戏状态(期望游戏状态)协调包括修改描绘当前游戏状态的帧以创建描绘期望游戏状态的后续帧。

影子追踪环境

以下实施方式旨在提供用于实现实时交互式应用的主实例的时延的版本的处理环境。时延的版本(在本文中也称为“影子进程”)以与主实例相同的输入进行操作,但相对于主实例以可配置的延迟进行操作。如果主实例进入不希望的状态,则时延的实例在不希望的状态出现之前暂停,从而实现检查、步进和其他诊断功能。

在一些实施方式中,应用的每个实例是应用的正在执行的版本,每个版本由单独的处理能力/处理器执行。例如,在一些实施方式中,每个实例由下述来执行:微处理器(CPU)、多核CPU的一个或多个核、图形处理单元(GPU)和/或多核GPU的一个或多个核。在一些实施方式中,应用的每个实例是在相应的处理能力(例如,GPU)上运行的仿真。通过以锁步运行并行仿真(其中第二仿真接收延迟的输入或执行延迟的操作),一个实例就是先期检测器,其会警告系统错误或故障(例如,异常、失败或不期望的状态)即将发生。这允许系统在发生故障之前停止并检查程序的状态,并重构一个或多个故障前状态;而到故障已经发生时,其可能已经破坏原本在故障发生之前可用的有价值的信息。

在仅有应用的单个实例的情况下,处理系统可以在其失败时捕获该实例;但是到那时,系统可能无法理解为什么会发生故障。换句话说,仅通过单个实例,系统无法回顾故障之前的状态;可能无法重构故障前状态和/或恢复确定故障发生原因所必需的所有信息。

另一方面,在时延的辅助实例并行运行的情况下,系统能够在仿真或处理单元将要失败时的时间点停止仿真或停止实际处理单元的运行。换句话说,因为主实例正在在先运行并且正在使用相同的输入流来执行或仿真相同的应用,所以该系统已了解该时延的实例的未来状态。通过此知识,系统可以在故障发生之前暂停执行,并谨慎地向前步进,追踪感兴趣的信息(诸如寄存器数据或变量)。系统可以转储这些错误前状态中的一个或多个,并访问如果发生故障则无法访问的信息,从而使系统能够在故障之前重构执行或仿真的确切状态。重构的故障前状态使系统或开发者确定为何将来在第二个实例中将会发生故障。

在此描述的一些实施方式描述在线游戏应用(例如,关于以上图1-6描述的游戏应用)作为示例处理环境。但是,事先知道处理系统将要发生故障在许多其他类型的处理环境中很有用,其中在线游戏服务器只是一个示例。例如,本文描述的各种实施方式可以在涉及GPU的任何处理环境上实现。尽管从调试角度CPU是相对透明,但是GPU相对不透明,因为对就在发生故障之前GPU中发生的事情进行反向工程更加困难。这样,在一些情况下很难确定故障原因,而在其它情况下无法确定故障原因。例如,GPU的许多方面都是不容易检查的。可能存在隐藏状态,并且缺少内置的调试能力,这使其难对发生故障事件时发生的事情进行反向工程。更具体地说,因为GPU具有涉及并行操作的许多不同种类的寄存器和流水线,所以与相对易于检查的一些CPU相比,存在很多需要考虑的方面。即使能够检查每个寄存器、每个变量、每个流水线的每个方面等,由于与每个处理状态相关的信息量很大,在运行时环境(例如,在应用或程序正在运行时)中连续转储所有信息可能也不现实。但是,如果事先了解特定事件,则考虑该点上的所有相关信息将更加合理。换句话说,开发者可以在更可行的量下恢复相关信息。取决于故障之前还存在多少个数据周期,即开发者将需要多少数据以便于重构导致故障的状况,从而获得修复应用或程序并避免将来故障所需的信息。

除了与包括GPU的处理系统有关之外,在本说明书中描述的实施方式与任何涉及具有以下特质的处理器的处理系统有关:该特质使调试或以其它方式确定失败状态的原因变得困难。

本文所述的各种实施方式中的一些实施方式是在服务器上实施,诸如游戏服务器122(以上参考图1描述)或专用状态保存系统170(以下参考图7-10描述)。在这些实施方式中,当服务器上存在空闲处理能力时,针对特定应用执行辅助过程。例如,如果游戏服务器仅使用可用GPU的子集来托管在线游戏会话,则一个或多个空闲GPU可用于执行延时的辅助游戏会话。这样,如果特定会话失败,则辅助会话保存一个或多个故障前状态。这为开发者提供机会来捕获在具有消费者的交互的情况下在实时生产环境中故障信息,这比在实验室或测试环境中单独地执行的会话提供更为现实的用例。这样,开发者可以在生产环境中访问实时故障信息,而不必在实验室环境中复制测试情况。此外,对于仅使用空闲处理能力的实施方式,开发者可以访问此信息,而不会负面影响可用于新会话的处理能力。在一些实施方式中,本文所述的故障前状态保存处理系统针对每个会话(例如,针对上述的每个会话130)连续运行。

不管处理环境如何,本文所述的各种实施方式均具有保存错误前处理状态的技术效果,从而允许评估程序、应用和/或虚拟化仿真中的实时故障事件的原因。具有相同输入序列和定时的相同程序的稍有延迟的实例的创建提供机会来在出现已知故障(例如,由于在主实例中已经发生)之前停止程序。具有能够在程序失败之前分析程序的能力是对一般调试程序的一种改进,这些调试程序只能在失败之后向后看,而不能始终访问完全重构导致故障以开始的故障前条件所必须的信息。此外,本文描述的实施例相当于对使用程序的稍有不同版本(例如,生产版本对实验室版本,或实时版本对诊断测试版本)的调试程序的改进,因为即时实施允许对生产环境中面向消费者的程序的实时分析,从而促进评估程序在实地的实际执行。此外,本文描述的实施例相当于对使用不同输入数据集(例如,消费者输入对实验室输入)的调试程序的改进,因为当前描述的实施方式允许实时分析由来自实地的真实消费者用户的实际输入来操纵的面向消费者的程序,从而促进在消费者使用的场境中评估程序的更实际的操作。在在线游戏示例中,当前描述的实施方式促进保存针对游戏的产品版本以及针对在实时游戏娱玩期间和实际游戏条件下由游戏用户提供的实际游戏输入的错误前游戏状态。

另外,使同一程序的两个实例以锁步运行(其中一个实例被延迟)相当于对要求多次运行同一程序的技术进行了改进,因为即使有可能确定在发生故障前后GPU的内部处理状态,这些内部处理状态可能会在每次运行程序时发生变化,从而使描述这些内部状态的信息对于程序的后续执行的有用性无效。

如在上面所讨论的,本文所述的各种实施方式允许前向调试。与事后调试相比,在程序或开发者只能访问感兴趣数据的子集(例如,重构导致故障的条件所必需的数据)的情况下,在故障发生之前,前向调试提供对更多尚未被故障破坏的数据的访问。换句话说,调试程序或开发者知道在特定时刻位于寄存器中的数据将导致故障。通过这些知识并访问数据,开发者可以应用正向调试技术(例如,评估直到故障为止的每个连续处理状态),以便更精确地确定故障原因。更具体地说,开发者可以更容易地确定导致故障的输入序列和处理状态的确切组合,并且通过此知识,可以更新程序,使得在将来,相同的输入序列和处理状态不会导致相同的错误。

错误前状态保存系统

图7是根据一些实施方式的、示例错误前处理状态保存系统170(也称为“处理系统”170)。处理系统170包括用于控制系统170的整体处理的处理单元(例如,CPU 705),以及用于存储各种程序和数据的存储器708(参考图8更详细地描述)。处理系统170进一步包括两个或更多个处理单元(例如,GPU)721和722,用于分别执行程序的主实例和辅助实例。处理系统170包括延迟模块710,该延迟模块710用于相对于程序的主实例和辅助实例控制输入172的定时。延迟模块710包括用于相对于一个流缓冲另一流的至少一个缓冲器718。处理系统进一步包括错误检测模块730,用于检测主GPU 721何时进入不希望的状态(例如,由错误或故障引起的异常或失败状态)。该处理系统进一步包括检查模块740,用于促进对辅助GPU 722的所保存的错误前状态的评估。

在一些实施方式中,主GPU 721和输入172对应于上面参考图1-6所描述的GPU 140(在游戏服务器122中)和游戏输入210。如在上面所提及的,重要的是要注意,这些游戏实施方式仅仅是在处理单元上实时执行的交互式程序的示例,并且本文所述的实施方式同样适用于其他非游戏示例。但是,因为通过参考示例应用可能更容易理解本文描述的一些概念,所以上述示例游戏环境将用作示例应用的基础,然而这些概念同样适用于非游戏应用。

在游戏应用的场境中,输入172由游戏控制器的用户供应,在用户玩游戏时生成输入流(也称为输入事件或指令)。游戏引擎(例如,处理器721)接收一个或多个输入172,并根据(i)一个或多个输入172和(ii)当前游戏状态来处理输出游戏状态,如上面关于图5和图6所描述的。对于非游戏应用,处理器721接收一个或多个输入172,并根据(i)一个或多个输入172和(ii)当前处理状态来产生随后的处理状态。

将以上示例应用于图7中的处理系统170,处理系统170接收输入流172。延迟模块710将流分离为主流711和辅助流712。每个流之间的唯一的区别在于相应的GPU 721和722接收流中的每个输入的定时。例如,如果延迟模块710以500ms的差量接收第一输入和第二输入,则主GPU 721以相距500ms接收第一和第二输入,并且辅助GPU 722也以相距500ms接收那些相同的输入。然而,由于缓冲器718,辅助流712整体上相对于主流711被延迟。因此,在前述示例中,如果缓冲器718被配置成将辅助流712延迟了1秒,则GPU 721在0和0.5秒(对应于输入之间的500ms差量)接收第一和第二输入,并且GPU 722在1.0和1.5秒(对应于输入之间的500ms差量和通过缓冲器添加的1秒延迟)接收第一和第二输入。

在一些实施方式中,延迟模块710仅缓冲辅助流712(如图7所示)。替选地,延迟模块710缓冲流711和712两者,但是具有单独的延迟。例如,在主流711上操作的缓冲器(未示出)可以将流延迟了1.0秒,并且缓冲器718可以将辅助流712延迟了2.0秒。只要辅助流712相对于主流711被延迟,就可以实现本文描述的示例。

在普通操作期间,主GPU 721和辅助GPU 722处理相应的输入流711和712,直到处理系统170停止接收输入172(例如,因为用户已停止玩游戏)。然而,如果主GPU 721进入不希望的状态(例如,由于故障),则处理系统170使辅助GPU 722暂停其处理。

在一些实施方式中,主GPU 721在确定其已进入不希望的状态时,将暂停信号724发送到辅助GPU 722。另外或替选地,错误检测模块730监视来自GPU 721的输出数据732(例如,后续处理状态),并根据输出数据中的信息或根据缺少输出数据中的预期信息而检测到主GPU 721已进入不希望的状态。因此,错误检测模块730向辅助GPU 722发送暂停信号734。在接收到暂停信号724或734时,辅助GPU 722在其当前正在处理的任何处理状态(当前处理状态)上暂停处理,并将关于当前状态的信息742发送给检查模块740。信息742在本文中被称为关于错误前状态的保存的信息,或者关于保存的错误前状态的信息。所保存的信息742可由调试程序或开发者访问,并且任一个或两者都可以应用前向调试技术,包括但不限于通过发送指令GPU 722处理继当前的错误前状态之后的状态的信号744来使辅助GPU 722前向步进。在处理接连状态时,辅助GPU 722发送关于每个接连状态的信息742,以供前向调试程序或开发者检查和/或评估。

图8是图示根据一些实施方式的示例处理系统170的框图。处理系统170通常包括一个或多个处理单元(例如,CPU 705、GPU 721和722)、一个或多个网络接口804、存储器708以及用于互连这些组件的一个或者多个通信总线808(有时称为芯片组)。处理系统170可以可选地包括促进用户输入的一个或多个输入设备810,诸如键盘、鼠标、语音命令输入单元或麦克风、触摸屏显示器、触敏输入板、手势捕获相机或其他输入按钮或控件。此外,处理系统170可以使用麦克风和语音识别或者相机和手势识别来补充或替代键盘。在一些实施方式中,处理系统170可选地包括一个或多个相机、扫描仪或光传感器单元,用于捕获例如印刷在电子设备上的图形系列代码的图像。处理系统170还可以包括一个或多个输出设备812,其使得能够呈现用户界面和显示内容,包括一个或多个扬声器和/或一个或多个视觉显示器。显示内容的示例包括与由检查模块740捕获的与处理状态有关的信息。

存储器708包括高速随机存取存储器,诸如DRAM、SRAM、DDR RAM或其他随机存取固态存储设备;并且可选地包括非易失性存储器,诸如一个或多个磁盘存储设备、一个或多个光盘存储设备、一个或多个闪存设备或一个或多个其他非易失性固态存储设备。存储器708可选地包括远离一个或多个处理单元而位于的一个或多个存储设备。存储器708或替选地存储器708内的非易失性存储器包括非暂时性计算机可读存储介质。在一些实施方式中,存储器708或存储器708的非暂时性计算机可读存储介质存储以下程序、模块和数据结构或其子集或超集:

·操作系统816,包括用于处理各种基本系统服务和用于执行与硬件有关的任务的过程;

·网络通信模块818,用于经由一个或多个网络接口(有线或无线)和一个或多个网络,诸如互联网、其他广域网、局域网、城域网等将处理系统170连接到其他设备(例如,各种服务器、客户端设备和/或媒体设备);

·用户界面模块820,用于实现在客户端设备处或在开发者设备处呈现信息(例如,用于呈现应用、微件、网站和网页以及/或游戏、音频和/或视频内容、文本等的图形用户界面),以查看与检查模块740捕获的与处理状态有关的信息;

·输入延迟模块710,用于控制辅助输入流712相对于主输入流711的定时偏移(例如,通过配置缓冲器718);

·错误检测模块730,用于检测主处理单元(例如,GPU 721)的错误状态,并且在一些实施方式中,作为错误检测的结果,将暂停信号发送到辅助处理单元(例如,GPU 722);

·检查模块740,用于保存与辅助处理单元(例如,GPU 722)的一个或多个错误前状态相关联的信息,以在前向调试场境中进行检查和/或评估;

·程序引擎822,用于基于(i)一个或多个用户输入172,和(ii)与用户输入相对应的处理状态来确定处理输出或输出状态;

·处理系统数据850,包括:

ο程序库852,用于存储要由处理单元(例如,GPU 721和722)执行或仿真的程序;

ο错误状态数据854,用于存储与主GPU 721的错误状态相关联的信息(例如,由故障导致的信息转储);以及

ο错误前状态数据856,用于存储与辅助GPU 722的错误前状态相关联的信息(例如,寄存器数据、变量、内部状态信息以及如果发生故障则可能无法访问的各种其他数据);和

·数据缓冲区718,用于临时存储在输入流中接收到的用户输入172,以便将输入的延迟流712提供给辅助GPU 722。

上面标识的每个元素可以存储在一个或多个前面提到的存储设备中,并且对应于用于执行上述功能的指令集。以上标识的模块或程序(即,指令集)不需要被实现为单独的软件程序、过程、模块或数据结构,并且因此,这些模块的各个子集可以在各种实施方式中被组合或以其他方式重新布置。在一些实施方式中,存储器708可选地存储以上标识的模块和数据结构的子集。此外,存储器708可选地存储以上未描述的附加模块和数据结构。

在一些实施方式中,处理系统170和存储器708可以进一步包括参考以上图4的服务器系统114和存储器146描述的任何或所有组件、模块和数据。

示例影子过程

图9描绘根据一些实施方式的、在处理系统170中由主GPU 721执行的特定程序852的示例主实例900和由辅助GPU 722执行的特定程序852的辅助(延迟的)实例950。在一些实施方式中,程序852是如上面参考图1-6所描述的游戏应用。

程序852的主实例900在GPU 721上执行。在当前处理状态902(游戏状态GS0)时,处理系统170接收第一用户输入904,指令虚拟玩家A向下移动。延迟模块710将输入904没有延迟地传递到GPU 721(或者替选地,在没有被延迟模块处理的情况下输入被传递到GPU721)。主GPU 721根据当前处理状态902(游戏状态GS0)处理第一用户输入904,并作为当前状态902和第一输入904的结果生成后续处理状态906(游戏状态GS1)。

同时,程序852的第二个实例950在GPU 722上执行。延迟模块710缓冲第一输入904,并在继第一实例900接收输入904的时间之后的时间将其传递给第二实例950。辅助GPU722根据当前处理状态952(对应于第一实例的状态902)来处理第一用户输入904,并生成后续处理状态956(对应于第一实例的状态906)作为当前状态952和第一输入904的结果。

处理系统170接收第二用户输入908,指令玩家A进行冰球射门。延迟模块710将输入908没有延迟地传递到GPU 721(或者替选地,在没有被延迟模块处理的情况下输入被传递到GPU 721)。主GPU 721根据当前处理状态906(游戏状态GS1)处理第二用户输入908,并作为当前状态906和第二输入908的结果生成后续处理状态910(游戏状态GS2)。

同时,延迟模块710缓冲第二输入908,并在继第一实例900接收到输入908之后的某个时间将其传递到辅助实例950。辅助GPU 722根据当前处理状态956处理第二用户输入908(对应于第一实例中的状态906),并作为当前状态956和第二输入908的结果生成后续处理状态960(对应于在第一实例中的状态910)。

处理系统170接收第三用户输入912,指令玩家B阻挡冰球。延迟模块710将输入912无延迟地传递到GPU 721(或者替选地,在没有被延迟模块处理的情况下输入被传递到GPU721)。主GPU 721根据当前处理状态910(游戏状态GS2)处理第三用户输入912,并作为当前状态910和第二输入912的结果生成后续处理状态914(错误状态)。在一些实施方式中,主GPU 721在进入不希望的状态时向辅助GPU 722发送暂停信号724(见图7)(该暂停信号在图9中被标记为信号920)。在一些实施方式中,错误检测模块730检测主GPU 721的输出732中的错误,并且向辅助GPU 722发送暂停信号734(见图7)。

同时,延迟模块710缓冲第三输入912,以便在继第一实例900接收到输入912之后的时间将第三输入912传递给辅助实例950。但是,在辅助GPU 722有机会处理第三用户输入912之前,辅助GPU 722从主GPU 721(或错误检测模块730)接收暂停信号920(和/或信号734),并且结果暂停处理。这样,程序852的辅助实例950的执行在当前处理状态960(与第一实例中的状态910相一致)中被暂停。当前状态960是错误前状态,因为它与在错误状态之前发生的主实例中的处理状态相一致。与当前的错误前状态960相关联的信息742(见图1)被发送到检查模块770以进行评估。在一些实施方式中,辅助GPU 722生成一个或多个后续的错误前状态961(例如,游戏状态GS2a),并且与这些状态相关联的信息742被发送到检查模块740以进行进一步评估。在一些实施方式中,辅助GPU 722生成接连的错误前状态,直到辅助GPU 722达到错误状态为止。

在一些实施方式中,一个或多个用户输入904、908和912是不同的多个用户输入。例如,在上面的示例中,多个用户输入912可能已在主实例900中引起错误状态914。这样,通过多个输入912中的每个输入个体地步进并且在辅助实例950中生成中间的错误前状态可以提供详述错误原因的更准确的信息。具体来说,调试程序或开发者将能够更准确地确定导致失败的确切输入和处理状态,这将为更改应用的编程提供更好的基础,以避免将来由于违反输入/状态组合引起的未来的失败。

错误前状态保存方法

图10是图示根据一些实施方式的、用于保存错误前处理状态的示例方法1000的流程图。方法1000可选地由存储在计算机存储器或非暂时性计算机可读存储介质中并且由处理系统170的一个或多个处理器执行的指令支配。计算机可读存储介质可以包括磁性或光学的磁盘存储设备、固态存储设备(诸如闪存)或其他一个或多个非易失性存储设备或者设备。存储在计算机可读存储介质上的指令可以包括以下一种或多种:源代码、汇编语言代码、目标代码或由一个或多个处理器解释的其他指令格式。方法1000中的一些操作可以被组合和/或一些操作的顺序可以被改变。

方法1000由处理系统170执行,该处理系统170包括一个或多个处理单元(例如,CPU 705)和存储由处理核执行的程序的存储器。处理系统170接收输入的第一流172/711(图7),并对第一输入流进行缓冲(1002),以生成与输入的第一流711相同的缓冲的输入流712。在一些实施方式中,输入是通过通信网络(例如,互联网)从一个或多个客户端设备发送的网络分组。在一些实施方式中,每个流711和712被缓冲,其中用于第一流711的缓冲区具有第一深度(例如,零深度),并且用于第二流712的缓冲区具有第二深度(例如,N的深度,其中N与两个流711和712之间的预定偏移量相关联)。尽管缓冲流712中的输入相对于第一流711中的输入被延迟,但是相应输入之间的时间被保存(例如,到主实例900的输入904和908之间的差量等于在到辅助实例950的输入904和908之间的差量)。因此,在一些实施方式中,从第二处理单元执行程序的辅助实例的角度来看,输入事件根本没有被延迟。换句话说,到达第一处理单元(例如,GPU 721)的输入序列(值和定时)与到达第二处理单元(例如,GPU 722)的输入序列(值和定时)相同,除了上述相对于缓冲区的全局偏移量。

处理系统170将第一流711传送(1004)到第一程序852的主实例900(例如,在主GPU721上执行),并将缓冲的流712传送到第一程序852的辅助实例950(例如,在辅助GPU 722上执行)。第一(主)处理单元(例如,GPU 721)利用第一流711实时执行(1006)主实例900,并且第二(辅助)处理单元(例如,GPU 722)相对于利用第一流711的主实例900的执行以预定的时间延迟利用缓冲流712来执行第二实例950。

处理单元(例如,GPU 721和722)执行程序852的每个实例,直到主处理单元(例如,GPU 721)或错误检测单元730检测到(1008)由于执行主实例而导致的错误状态。在一些实施方式中,检测错误状态包括在第一实例中识别故障。在一些实施方式中,检测错误状态包括识别来自主处理单元(例如,GPU 721)的无效输出数据或不希望的输出状态。对于其中主处理单元检测到内部故障的实施方式,主处理单元将暂停信号或标志发送到辅助处理单元。另外或替选地,对于其中主处理单元没有或无法检测到内部故障的实施方式(例如,因为处理单元完全关闭和/或不能继续处理数据),持续主处理单元的监视状态的错误检测单元730将暂停信号或标志发送到辅助处理单元。

响应于检测到错误状态,主GPU 721或错误检测模块730经由暂停信号724和/或暂停信号734(参见图7)暂停(1010)辅助实例950,从而保存辅助实例950的当前状态,其中辅助实例950的当前状态对应于主实例900的错误前状态。

关于本公开的注释

已经详细参考各种实施方式,其示例在附图中被图示。在以上详细描述中,阐述许多具体细节以便于提供对本发明和所描述的实施方式的透彻理解。然而,可以在没有这些具体细节的情况下实践本发明。在其他情况下,未详细描述公知的方法、过程、组件和电路,以免不必要地使实施方式的各方面不清楚。

将会理解,尽管在本文中可以使用术语“第一”、“第二”等来描述各种元件,但是这些元件不应受到这些术语的限制。这些术语仅用于区分一个元件和另一个元件。例如,第一设备可以被称为第二设备,并且类似地,第二设备可以被称为第一设备,同时不改变描述的含义,只要第一设备的所有出现都被一致地重命名并且第二设备的所有出现被一致重命名。第一设备和第二设备都是设备,但是它们不是同一设备。

本文所使用的术语仅出于描述特定实施方式的目的,并且不旨在限制权利要求。如在实施方式和所附权利要求书的描述中所使用的,单数形式“一”、“一个”和“该”也旨在包括复数形式,除非场境另外明确指出。还将会理解,本文所用的术语“和/或”指代并涵盖一个或多个相关联所列项目的任何和所有可能的组合。还将会理解,在本说明书中使用时,术语“包括”和/或“包含”指定存在所述特征、整数、步骤、操作、元件和/或组件,但不排除一个或多个其他特征、整数、步骤、操作、元素、组件和/或其组的存在或者添加。

如本文中所使用的,术语“如果”可以被解释为意指“当”、“在……时”或“响应于确定”或“根据确定”或“响应于检测”,所陈述的条件先例为真,具体取决于场境。类似地,短语“如果确定[所陈述的条件先例为真]”或“如果[所陈述的条件先例为真]”或“当[所陈述的条件先例为真]”可以被解释为意指,取决于场境,“在确定所陈述的条件先例为真之后”或者“响应于确定所陈述的条件先例为真”或者“根据确定所陈述的条件先例为真”或者“在检测所陈述的条件先例为真之后”或者“响应于检测所陈述的条件先例为真”。

出于解释的目的,已经参考特定实施方式描述前述描述。然而,以上说明性讨论并非旨在穷举或将本发明限制为所公开的精确形式。鉴于以上教导,许多修改和变化是可能的。选择和描述实施方式以便于最好地解释本发明的原理及其实际应用,从而使本领域的其他技术人员能够最佳地利用本发明以及具有各种修改的各种实施方式,以适合于预期的特定用途。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号