用于虚拟化的图形处理单元分区的制作方法

文档序号:18667518发布日期:2019-09-13 20:23阅读:156来源:国知局
用于虚拟化的图形处理单元分区的制作方法

通常,虚拟化技术通过将物理资源抽象为虚拟化资源来切断物理计算设备与操作系统之间的一对一链接。虚拟化允许多个操作系统实例或应用实例同时存在于同一物理机器上并且彼此隔离。虚拟化还使得多个操作系统实例能够共享物理设备的资源,诸如共享存储设备、处理设备(例如,图形处理单元(gpu))、网络设备等。这些进步导致很多计算资源的集中化,使得各种计算任务能够“通过云”执行。

作为示例,可以向与企业相关联的个体给予账户,这些账户允许他们访问企业配置的桌面界面——桌面界面可以被配置为提供由企业选择的生产力工具、由企业托管的存储等。与给定个体相关联的桌面界面也可以经由多个不同的计算设备可访问,多个不同的计算设备例如工作中的桌面设备、家中的膝上型设备、旅行时的平板设备等。虽然从这些多个不同的计算设备可访问,但是由桌面界面提供的功能可以主要使用企业服务器的处理和存储资源而不是直接与个体交互的计算设备的资源来供应。此外,虚拟化技术使得上述这些服务器的处理和存储资源能够进一步被用来同时向企业的多个个体提供个人桌面界面。继续在虚拟化技术方面取得进展,诸如提高可以使用虚拟机来完成计算任务的速度,或者通过采用虚拟机来降低实现系统的成本。尽管如此,用于实现虚拟化的一些传统技术可能很昂贵,易受安全漏洞攻击,或者与特定主机设备硬件配置相关联。因此,很多应用可能无法利用虚拟化。



技术实现要素:

本发明内容以简化的形式介绍了一些概念,这些概念将在下面的具体实施方式中进一步描述。这样,本发明内容不旨在标识所要求保护的技术方案的必要特征,也不旨在用于帮助确定所要求保护的技术方案的范围。

本文中描述了用于虚拟化的图形处理单元(gpu)分区的技术。在一个或多个实现中,主机设备的gpu分区管理器获取针对具有gpu功能的虚拟机的请求。特别地,该请求根据不同的gpu能力指定gpu功能。这些不同的能力对应于表示gpu功能并且用于管理虚拟机与gpu之间的交互的gpu模型的段。gpu分区管理器基于指定的gpu能力来确定主机设备的gpu是否可用于满足请求。如果可用,则gpu分区管理器将所确定的可用gpu的至少一部分分配给虚拟机,以将虚拟机配置为具有带有该功能的gpu分区。然后,配置有gpu分区的虚拟机可以被显露给分区的请求方并且提供经gpu处理的数据。

附图说明

参考附图描述具体实施方式。在附图中,附图标记的最左边的数字标识首次出现附图标记的图。在说明书和附图中的不同实例中使用相同的附图标记可以指示相似或相同的项。附图中表示的实体可以指示一个或多个实体,并且因此可以在讨论中将单数或复数形式的实体可互换地引用。

图1是可操作以采用本文中描述的技术的示例实现中的环境的图示。

图2是描绘根据一个或多个实现的用以对gpu进行分区以用于虚拟化的图形处理单元(gpu)的示例抽象模型的示图。

图3是描绘根据一个或多个实现的其中主机的gpu被分配给虚拟机以递送所请求的gpu处理的示例场景的示图。

图4a和图4b是描绘根据一个或多个实现的gpu分区请求和完成通知的示例配置的示图。

图5是描绘根据一个或多个实现的用以将主机的gpu分配给虚拟机的示例过程的流程图。

图6是描绘根据一个或多个实现的用以经由虚拟设备向虚拟机供应gpu的功能的示例过程的流程图。

图7图示了包括可以用于本文中描述的技术的一个或多个实现的示例设备的各种组件的示例系统。

具体实施方式

概述

继续在虚拟化技术中取得进展,例如,提高可以使用虚拟机来完成计算任务的速度,通过采用虚拟机来降低实现系统的成本,或者将功能与特定主机硬件配置解耦。尽管如此,用于实现虚拟化的一些传统技术可能不允许更广泛的采用。在一些场景中,虚拟化可以由供应主机操作系统的主机设备实现。在主机操作系统下,可以实例化多个客操作系统。这些客操作系统可以称为“虚拟机”,该虚拟机可以模拟计算设备并且提供物理计算机的功能。然而,在很多场景中,在没有主机操作系统的情况下实现虚拟化。替代地,托管系统使用配置有用于控制资源和对相应主机设备的资源的访问的模块的虚拟管理器(例如,类型1管理程序)来实现。

与提供物理计算机的功能有关,虚拟机通常在某种程度上利用相应主机设备的物理设备。根据传统技术配置的主机设备可以包括各种不同的物理设备来为虚拟机供应各种期望功能。这种物理设备的示例包括存储设备、联网设备和处理设备(图形处理单元(gpu))。在很多场景中,虚拟机可以利用主机设备的gpu来提供绘制的场景(例如,用于云托管视频游戏、高清(hd)三维(3d)图像或虚拟现实环境)、视频编码和解码、数据处理、大规模计算等。然而,使得虚拟机能够利用gpu的传统技术可以与主机设备所配置有的特定gpu相关联。例如,使用传统技术,请求gpu处理的虚拟机可能必须以特定于相应主机的板上gpu的提供方的格式来配置请求。如果没有用于请求gpu处理的与提供方无关的方式,则可能很难更新主机机器的硬件,主机提供方可能与特定的gpu提供方相关联,虚拟机可能需要配置针对gpu的请求以指示大量不同参数的值,等等。

因此,描述了用于虚拟化的gpu分区。在一个或多个实现中,请求和提供分区以完成与虚拟机相关的gpu处理是基于针对gpu的分区抽象模型。特别地,抽象模型被划分为表示预定的gpu能力集的段。因此,抽象模型可以用于表达给定gpu的能力或gpu的期望能力,例如,在请求一个或多个gpu的分区以处置gpu处理时。根据所描述的技术,gpu抽象模型可以包括用于视频编码、视频解码、gpu随机存取存储器(ram)和gpu计算的段。通常,视频编码涉及gpu的从原始视频文件生成编码视频(例如,mp4)的能力,视频解码涉及gpu的播放编码视频和视频文件(例如,原始视频文件)的能力,gpuram涉及到可用于gpu的一组工作存储器,以及gpu计算涉及gpu能够进行的工作量(例如,浮点性能的每秒10亿次浮点运算(gigaflops)的数目)。然而,如下所述,所描述的技术还可以基于具有不同段的分区抽象模型来实现,例如,更大数目的段、更少的段或表示不同gpu能力的段。

请求和完成gpu处理可以至少部分基于该模型,因为针对gpu的分区和完成通知的请求是根据段来配置的。作为示例,可以针对配置有gpu分区的虚拟机做出请求,该gpu分区具有针对虚拟机的至少一定量的gpu编码、针对虚拟机的至少一定量的gpu解码、针对虚拟机的至少一定量的gpuram、以及针对虚拟机的至少一定量的gpu计算。类似地,主机设备可以向请求方(例如,做出请求的另一虚拟机或客户端设备)通知关于由所分配的gpu分区提供给虚拟机的相同段的完成,例如,指示一定量的gpu编码、gpu解码、gpuram和gpu计算的完成通知。在完成中所请求和提供的量可以受服务协议的约束,例如,如果请求方已经支付了2.5千兆字节(gb)的gpuram,则主机可以向请求方提供具有gpuram为2.5gb的gpu分区的虚拟机,并且在完成通知中指示这一点。因此,该示例模型将gpu请求方和提供方所关心的与gpu处理相关的属性的数目简化为4个。

本文中描述的技术允许虚拟机经由根据分区抽象模型配置的设备驱动器来利用主机的gpu的功能。为此,主机保持与主机的gpu相对应的设备驱动器。这些设备驱动器用于确定主机的gpu是否可以提供由客户端请求的功能,例如,主机的gpu是否可以提供所请求的最小视频编码、视频解码、gpuram和gpu计算。作为示例,设备驱动器可以将基于上述模型而配置的请求转换为特定于相应gpu的命令。一旦确定主机的gpu能够提供满足所请求的能力的gpu处理,则虚拟机可以被配置有所确定的gpu的功能。然后可以将所配置的虚拟机显露给请求虚拟机或请求客户端。

利用本文中描述的技术,可以简化配置主机设备,因为主机提供方可以选择用以配置主机设备的各种gpu中的任何gpu。这可以为采用用于虚拟化的gpu分区的系统带来大量效率,诸如降低成本(因为主机提供方可以在不同的gpu提供方之间进行选择),简化gpu分区请求方与主机之间的接口,减少设备占用空间,降低功耗,或者提高虚拟机向gpu分区请求方递送功能的速度。

在以下讨论中,首先描述可以采用本文中描述的技术的示例环境。然后描述示例过程和实现细节,其可以在示例环境以及其他环境中执行。因此,示例过程和细节的执行不限于示例环境,并且示例环境不限于示例过程和细节的执行。

示例环境

图1总体上以100图示了根据一个或多个实施例的操作环境。环境100包括客户端设备102、主机设备104和另一主机设备106。该环境还包括网络108。虽然图示的环境100包括客户端设备102,但是在一些实现中,所描述的技术可以用于不涉及客户端设备的应用。替代地,主机设备104的虚拟机110可以经由命令队列彼此交互(或者与另一主机设备106的虚拟机110交互)。这种交互可以涉及将数据推送和/或拉到由虚拟机110之一本地运行的服务。

在涉及客户端设备的场景中,客户端设备102可以实现为任何合适的设备,诸如台式计算机、智能电话、平板计算机、便携式计算机(例如,膝上型)、台式计算机、机顶盒、游戏控制台或可穿戴设备。因此,计算设备的范围可以从具有大量存储器和处理器资源的完整资源设备(例如,个人计算机、游戏控制台)到具有有限存储器和/或处理资源的低资源设备(例如,传统的机顶盒、手持游戏机)。另外,尽管示出了单个计算设备,但是在某些情况下计算设备可以表示多个不同设备,诸如由商务用于执行操作、提供数据中心等等的服务提供方的多个服务器。适合于实现本文中描述的技术的计算系统和设备的其他示例在下面结合图7描述。

主机设备104和另一主机设备106可以由一个或多个计算设备实现,诸如由数据中心的一个或多个服务器实现,并且还可以表示一个或多个实体。根据一个或多个实现,主机设备104和另一主机设备106可以表示服务提供方用以通过网络108向客户端设备102和/或向彼此提供一个或多个服务的功能。通常,服务提供方可以使得各种资源(例如,内容和服务)通过网络108可用。通常,由服务提供方使得可访问的资源可以包括通常由一个或多个提供方通过网络使得可用的服务和/或内容的任何合适组合。服务的一些示例包括在线游戏服务、加速绘制服务、虚拟联网服务(例如,云计算)、流内容服务、数据存储服务、搜索服务、电子邮件服务、即时消息发送服务、在线生产力套件、和用于控制客户端对资源的访问的认证服务。内容可以包括文本、多媒体流、文档、应用文件、照片、音频/视频文件、动画、图像、web页面、web应用、设备应用、用于由浏览器或其他客户端应用显示的内容等的各种组合。

虽然网络108被示出为因特网,但是网络可以采用各种各样的配置。例如,网络108可以包括广域网(wan)、局域网(lan)、无线网络、公共电话网络和/或内联网。此外,尽管示出了单个网络108,但是网络108可以被配置为包括多个网络。

主机设备104和另一主机设备106各自被图示为包括虚拟机110。虚拟机110可以被实现为提供上述服务的一部分。另外,虚拟机110可以由主机设备104和另一主机设备106的虚拟机管理器(未示出)实现。通常,虚拟机管理器可以能够管理虚拟机110的创建(本文中称为“实例化”)、操作和终止。在至少一些实现中,虚拟机管理器被配置为在相应主机设备上运行的管理程序的实例。此外,虚拟机110表示由相应主机设备托管的虚拟机的实例。

为了实现客户端设备102与虚拟机110之间的交互,客户端设备102包括接口112,接口112表示用以使得客户端设备102能够与主机设备104和/或另一主机设备106以及与虚拟机110进行接合的功能。例如,接口112支持用以请求虚拟机管理器为客户端设备102实例化虚拟机110之一的功能,诸如配置有具有所请求量的gpu编码、gpu解码、gpu随机存取存储器(ram)和gpu计算的gpu分区的虚拟机。接口112还可以向客户端设备102提供其他功能,诸如使得gpu分区请求的完成状态能够被确定和/或使得请求能够被操纵。接口112还可以提供虚拟机图形界面,例如,其指示允许客户端设备102可见的不同虚拟机的状态。

在某种级别,经由虚拟机110而提供的功能和/或服务至少部分使用主机设备104和另一主机设备106的实际物理设备来提供。尽管设备114可以包括用以提供一系列功能的多种不同物理设备,但是设备114还包括gpu116。gpu116表示用以处理gpu输入数据的功能,诸如用以绘制复杂图形(例如,高清(hd)场景、三维(3d)场景),编码和解码视频,从深度学习数据集学习模型和神经网络,等等。因此,gpu116表示用以执行针对绘制和非绘制场景的处理的功能。根据所描述的技术,可以根据分区抽象模型来描述gpu116的能力。在一些实现中,例如,这些能力可以通过抽象模型来描述,该抽象模型被分段为gpu编码段、gpu解码段、gpuram段和gpu计算段。

换言之,gpu116可以从它们可以处置的gpu编码量、它们可以处置的gpu解码量、可用的gpuram量以及它们可以处置的gpu计算量的角度来描述。如本文中使用的,术语“gpu编码”是指gpu从原始视频文件生成编码视频(例如,mp4)的能力。术语“gpu解码”是指gpu的播放编码视频和视频文件(例如,原始视频文件)的能力。此外,术语“gpuram”是指可用于gpu的一组工作存储器。最后,术语“gpu计算”是指gpu能够进行的工作的量,例如,浮点性能的每秒10亿次浮点运算的数目。尽管本文中的技术主要关于该4段式抽象模型来描述,但是在不偏离所描述的技术的精神或范围的情况下,也可以使用具有用以描述gpu的能力的不同段的不同模型。

主机设备104和另一主机设备106各自也被图示为具有gpu分区管理器118。在一个或多个实现中,gpu分区管理器118是上述虚拟机管理器的一部分。根据所描述的技术,gpu分区管理器118能够从gpu分区请求方(诸如虚拟机110之一或客户端设备102)接收针对能够进行所请求的量的gpu处理的gpu分区的请求。如上文和下文所述,请求可以根据针对gpu的分区抽象模型来配置。继续模型被限定为具有gpu编码、gpu解码、gpuram和gpu计算分区的示例,请求可以被配置为请求一定量的这些能力。在一个或多个实现中,主机设备104和另一主机设备106包括gpu驱动器(未示出),gpu分区管理器118利用该gpu驱动器来确定具有所请求的能力的gpu116之一是否可用。如果gpu分区管理器118确定具有所请求的能力的gpu可用,则gpu分区管理器118可以将虚拟机110之一配置为利用具有与所确定的gpu的至少一部分相对应的功能的gpu分区。

该虚拟机110还可以被配置有相应的驱动器,或者可以被配置为标识相应的驱动器,以便使得虚拟机110能够将用于处理的数据提供给所确定的gpu的所分配的分区。此外,相应的驱动器使得虚拟机能够操纵gpu的所分配的分区以处理数据并且产生经gpu处理的数据(例如,绘制的场景、编码的视频、解码的视频、学习的模型和神经网络)。gpu分区管理器118可以将gpu分区被分配给的虚拟机显露给gpu分区请求方。在一些场景中,gpu分区管理器118将虚拟机110配置为具有单个gpu116的分区作为完整虚拟设备,使得gpu的功能能够在多个虚拟机110之间共享。

根据一个或多个实现,主机设备104和/或另一主机设备106可以被配置有虚拟外围组件互连(pci)基础设施。在这样的场景中,gpu分区管理器118可以使用虚拟pci基础设施以看起来像物理gpu(因为分区附接到pci)的方式将gpu116的分区显露给虚拟机110。在这样做时,gpu分区管理器118可以通过以模仿pciexpress(pcie)设备的方式呈现虚拟设备来暴露gpu的分区。此外,这允许同一操作系统基础设施被利用以用于与利用gpu分区相关的配置和驱动器加载。

通过根据所描述的用于gpu的分区抽象模型来访问gpu功能,虚拟机110可以利用不同的gpu116。例如,这允许gpu处理的工作负载被映射到不同的gpu和/或同一gpu的不同地配置的分区上。另外,虚拟机110与由特定gpu提供方提供的主机的任何特定gpu无关,并且主机也与来自特定gpu提供方的gpu无关。这使得虚拟机110能够在不同的gpu和gpu的不同分区之间切换,例如,基于gpu能力的可用性。

已经描述了示例操作环境,现在考虑与一个或多个实现相关联的示例细节和技术。

用于虚拟化的图形处理单元分区

为了进一步说明,考虑可以用于针对虚拟化来对图形处理单元(gpu)进行分区的示例场景、组件和过程的该部分中的讨论。通常,可以在下面描述的示例过程的上下文中采用关于以上和以下示例而描述的功能、特征和概念。此外,关于本文档中的不同附图和示例而描述的功能、特征和概念可以彼此互换,并且不限于在特定附图或过程的上下文中的实现。此外,与本文中的不同的代表性过程和相应图相关联的块可以一起应用和/或以不同方式组合。因此,关于本文中的不同示例环境、设备、组件、图和过程而描述的个体功能、特征和概念可以以任何合适的组合使用,并且不限于本说明书中列举的示例所表示的特定组合。

用于gpu的示例分区抽象模型

图2总体上以200描绘了根据一个或多个实现的用于针对虚拟化来对gpu进行分区的图形处理单元(gpu)的示例抽象模型。示例200描绘了gpu抽象模型202,gpu抽象模型202包括用于视频编码204、视频解码206、gpuram208和gpu计算210的段。

通常,gpu抽象模型202用于描述gpu的能力。给定所描绘的gpu抽象模型202,例如,从编码和解码视频的能力、gpuram的量和gpu计算能力的角度来描述gpu。此外,gpu抽象模型202管理如何配置针对gpu处理和完成通知的请求。作为示例,gpu抽象模型202限定gpu分区请求方在请求与虚拟机110之一相关的gpu处理时指定的参数。参考所描绘的gpu抽象模型202,例如,针对gpu处理的请求将被配置为请求具有指定量的视频编码能力、指定量的视频解码能力、指定量的gpuram和指定量的gpu计算能力的gpu分区。除了允许请求指定参数的值之外,主机设备104或另一主机设备106可以指定用于限定可以被简单地请求的gpu分区的值。作为示例,主机设备104可以限定可以被请求的“gpu1”分区,例如,而不是形成具有特定能力的请求,gpu分区请求方可以简单地将请求配置为具有与gpu1相对应的标识符。主机设备104可以限定可请求的gpu分区,例如,通过指定要被分配给gpu的gpu编码能力的量、视频解码能力的量、gpuram的量和gpu计算能力的量。

尽管在一个或多个实现中图2中描绘的模型可以管理gpu116的分区向虚拟机110的分配,但是gpu分区分配也可以基于不同的gpu抽象模型来管理,而不偏离本文中描述的技术的精神或范围。例如,具有5个段、32个段或表示不同能力的段的gpu抽象模型可以用于管理对虚拟机的gpu分区分配。

无论针对gpu抽象模型202而指定的特定段如何,gpu抽象模型202的段还可以用于配置与gpu116相对应的驱动器。具体地,gpu抽象模型202向gpu开发方提供将由其相应gpu驱动器与gpu处理相关地接收的输入的指示(例如,请求的格式)。gpu抽象模型202还向gpu开发方提供来自其相应gpu驱动器与gpu处理相关地期望的输出的指示(例如,完成通知的格式)。

在所描绘的抽象模型用于限定客户端设备、主机设备、虚拟机、gpu和gpu分区管理器118之间的交互的实现中,所描绘的分段可以以与上文中讨论的类似的方式表示gpu的能力。特别地,视频编码204段可以表示gpu的从原始视频文件生成编码视频(例如,mp4)的能力。视频解码206段可以表示gpu的播放编码视频和视频文件(例如,原始视频文件)的能力。gpuram208段可以表示可用于gpu的工作存储器的量。此外,gpu计算210段可以表示gpu能够进行的工作的量(例如,浮点性能的每秒10亿次浮点运算的数目)。另外,gpu分区可以被配置有每个段的gpu资源,使得gpu分区具有一定量的视频编码能力、视频解码能力、gpuram和gpu计算能力。

示例场景

图3总体上以300描绘了根据一个或多个实现的主机的gpu被分配给虚拟机以递送所请求的gpu处理的示例场景。示例场景300包括来自图1的虚拟机110、gpu116和gpu分区管理器118。

示例场景300还包括gpu分区请求302,gpu分区请求302表示来自gpu分区请求方(例如,虚拟机110之一或客户端设备102)的针对配置有能够进行所请求的量的gpu处理的gpu分区的虚拟机110之一的请求。特别地,gpu分区请求302从gpu抽象模型202的角度请求gpu分区,如关于图4a更详细地描述的。gpu分区请求302可以由gpu分区管理器118从gpu分区请求方接收。基于gpu分区请求302,gpu分区管理器118可以查询304gpu驱动器306以确定虚拟机之一是否可以利用任何gpu116(或其部分)来满足请求。gpu驱动器306被图示为存储在存储装置308中,例如,存储装置308可以被包括作为主机设备104、另一主机设备106或可信远程存储服务的一部分。当由gpu分区管理器118查询时,gpu驱动器306被配置为在例如主机设备104或另一主机设备106的存储器中执行。

gpu驱动器306表示接收根据gpu抽象模型202而配置的gpu分区请求的功能。gpu驱动器306还表示将那些请求的参数转换为特定于相应gpu116的格式,以用于确定相应gpu是否具有可用的所请求的能力或者相应gpu的分区是否可以被配置有所请求的能力。gpu驱动器306还被配置为将由相应gpu提供的可用性信息转换为根据gpu抽象模型202而配置的完成信息。另外,gpu驱动器306使得相应gpu的分区能够在被确定为可用并分配给虚拟机时提供gpu处理。

在任何情况下,基于查询304,gpu分区管理器118确定哪些gpu116(如果有的话)可用于满足gpu分区请求302。如果gpu116中的一个或多个被确定为可用,则gpu分区管理器118将与可用gpu的至少一部分相对应的gpu分区分配给将要显露给gpu分区请求方的虚拟机110。该分配由vm分配310表示。vm分配310可以涉及将虚拟机110配置为具有与所分配的gpu116相对应的gpu分区,包括将虚拟机配置为具有相应的gpu驱动器306以使能虚拟机110与gpu分区之间的交互。

在一个或多个实现中,vm分配310可以涉及将少于整个单个gpu116作为gpu分区分配给虚拟机。考虑其中gpu分区请求302请求具有gpuram为至少2.5千兆字节(gb)的gpu分区的虚拟机但是其中每个gpu116具有至少10gb的gpuram的示例。在该示例中,gpu分区管理器118可以分配gpu116之一的一部分(例如,gpu116之一的四分之一)以用于gpu分区,并且将虚拟机110配置为利用该分区。gpu分区管理器118可以通过生成具有gpu分区的虚拟设备来这样做,其向虚拟机110模拟完整的物理gpu设备。虚拟设备允许多个虚拟机110同时利用单个gpu116的功能。将gpu116的功能显露给虚拟机110作为虚拟设备还允许gpu分区管理器118向虚拟机配置由多个gpu116的分区提供的功能,例如,单个主机的多个gpu或不同主机的多个gpu。

结合vm分配310,gpu分区管理器118被配置为向gpu分区请求方提供gpu完成通知312。gpu完成通知312被配置为向gpu分区请求方指示可以满足gpu分区请求302的程度。作为示例,如果gpu分区请求302请求具有gpuram至少为2.5gb的gpu分区的虚拟机,并且如果gpu分区管理器118确定gpuram为5gb的gpu可用并且将该gpu的至少一部分分配给分区以完成请求,则gpu完成通知312可以指示虚拟机被显露有gpuram至少为2.5gb并且高达5gbram的gpu分区。如上所述,所请求的能力和用于完成gpu分区请求302的能力可以由服务协议来管理。例如,如果客户端设备102的用户已经为包括2.5gb的gpuram的服务付费,则无论所请求的gpuram的量如何,gpu分区管理器118都分配与2.5gb的gpuram相对应的gpu116的资源。如关于图4b所讨论的,gpu完成通知312的格式也可以基于gpu抽象模型202。

基于gpu118(或gpu的至少一部分)用于将虚拟机配置为具有gpu分区的分配,gpu分区可以用于处理虚拟机的gpu输入数据。gpu输入数据314表示提供给gpu116的分区以用于gpu处理的数据。作为示例,gpu输入数据314可以表示通过网络108接收的视频数据流,该视频数据流将被处理以经由虚拟机并且最终经由客户端设备102输出。gpu输入数据的示例包括流式电视数据流、流式电影流、用于云托管的视频游戏环境的数据、原始视频和深度学习数据集。所图示的场景300还包括经gpu处理的数据316,经gpu处理的数据316表示由gpu116的分区基于处理gpu输入数据314而输出的数据。在一些情况下,经gpu处理的数据316可以包括可以被输出以用于显示的信息。然而,经gpu处理的数据316也可以被配置为非绘制性数据。经gpu处理的数据316的示例包括电视节目、电影和视频游戏场景、以及从深度学习数据集中学习的模型和神经网络、编码视频和gpu116相对于其他处理器加速处理的数据。gpu116的分区与虚拟机110之间的交互可以涉及不同信息和/或指令的传送,而不偏离本文中描述的技术的精神或范围。

示例gpu分区请求和完成通知

图4a和图4b总体上以400描绘了根据一个或多个实现的gpu分区请求和完成通知的配置的示例。特别地,图4a描绘了gpu分区请求302,并且图4b描绘了gpu完成通知312。在所图示的示例中,gpu分区请求302和gpu完成通知312根据图2的gpu抽象模型202被格式化。

gpu分区请求302根据gpu抽象模型202被格式化,只要其包括视频编码参数402、视频解码参数404、gpuram参数406和gpu计算参数408。根据一个或多个实现,gpu分区请求方可以针对由抽象模型表示的每个能力指定该能力的最小请求量、该能力的最大量和优选量。例如,虚拟机110之一或客户端设备102可以经由gpu分区请求302来请求具有如下gpu分区的虚拟机110:该gpu分区具有至少2.5gb的gpuram,但是具有不超过10gb的gpuram,并且具有优选地为5gb的gpuram。因此,gpu分区302请求的每个参数被描绘为具有最小、优选和最大请求值。

gpu分区请求302的视频编码参数402包括最小请求视频编码410、优选请求视频编码412和最大请求视频编码414。gpu分区请求302的视频解码参数404包括最小请求视频解码416、优选请求视频解码418和最大请求视频解码420。gpu分区请求302的gpuram参数406包括最小请求ram422、优选请求ram424和最大请求ram426。gpu分区请求302的gpu计算参数408包括最小请求计算428、优选请求计算430和最大请求计算432。

与gpu分区请求类似,图4b中描绘的gpu完成通知312根据gpu抽象模型被格式化,只要其包括视频编码参数434、视频解码参数436、gpuram参数438和gpu计算参数440。根据一个或多个实现,指定值以指示由抽象模型表示的每个能力被配置为由所指派的gpu分区完成的程度。完成的程度以能力将被完成的最小量、能力将被完成的优选量和能力将被完成的最大量来表示。例如,参数可以指示将向分区请求方提供配置有如下gpu分区的虚拟机:该gpu分区具有至少2.5gb的gpuram,但是具有不超过10gb的gpuram,并且具有优选地为5gb的gpuram。如上所述,gpu分区请求302被完成的程度可以由服务协议来管理。因此,可以预先确定最小量、最大量和优选量。特别地,最小量和最大量可以具有相同的值。

gpu完成通知312的视频编码参数434包括最小完成视频编码442、优选完成视频编码444和最大完成视频编码446。gpu完成通知312的视频解码参数436包括最小完成视频解码448、优选完成视频解码450和最大完成视频解码452。gpu完成通知312的gpuram参数438包括最小完成ram454、优选完成ram456和最大完成ram458。gpu完成通知312的gpu计算参数440包括最小完成计算460、优选完成计算462和最大完成计算464。

图4a和图4b中描绘的示例配置特定于图2中描绘的示例gpu抽象模型202。在gpu抽象模型202被不同地分段以表示gpu的能力的实现中,gpu分区请求302和gpu完成通知312可以根据模型分段的方式不同地配置。另外,在使用gpu抽象模型202的场景中,gpu分区请求302和gpu完成通知312可以包括附加信息而不偏离本文中描述的技术的精神或范围。在一些实现中,可以以向量的形式指示参数的值。关于以下示例过程讨论其他示例和细节。

示例过程

关于图5和图6的示例过程讨论用于虚拟化的gpu分区的其他方面。这些过程表示为指定由一个或多个设备执行的操作的块集合,并且不必限于为了由相应块执行操作而示出的顺序。这些过程的各方面可以用硬件、固件或软件或其组合来实现。这些过程的一些方面可以经由一个或多个主机设备来实现,诸如经由保持和提供对gpu分区管理器118的访问等的主机设备104和/或另一主机设备106。

图5描绘了根据一个或多个实现的用于将主机的gpu分配给虚拟机的示例过程500。

在502处,从客户端设备获取针对配置有gpu分区的虚拟机的请求。根据本文中讨论的原理,该请求对具有gpu分区的虚拟机进行请求,该gpu分区具有根据分区抽象模型而指定的能力。作为示例,gpu分区管理器118从gpu分区请求方(例如,虚拟机110之一或客户端设备102)获取gpu分区请求302。此外,gpu分区请求对配置有具有gpu116之一或gpu116之一的至少一部分的功能的分区的虚拟机110之一进行请求。gpu分区请求302还根据gpu抽象模型202来配置。例如,参考图4a,gpu分区请求302针对视频编码参数402、视频解码参数404、gpuram参数406和gpu计算参数408中的每一个指定最小值、优选值和最大值。

在504处,查询主机的gpu驱动器以确定主机的任何gpu是否可用于满足该请求。作为示例,gpu分区管理器118查询304gpu驱动器306以确定主机设备104或另一主机设备106的任何gpu116是否可用于满足gpu分区请求302。在一个或多个实现中,这涉及将gpu分区请求302传递到gpu驱动器306,使得gpu驱动器306可以确定相应的gpu116是否能够提供所请求的能力。

在506处,响应于确定gpu的至少一部分可用于满足该请求,将gpu的所确定的部分分配给虚拟机。作为示例,gpu分区管理器118在504处确定gpu116之一的至少一部分可用于满足gpu分区请求302。响应于该确定,gpu分区管理器118将gpu的所确定的可用部分分配给gpu分区。然后,向虚拟机110之一被配置有该gpu分区。如上所述,gpu分区可以对应于gpu116之一的一部分、整个gpu116、多个gpu116中的至少一部分等。gpu分区还可以对应于跨主机设备104和另一主机设备106的多个gpu116。

在508处,向客户端设备传送完成通知,该完成通知指示请求被完成的程度。根据本文中讨论的原理,完成通知基于分区抽象模型被格式化。作为示例,gpu分区管理器118将gpu完成通知312传送给gpu分区请求方。如上所述,gpu完成通知312指示gpu分区请求302被完成的程度。gpu完成通知312还基于gpu抽象模型202被格式化。例如,gpu完成通知312指定将被提供的最小、优选和最大能力量,如关于图4b更详细地描述的。还应当理解,在一些场景中,gpu116的一部分可能不可用于满足请求。无论gpu116是否能够满足所请求的能力,都可以向客户端设备传送完成通知——在gpu可能不可用于满足请求的情况下,完成通知可以指示该请求根本无法被完成或者gpu分区可以被配置为部分完成请求。

在510处,将配置有gpu的所分配的部分的虚拟机显露给gpu分区请求方。作为示例,在506处被配置有具有gpu116之一(或至少一部分)的功能的gpu分区的虚拟机110之一被显露给虚拟机110中的不同的一个虚拟机或客户端设备102。

图6描绘了根据一个或多个实现的虚拟机利用虚拟设备来利用由主机gpu的所分配的部分供应的功能的示例过程600。

在602处,在虚拟设备输入处从虚拟机接收请求。根据本文中讨论的原理,该请求对由与主机gpu的分配给虚拟机的一部分相对应的gpu分区供应的gpu处理进行请求。作为示例,在虚拟设备(未示出)的输入处从虚拟机110之一接收请求。所接收的请求对由分配给虚拟机110作为gpu分区的主机设备104的一部分或另一主机设备106的gpu116提供的gpu处理进行请求。

在604处,确定与虚拟设备输入相关联的gpu的数据输入/输出(i/o)硬件工作队列。根据本文中讨论的原理,gpu的数据i/o硬件工作队列是基于虚拟设备输入和输出到gpu的数据i/o硬件工作队列的相应输入和输出的映射来确定的。作为示例,gpu驱动器306之一确定与虚拟设备的输入相关联的gpu116的分区的数据i/o硬件工作队列。设备驱动器通过参考虚拟设备的输入和输出到gpu分区的相应数据i/o硬件工作队列的映射来做出该确定。如本文中使用的,“数据i/o硬件工作队列”是指接受gpu输入数据314以执行图形处理的gpu116的硬件连接。这些硬件连接中的一些还能够输出经gpu处理的数据316。在任何情况下,数据i/o硬件工作队列与控制工作队列不同,控制工作队列控制gpu116的操作,诸如以由于检测到错误而重置它们。

在606处,经由所确定的数据i/o硬件工作队列将与请求一起被包括的数据提供给gpu的所分配的部分。根据本文中讨论的原理,这使得gpu分区能够使用所提供的数据来供应gpu处理。作为示例,gpu输入数据314与在602处获取的请求一起被包括。在该示例中,gpu输入数据314被提供给在604处确定的数据i/o硬件工作队列。这允许gpu116的分区处理gpu输入数据314。

在608处,由虚拟设备从gpu获取经gpu处理的数据。根据本文中讨论的原理,经gpu处理的数据是由于gpu处理而产生的。作为示例,与gpu分区相对应的gpu116处理gpu输入数据314以产生经gpu处理的数据316,经gpu处理的数据316可以对应于电视节目、电影、视频游戏图形、从深度学习数据集学习的模型或神经网络、加速绘制等。在任何情况下,虚拟设备从gpu分区获取经gpu处理的数据316。在610处,将经gpu处理的数据从虚拟设备输出到虚拟机。作为示例,在608处获取的经gpu处理的数据316由虚拟设备输出到虚拟机110之一。

已经根据一个或多个实现描述了示例过程和细节,现在考虑可以用于实现本文中描述的各种技术的示例系统和设备的讨论。

示例系统和设备

图7图示了包括示例计算设备702的示例系统700,该示例计算设备702表示可以实现本文中描述的各种技术的一个或多个计算系统和/或设备。计算设备702可以是例如服务提供方的服务器、与客户端相关联的设备(例如,客户端设备)、片上系统和/或任何其他合适的计算设备或计算系统。

如图所示的示例计算设备702包括处理系统704、一个或多个计算机可读介质706、以及彼此通信地耦合的一个或多个i/o接口708。虽然未示出,但是计算设备702还可以包括将各种组件彼此耦合的系统总线或其他数据和命令传输系统。系统总线可以包括利用各种总线架构中的任何总线架构的不同总线结构中的任何一个或组合,诸如存储器总线或存储器控制器、外围总线、通用串行总线、和/或处理器或本地总线。还构想了各种其他示例,诸如控制和数据线。

处理系统704表示使用硬件执行一个或多个操作的功能。因此,处理系统704被图示为包括可以被配置为处理器、功能块等的硬件元件710。这可以包括以硬件实现为专用集成电路或使用一个或多个半导体形成的其他逻辑器件。硬件元件710不受形成它们的材料或其中采用的处理机制的限制。例如,处理器可以包括(多个)半导体和/或晶体管(例如,电子集成电路(ic))。在这样的上下文中,处理器可执行指令可以是电子可执行指令。

计算机可读介质706被图示为包括存储器/存储装置712。存储器/存储装置712表示与一个或多个计算机可读介质相关联的存储器/存储容量。存储器/存储装置712可以包括易失性介质(诸如随机存取存储器(ram))和/或非易失性介质(诸如只读存储器(rom)、闪存、光盘或磁盘)。存储器/存储装置712可以包括固定介质(例如,ram、rom、固定硬盘驱动器)以及可移动介质(例如,闪存、可移动硬盘驱动器或光盘)。计算机可读介质706可以以下面进一步描述的各种其他方式配置。

(多个)输入/输出接口708表示允许用户向计算设备702输入命令和信息并且还允许使用各种输入/输出设备将信息呈现给用户和/或其他组件或设备的功能。输入设备的示例包括键盘、光标控制设备(例如,鼠标)、用于语音操作的麦克风、扫描仪、触摸功能(例如,被配置为检测物理触摸的电容性或其他传感器)和相机(例如,其可以采用诸如红外频率等可见或不可见波长来检测不涉及作为手势的触摸的移动)。输出设备的示例包括显示设备(例如,显示器或投影仪)、扬声器、打印机、网卡和触觉响应设备。因此,计算设备702可以以下面进一步描述的各种方式配置以支持用户交互。

本文中可以在软件、硬件元件或程序模块的一般上下文中描述各种技术。通常,这样的模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、元素、组件、数据结构等。本文中使用的术语“模块”、“功能”和“组件”通常表示软件、固件、硬件或其组合。本文中描述的技术的特征是平台无关的,这意味着这些技术可以在具有各种处理器的各种商业计算平台上实现。

所描述的模块和技术的实现可以存储在某种形式的计算机可读介质上或通过其传输。计算机可读介质可以包括可以由计算设备702访问的各种介质。作为示例,计算机可读介质可以包括“计算机可读存储介质”和“通信介质”。

“计算机可读存储介质”是指能够存储信息的介质和/或设备,与仅仅信号传输、载波或信号本身相对。计算机可读存储介质不包括信号承载介质、暂态信号或信号本身。计算机可读存储介质包括以适于存储诸如计算机可读指令、数据结构、程序模块、逻辑元件/电路或其他数据等信息的方法或技术实现的硬件,诸如易失性和非易失性、可移动和不可移动介质和/或存储设备。计算机可读存储介质的示例可以包括但不限于ram、rom、eeprom、闪存或其他存储器技术、cd-rom、数字通用盘(dvd)或其他光学存储器、硬盘、磁带盒、磁带、磁盘存储器或其他磁存储设备、或者适于存储期望的信息并且可以由计算机访问的其他存储设备、有形介质或制品。

“通信介质”可以是指被配置为诸如经由网络向计算设备702的硬件传输指令的信号承载介质。通信介质通常可以包含计算机可读指令、数据结构、程序模块或者诸如载波、数据信号或其他传输机制等调制数据信号中的其他数据。通信介质还包括任何信息传递介质。术语“调制数据信号”表示以用以在信号中对信息进行编码的方式设置或改变其一个或多个特征的信号。作为示例,通信介质包括诸如有线网络或直接有线连接等有线介质以及诸如声学、rf、红外和其他无线介质等无线介质。

如前所述,硬件元件710和计算机可读介质706表示在一些实施例中可以用于实现本文中描述的技术的至少一些方面的以硬件形式实现的指令、模块、可编程设备逻辑和/或固定设备逻辑。硬件元件可以包括集成电路或片上系统、专用集成电路(asic)、现场可编程门阵列(fpga)、复杂可编程逻辑器件(cpld)以及硅或其他硬件设备的其他实现的组件。在这种上下文中,硬件元件可以作为执行由通过硬件元件实施的指令、模块和/或逻辑限定的程序任务的处理设备以及用于存储用于执行的指令的硬件设备(例如,先前描述的计算机可读存储介质)进行操作。

还可以采用前述的组合来实现本文中描述的各种技术和模块。因此,包括gpu分区管理器118和接口112以及其他程序模块的软件、硬件或程序模块可以实现为实施在某种形式的计算机可读存储介质上和/或由一个或多个硬件元件710实施的一个或多个指令和/或逻辑。计算设备702可以被配置为实现与软件和/或硬件模块相对应的特定指令和/或功能。因此,模块作为由计算设备702作为软件可执行的模块的实现可以至少部分以硬件实现,例如,通过使用处理系统的计算机可读存储介质和/或硬件元件710。指令和/或功能可以由一个或多个制品(例如,一个或多个计算设备702和/或处理系统704)可执行/可操作以实现本文中描述的技术、模块和示例。

如图7中进一步所示,示例系统700使得无处不在的环境能够在个人计算机(pc)、电视设备和/或移动设备上运行应用时获取无缝的用户体验。服务和应用在所有三种环境中运行时基本上相似,以便在使用应用、玩视频游戏、观看视频等时从一个设备转换到下一设备时获取共同的用户体验。

在示例系统700中,多个设备通过中央计算设备互连。中央计算设备可以在多个设备的本地,或者可以远离多个设备。在一个实施例中,中央计算设备可以是通过网络、因特网或其他数据通信链路而连接到多个设备的一个或多个服务器计算机的云。

在一个实施例中,该互连架构使得功能能够跨多个设备被递送以向多个设备的用户提供共同且无缝的体验。多个设备中的每一个可以具有不同的物理要求和能力,并且中央计算设备使用平台来实现向设备递送体验,该体验既是针对设备定制的又是所有设备共有的。在一个实施例中,创建一类目标设备,并且为通用的一类设备定制体验。可以通过物理特征、使用类型或设备的其他共同特性来定义一类设备。

在各种实现中,计算设备702可以采用各种不同配置,诸如用于计算机714、移动设备716和电视718使用的不同配置。这些配置中的每一个包括可以具有通常不同的构造和能力的设备,并且因此计算设备702可以根据一个或多个不同的设备类来配置。例如,计算设备702可以实现为计算机714类的设备,其包括个人计算机、台式计算机、多屏幕计算机、膝上型计算机和上网本。

计算设备702还可以实现为包括移动设备的移动设备716类设备,诸如移动电话、便携式音乐播放器、便携式游戏设备、平板计算机或多屏幕计算机。计算设备702还可以被实现为电视718类设备,其包括在休闲观看环境中具有或连接到通常更大的屏幕的设备。这些设备包括电视机、机顶盒和游戏机。

本文中描述的技术可以由计算设备702的这些各种配置支持,并且不限于本文中描述的技术的特定示例。例如,gpu分区管理器118和其他模块的功能也可以全部或部分地通过使用分布式系统来实现,诸如经由平台722通过“云”720来实现,如下所述。gpu分区管理器118还可以由平台722的主机设备实现,诸如由数据中心的一个或多个服务器实现。gpu分区管理器118还可以由如本文中描述的个体计算设备702或主机实现。

云720包括和/或表示用于资源724的平台722。平台722抽象云720的硬件(例如,服务器)和软件资源的基础功能。资源724可以包括在计算机处理在远离计算设备702的服务器上执行的同时可以利用的应用和/或数据。资源824还可以包括通过因特网和/或通过订户网络(诸如蜂窝或wi-fi网络)提供的服务。服务可以包括经由适当配置的虚拟机管理器模块(诸如包括gpu分区管理器118的虚拟机管理器模块)实现的虚拟化服务。

平台722可以抽象资源和功能以将计算设备702与其他计算设备连接。平台722还可以用于抽象资源的缩放来提供相应的规模级别以满足对经由平台722实现的资源724的需求。因此,在互连的设备实施例中,本文中描述的功能的实现可以分布在整个系统700中。例如,功能可以部分地在计算设备702上以及经由抽象云720的功能的平台722来实现。

示例实现

本文中描述的技术的示例实现包括但不限于以下示例中的一个或任何组合:

示例1.一种由主机设备实现的方法,方法包括:从gpu分区请求方获取针对具有图形处理单元(gpu)功能的虚拟机的请求,gpu功能由具有表示不同gpu能力的多个段的模型表示,并且请求通过指定不同gpu能力来请求gpu功能;响应于确定gpu的至少一部分可用于提供gpu功能,将gpu的所确定的可用部分分配给虚拟机,以将虚拟机配置为具有带有gpu功能的gpu分区;以及将具有带有gpu功能的gpu分区的虚拟机显露给gpu分区请求方。

示例2.如示例1所描述的方法,其中多个段包括以下至少一项:视频编码段,表示gpu从原始视频生成编码视频的能力;视频解码段,表示gpu播放编码视频和视频文件的能力;gpu随机存取存储器(ram)段,表示可用于gpu的存储器的量;或者gpu计算段,表示gpu能够执行的gpu处理的量。

示例3.如示例1所描述的方法,其中请求指定以下至少一项:针对不同gpu能力中的每个gpu能力的最小量;针对不同gpu能力中的每个gpu能力的优选量;或者针对不同gpu能力中的每个gpu能力的最大量。

示例4.如示例1所描述的方法,还包括向gpu分区请求方传送完成通知,完成通知指示gpu分区满足所指定的gpu能力的程度。

示例5.如示例4所描述的方法,其中完成通知指定以下至少一项:不同gpu能力中的每个gpu能力的要与gpu分区一起被提供的最小量;不同gpu能力中的每个gpu能力的要与gpu分区一起被提供的优选量;不同gpu能力中的每个gpu能力的要与gpu分区一起被提供的最大量。

示例6.如示例1所描述的方法,其中将虚拟机配置为具有gpu分区使得虚拟机能够向gpu的所分配的部分提供gpu输入数据,并且使得gpu的所分配的部分能够处理gpu输入数据以将经gpu处理的数据提供给虚拟机。

示例7.如示例6所描述的方法,其中将虚拟机配置为具有gpu分区包括生成虚拟设备以将gpu的所分配的部分的gpu功能供应给虚拟机。

示例8.如示例6所描述的方法,还包括将虚拟设备的输入和输出映射到gpu的所分配的部分的相应数据输入/输出(i/o)硬件工作队列。

示例9.如示例1所描述的方法,其中gpu分区请求方包括不同的虚拟机或客户端设备。

示例10.如示例1所描述的方法,其中确定包括向由主机设备保持的gpu驱动器查询相应gpu是否满足所指定的gpu能力。

示例11.如示例1所描述的方法,其中分配基于服务协议,服务协议限定gpu分区请求方被允许的不同gpu能力的量,并且gpu的所分配的部分以所限定的量向gpu分区提供gpu功能。

示例12.一种主机设备,包括:图形处理单元(gpu),用以供应gpu功能;gpu模型,利用指示不同gpu能力的多个段表示gpu功能;gpu驱动器,用以根据不同gpu能力指示由相应gpu提供的gpu功能;处理器;以及存储有指令的计算机可读介质,指令由处理器可执行以实现gpu分区管理器以执行包括以下的操作:通过向gpu驱动器查询相应gpu是否具有请求中所指定的不同gpu能力来确定gpu的至少一部分gpu能够处理针对gpu功能的请求;将gpu的所确定的部分分配给虚拟机以将虚拟机配置为具有带有gpu功能的gpu分区;以及将虚拟机显露给发送请求的gpu分区请求方。

示例13.如示例12所描述的主机设备,其中操作还包括向gpu分区请求方传送完成通知,完成通知指示gpu分区具有请求中所指定的不同gpu能力的程度。

示例14.如示例12所描述的主机设备,其中操作还包括:确定gpu无法处理针对gpu功能的附加请求;以及向发送附加请求的设备gpu分区请求方传送完成通知,完成通知指示附加请求未被完成。

示例15.如示例12所描述的主机设备,其中多个段包括:视频编码段,表示gpu从原始视频生成编码视频的能力;视频解码段,表示gpu播放编码视频和视频文件的能力;gpu随机存取存储器(ram)段,表示可用于gpu的存储器的量;以及gpu计算段,表示gpu能够执行的gpu处理的量。

示例16.如示例12所描述的主机设备,其中请求指定:针对不同gpu能力中的每个gpu能力的最小量;针对不同gpu能力中的每个gpu能力的优选量;以及针对不同gpu能力中的每个gpu能力的最大量。

示例17.一种由主机设备实现的方法,方法包括:在虚拟设备的输入处从虚拟机接收请求由分配给虚拟机的gpu的一部分供应的gpu功能的请求;基于虚拟设备输入到gpu部分的数据输入/输出(i/o)硬件工作队列的映射来确定与虚拟设备的输入相关联的gpu部分的数据i/o硬件工作队列;经由所确定的数据i/o硬件工作队列向gpu部分提供与请求一起被包括的gpu输入数据,以使得gpu部分能够使用所提供的gpu输入数据来供应所请求的gpu功能;由虚拟设备从gpu部分获取经gpu处理的数据,经gpu处理的数据由gpu部分供应的gpu功能而产生;以及由虚拟设备将经gpu处理的数据输出到虚拟机。

示例18.如示例17所描述的方法,还包括将gpu部分分配给虚拟机,以向虚拟机供应至少所请求的gpu功能。

示例19.如示例17所描述的方法,其中gpu部分基于gpu请求而被分配给虚拟机,gpu请求根据具有表示不同gpu能力的多个段的模型来标识由主机设备限定的gpu分区。

示例20.如示例17所描述的方法,其中经gpu处理的数据被提供给虚拟机所显露于的gpu分区请求方。

结论

尽管已经用特定于结构特征和/或方法动作的语言描述了技术,但是应当理解,所附权利要求中限定的技术方案不必限于所描述的具体特征或动作。而是,特定特征和动作被公开作为实现所要求保护的技术方案的示例形式。

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