法律状态公告日
法律状态信息
法律状态
2015-04-29
授权
授权
2013-10-23
实质审查的生效 IPC(主分类):G06F9/50 申请日:20130619
实质审查的生效
2013-09-18
公开
公开
技术领域
本发明涉及的是GPU虚拟化领域中的资源自适应调度宿主机系统,应用于云游戏平台,具体是一种在操作系统图像API中进行干预的调度系统。
背景技术
GPU虚拟化技术的逐渐成熟促进了云游戏应用的发展,因此云服务中的云游戏应用时兴。但是由于目前默认的GPU资源共享机制性能不良,使得云游戏的用户体验不可避免地被一些实时不确定因素破坏,比如渲染复杂的游戏场景。
在视频流质量分析中,FPS(Frames Per Second)的定义为每秒传输帧数,测量用于保存、显示动态视频的信息数量,即动画或视频的画面数。
在云游戏用户体验中,QoS要求指的是保证用户正常使用的最小FPS和最大延迟。
影响虚拟环境中游戏运行的主要因素:CPU运行时间、GPU执行游戏同步渲染时间、不可预测的游戏场景变化和虚拟机之间的干预。这些因素导致游戏的FPS不符合QoS要求,影响用户体验。
目前存在的虚拟化解决方案,其资源共享机制性能不良,主要体现在资源利用率低下以及不符合服务等级协议(QoS)要求。现在大部分的虚拟机中的资源调度机制采用先进先出方式,导致一些虚拟机不符合QoS要求,并且在单一的服务器上运行多个虚拟机会给各虚拟机中的游戏应用带来性能波动,特别是在云游戏平台上更为明显。
经过对现有技术的检索发现,美国卡耐基梅隆大学在GPU加速窗口系统中提出了该难题。IBM东京研究院开发了资源自动调度系统来加速通用GPU集群中stencil应用的运行。北卡罗来纳州大学教堂山分校提出了两种方法,把GPU集成到软实时多处理器系统中来提高整体系统的性能。纽约州大学石溪分校提出了GERM,旨在提供了一种公平的GPU资源分配算法,并且还使用例如垂直同步的固定帧率方法来避免游戏过分依赖硬件资源。但是它们都有如下不足,GERM没有考虑QoS要求并且固定帧率方法不能有效地使用硬件资源。TimeGraph不能保证在所有的虚拟机符合QoS要求,尤其是在重要负载更少的时候。
发明内容
本发明针对现有的GPU资源调度方法存在的不足,提出了一种云游戏中的GPU虚拟资源自适应调度宿主机系统和方法,通过运用GPU半虚拟化和库注入技术,在宿主机上植入轻量级的调度控制,采用了无需更改宿主机的图像驱动、子机操作系统和应用的绿色软件技术。调度算法减轻了实时不确定因素的影响,并保证了系统资源的高利用率。具体说,基于 公平性的QoS自适应调度算法不仅保证每个虚拟机都满足QoS的基本要求,而且对GPU资源进行再分配,把具有较高FPS的虚拟机的GPU资源分配给那些不满足QoS要求的虚拟机,因此基于公平性的QoS自适应调度算法不仅满足QoS要求,更实现了公平调度并显著提高GPU利用率。
本发明的技术解决方案如下:
一种云游戏中的GPU虚拟资源自适应调度宿主机系统,其特点在于,包括调度控制模块、以及与该调度控制模块分别连接的代理模块、图像应用程序编程接口分析模块和虚拟机列表,所述的代理模块由调度模块和监控模块组成,所有模块全部部署在宿主机中;
所述的调度控制模块负责其他各模块之间信息的沟通:调度控制模块从虚拟机列表中获得所有运行的虚拟机的信息,并发送给需要的模块;
调度控制模块还有一个功能就是会自动调节已设定调度方法的参数FPS来使得调度方法良好地运行;
所述的监测模块从调度控制模块那获得虚拟机的运行实时信息并把它发送至调度模块,
所述的调度模块接收来自上层GPU命令分发器的命令,并根据监测模块发送来的虚拟机的运行实时信息,对接收的命令进行处理,最后发送至下层主机GPU驱动;
所述的代理模块和调度控制模块一起决定需要将多少GPU资源分配给虚拟机;
所述的图像应用程序编程接口分析模块负责计算由图像应用程序编程接口产生的GPU命令运行带来的开销,并将结果发送至调度控制模块,从而使需要该信息的其他模块获得。
虚拟机列表保存了宿主机系统中所有的正在运行的虚拟机,每一个虚拟机都能被系统索引,当有新的虚拟机加入并开始运行时,系统就会自动把它加入虚拟机列表中并再次重新调度GPU资源。
利用所述的云游戏中的GPU虚拟资源自适应调度宿主机系统的调度方法,其特点在于,该方法包括如下步骤:
①户在调度控制模块内设置达到的每秒帧数,虚拟机列表中记录了虚拟机运行的实时信息,调度控制模块从虚拟机列表中获得所有运行的虚拟机的信息;
②图像应用程序编程接口分析模块计算GPU命令运行带来的开销,并发送至调度控制模块;
③监测模块通过调度控制模块获得虚拟机列表中记录的虚拟机运行的实时信息,以及通过调度控制模块获得图像应用程序编程接口分析模块计算的GPU命令运行带来的开销,并把它们一同发送至调度模块;
④调度模块接收来自GPU命令分发器的命令,并根据从监测模块获得的虚拟机运行的实时信息和GPU命令运行带来的开销计算睡眠函数的运行时间,对接收到的命令进行处理,最后发送至下层主机GPU驱动;
所述的步骤④的具体步骤如下:
当调度模块从监测模块获得的虚拟机运行的实时信息显示FPS大于30fps,则调度模块 在调用渲染画面函数前插入睡眠函数,再调用渲染画面函数渲染画面;
当调度模块从监测模块获得的虚拟机运行的实时信息显示FPS大于30fps,则调度模块为该虚拟机分配更多的GPU资源,然后再调用渲染画面函数渲染画面;
当调度模块从监测模块获得的虚拟机运行的实时信息显示FPS等于30fps,则调度模块直接调用渲染画面函数渲染画面。
本发明原理如下:
(1)基于半虚拟化的系统架构(2)自适应调度算法。其中:基于半虚拟化的系统架构是一种基于宿主机库植入技术的轻量级调度模块,对于宿主机的图像API、客户机的操作系统和应用程序无需修改;其中基于公平性的QoS自适应调度算法满足云游戏用户体验的最小FPS和最大延迟,并强调资源调度的公平性。
虚拟机运行时Present调用的计算时间是非常稳定的,即使发生波动也是逐渐平缓变化的,因此我们认为每个虚拟机的代理可以通过各自虚拟机的历史信息来预测Present的计算量,本算法采用过去连续的20次Present调用时间的算术平均值作为下一帧的预测。为了使得各个虚拟机的帧长度平缓稳定在设定的值FPS,通过延迟它的上一次Present调用,来扩展每个帧。而延迟的效果通过在每次Present调用前插入Sleep调用达到,sleep的量由公式给出。我们发现当存在大量GPU资源竞争时,Present的时间量会发生明显变化,我们则通过在Sleep调用前插入flush命令来得到更精确的GPU计算时间。
公平性的实现:1、基于公平性的QoS自适应调度算法会维持一个虚拟机列表,虚拟机列表详细记录当前运行的虚拟机对GPU资源占有情况和各个虚拟机运行游戏的FPS。3、图像API分析器实时分析虚拟机中游戏运行图像信息以计算其FPS,并预测运行开销。4、调度控制模块一方面通过图像API分析器来把游戏运行的图像信息如FPS等情况写入虚拟机列表,另一方面通过虚拟机列表的虚拟机运行信息来决定释放那些拥有过高FPS的虚拟机的GPU资源,并把它们再分配给低于QoS标准的虚拟机。5、调度模块负责实现4中提到的GPU资源释放和再分配,一方面通过插入Sleep()延迟帧长度来释放GPU资源,另一方面把由于插入Sleep而得到的空闲GPU资源分配给那些低于Qos的虚拟机。6、上述的释放与再分配的过程中,拥有过高FPS的虚拟机等比例承担GPU资源的再分配部分。拥有最多GPU资源的虚拟机占据GPU利用率的首位,因此这种GPU资源的再分配算法是相对公平的。
与现有技术相比,本发明的有益效果是实现了虚拟机中GPU资源的科学管理,并提高了GPU资源利用率,基于公平性的QoS自适应调度方法通过公平分配的方式为所有运行的虚拟机分配足够的GPU资源并且保证符合QoS要求,同时使得整体GPU利用率最大化。
附图说明
图1是现有技术中虚拟资源调度系统的架构示意图。
图2是本发明云游戏中的GPU虚拟资源自适应调度宿主机系统的示意图。
图3帧的组成与帧延迟。
图4GPU虚拟资源自适应调度宿主机系统调度方法流程图。
图5控制系统不同参数对性能的影响,(a)、(b)分别是两个不同的测试程序。
图6两个虚拟机之间的GPU资源再分配。
图7基于公平性的QoS自适应调度方法性能评估结果。
具体实施方式
下面对本发明的实施例作详细说明,本实施例在本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程,本发明的适用平台不限于下述的实施例。
3、图1是现有技术中虚拟资源调度系统的架构示意图,是本发明云游戏中的GPU虚拟资源自适应调度宿主机系统的示意图,本发明系统的模块全部部署在宿主机中,是一种介于GPU和宿主机GPU应用程序编程接口的调度系统,包括调度控制模块1、以及与该调度控制模块1分别连接的代理模块、图像应用程序编程接口分析模块4和虚拟机列表5,所述的代理模块由调度模块2和监控模块3组成。
调度控制模块1从所有运行的虚拟机中得到性能信息的反馈并自动调节已设定调度方法的参数来使得调度方法良好地运行;每一个运行的虚拟机都有一个由调度模块2和监控模块3组成的代理模块,监控模块发送相应虚拟机的实时性能信息至调度控制模块1,调度模块接收来自驱动的命令并调度GPU计算任务。代理模块通常也和调度控制模块1一起决定需要将多少GPU资源分配给虚拟机。图像应用程序编程接口分析模块4计算GPU命令运行带来的开销,这些命令是由图像API产生的,比如Present命令。虚拟机列表包括所有的宿主机系统中正在运行的虚拟机,每一个虚拟机都能被系统索引,当一个新的虚拟机开始运行时,宿主机系统会自动把它加入虚拟机列表中并再重新调度GPU资源。这里所述的基于半虚拟化的系统架构采用II型虚拟化。当客户机应用唤醒标准GPU渲染API时,客户机GPU计算库在主存中准备了相应的GPU缓存并发布GPU命令包,这些包被压入虚拟GPU I/O队列中并依次被宿主机处理,最后dispatch层以异步的形式发送命令至宿主机驱动。直接内存访问方式被用来把缓存从子机内存运送至GPU内存中。
如图2所示,本方法中帧延迟的定义:将相邻两次Present返回值之间的时间差定义为帧延迟。每个帧由GPU渲染、Present()、Sleep()、目标计算和图像绘画四部分组成,由于GPU渲染、目标计算和图像绘画的变化,不同帧的长度因此而相异。如图4算法的伪代码所示,本算法在于调整帧的组成之一Sleep()的时间来稳定每个帧的大小,最终使得各个帧维持在一个相近的水平。具体来说,基于公平性的QoS自适应调度算法分为两个方面,分别是调度自适应性的实现和调度公平性的实现。方法程序的逻辑流程图如图3所示。
自适应调度部分的实现:1、首先用户在调度控制模块里设置好系统欲达到的FPS(每秒帧数),虚拟机列表详细记录了虚拟机运行的实时信息,调度控制模块负责接收来自虚拟机列表的虚拟机运行信息。2、图像应用程序编程接口分析模块计算GPU命令(比如渲染画面函数命令)运行带来的开销并发送至调度控制模块。3、监测模块从调度控制模块那里获得了虚拟机的运行实时信息和GPU命令开销,并把它们一同发送至调度模块。一方面,调 度模块从上层接受到来自GPU命令分发器的命令并结合从监测模块获得的虚拟机运行信息和GPU命令运行带来的开销计算睡眠函数的运行时间,对接收来的命令进行处理,最后再送至底层主机GPU驱动:若信息显示FPS大于30则在调用渲染画面函数前插入睡眠函数,从而达到扩展延迟帧的目的,最后调用渲染画面函数渲染画面。若小于30则调度模块为该虚拟机(FPS小于30的)分配更多的GPU资源,然后调用渲染画面函数渲染画面。若等于30则直接调用渲染画面函数渲染画面。
虚拟机运行时Present调用的计算时间是非常稳定的,即使发生波动也是逐渐平缓变化的,因此我们认为每个虚拟机的代理可以通过各自虚拟机的历史信息来预测Present的计算量,本算法采用过去连续的20次Present调用时间的算术平均值作为下一帧的预测。为了使得各个虚拟机的帧长度平缓稳定在设定的值FPS,通过延迟它的上一次Present调用,来扩展每个帧。而延迟的效果通过在每次Present调用前插入Sleep调用达到,sleep的量由公式给出。我们发现当存在大量GPU资源竞争时,Present的时间量会发生明显变化,我们则通过在Sleep调用前插入flush命令来得到更精确的GPU计算时间。
这里简单对本发明的一个实例做出阐述。假设标准FPS是30,系统上一共运行了3个虚拟机V1、V2、V3,我们假设历史GPU使用和FPS的比率分别是t1、t2、t3。如果一开始V1运行在20FPS,V2运行在40FPS,V3运行在60FPS,那么首先调度驱动模块接收到来自监控器传送的性能参数,一旦它探测到V1没有满足QoS要求,基于公平性的QoS自适应调度算法开始工作,首先计算出应该再分配给V1的GPU资源,10t1。其他两个虚拟机V2、V3分别要准备释放5t1的资源
本实施例的具体操作平台是i7-2600K3.4GHz的CPU,16GB RAM,AMD HD6750显卡和2GB的视频内存,宿主操作系统和子操作系统都采用Windows7x64,VMware的版本是4.0,每一个宿主操作系统都是双核的并且拥有2GB的RAM,屏幕分辨率是1280*720(高清品质),为了简化性能比较,本实施例禁用了宿主机上的对换空间、GPU加速窗口系统。
本实施例采用两种类型的负载,第一种是“理想模型游戏”,另一种是“现实模型游戏”,三个游戏代号分别为A、B、C。首先我们测试并评估了使用PI控制的控制系统的作用,如图5显示了控制系统分别在kp=0.5,kp=0.25,kp=0.1和ki=0.5,ki=0.1,ki=0.05下的性能表现,可以得出结论QoS自适应调度算法提高了系统的性能。
Sleep效果和GPU再分配的分析,系统开发了库注入的技术用来在调用GPU API的时候插入sleep函数,我们评估了sleep函数在控制FPS和GPU资源利用率上的效果,在这个测试中,只有一个虚拟机运行在控制系统中,图像显示设置为1920*1200分辨率,初始睡眠时间调整为每帧300ms,之后每秒自减1ms。如图6,得到的实验数据表明其中一个虚拟机的GPU和CPU资源可以被其他的虚拟机资源获得,即系统架构和算法可以有效地在多个虚拟机中调度GPU资源。
最后测试评估系统的调度算法性能。基于公平性的QoS自适应调度算法,首先,C拥有最高的FPS而B的FPS由于GPU资源竞争低于30。然后FSA调度策略开始发挥作用,在第2秒的时候,系统探测到B的FPS大概在28左右而其他两个负载大于30。系统释放 了来自A和C的GPU资源并再分配给B,因此在第三秒的时候,B的FPS增加到33并且其他两个负载只减少了一点,在整个调度过程中,C拥有最高的FPS并且A的FPS并没有减少到设定的标准以下。由图7可知,对于GPU资源利用率,最大值是99.1%,而最小的是85.2%,平均是92.7%,尽管这里还有一小部分GPU资源的浪费,但是基于公平性的QoS自适应调度算法基本可以在大多数时间内把GPU利用率维持在一个很高的水平。
通过测试,本发明云游戏中的GPU虚拟资源自适应调度宿主机系统和自适应调度方法,实现了虚拟机中GPU资源的科学管理并提高了GPU资源利用率。其中基于公平性的QoS自适应调度算法通过公平分配的方式为所有运行的虚拟机分配足够的GPU资源并且保证符合QoS要求,同时使得整体GPU利用率最大化。测试表明本算法在各种不同的负载下都实现了相应目标,并把开销限制在5-10%。
机译: 多跳水下短程网络的实现方法,接收分组处理方法的初始化阶段,接收的分组处理方法,初始化阶段中的阵列分组解析方法,宿节点和锚点的调度方法,以及宿节点的调度方法和正常相位中的锚点节点
机译: 用于在粗粒度GPU资源调度器和GPU感知调度器之间进行交互的GPU GPU设备和方法
机译: GPU GPU GPU内存调度程序及其使用的GPU内存抢占方法