在当前的数字化浪潮中,云计算已经崛起为IT行业的核心力量。云游戏,作为这个领域中的新星,正通过将游戏渲染的负担从玩家的设备转移到远程服务器上来重新定义游戏体验。目前带系统桌面环境的云游戏实现方案主要有两种,第一种是基于传统GPU服务器运行的虚拟机方案,第二种是基于PCFarm服务器运行的裸金属方案。
第一种方案是由传统的云计算应用场景演化而来,通常使用传统的多卡GPU服务器运行Linux系统,并通过KVM虚拟机技术创建多个GPU虚拟机,在虚拟机上运行游戏内容。该方案由于使用传统的服务器,因此搭载的是处理器厂商为企业级应用场景而设计的企业级处理器,这类型的处理器通常主频较低,Boost频率也由于功耗墙等因数限制而较低,因而单核性能较低,这对于对单核性能极为敏感的游戏应用场景而言会极大地影响性能。
第二种方案则是近年来快速发展且成本低廉的PCFarm服务器方案,PCFarm服务器是将多个消费级电脑封装进传统服务器机箱中,并使其能够在正规机房上架运行。这类服务器在运行云游戏业务中通常以裸金属模式搭配pxe网络启动形式运作。这种方案在游戏性能上能达到比较高的水平,但由于其裸金属模式,在网络安全隔离,弹性调度,集群管理等云计算领域传统优势项存在天生缺陷。
因此,将上述两个方案的优点相结合, 在PCFarm服务器上通过虚拟机运行游戏成为云游戏的一个新方向。但在PCFarm服务器实现虚拟机运行云游戏,会遇到一个新问题。由于Intel推动的PCFarm服务器为消费级平台,因此也搭载了Intel消费级处理器。目前Intel高性能消费级处理器为大小核设计。一个处理器同时包含了数个面积较大且支持超线程的高性能大核,和数个面积较小不支持超线程的效能小核。在有限的晶片面积下,由大核保证单核性能,多个小核心补充多核性能。消费级的大小核设计主要是为了合理控制晶片面积,降低成本,同时由于晶片面积缩小降低了核心间通信延迟。但这样的设计在使用中依赖系统对大小核架构合理的调度。在裸金属模式中,主流操作系统的最新版本都对该架构提供了调度优化。但是在虚拟机中由于与物理硬件相隔离无法正确识别大小核架构,因此难以做出正确的调度,可能会导致小核分配给游戏资源,或者是多虚机多进程争抢大核资源等情况,进而导致游戏性能急剧下滑。
本文所提出的针对PCFarm服务器大小核架构虚拟机环境运行云游戏业务的VCPU分配和调度方法,主要由三部分组成,一是宿主机上的大核资源池和小核资源池,二是宿主机上VCPU调度程序,三是虚拟机系统中预装的agent程序。总体逻辑是宿主机的VCPU调度程序根据虚拟机agent上报的显卡占用率信息(运行游戏时显卡占用率上升)和帧率信息给虚拟机的VCPU动态调度大核资源池和小核资源池。同时将调度信息回传给虚拟机内的agent,虚拟机agent根据调度信息配置异类线程调度策略(HTS)进行虚机中的大小核调度。异类线程调度策略可以将线程调度到不同的处理器核心上,以提高系统的性能和能效比。
具体包括以下步骤:
1)设计两个核心资源池,一个大核资源池,一个小核资源池,通过cpu set技术将PCFarm服务器中的大核心对应的超线程按顺序全部绑定到大核资源池中,小核心全部绑定到小核资源池中。
2)创建虚拟机时,通过裸金属核心资源数量和虚拟机数量关系,预分配一定数量的核心,分配规则为,若裸金属为大核心(p核2p线程)加小核心(e核)。共创建n个虚拟机,则每个虚拟机预分配2p/n + e核(小核心数量可以根据实际情况做出调整,此时VCPU和裸金属核心未作绑定)。
3)虚拟机镜像内预装一个agent。在进行游戏业务时,显卡占用率会相应上升,agent将显卡占用率信息和帧率信息实时上报给宿主机调度程序。宿主机调度程序会将虚拟机预分配的VCPU更多地调度到宿主机大核资源池,相应其他虚拟机的VCPU则调度到小核资源池。若多个虚拟机同时上报显卡占用率上升(多虚拟机同时运行游戏),则会进入到竞争算法,此时调度程序会倾向将更多大核资源调度给显卡占用率低且帧率也低的虚拟机(游戏运行在受到CPU性能瓶颈时,显卡占用率会出现下降)。
4)在调度程序做出调度后,调度信息回传给虚拟机内的agent,agent根据调度信息动态配置异类线程调度策略(HTS),将运行在裸金属大核资源池的VCPU调度给游戏进程。
5)虚拟机的agent检测到显卡占用率降低至10%以内(游戏进程关闭),则调度程序释放多余的大核资源,重新进行均衡调度,虚拟机内的agent也做出相应的异类线程调度策略调整。