虚拟化环境中的智能GPU调度的制作方法

文档序号:11160870阅读:587来源:国知局
虚拟化环境中的智能GPU调度的制造方法与工艺

在计算设备中,图形处理单元(GPU)可以通过提供可以快速地执行数学运算的电子电路来对中央处理单元(CPU)进行补充。为此,GPU利用了大量的并行性和许多并发线程。GPU的能力使得其有助于加速对视觉媒体和并行计算任务的处理。例如,GPU可以用于视频编码/解码、二维和三维游戏中的图形渲染、以及其他通用计算应用。如果可以克服在虚拟化GPU时涉及的复杂性,则可以将虚拟化技术应用于许多不同类型的计算平台上的图形处理单元。

附图说明

在本文中所描述的概念是作为示例而不是限制在附图中示出的。为了图示的简单和清楚,在附图中所描绘的元素不一定是按比例绘制的。在认为合适的地方,已经在附图之间重复了附图标记以指示相对应的或相似的元素。

图1是计算系统的至少一个实施例的简化的框图,该计算系统包括配置有如在本文中所公开的智能GPU调度的至少一个计算设备;

图2是图1的服务器计算设备的环境的至少一个实施例的简化的框图;

图3是图2的GPU调度器的环境的至少一个实施例的简化的框图;

图4是针对智能GPU调度的方法的至少一个实施例的简化的流程图,该方法可以由图1的计算设备中的一个或多个计算设备来执行;并且

图5是示出了针对图1的计算设备的至少一个实施例的用例的简化的时序图。

具体实施方式

尽管本公开的概念可以受到各种修改和可替代的形式的影响,但是其具体的实施例已经在附图中作为示例示出,并且将在本文中详细地描述。然而,应当理解的是,意图不在于将本公开的概念限于所公开的特定的形式,而相反地,目的是覆盖与本公开和所附权利要求一致的全部修改、等价物、和替代物。

在说明书中对“一个实施例”、“实施例”、“示例性实施例”等的引用指示所描述的实施例可以包括特定的特征、结构、或特性,但每个实施例可以或不一定包括该特定的特征、结构、或特性。此外,这样的短语非必须指的是相同的实施例。此外,当结合实施例来描述特定的特征、结构、或特性时,所主张的是结合其他实施例(无论其是否进行了明确地描述)实现这样的特征、结构、或特性也在本领域技术人员的知识范围内。额外地,应当理解的是,以“至少一个A、B和C”的形式包括在列表中的项目可以意味着(A);(B);(C);(A和B);(B和C);(A和C);或者(A、B和C)。类似地,以“A、B或C中的至少一个”的形式列出的项目可以意味着(A);(B);(C);(A和B);(B和C);(A和C);或者(A、B和C)。

在一些情况下,可以以硬件、固件、软件或其任何组合来实现所公开的实施例。此外,还可以将所公开的实施例实现为由一个或多个瞬时性或者非瞬时性机器可读(例如,计算机可读)存储介质所实行或存储在其上的指令,所述指令可以由一个或多个处理器来读取或执行。机器可读存储介质可以被实施为用于以能够由机器读取的形式存储或发送信息的任何存储设备、机制、或其他物理结构(例如,易失性或非易失性存储器、媒体盘、或其他介质设备)。

在附图中,可以以具体的布置和/或顺序来示出一些结构或方法特征。然而,应当理解的是,这样的具体的布置和/或顺序不是必需的。相反,在一些实施例中,可以以与在说明性附图中所示出的不同的方式和/或顺序来布置这些特征。额外地,将结构或方法特征包含在特定的附图中不意味着暗示在所有实施例中都需要这样的特征,相反,在一些实施例中,这样的特征可以不被包括,或者可以与其他特征进行组合。

现在参考图1,计算系统100的实施例包括客户端计算设备110和服务器计算设备142。客户端计算设备110和服务器计算设备142通信地耦合至一个或多个网络140。客户端计算设备110和服务器计算设备142中的一个或两者可以被配置为利用在本文中所公开的技术。由此,客户端计算设备110和服务器计算设备142中的一个或两者可以装备有图形处理单元126、152和虚拟化服务132、162,该虚拟化服务132、162可以提供包括GPU调度器模块138、176的GPU虚拟化。为了讨论的方便,可以在本文中使用“图形处理单元”或“GPU”来指图形处理单元、图形加速器、或其他类型的专用电子电路或设备,例如通用GPU(GPGPU)、视觉处理单元、加速处理单元(APU)、现场可编程门阵列(FPGA)、或者可以由计算设备110、142使用以加速图形任务和/或将受益于经加速的处理的其他计算操作的任何其他设备或电路。说明性的虚拟化服务132、162被配置成针对GPU126、152建立虚拟化环境,其包括多个不同的虚拟机(VM),使得本地图形驱动器在每一VM中运行。

说明性的GPU调度器模块138、176处理对由不同的VM发出以用于在GPU硬件(GPU 126、GPU 152)上执行的某些类型的GPU命令的调度。例如,GPU调度器模块138、176可以处理对特权命令的调度,而VM中的本机图形驱动器可以直接访问GPU 126、152的性能关键资源,例如帧缓冲器和命令缓冲器。如下文更加详细地描述的,GPU调度器模块138、176基于GPU命令的一个或多个属性、GPU命令缓冲器的依赖性、和/或其他决策标准来从多个可能的调度策略中动态地选择调度策略,并根据该动态地选择的调度策略来调度GPU命令。以该方式,GPU调度器模块138、176可以智能地改变适用于VM和/或GPU命令中的一个或多个的调度策略,以达到更高的效率或出于其他原因。作为示例,当不同的VM在运行不同类型的GPU工作负荷时(例如,一个VM上是3D任务,而另一VM上是视频编码任务),GPU调度器模块138、176可以实现按缓冲器的调度策略(例如,针对环形缓冲器的“每环形”的策略)而不是群调度策略,以提高性能或出于其他原因。如本文中所使用的,“工作负荷”可以指的是可以包括一个或多个GPU命令的一组GPU命令等。此外,GPU调度器模块138、176可以根据需要而切换至群调度策略以便提供跨缓冲器的同步,从而避免锁死的情况,或出于其他原因。

现在更加详细地参考客户端计算设备110,说明性的客户端计算设备110包括中央处理单元(CPU)112和图形处理单元126。CPU通常通过CPU存储器116与GPU存储器128之间的直接存储器访问来向GPU 126提交包括GPU命令的工作负荷。客户端计算设备110可以被实施为用于执行在本文中所描述的功能的任何类型的设备。例如,客户端计算设备110可以被实施为以下设备而不限于以下设备:智能电话、平板计算机、可穿戴计算设备、膝上型计算机、笔记本计算机、移动计算设备、蜂窝电话、手持设备、消息传送设备、车载远程信息处理设备、服务器计算机、工作站、分布式计算系统、多处理器系统、消费型电子设备、和/或被配置为执行在本文中所描述的功能的任何其他计算设备。如在图1中所示出的,客户端计算设备110还包括输入/输出子系统114、数据存储设备118、显示器120、通信子系统122、用户接口子系统124、操作系统130、虚拟化服务132、图形驱动器134、以及GPU调度器模块138。客户端计算设备110还包括GPU 126和GPU存储器128。在其他实施例中,客户端计算设备110可以包括其他的或额外的组件,例如通常在移动的和/或静止的计算机中可以找到的那些组件(例如,各种传感器和输入/输出设备)。额外地,在一些实施例中,说明性组件中的一个或多个可以并入另一个组件中或者以其他方式形成另一个组件的一部分。例如,在一些实施中,CPU存储器116或其部分可以并入CPU 112中和/或GPU存储器128可以并入GPU 126中。客户端计算设备110的组件可以被实施为软件、固件、硬件、或软件和硬件的组合。

CPU 112可以被实施为能够执行在本文中所描述的功能的任何类型的处理器。例如,CPU 112可以被实施为单核或多核处理器、数字信号处理器、微控制器、或其他的处理器或处理/控制电路。GPU 126可以被实施为能够执行在本文中所描述的功能的任何类型的图形处理单元。例如,GPU126可以被实施为单核或多核处理器、数字信号处理器、微控制器、浮点加速器、协处理器、或者被设计为快速地操纵和改变存储器中的数据的其他处理器或处理/控制电路。为了简化附图和描述,参考下文中所描述的服务器计算设备142更加详细地示出并描述了客户端计算设备110的一些方面。例如,参考服务器计算设备142的对应的组件更加详细地描述了GPU 126、GPU存储器128、以及GPU调度器模块138的方面。通常而言,对计算设备110、142中的一个计算设备的组件的描述等同地适用于其他计算设备110、142的类似的组件。

客户端计算设备110的CPU存储器116和GPU存储器128可以各自被实施为能够执行在本文中所描述的功能的任何类型的易失性或非易失性存储器或数据存储。在操作中,存储器116可以存储在计算设备110的操作期间所使用的各种数据和软件,例如操作系统、应用、程序、库、和驱动器。例如,CPU存储器116的部分至少暂时地存储命令缓冲器和由CPU112所创建的GPU命令,而GPU存储器128的部分至少暂时地存储通过例如直接存储器访问而从CPU存储器116接收的GPU命令。

CPU存储器116例如经由I/O子系统114通信地耦合至CPU 112,而GPU存储器128类似地通信地耦合至GPU 126。I/O子系统114可以被实施为电路和/或组件以促进与CPU 112、CPU存储器116、GPU 126、GPU存储器128、以及客户端计算设备110的其他组件的输入/输出操作。例如,I/O子系统114可以被实施为或者以其他方式包括存储器控制器集线器、输入/输出控制集线器、固件设备、通信链路(即,点对点链路、总线链路、线、线缆、光导、印刷电路板迹线等)和/或其他组件和子系统,以促进输入/输出操作。在一些实施例中,I/O子系统114可以形成片上系统(SoC)的一部分,并且与CPU 112、CPU存储器116、GPU 126、GPU存储器128、和/或计算设备110的其他组件一起并入到单个集成电路芯片上。

数据存储设备118可以被实施为针对短期或长期数据存储而配置的任何类型的设备,例如存储器设备和电路、存储器卡、硬盘驱动器、固态驱动器、或其他数据存储设备。数据存储设备118可以包括存储针对计算设备110的数据和固件代码的系统分区。数据存储设备118还可以包括存储针对计算设备110的操作系统130的数据文件和可执行文件的操作系统分区。

显示器120可以被实施为能够显示数字信息的任何类型的显示器,例如液晶显示器(LCD)、发光二极管(LED)、等离子显示器、阴极射线管(CRT)、或其他类型的显示设备。在一些实施例中,显示器120可以耦合至触摸屏或其他用户输入设备以允许与计算设备110的用户交互。显示器120可以是用户接口子系统124的一部分。用户接口子系统124可以包括用于促进与计算设备110的用户交互的多个额外的设备,包括物理或虚拟控制按钮或按键、麦克风、扬声器、单向或双向静止的和/或视频相机等。用户接口子系统124还可以包括诸如运动传感器、接近度传感器、以及眼睛追踪设备之类的设备,所述设备可以被配置为检测、捕获、和处理涉及计算设备110的各种其他形式的人类交互。

计算设备110还包括通信子系统122,其可以被实施为能够使能计算设备110与其他电子设备之间的通信的任何通信电路、设备、或其集合。通信子系统122可以被配置为使用通信技术(例如,无线通信或有线通信)和相关联的协议(例如,以太网、WiMAX、3G/LTE等)中的一个或多个来实现这样的通信。通信子系统122可以被实施为网络适配器,包括无线网络适配器。

说明性的计算设备110还包括多个计算机程序组件,例如虚拟化服务132、图形驱动器134、操作系统130、以及GPU调度器模块138。操作系统130促进诸如GPU调度器模块138和虚拟化服务132之类的计算机应用与计算设备110的硬件组件之间的通信等。操作系统130可以被实施为能够执行在本文中所描述的功能的任何操作系统,例如微软公司的WINDOWS、谷歌有限公司的ANDROID等的一个版本。如在本文中所使用的,“计算机应用”可以指终端用户通过其可以与计算设备110进行交互的“用户空间”软件和/或硬件应用,和/或在其中编程代码可以与计算设备110的硬件组件直接进行交互的“系统空间”等。计算设备110的系统空间组件可以具有比计算设备110的用户空间组件更大的特权。

在说明性的实施例中,图形驱动器134处理计算机应用与硬件组件之间的通信,例如显示器120。在一些实施例中,图形驱动器134可以包括“通用”驱动器,其例如可以将与设备无关的图形渲染任务传送至多种不同的硬件组件(例如,不同类型的显示器);以及“设备专用的”驱动器,其将与设备无关的任务转换成特定的硬件组件可以执行以完成所请求的任务的命令。在其他实施例中,通用驱动器和设备专用的驱动器的部分可以被组合到单个驱动器组件(例如,图形驱动器134)中。在一些实施例中,图形驱动器134的部分可以被包括在操作系统130中。说明性地,图形驱动器134是显示驱动器;然而,可以在其他应用(例如,可以被卸载到GPU 126上的任何类型的任务)中使用所公开的GPU调度器模块138的方面(例如,在GPU 126被配置为GPGPU的情况下)。

说明性的虚拟化服务132被实施为一种类型的管理程序,其可以由引导装载程序直接从固件启动或者由操作系统130启动。虚拟化服务132可以被实施为“瘦的”管理程序或者更传统的管理程序、虚拟机管理器(VMM)、或类似的虚拟化平台。例如,虚拟化服务132可以被实施为基于XEN(类型I)的VMM、基于内核的虚拟机(KVM)(类型II)的VMM、或者基于WINDOWS的VMM。在一些实施例中,虚拟化服务132可以被实施为“裸金属”管理程序,其可以直接从系统硬件中执行。虚拟化服务132被实施为在特定的GPU 126中促进和管理对计算设备110的共享资源的虚拟化的特权软件或固件组件。由此,虚拟化服务132以计算设备110的较高特权的系统模式来执行,其中虚拟化服务132可以大体上完全控制GPU 126和/或计算设备110的其他硬件资源。如上所述,虚拟化服务132可以建立针对GPU 126的虚拟化环境,其包括多个虚拟机,其中每个虚拟机都运行图形驱动器134的其自身的实例。GPU虚拟化服务的说明性的示例包括Intel公司的XenGT和nVidia公司的GRID VGZ。GPU调度器模块138可以被实施为虚拟化服务132的组件。在操作中,GPU调度器模块138与VM中的图形驱动器134的虚拟实例进行通信,以如在下文中所描述的那样控制GPU命令向GPU 126的提交。

现在更加详细地参考服务器计算设备142,服务器计算设备142可以被实施为用于执行在本文中所描述的功能的任何类型的设备。例如,服务器计算设备142可以被实施为以下设备而不限于以下设备:智能电话、平板计算机、可穿戴计算设备、膝上型计算机、笔记本计算机、移动计算设备、蜂窝电话、手持设备、消息传送设备、车载远程信息处理设备、服务器计算机、工作站、分布式计算系统、多处理器系统、消费型电子设备、和/或被配置为执行在本文中所描述的功能的任何其他计算设备。可以类似地实施具有与在上文中所描述的客户端计算设备110的组件相同或类似的服务器计算设备142的组件,并且从而,不在这里对描述进行重复。此外,应该理解的是,客户端计算设备110可以包括服务器计算设备142的组件中的任何一个组件,并且以下对这样的组件的描述等同地适用于客户端计算设备110的类似的组件。

说明性的服务器计算设备142包括CPU 144、输入/输出子系统146、直接存储器访问(DMA)子系统148、CPU存储器150、操作系统160、虚拟化服务162、图形驱动器模块164、数据存储设备166、显示器168、通信子系统170、用户接口子系统172、以及GPU调度器模块176。服务器计算设备142还包括GPU 152、渲染引擎154、GPU存储器156、以及命令缓冲器158。在其他实施例中,服务器计算设备142可以包括其他的或额外的组件,例如通常在移动的和/或固定的计算机中发现的那些组件(例如,各种传感器和输入/输出设备)。额外地,在一些实施例中,说明性的组件中的一个或多个组件可以并入到另一个组件中或者以其他方式形成另一个组件的一部分。服务器计算设备142的组件可以被实施为软件、固件、硬件、或软件和硬件的组合。

GPU 152包括多个渲染引擎154,其可以被实施为GPU 152的硬件执行单元,例如,处理器内核阵列或其中的每个都可以执行多个并行的线程的并行处理器。GPU 152可以被实施为外围设备(例如,在分立的图形卡上),或者可以位于CPU母板上或在CPU管芯上。渲染引擎154可以各自被配置为处理具体的类型的GPU任务。例如,在一些实施中,多个不同的渲染引擎154可以被配置为独立地处理3D渲染任务、位块传送器(blitter)(例如,2D图形)、视频、和视频编码/解码任务。

CPU存储器150的部分可以至少暂时地存储命令缓冲器和由CPU 144所创建的GPU命令,并且GPU存储器156的部分至少暂时地将GPU命令存储在命令缓冲器158中。GPU命令由CPU 144通过直接存储器访问子系统148传输至命令缓冲器158。直接存储器访问(DMA)子系统148促进CPU存储器150与GPU存储器156之间的数据传输。在一些实施例中,DMA子系统148允许GPU 152直接地访问CPU存储器150并且允许CPU144直接地访问GPU存储器156。DMA子系统148可以被实施为DMA控制器或DMA“引擎”,例如外围组件互联连(PCI)设备、外围组件互连-快速(PCI-快速)设备、以及I/O加速技术(I/OAT)设备等。

说明性的命令缓冲器158被实施为环形缓冲器,并且环形缓冲器中的每一个可以将许多批缓冲器链接在一起。在一些实施例中,计算设备142针对渲染引擎154中的每个渲染引擎实现不同的命令缓冲器(例如,针对3D、位块传送器、视频、以及视频编码/解码引擎154中的每个引擎的单独的环形缓冲器)。环形缓冲器是可以对于例如异步输入-输出操作有用的一类先进/先出(FIFO)的数据结构。可以在其他实施例中使用其他类型的FIFO的数据结构、或其他合适的类型的数据结构。

通过虚拟化服务162,命令缓冲器158被虚拟化以使得由虚拟化服务162所建立的每个VM包括一组命令缓冲器158(例如,每个VM中的3D、位块传送器、视频、以及视频编码/解码命令缓冲器),其中每个缓冲器由不同的命令解析器并行地解析(例如,3D、位块传送器、视频、以及视频编码/解码命令解析器)。当新的VM被调度用于访问GPU 152时,GPU调度器模块176可以进行上下文切换。响应于该上下文切换,GPU 152可以提供不同的一组命令缓冲器(例如,与新的VM相关联的命令缓冲器)。

说明性的GPU调度器模块176包括命令扫描器模块178、命令数据库180、仲裁器模块182、以及多个调度策略184。GPU调度器模块176、命令扫描器模块178、命令数据库180、以及仲裁器模块182可以被实现为任何类型的处理器可执行的代码、模块和/或数据结构、或其结合。在下文中参考图3更加详细地描述了命令扫描器模块178、命令数据库180、以及仲裁器模块182的方面。

说明性地,调度策略184包括每环形的调度策略186以及群调度策略188。每环形的调度策略186可以允许环形缓冲器相互独立地进行上下文切换,由此如果来自不同的VM的GPU命令将使用不同的渲染引擎154,则允许同时地调度来自不同的VM的GPU命令。然而,如果针对不同的缓冲器的两个GPU命令各自取决于由其他命令用信号发送的条件,或者如果针对不同的缓冲器的两个命令取决于所满足的相同的条件,则使用每环形的调度策略则可能导致锁死问题。针对VM的一个环形缓冲器的一个命令对针对由相同VM的另一个环形缓冲器的另一命令用信号发送的结果的依赖性可以通过在命令缓冲器中的同步或“等待”命令的出现以及所述等待命令所依赖的条件来证实。该类型的命令依赖性可以被称为“跨环形同步”或者更加概括地被称为(针对相同的VM的不同的缓冲器的GPU命令的)跨缓冲器依赖或跨缓冲器同步。

作为示例,假定每环形的调度策略186从第一虚拟机VM1的3D环形缓冲器接收并调度GPU工作负荷以用于由3D引擎154执行。每环形的调度策略186还从另一个虚拟机VM2的位块传送器(blitter)环形缓冲器接收GPU工作负荷。按照每环形的调度策略,可以将VM2位块传送器任务调度在位块传送器引擎154上,这是因为位块传送器引擎154没有由VM1使用。VM1 3D工作负荷包括与3D渲染任务有关的多个GPU命令,但是3D渲染任务必须与需要调度在位块传送器引擎154上的VM1的另一个任务进行同步。这可以通过VM1 3D工作负荷中的等待命令来证实,其中,等待命令取决于条件值COND1。值COND1由VM1位块传送器任务用信号发送。然而,VM1位块传送器工作负荷还包括取决于条件值COND2的等待命令,但是COND2由VM1 3D任务用信号发送。VM1位块传送器任务必须等直到VM2位块传送器任务完成为止才能被调度。VM1 3D任务不能够完成直到VM1位块传送器任务用信号发送COND1为止,并且VM1位块传送器任务不能够完成直到VM1 3D任务用信号发送COND2为止。因为,根据每环形的调度策略186,两个VM1任务是在不同的时刻被调度的(例如,由于每环形的策略已经允许VM2位块传送器命令因为位块传送器引擎154可用而被调度的事实),所以导致了锁死的情况,其中GPU 152的处理将只得中止。即使GPU 152被配置有命令抢先(preemption)支持(其中,等待命令可以在一些暂停时段之后抢先),如果两个不同的命令恰好使用相同的COND,则VM1中的等待命令可能由于从VM2用信号发送的COND值而被错误地完成。

群调度策略188可以需要VM中的所有环形缓冲器一起上下文切换,而不是如每环形的调度策略186那样独立地进行。群调度策略188可以用于克服跨环形同步问题。继续上文中的示例,假定使用群调度策略188而不是每环形的调度策略186。在该情况下,群调度策略188一起调度VM1 3D命令和VM1位块传送器命令(分别在3D和位块传送器引擎154上)。当VM1位块传送器命令用信号发送COND1时,VM1 3D命令可以继续。当VM1 3D命令用信号发送COND2时,VM1位块传送器命令可以继续。来自VM2的命令在其能被调度之前,必须等待来自所有VM1环形缓冲器的所有VM1命令完成。

然而,在GPU虚拟化中群调度策略188可能是低效的。例如,假定GPU调度器模块176调度VM1工作负荷在3D引擎154上运行,并且在其他VM1缓冲器中的任何缓冲器上没有其他工作负荷。即使视频引擎154(例如)没有在由VM1使用(因为在VM1视频缓冲器中没有GPU命令),根据群调度策略188,直到VM1 3D任务完成为止才能使用视频引擎154来运行VM2视频任务。

现在参考图2,在一些实施例中,服务器计算设备142在操作期间建立了环境200。环境200包括特权虚拟环境210、GPU调度器模块214、图形驱动器模块216、命令缓冲器220、命令解析器222、图形驱动器模块218、虚拟化服务226、以及GPU硬件152。环境200的各种模块可以被实施为硬件、固件、软件、或其组合。说明性的环境200包括虚拟化服务162的执行实例(虚拟化服务226),其建立了特权虚拟环境210和“N”个虚拟机212(其中,N是正整数)。特权虚拟环境(在一些实现中,其可以被称为“域0”)包括GPU调度器模块176的执行实例(GPU调度器模块214)和图形驱动器模块164的执行实例(图形驱动器模块216)。VM 212中的每个VM包括图形驱动器模块164的执行实例(图形驱动器模块218)、每命令缓冲器158的实例(命令缓冲器220)、以及命令解析器222。每个VM的命令缓冲器220包括例如3D、位块传送器、视频、和视频编码/解码环形缓冲器。图形驱动器模块216、218可以各自向GPU硬件152直接地提交非特权命令230、232。特权GPU命令224由GPU调度器模块214处理(例如,利用陷阱(trap)和仿真技术),并且使用如在本文中所描述的动态混合调度方法提交至GPU 152。

GPU调度器模块214评估所有VM的所有命令缓冲器中的GPU命令,并且响应于对GPU命令的评估的输出,从多个不同的调度策略中动态地选择调度策略。根据动态地选择的调度策略,GPU调度器模块214调度GPU命令中的至少一个GPU命令以由GPU处理。以下是由GPU调度器模块214所执行的一些“动态的”和/或“混合的”调度示例。GPU调度器模块214可以根据两个不同的调度策略来调度两个不同的VM的GPU命令。GPU调度器模块214可以将适用于一个或多个VM的调度策略从每环形的调度策略切换至群调度策略,例如,响应于检测到同一虚拟机的不同的命令缓冲器中的两个GPU命令之间的跨缓冲器依赖性。在针对一个VM从每环形的调度策略切换至群调度策略之后,GPU调度器模块214可以评估不同的VM的GPU命令,并且根据不同的调度策略来调度不同VM的GPU命令(例如,GPU调度模块214可以针对不同的VM切换回每环形的调度策略,因此在一个VM中运行群调度策略而同时在另一VM中运行每环形的调度策略)。在一些实施例中,GPU调度器可以记录所有虚拟机的所有命令缓冲器间的跨缓冲器依赖性的出现,并且如果在特定数量的命令缓冲器中或者在特定的时间段内未检测到跨缓冲器依赖性,或者更加具体地,基于跨缓冲器依赖性出现的频率,来改变调度策略(例如,从每环形的策略改变成群调度策略,或反之亦然)。环境200的各种模块和组件(例如,GPU调度器模块214)可以被实施为硬件、固件、软件、或其结合。额外地,在一些实施例中,环境200的模块中的一些或全部模块可以与其他模块或软件/固件结构集成在一起或者形成其部分。

在一些实施例中,为了触发GPU调度器模块214的操作,图形驱动器模块216、218将GPU命令224排队到命令缓冲器220中,并且接着将存储器映射的输入-输出(MMIO)寄存器(踪迹)写入以发起由命令解析器222对排列的命令的解析。在虚拟的环境(例如,环境200)中,捕获(trap)到最后的MMIO写入,使得GPU调度器模块214可以执行对VM的GPU命令的调度。

现在参考图3,在一些实施例中,服务器计算设备142在操作期间建立环境300。环境300包括GPU调度器模块214、命令扫描器模块314、316、命令数据库318、320、每环形的调度策略322、群调度策略324、以及仲裁器模块326。环境300的各种模块可以被实施为硬件、固件、软件、或其组合。说明性的环境300包括命令扫描器模块178的执行实例(命令扫描器模块314、316)(例如,每个VM一个实例)、命令数据库318、320的实例(例如,每个VM一个数据库)、仲裁器模块182的执行实例(仲裁器模块326)、每环形的调度策略186的实例(每环形的调度策略322)、以及群调度策略188的实例(群调度策略324)。命令扫描器模块314、316中的每个命令扫描器模块扫描其相应的VM的所有命令缓冲器中的经排队的GPU命令。例如,VM1命令扫描器模块314扫描包含在VM1命令缓冲器220中的GPU命令(例如,其包括针对VM1的多个环形缓冲器,例如3D、位块传送器、视频、以及视频编码/解码缓冲器)。类似的,VM N命令扫描器模块316扫描包含在VM N命令缓冲器312中的GPU命令(例如,其包括针对VM N的多个环形缓冲器,例如3D、位块传送器、视频、以及视频编码/解码缓冲器)。

每个命令扫描器模块314、316产生指示在同一虚拟机的不同命令缓冲器中的GPU命令之间的跨缓冲器依赖性的数据、创建命令数据库318、320、并且将指示命令类型的数据存储在命令数据库318、320中。即,每个命令扫描器模块314、316识别其相应的VM的GPU命令中的跨缓冲器依赖性,并且将指示针对其相应的VM的依赖性的数据存储在命令数据库318、320中。命令扫描器模块314、316可以确定针对VM的GPU命令中的每个GPU命令来确定命令类型,并且也将指示命令类型的数据存储在命令数据库318、320中。命令类型可以对应于待由GPU 152执行的任务的类型或者对应于待执行任务(例如3D、位块传送器、视频、视频编码/解码)的特定的渲染引擎154。

如果命令扫描器模块314、316确定工作负荷提交包括跨缓冲器依赖性,则命令扫描器模块314、316可以将标记与具体的工作负荷提交相关联。为此,命令扫描器可以对该组GPU命令执行在位手段(in-place instrumentation)。在命令缓冲器220、312被实施为环形缓冲器的该情况下,命令扫描器模块314、316可以识别跨环形同步基元(primitive)并将与存在或不存在跨环形同步基元相关的数据存储在命令数据库318、320中。例如,命令扫描器模块314、316可以确定是否存在任何跨环形的同步基元,并且如果存在任何跨环形的同步基元,则针对相关联的命令缓冲器220、312设置标记(例如,REQ_GANG)。接着,仲裁器模块326可以检查该标记,并且如果该标记被有效地设置(例如,设置成REQ_GANG=YES),则仲裁器模块326发起从每环形的调度策略322到群调度策略324的切换。为了从群调度策略324切换回每环形的调度策略322,仲裁器模块326可以使用经验策略,例如:如果在所有VM中的接下来的N个命令缓冲器中都未检测到跨环形同步基元,则切换回每环形的调度策略322。如在本文中所使用的,“基元”可以指由计算平台所提供的简单的软件机制(例如,操作系统)等,并且可以包括较低等级的机制(例如,原子操作、存储器屏障、自旋锁、上下文切换等)。作为示例,可以由计算平台来提供发信号命令(例如,发“等待”命令信号),以便针对由多个环形缓冲器所分享的对象来将跨环形执行序列化。

在一些实施例中,命令扫描器模块314、316可以在其相应的VM的不同的命令缓冲器之间建立直接依赖性。为此,命令扫描器模块314、316可以用依赖性和命令类型信息来填充VM的命令数据库318、320中的图形数据结构。以下的代码示例1和2示出了针对图形数据结构的伪代码的示例,所述伪代码可以由VM1和VM2的命令扫描器模块314、316创建并且存储在VM1和VM2的命令数据库318、320中。

代码示例1.针对VM1的命令数据库。

在代码示例1中,Buf11、Buf12、Buf13、Buf14是VM1的四个环形缓冲器。代码示例1指定了由随后的依赖性信息(如果有的话)管理的缓冲器类型或命令类型(例如,3D、位块传送器)。例如,Buf11中的3D命令对Buf12中的位块传送器命令具有依赖性,其在于Buf11需要等待Buf12中的位块传送器命令来用信号发送COND1。在代码示例1中,Buf13和Buf14可以被识别为没有依赖性。

代码示例2.针对VM1的命令数据库。

在代码示例2中,Buf21和Buf22是VM2的两个缓冲器。代码示例2示出了依赖信息可以由命令扫描器模块314、316以高粒度等级构建。例如,一些缓冲器可以被协同调度,而其他的缓冲器是每环形调度的。以该方式,命令扫描器模块314、316可以使得能够实现模式灵活的调度策略。作为示例,如果VM1提交仅具有3D/位块传送器依赖性的命令缓冲器,但VM2提交具有视频工作负荷的命令缓冲器,则GPU调度器模块214可以使用群调度策略来将3D/位块传送器缓冲器协同调度至VM1,而使用每环形的调度策略来调度VM2的视频工作负荷。

在一些实施例中,命令扫描器模块314、316可以将阈值测试或值引入命令数据库318、320中,以基于当前的缓冲器活动来进一步控制策略切换。例如,如果频繁地观察到跨环形的同步基元(例如,在许多命令缓冲器中或者在一段时间内的许多观察中),则这可以指示是本机图形驱动器134被设计来以正常过程使用那些基元。因此,命令扫描器模块314、316可以使用阈值来防止实现群调度策略188,直到已经达到或者超过阈值(例如,所检测的同步基元的数目)之后为止。

仲裁器模块326评估所有虚拟机的命令数据库并且基于对命令数据库318、320中的所有命令数据库的评估来选择针对虚拟机中的至少一个虚拟机的调度策略。仲裁器模块326利用命令数据库318、320和调度策略322、324来动态地选择针对一个或多个GPU命令和/或VM的调度策略。为此,考虑到调度策略322、324,仲裁器模块326分析命令数据库318、320中的信息。作为该分析的结果,仲裁器模块326可以发起从每环形的调度策略322到群调度策略324的切换或者从群调度策略324到每环形的调度策略322的切换。在从每环形的调度策略322切换至群调度策略324时,仲裁器模块326可以根据需要发起会合(rendezvous)过程以等待所有环形缓冲器变得空闲。

现在参考图4,示出了用于动态地选择针对GPU提交的调度策略的方法400的示例。方法400的部分可以由计算设备110或计算设备142的硬件、固件和/或软件来执行;例如,由CPU 112、144和GPU 126、152来执行。在框410处,计算设备110、142从VM接收GPU提交,其中VM是由计算设备110、142的GPU虚拟化服务所建立的多个VM中的一个VM,并且VM具有多个不同的命令缓冲器和一个本机图形驱动器。所述提交包括来自VM的不同的命令缓冲器的GPU命令。在框412处,计算设备110、142扫描关于所述提交的GPU命令。这样做时,计算设备110、142检查GPU命令的语义以确定命令类型(例如,哪一个引擎154应该处理命令:3D、位块传送器、视频或视频编码/解码)和/或以确定是否存在任何跨缓冲器依赖性(例如,是否存在任何跨环形的同步基元)。

在框414处,计算设备110、142识别跨缓冲器依赖性(如果存在的话)。在框416处,如果识别出跨缓冲器依赖性,则计算设备110、142将标记(例如,REQ_GANG=YES)与VM的提交相关联。如果没有识别出跨缓冲器依赖性,则在框418处计算设备110、142继续扫描在来自VM的提交中的另一个GPU命令(如果该提交包含待扫描的另一个命令)。如果存在待扫描的另一个GPU命令,则计算设备110、142返回至框412。如果在该提交中不存在需要扫描的其他GPU命令,则在框420处计算设备110、142继续建立针对VM的命令数据库。在框424处,计算设备110、142将配备有任何跨缓冲器依赖性信息和/或任何命令类型信息(例如,在框412-416处所执行的扫描过程的输出)的GPU命令存储在命令数据库中。

在框426处,计算设备110、142基于包含在命令数据库和可用的调度策略(其包括例如每环形的调度策略和群调度策略)中的信息来选择调度策略。为此,计算设备110、142可以执行编程逻辑(例如,布尔逻辑)来确定是否已经发生条件(例如,跨缓冲器依赖性存在或不存在、特定数目或频率的跨缓冲器依赖性存在或不存在),并且基于指定的条件的存在或不存在来选择策略。在框428处,计算设备110、142确定是否需要改变当前的调度策略。为此,计算设备110、142可以将在框426处所选择的策略与当前生效的策略进行比较,并且如果需要改变策略,则在框430处发起必要的动作来实现新的策略(例如,根据需要的会合过程)。在框432处,计算设备110、142可以更新当前的调度策略。例如,如上所述,如果计算设备110、142注意到在一段时间内出现了许多跨缓冲器依赖性,则计算设备110、142可以更新群调度策略,以使得该群调度策略仅仅在已经检测到某阈值数量的跨缓冲器依赖之后被实现。计算设备110、142可以将经更新的策略存储在例如数据存储设备118、166中。

现在参考图5,示出了在本文中所公开的动态地选择的、混合GPU调度方法的实现的示例500。在示例500中,计算设备110、142已经识别出VM Buf11(3D)缓冲器和VM1Buf12(位块传送器)缓冲器之间的跨缓冲器依赖性。跨缓冲器依赖性由“等待COND1”和“用信号发送COND1”同步基元来指示。作为结果,计算设备110、142实现了针对VM1的群调度策略。然而,因为相互依赖性仅仅在针对VM1的3D和位块传送器缓冲器之间,并且不存在针对视频引擎154的引擎间依赖性,所以计算设备110、142针对视频引擎154而实现每环形的调度。作为结果,分别地,VM2Buf21和VM2Buf22视频负荷由GPU 152的视频引擎154处理,而3D和位块传送器引擎154处理VM1Buf11和Buf12工作负荷。此外,一旦移除了依赖性条件,计算设备110、142就返回至3D和位块传送器引擎154上的每环形的调度。作为结果,VM1Buf13和VM1Buf14工作负荷可以分别在3D和位块传送器引擎154上同时进行。

示例

在下文中提供了在本文中所公开的技术的说明性示例。所述技术的实施例可以包括在下文中所描述的示例中的任何一个或多个、及其任何组合。

示例1包括用于调度针对虚拟化的图形处理单元(GPU)的工作负荷提交的计算设备。所述计算设备包括用于建立包括多个虚拟机的虚拟化环境的虚拟化服务,其中,所述虚拟机中的每个虚拟机包括用于与所述GPU进行通信的图形驱动器以及用于存储GPU命令的多个命令缓冲器。所述计算设备还包括GPU调度器模块,其用于:评估所有虚拟机的所有命令缓冲器中的所述GPU命令;响应于对所述GPU命令的评估,从多个不同的调度策略中动态地选择调度策略;以及根据动态地选择的调度策略来调度所述GPU命令中的至少一个GPU命令,以用于由所述GPU进行处理。

示例2包括示例1的主题,并且包括命令扫描器模块,所述命令扫描器模块用于:扫描虚拟机的所述所有命令缓冲器中的所述GPU命令、生成指示同一虚拟机的不同的命令缓冲器中的GPU命令之间的跨缓冲器依赖性的数据、并且基于指示跨缓冲器依赖性的所述数据而动态地选择所述调度策略。

示例3包括示例1或示例2的主题,并且包括命令扫描器模块,所述命令扫描器模块用于:扫描虚拟机的所有命令缓冲器中的GPU命令、确定针对所述GPU命令中的每个GPU命令的命令类型、并且基于GPU命令的命令类型而动态地选择针对GPU命令的所述调度策略。

示例4包括前述示例中的任何一个示例的主题,其中GPU调度器用于:根据动态地选择的调度策略来调度所述虚拟机中一个虚拟机的GPU命令,并且根据不同的调度策略来调度所述虚拟机中的另一个虚拟机的GPU命令。

示例5包括前述示例中的任何一个示例的主题,其中所述GPU调度器模块用于响应于检测到同一虚拟机的不同的命令缓冲器中的两个GPU命令之间的跨缓冲器依赖性,而将所述调度策略从每环形的调度策略切换至群调度策略。

示例6包括示例5的主题,其中,所述GPU调度器模块用于:评估不同的虚拟机的GPU命令,并且根据不是群调度策略的调度策略来调度所述不同的虚拟机的GPU命令。

示例7包括示例6的主题,其中,所述GPU调度器模块用于根据每环形的调度策略来调度所述不同的虚拟机的GPU命令。

示例8包括示例1、5或6中的任何一个示例的主题,其中,所述命令缓冲器中的每个命令缓冲器被实施为环形缓冲器,并且所述GPU调度器模块用于:针对跨环形同步基元来对虚拟机的GPU命令进行扫描,并且基于存在或不存在跨环形的同步基元来选择针对所述虚拟机的GPU命令的所述调度策略。

示例9包括示例1、5或6中的任何一个示例的主题,其中,所述GPU调度器模块用于基于对所述GPU命令的所述评估的输出,而动态地选择针对不同的虚拟机的不同的调度策略。

示例10包括示例1、5或6中的任何一个示例的主题,并且包括针对所述虚拟机中的每个虚拟机的命令扫描器模块,每个命令扫描器模块用于创建包括指示所述虚拟机的所述命令缓冲器之间的依赖性的数据的命令数据库。

示例11包括示例1、5或6中的任何一个示例的主题,并且包括仲裁器模块,所述仲裁器模块用于:评估所有虚拟机的所述命令数据库,并且基于对所述所有命令数据库的评估,而选择针对所述虚拟机中的至少一个虚拟机的所述调度策略。

示例12包括示例1、5或6中的任何一个示例的主题,其中,所述GPU调度器模块用于:扫描虚拟机的所有命令缓冲器中的所述GPU命令、检测同一虚拟机的不同的命令缓冲器中的GPU命令之间的跨缓冲器依赖性、确定在一段时间内跨缓冲器依赖性出现的频率、并且基于所述跨缓冲器依赖性出现的所述频率来改变所述调度策略。

示例13包括示例1、5或6中的任何一个示例的主题,其中,所述GPU调度器模块用于:监测所有虚拟机的所有命令缓冲器之间的跨缓冲器依赖性的出现,并且如果在经选择的数量的命令缓冲器中没有检测到跨缓冲器依赖性,则将所述调度策略从每环形的策略改变至群策略。

示例14包括用于调度针对虚拟化的图形处理单元(GPU)的工作负荷提交的方法,所述方法包括:建立包括多个虚拟机的虚拟化的环境,其中所述虚拟机中的每个虚拟机包括用于与GPU进行通信的图形驱动器以及用于存储GPU命令的多个命令缓冲器;评估所有虚拟机的所有命令缓冲器中的GPU命令;响应于对所述GPU命令的评估的输出,从多个不同的调度策略中动态地选择调度策略;以及根据动态地选择的调度策略来调度所述GPU命令中的至少一个GPU命令,以用于由所述GPU进行处理。

示例15包括示例14的主题,并且包括:扫描虚拟机的所有命令缓冲器中的GPU命令、生成指示同一虚拟机的不同的命令缓冲器中的GPU命令之间的跨缓冲器依赖性的数据、并且基于指示跨缓冲器依赖性的所述数据而动态地选择所述调度策略。

示例16包括示例14的主题,并且包括:扫描虚拟机的所有命令缓冲器中的GPU命令,确定针对所述GPU命令中的每个GPU命令的命令类型、并且基于GPU命令的命令类型而动态地选择针对GPU命令的所述调度策略。

示例17包括示例14的主题,并且包括:根据动态地选择的调度策略来调度所述虚拟机中一个虚拟机的GPU命令,并且根据不同的调度策略来调度所述虚拟机中的另一个虚拟机的GPU命令。

示例18包括示例14的主题,并且包括响应于检测到同一虚拟机的不同的命令缓冲器中的两个GPU命令之间的跨缓冲器依赖性,而将所述调度策略从每环形的调度策略切换至群调度策略。

示例19包括示例18的主题,并且包括:评估不同的虚拟机的GPU命令,并且根据不是群调度策略的不同的调度策略来调度所述不同的虚拟机的所述GPU命令。

示例20包括示例19的主题,并且包括根据每环形的调度策略来调度所述不同的虚拟机的所述GPU命令。

示例21包括示例14的主题,其中,命令缓冲器中的每个命令缓冲器被实施为环形缓冲器,并且所述方法包括:针对跨环形同步基元来对虚拟机的GPU命令进行扫描,并且基于存在或不存在跨环形的同步基元来选择针对所述虚拟机的GPU命令的所述调度策略。

示例22包括示例14的主题,并且包括基于对所述GPU命令的所述评估的所述输出,而动态地选择针对不同的虚拟机的不同的调度策略。

示例23包括示例14的主题,并且包括针对所述虚拟机中的每个虚拟机,创建包括指示所述虚拟机的所述命令缓冲器之间的依赖性的数据的命令数据库。

示例24包括示例23的主题,并且包括:评估所有虚拟机的所述命令数据库,以及基于对所有命令数据库的评估来选择针对所述虚拟机中的至少一个虚拟机的所述调度策略。

示例25包括示例14的主题,并且包括:扫描虚拟机的所有命令缓冲器中的所述GPU命令、检测同一虚拟机的不同的命令缓冲器中的GPU命令之间的跨缓冲器依赖性、确定在一段时间内跨缓冲器依赖性出现的频率、并且基于所述跨缓冲器依赖性出现的所述频率来改变所述调度策略。

示例26包括示例14的主题,并且包括:监测所有虚拟机的所有命令缓冲器之间的跨缓冲器依赖性的出现,并且如果在经选择的数量的命令缓冲器中没有检测到跨缓冲器依赖性,则将所述调度策略从每环形的策略改变至群策略。

示例27包括计算设备,所述计算设备包括处理器以及其中存储有多个指令的存储器,其中当由所述处理器执行时,所述指令使得所述计算设备执行根据示例14-26中的任何示例的所述方法。

示例28包括一个或多个机器可读存储介质,其包括存储在其上的多个指令,其中响应于被执行,所述指令使得计算设备执行根据示例14-26中的任何示例的所述方法。

示例29包括计算设备,其包括用于执行根据示例14-26中的任何示例的所述方法的单元。

示例30包括用于调度针对虚拟化的图形处理单元(GPU)的工作负荷提交的系统。所述系统包括:用于建立包括多个虚拟机的虚拟化环境的单元,其中所述虚拟机中的每个虚拟机包括用于与GPU进行通信的图形驱动器以及用于存储GPU命令的多个命令缓冲器;用于评估所有虚拟机的所有命令缓冲器中的GPU命令的单元;用于响应于对所述GPU命令的评估的输出,从多个不同的调度策略中动态地选择策略的单元;以及用于根据动态地选择的调度策略来调度所述GPU命令中的至少一个GPU命令,以用于由所述GPU进行处理的单元。

示例31包括示例30的主题,并且包括,用于针对所述虚拟机中的每个虚拟机而创建命令数据库的单元,所述命令数据库包括指示所述虚拟机的所述命令缓冲器之间的依赖性的数据。

示例32包括主题31的主题,并且包括用于评估所有虚拟机的所述命令数据库并且基于对所有命令数据库的评估来选择针对所述虚拟机中的所述至少一个虚拟机的所述调度策略的单元。

示例33包括示例30的主题,并且包括单元,所述单元用于:扫描虚拟机的所有命令缓冲器中的所述GPU命令、检测同一虚拟机的不同的命令缓冲器中的GPU命令之间的跨缓冲器依赖性、确定在一段时间内跨缓冲器依赖性出现的频率、并且基于所述跨缓冲器依赖性出现的所述频率来改变所述调度策略。

示例34包括示例30的主题,其包括单元,所述单元用于:监测所有虚拟机的所有命令缓冲器之间的跨缓冲器依赖性的出现,并且如果在经选择的数量的命令缓冲器中没有检测到跨缓冲器依赖性,则将所述调度策略从每环形的策略改变至群策略。

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