首页> 中国专利> 基于应用效果即时反馈的显卡虚拟化下的资源调度系统

基于应用效果即时反馈的显卡虚拟化下的资源调度系统

摘要

本发明提供一种基于应用程序即时效果反馈的在虚拟机间的物理显卡资源调度系统和方法。本发明描述的系统通过函数钩子的方法在宿主机物理显卡指令发送器和宿主机物理显卡应用程序接口之间插入调度执行器,延迟宿主机物理显卡指令发送器中指令和数据的发送,同时监控虚拟机内显卡应用程序相关的显示性能情况和物理显卡资源使用情况,进而提供反馈给任何基于时间或时序的显卡资源调度算法。本发明无需对虚拟机应用程序、宿主机操作系统、虚拟机操作系统、显卡驱动、虚拟机管理器进行任何修改。本发明无需暂停机器的运行,在重大提升虚拟机间显卡资源调度能力时运行时整体性能损耗低于5%。

著录项

  • 公开/公告号CN102890643A

    专利类型发明专利

  • 公开/公告日2013-01-23

    原文格式PDF

  • 申请/专利权人 上海交通大学;

    申请/专利号CN201210261862.0

  • 发明设计人 于淼;王胤;戚正伟;管海兵;

    申请日2012-07-26

  • 分类号G06F9/50(20060101);

  • 代理机构31236 上海汉声知识产权代理有限公司;

  • 代理人郭国中

  • 地址 200240 上海市闵行区东川路800号

  • 入库时间 2024-02-19 16:49:45

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-01-21

    授权

    授权

  • 2013-03-06

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

    实质审查的生效

  • 2013-01-23

    公开

    公开

说明书

技术领域

本发明涉及的是一种应用于计算机应用技术领域的系统及方法,尤其是一种基于应用程序 即时效果反馈的在虚拟机间的物理显卡资源(Graphics Processing Unit,GPU)调度系统方法, 具体涉及基于应用效果即时反馈的显卡虚拟化下的资源调度系统。

背景技术

显卡虚拟化技术(GPU Virtualization)正在被广泛应用于执行显卡计算(GPU Computing) 的数据中心当中,这些计算包括但不限于:云游戏(Cloud Gaming),视频渲染(Video Rendering)和通用显卡计算(General Purpose GPU Computing)。

但是目前缺少一种有效的虚拟机间调度物理显卡资源的系统和方法,从而能够使并行运行 于多个虚拟机内部的各个应用程序获得较好的显卡加速效果同时有高资源使用率。现有的显卡 穿透方法(Video Graphics Array Passthrough,VGA Passthrough)将每块可用物理显卡赋予到 运行的每个虚拟机当中。然而这种方法的缺点是:第一,一般商用主板仅支持两到三块显卡, 因此需要特制的主板来同时运行多个需要显卡支持的虚拟机;第二,对每个虚拟机内部,在其 运行期间通常不能用尽其拥有的物理显卡资源,而在这种技术中,剩余的显卡资源不能赋予给 其它虚拟机,因此造成物理显卡资源的浪费。

另外一种办法是利用显卡半虚拟化技术(GPU Paravirtualization)使得多个虚拟机可以共 享一块或多块物理显卡。在2009年SIGOPS Operating Systems Review的Volume43Issue3 中发表了一篇名为GPU Virtualization on VMware's Hosted I/O Architecture的论文提出了这 种方法和系统。之后,在2008年Multimedia Computing and Networking上Bautin M.等人在 Graphic Engine Resource Management提出了物理显卡资源在多个应用间均分的调度策略。随 后在2011年Usenix ATC上,Kato等人在Timegraph:GPU scheduling for real-time multi-tasking environments论文中提出了通过引入显卡资源使用优先级并修改操作系统显卡 驱动的方法来提升物理显卡加速关键用户程序的能力。

上述两个方法能够最大化利用可用的物理显卡资源,同时为多个虚拟机提供显卡加速的能 力。然而,这些方法的缺点是:一方面,需要修改操作系统或者显卡驱动,当应用于虚拟机时 甚至需要修改虚拟机监控器(Hypervisor)或虚拟机内的应用程序(Guest Application),因此 存在开发难度大的问题;另一方面,由于已有方法不能获得被加速的Guest Application运行效 果反馈数据,因此已有物理GPU资源的调度系统和方法存在盲目性,获得的资源调度效果一 般。

发明内容

本发明针对现有技术存在的上述不足,提供一种基于应用程序即时效果反馈的在虚拟机间 的物理显卡资源调度系统和方法。传统GPU虚拟化技术将虚拟机内的显卡命令和数据通过宿 主机物理显卡指令发送器(GPU HostOps Dispatch)发送到宿主机物理显卡应用程序接口(Host GPUAPI)。在此基础上,本发明提供的方法通过函数钩子的方法在GPU HostOps Dispatch和 Host GPUAPI之间插入调度执行器(Agent),延迟GPU HostOps Dispatch中指令和数据的发 送,同时监控GuestApplication相关的显示性能情况和物理显卡资源使用情况,进而提供反馈 给任何基于时间或时序的显卡资源调度算法。基于时间或时序的显卡资源调度算法是指显卡资 源的开始使用、结束使用和使用持续均部分或完全基于绝对或相对时间。

此外,本发明描述的系统通过调度控制器(Scheduling Controller)即时接受用户启用或 停止各Agent的决定,并对所采用调度方法的选择和参数改变,并据此即时改变各Agent的相 应参数设置。同时Scheduling Controller显示或记录当前物理显卡资源调度和使用情况,各虚 拟机内应用程序显卡资源使用情况等一项或多项内容。

本发明描述的系统和方法无需修改宿主机操作系统、宿主机显卡驱动、Hypervisor、虚拟 机操作系统、虚拟机显卡驱动或虚拟机内的应用程序。此外,本发明描述的系统和方法在运行 时带来的性能开销低于5%,启用或停止不致招致显著的虚拟机暂停时间(仅需毫秒级暂停时 间)。

本发明是通过以下技术方案实现的:

根据本发明的一个方面,提供一种基于应用效果即时反馈的显卡虚拟化下的资源调度系 统,包括宿主机物理显卡指令发送器、宿主机物理显卡应用程序接口,还包括如下模块:

调度执行器,其连接在宿主机物理显卡指令发送器与宿主机物理显卡应用程序接口之间;

调度控制器,其连接所述调度执行器,

其中,调度控制器接收用户命令,并将用户命令传递给调度执行器;调度执行器接收来自 于调度控制器的用户命令,监控应用程序运行状态,并将应用程序显卡状态结果传输到调度控 制器,同时根据调度控制器指定使用的调度算法,周期性/事件性计算要满足最低应用程序显卡 状态所需的延迟时间,延迟宿主机物理显卡指令发送器中指令和数据发送到宿主机物理显卡应 用程序接口;调度控制器接收并处理显示来自于调度执行器的调度结果和调度状态。

优选地,调度控制器接收用户命令,解析其中对各调度执行器的操作、调度算法的配置和 相应参数,并将用户命令传递给调度执行器模块、接收来自于调度执行器模块的状态结果并显 示给用户。

优选地,所述的调度控制器包括如下模块:

控制台,其用于接收用户命令,这些用户命令输入关于调度算法的配置和相应参数,并从 调度通信器中获取调度结果并显示给用户;

调度通信器,其用于负责调度控制器与一个或多个调度执行器的通信,负责安装/卸载调度 执行器、将用户命令传递给调度执行器、接收来自于调度执行器的应用程序显卡状态结果。

优选地,所述的调度执行器包括如下模块:

调度器,其用于接收用户命令中关于调度算法及其参数配置的指定,并负责查找相应调度 算法的位置,配置调度算法并运行相应的调度算法,按需延迟宿主机物理显卡指令发送器中指 令和数据发送到宿主机物理显卡应用程序接口;

应用程序显卡状态监控器,其用于采集来自宿主机物理显卡应用程序接口的显卡状态,并 由此生成应用程序显卡状态结果,同时将应用程序显卡状态结果反馈给调度器,并传递给调度 控制器中的调度通信器。

优选地,所述的应用程序显卡状态包括:与应用程序种类相关的显卡物理状态和/或逻辑状 态测度。物理状态测度如显卡的负载率(GPU Load)、温度、电压等。逻辑状态测度如对于计 算机三维游戏则相应显卡状态测度为每秒帧数(Frames per second,FPS),对于计算机通用 GPU运算则相应显卡状态测度为计算数每秒(Operations per second,Ops)、本应用程序的显 卡负载率(Application GPU Usage)等等。

根据本发明的一个方面,提供一种根据本发明所述的资源调度系统的显卡虚拟化下的显卡 资源调度方法,通过函数钩子的方法在宿主机物理显卡指令发送器和宿主机物理显卡应用程序 接口之间插入调度执行器(Agent),延迟宿主机物理显卡指令发送器中指令和数据发送到宿主 机物理显卡应用程序接口,同时监控应用程序相关的显示性能情况和物理显卡资源使用情况, 进而提供反馈给任何基于时间或时序的显卡资源调度算法,无需对虚拟机应用程序、宿主机操 作系统、虚拟机操作系统、显卡驱动、虚拟机管理器进行任何修改且性能损耗低。

优选地,所述方法具体过程为:一个或多个虚拟机启动完成后,在客户需要安装所述资源 调度系统时,通过应用程序运行的方法由调度控制器查找或按用户指定进程将调度执行器绑定 到相应虚拟机;然后调度控制器中的调度通信器与各个被绑定的调度执行器建立通信;在对显 卡资源进行调度的时候,客户发出指令选择调度算法(可以是第三方开发的调度算法)并提供 相应参数,控制台在收到客户指令后由调度通信器将用户命令分发给各个调度执行器;调度执 行器根据用户命令配置运行所选显卡资源调度算法,延迟宿主机物理显卡指令发送器中指令和 数据发送到宿主机物理显卡应用程序接口;与此同时,应用程序显卡状态监控器采集来自宿主 机物理显卡应用程序接口的显卡状态,并由此生成应用程序显卡状态,随后周期性/事件性将应 用程序显卡状态结果反馈给调度器,并传递给调度控制器中的调度通信器;在客户需要卸载所 述资源调度系统时,客户通过调度控制器发出卸载指令,控制台在收到客户指令后由调度通信 器将用户命令分发给各个调度执行器,调度执行器收到卸载指令后停止自身运行。

优选地,所述的将调度执行器绑定到相应虚拟机的步骤,具体为:

步骤1.1,根据用户指定信息查找指定虚拟机图像渲染进程(根据虚拟机管理器设计不同, 这些进程也可以是虚拟机进程),或选取全部相关虚拟机图像渲染进程,对这些中的每一个虚 拟机进程执行步骤1.2到步骤1.6;

步骤1.2,在该进程中创建新的线程(Thread),并在其中加载调度执行器;

步骤1.3,访问调度执行器入口,初始化调度执行器;

步骤1.4,查找该进程加载的宿主机物理显卡应用程序接口地址集合,修改其中每一个宿 主机物理显卡应用程序接口地址处的代码,使其指向调度执行器中相应处理函数的入口并保存 各寄存器内容,使得进程以后在每次使用宿主机物理显卡应用程序接口时会运行处理函数 (Handlers);

步骤1.5,设定处理函数返回地址为旧的宿主机物理显卡应用程序接口地址之后运行指令, 恢复各寄存器内容,使得处理函数运行结束后能正确执行原有宿主机物理显卡应用程序接口;

步骤1.6,该线程不得结束。

优选地,所述的延迟宿主机物理显卡指令发送器中指令和数据发送到宿主机物理显卡应用 程序接口的步骤,具体为:

-若使用猜测技术,则包含如下子步骤:

步骤2.1a,在资源调度算法指定的处理函数中,停止计时本次中央处理器(Central Processing Unit,CPU)消耗时间,开始计时物理显卡资源本次消耗时间;

步骤2.2a,根据物理显卡资源消耗时间历史记录猜测物理显卡资源本次消耗时间;

步骤2.3a,暂停中央处理器执行一段时间,这段时间的长度为调度算法根据中央处理器本 次消耗时间和物理显卡资源本次消耗时间计算而成;

步骤2.4a,调用原有宿主机物理显卡应用程序接口;

步骤2.5a,停止计时物理显卡资源本次消耗时间,更新到物理显卡资源消耗时间历史记录;

-若不使用猜测技术,则包含如下子步骤:

步骤2.1b,在资源调度算法指定的处理函数中,停止计时本次中央处理器消耗时间,开始 计时物理显卡资源本次消耗时间;

步骤2.2b,调用原有宿主机物理显卡应用程序接口;

步骤2.3b,停止计时物理显卡资源本次消耗时间;

步骤2.4b,暂停中央处理器执行一段时间,这段时间的长度为调度算法根据中央处理器本 次消耗时间和物理显卡资源本次消耗时间计算而成。

优选地,所述的应用程序显卡状态监控器采集来自宿主机物理显卡应用程序接口的显卡状 态的步骤,具体为:

步骤3.1,在资源调度算法指定的处理函数中,调用宿主机物理显卡应用程序接口、操作 系统内核或显卡驱动提供的接口按照资源调度算法需求和用户命令采集显卡状态,如显卡的负 载率(GPU Load)、温度、电压、FPS、Ops、本应用程序的显卡负载率等;

步骤3.2,在资源调度算法指定的处理函数中,调用原有宿主机物理显卡应用程序接口;

优选地,所述的生成应用程序显卡状态的步骤,具体为:

步骤4.1,用户指定状态汇报频率,在调度执行器中,获取该状态汇报频率;

步骤4.2,当状态汇报时间点到来时,调度执行器中的应用程序显卡状态监控器将累计的 状态结果传送到调度控制器中的调度通信器中;

步骤4.3,调度执行器清空自身的状态结果缓冲区;

优选地,所述的调度执行器收到卸载指令后停止自身运行的步骤,具体为:

步骤5.1,每一个调度执行器收到卸载指令后,开始从步骤5.2到步骤5.3卸载过程;

步骤5.2,恢复该进程加载的宿主机物理显卡应用程序接口地址集合,修改其中每一个宿 主机物理显卡应用程序接口地址处的代码为原应用程序接口地址处内容,使得进程以后在每次 使用宿主机物理显卡应用程序接口时会运行原应用程序接口逻辑;

步骤5.3,将调度执行器绑定到相应虚拟机过程中插入的线程结束,从而卸载调度执行器;

优选地,所述的资源调度算法具体包括如下步骤:

步骤6.1,对于虚拟机群VM1,VM2…到VMn,每个虚拟机的调度执行器中的调度器解析 用户方法配置,得到需要满足的最小显卡的负载率、最小每秒帧数(本专利适用范围不限于计 算机游戏,对于其它显卡应用,可以针对不同的状态测量)、用户指定的检测周期T;

步骤6.2,在运行期间,处理函数会被多次调用,对于每次处理函数调用,使用猜测技术 执行步骤2.1a到步骤2.5a;或不使用猜测技术执行步骤2.1b到步骤2.4b;

步骤6.3,对于每一个T周期,如果某个虚拟机VMm不满足状态测量,则寻找并降低拥 有最大最小每秒帧数的虚拟机的最小每秒帧数设定;降低每秒帧数的数量取决于最近若干帧的 应用程序的显卡负载率(Application GPU Load),每秒帧数和最近若干帧的应用显卡的负载率 为线性关系;

步骤6.4,对于每一个T周期,如果物理显卡使用率不满足最小显卡负载率,则提高所有 虚拟机的最小每秒帧数设定;提高每秒帧数的数量取决于最近若干帧的应用程序的显卡负载 率,每秒帧数和最近若干帧的应用程序的显卡负载率为线性关系;

步骤6.5,步骤6.2到步骤6.4保持有效,直到用户指定方法结束或更换方法或卸载调度执 行器。

在本发明的一个优选的具体实施方式中,每台虚拟机对应的GPU HostOps Dispatch在本 发明中会被安装一个独自拥有的调度执行器。全局唯一的调度控制器与一个或多个调度执行器 相连。本发明相对于现有技术具有以下优点:首先,无需对虚拟机应用程序、宿主机操作系统、 虚拟机操作系统、显卡驱动、虚拟机管理器进行任何修改。已有系统通常需要大量改动以上部 分中的一个来实现相近的调度能力,这种修改会导致已有系统必须不断进化来兼容最新的应用 程序、操作系统或显卡驱动等。其次,本发明在安装或卸载时无需暂停机器的运行,这种特性 使得本系统易于部署在商业系统中,尤其适用于需要达到7×24小时可用性的商业服务器上。 最后,本发明在重大提升虚拟机间显卡资源调度能力时运行时性能极高,整体性能损耗低于 5%。

附图说明

图1为本发明模块示意图。

图2为本发明架构示意图。

具体实施方式

下面对本发明的实施例作详细说明,本实施例在以本发明技术方案为前提下进行实施,给 出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。

实施例

如图2所示,根据本发明提供的基于应用效果即时反馈的显卡虚拟化下的资源调度系统, 包括:调度执行器模块和调度控制器模块,其中:调度控制器模块与调度执行器模块相连接, 传送用户命令到调度执行器当中并接收其返回的显卡状态结果。调度执行器被插入到宿主机物 理显卡指令发送器GPU HostOps Dispatch和宿主机物理显卡应用程序接口Host GPU API之 间,延迟相应调用和数据的向下传输。调度执行器模块同时负责利用宿主机物理显卡应用程序 接口Host GPU API采集显卡物理状态和/或逻辑状态测度。本实施例针对运行于虚拟机中的计 算机游戏,因此采集的物理状态、逻辑状态包括:Application GPU Load和FPS。

如图1所示,所述的调度控制器模块包括:控制台子模块、调度通信器子模块,其中:控 制台子模块用于接收用户命令,这些命令输入关于调度算法的配置和相应参数。此外,控制台 子模块周期性/事件性从调度通信器子模块中获取调度结果并显示给用户。调度通信器子模块负 责调度控制器模块与一个或多个调度执行器模块的通信,负责安装/卸载调度执行器、将用户命 令传递给调度执行器子模块等操作。所述的事件性指目标事件一次或多次发生,但发生的时间 间隔并不恒定,事件在时间上的分布在数学上可表达为非周期性质的时间序列。

如图1所示,所述的调度执行器模块包括:调度器子模块、应用程序显卡状态监控器子模 块,其中:调度器子模块接收用户命令中关于调度算法及其参数配置的指定,并负责按照配置 运行相应的调度算法,按需延迟GPU HostOps Dispatch中指令和数据发送到Host GPU API。 应用程序显卡状态监控器子模块负责采集来自Host GPU API的显卡状态,并由此生成应用程 序显卡状态,随后周期性/事件性将应用程序显卡状态结果反馈给调度器子模块,并传递给调度 控制器模块中的调度通信器子模块。

所述的应用程序显卡状态指与应用程序种类相关的显卡物理状态和/或逻辑状态测度。在本 实施例中,采集的物理状态、逻辑状态包括:Application GPU Load和FPS。

本实施例针对VMWare Player4.0虚拟机管理器系统,因此指定虚拟机图像渲染进程即虚 拟机进程。在本实施例中,仅考虑用户选取全部相关虚拟机图像渲染进程情况。

本实施例应用的基于应用效果即时反馈的显卡虚拟化下的资源调度方法被配置为:最小 GPU Load=80%、最小FPS=30、用户指定的检测周期T=1秒。

本实施例通过以下方式进行工作:

步骤一,用户选取全部相关虚拟机进程,对这些中的每一个虚拟机进程执行步骤二到步骤 六:

步骤二,在该进程中创建新的线程(Thread),并在其中加载调度执行器模块。

步骤三,访问调度执行器模块入口,初始化调度执行器模块。

步骤四,查找该进程加载的宿主机物理显卡应用程序接口地址集合,修改其中每一个宿主 机物理显卡应用程序接口地址处的代码,使其指向调度执行器模块中相应处理函数的入口并保 存各寄存器内容。使得进程以后在每次使用宿主机物理显卡应用程序接口时会运行处理函数 (Handlers)。

步骤五,设定处理函数返回地址为旧的宿主机物理显卡应用程序接口地址之后运行指令, 恢复各寄存器内容,使得处理函数运行结束后能正确执行原有宿主机物理显卡应用程序接口。

步骤六,该线程不得结束。

通过以上步骤将调度执行器模块绑定到相应虚拟机,再经过调度控制器模块中的调度通信 器子模块与各个被绑定的调度执行器模块建立通信后,调度执行器模块可传送状态结果到调度 控制器模块,并对调度控制器模块发出的用户命令进行相应。当之后某一时刻需要对显卡资源 进行调度时,具体过程如下:

步骤1,对于虚拟机群VM1,VM2…到VMn,每个虚拟机的调度执行器模块中的调度器模 块解析用户算法配置,得到需要满足的最小GPU Load=80%、最小FPS=30、用户指定的检测 周期T=1秒。

步骤2,在运行期间,Handlers会被多次调用,用于显卡状态采集和延迟GPU HostOps Dispatch中指令和数据发送到Host GPU API,对于每次Handlers调用,执行步骤2.1到步骤 2.6。

步骤2.1,在资源调度算法指定的Handlers中,停止计时本次CPU消耗时间,

步骤2.2利用Host GPU API和显卡驱动接口,测量本次Application GPU Load和当前T 时间内的FPS,开始计时GPU本次消耗时间。

步骤2.3,根据GPU消耗时间历史记录猜测GPU本次消耗时间。

步骤2.4,暂停CPU执行一段时间,这段时间的长度为调度算法根据CPU本次消耗时间 和GPU本次消耗时间计算而成。

步骤2.5,调用原有宿主机物理显卡应用程序接口。

步骤2.6,停止计时GPU本次消耗时间,更新到GPU消耗时间历史记录。

步骤3,对于每一个T周期,如果某个虚拟机VMm不满足最小FPS,则寻找并降低拥有 最大最小FPS的虚拟机的最小FPS设定。降低FPS的数量取决于最近若干帧的Application GPU Load,FPS和最近若干帧的Application GPU Load为线性关系。

步骤4,对于每一个T周期,如果物理显卡使用率不满足最小GPU Load,则提高所有虚 拟机的最小FPS设定。提高FPS的数量取决于最近若干帧的Application GPU Load,FPS和 最近若干帧的Application GPU Load为线性关系。

步骤5,步骤2到步骤4保持有效,直到用户指定算法结束或更换算法或卸载调度执行器 模块。

调度执行器模块卸载实施例如下:

步骤a,每一个调度执行器模块收到卸载指令后,开始从步骤b到步骤c卸载过程。

步骤b,恢复该进程加载的宿主机物理显卡应用程序接口地址集合,修改其中每一个宿主 机物理显卡应用程序接口地址处的代码为原应用程序接口地址处内容。使得进程以后在每次使 用宿主机物理显卡应用程序接口时会运行原应用程序接口逻辑。

步骤c,将调度执行器模块绑定到相应虚拟机过程中插入的线程结束,从而卸载调度执行 器模块。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号