云游戏中基于帧率控制的FEC补偿策略

2018-07-04 13:12白光伟
小型微型计算机系统 2018年5期
关键词:控制算法数据包客户端

沈 专,白光伟,沈 航

(南京工业大学 计算机科学与技术学院,南京 211816)

1 引 言

云游戏[1]是众多云服务中的一种,即是基于云计算的游戏模式.在该模式下,游戏玩家只需要一台可以上网的电脑即可,而无需3D游戏所需要的高端显卡、大存储内存、高配置的CPU等硬件.云游戏服务商提供云服务器,所有游戏都在服务器上运行,并实时将渲染完成的游戏画面通过网络传输给游戏玩家,因此游戏玩家的客户端只需要基本的视频解压能力[3].用户可以在任何地方任何时间体验最新的电脑游戏,游戏开发者也可以根据云游戏系统特定的硬件配置来优化他们的游戏.

云游戏以一种全新的方式向用户提供更高品质的游戏体验.云游戏服务商为了节省硬件成本[4],采用了虚拟化技术[5]在一个GPU上同时运行多个游戏.然而,由于GPU处理图像操作的异步性和非抢占性,因此存在着资源分配不平衡的问题,导致游戏服务等级协议(Service Level Agreement,简称SLA)得不到保证,这会导致有些游戏的帧数很高,有些游戏却很低,并且客户端在无线网络环境下,图像经过传输之后会丢失一部分帧,使本来帧数就不高的游戏,画面出现严重的花屏、卡顿现象,这样严重影响服务质量(Quality of Service),这可能会促使用户放弃云游戏.

针对上述问题,本文提出一种基于帧率控制的FEC补偿策略.先通过帧率控制算法,使用反馈控制模型[2]和API拦截技术为每个游戏调度GPU资源,控制游戏占用GPU资源的时间,从而达到对游戏帧数的控制,确保每个游戏满足最低的SLA需求,即至少每秒30个帧.在帧率控制的基础上,再通过FEC补偿算法,根据网络状况确定适量的冗余包,恢复在传输过程中丢失的源数据帧,从而达到节省网络带宽,优化游戏画面,提高服务质量的目的.

本文的结构安排为:第2节介绍体系结构;第3节提出帧率控制算法;第4节提出FEC补偿算法;第5节是实验与性能分析;第6节总结全文.

2 体系结构

如图1所示,客户端和服务器建立连接之后,客户端的状态监视器就一直向服务器反馈客户端的丢包率、FPS、带宽等信息.服务器端的数据处理器接受到数据之后,过滤掉过时信息,把最新的信息发送给FEC编码器,FEC补偿算法将根据这些信息计算冗余包的数量.帧率控制算法是基于VMware的GPU虚拟机架构实现的,利用了GPU虚拟化技术[5]和API拦截技术.游戏实例都运行在同一宿主机上的不同VM虚拟机中.

图1 系统整体框架图Fig.1 Picture of whole system framework

当游戏调用一个图形库函数时,首先这个调用请求会通过客户操作系统中的图形库函数发送到客户GPU驱动程序上进行处理,而后,GPU驱动程序会与虚拟机监控器进行通信,并向其发送一个命令包,虚拟机监控器把命令包插入到虚拟GPU的I/O队列中,且其宿主GPU任务分发器会对队列中的任务进行分发处理.在任务分发器与驱动程序之间进行API拦截,当拦截到客户操作系统向VMware虚拟机监控器发送的图形库函数的请求时,通过帧率控制算法调节FEC编码所需的帧;最后再执行原来的请求处理流程,使得客户操作系统发来的函数调用请求被宿主操作系统所处理,并将最后的执行结果以相同的帧率进行视频压缩编码.

在压缩编码之后,将视频帧发送到FEC编码器,并将视频帧分组之后,分析当前客户端反馈回来的网络带宽等信息,调用FEC补偿算法确定冗余包的数量,为了降低总的丢包率,使用尽可能少的冗余包,然后将源数据包和冗余数据包编码成FEC数据包,若发现源数据帧不够多,就向帧率控制器请求提高游戏的帧率.再将FEC数据包发送到数据包缓存中,最后经过网络传输到客户端,客户端在接受到这些数据包时,因为网络环境原因,可能已经丢失了一部分源数据包,所以需要冗余数据包来弥补恢复源数据,从而减少了画面的失真,提高了服务质量.

3 帧率控制

本节介绍帧率控制算法,用于保证运行在同一个GPU上的多个游戏满足SLA,从而确保FEC补偿算法编码时所需的帧率,提高FEC编码有效性.

在真实游戏中,游戏的帧数会随着游戏场景的变化而变化.其帧数是由GPU的渲染时间Tgpu和CPU的计算时间Tcpu决定[6];因此可通过设置睡眠时间来控制游戏的帧数.

当游戏的每一帧调用图形库的渲染函数时,利用拦截技术在GPU被调用之前插入一个Sleep函数,因此可以通过设置睡眠时间来控制虚拟机中游戏的帧率.假设游戏的FPS值为F,那么可以用如下公式表示睡眠时间Tsleep:

(1)

考虑到实际输出值FPS并不总是期望的值,很多不确定因素会影响每一帧的总时间,例如,当切换到一个有更多敌人、树木和建筑物的场景时将比上一个场景需要更多的Tcpu和Tgpu,其次,由于图形API以异步方式调用,因此游戏渲染时间Tgpu不能简单获取到.尽管如此,当前帧的渲染时间可以通过历史帧的渲染时间来进行估算,这是因为3D应用程序中的每一帧实际上都在前一帧的基础上稍微做些变化而生成的.虽然这种方法只能预测图形库函数的执行时间,却是一种行之有效的方法.

用Fout表示控制算法输出的FPS值(即每一帧时间的倒数),由于CPU和GPU执行时间在运行时被计算得出,可以假设它们为常量.因此,Fout和Tsleep之间实际上是一个反比例关系,其反比例关系表示如下:

(2)

3.1 反馈控制

反馈控制系统如图2(a)所示,Gc(Z)是PI控制器[7]的传递函数;Gp(Z)是云游戏系统,即被控系统的传递函数;H(z)是测量当前游戏反馈的FPS值的感应器传递函数.为了控制Fout等于r,可以看作是一个典型的离散时间控制问题,r是参数,F是控制输入,Fout是控制输出.

在每次GPU计算循环结束,系统的测量输出值就是系统的输入值,所以传递函数应为:H(z)=1.因为PI控制器能使整个系统得到稳定和收敛[2],所以调用PI控制器,其传递函数可表示为:

(3)

式中,kp表示PI控制器的比例控制常数,ki表示累积控制常数,必须给这两个控制常量赋予合适的值才能使系统稳定和收敛.接下来要计算被控系统的传递函数Gp(Z).用公式(1)替换公式(2)中的Tsleep可以得到:

(4)

对公式(4)做z变换[2]可得被控系统的传递函数Gp(Z),但直接对其做变换有点困难.对公式(4)两边取对数,可得:

(5)

y=ln1000+h

(6)

图2 控制算法闭环模型Fig.2 Closed-loop model of control algorithm

(7)

为了系统的稳定性,令公式(7)中右边数的分母(kp+ki+1)·z-(kp+1)为0,那么就可以得到:

(8)

公式(8)即是整个控制系统的极点所在.根据控制理论[2]可知,当极点在以原点为圆心的单位圆内时,也就是:

(9)

这时,整个控制系统是稳定和收敛的.

3.2 算法实现

本文旨在控制FPS,通过在调用渲染函数Present之前插入Sleep函数来拖延每一帧的时间,从而严格控制每一次迭代的时间.

图3 算法执行流程Fig.3 Execution process of the algorithm

图3显示了这种设计思想.如图所示,每一帧都是由CPU执行时间、睡眠时间和GPU执行渲染函数所花费的时间构成.CPU的执行时间能够在每次迭代中精确计算出;虽然渲染函数的执行是异步的,但是GPU执行时间可以估算得到,那么只要给出合理的睡眠时间,每帧的时间就能被固定,整个游戏的FPS值也能够被严格控制住.

在帧率控制算法中,设置最低标准为30帧,当遇到一个游戏的FPS高于30时,遍历游戏列表,若有游戏的FPS低于30,那么该游戏释放一部分资源,若没有,该游戏继续运行;当遇到一个游戏的FPS低于30时,算法就会让高于30个PFS的游戏释放一部分资源,并把这些资源给低于30个FPS的游戏.帧率控制算法的具体实现如下:

算法1.帧率控制算法

1.setcriteriatoconstant//constant是个标准,设置为30

2.whileTRUEdo

3.getFout;

4.ComputerObjectsInFrame();

5.DrawShapes(VGA_Buffer);

6.ifFout>criteriathen

//查找FPS低于30的游戏

7.Game_below_30_list= search(Game_all_list);

8.n= Length(Game_below_30_list);

9.ifn> 0then

10.r=r-1; //设置该游戏应该运行的FPS参考值

11.elsethenreturn;

12.endif

13.elseifFout

14.Game_above_30_list=search(Game_all_list);

15.foreachGameiinGame_above_30_listdo

16.ri=ri- 1;

17.endfor

18.endif

19.d=r-Fout; //计算误差

20.F=facebackControl(d); //反馈控制器

21.sleep_time=calculateSleeptime(F);

22.Sleep(sleep_time);

23.Present();

24.endwhile

4 FEC补偿算法

本节介绍FEC补偿算法,该算法基于特定的帧率进行编码,在帧率控制算法的基础上可以获得编码所需的帧率,提高编码的有效性;该算法根据客户端反馈的信息调节冗余数据包的数量,在考虑到一定丢包率的情况下,以最少的冗余数据包恢复丢失的源数据;并且在云游戏环境中,能够很好的应对客户端无线网络环境不稳定和丢包现象.

4.1 非均匀FEC编码

FEC是一类用于有损信道通信的编码,通过增加冗余数据来提高抵御错误的能力,如图4所示,一个FEC块有n个数据包,其中包括k个原始数据包和(n-k)个冗余数据包.在FEC(n,k)编码中,(n-k)个冗余数据包用于恢复k个原始数据包.如果一个FEC块的任意k个包被正确接受,就可以重构出所有的k个原始数据包.

在本文中,分别设计了对I帧的帧级别编码和对P帧的分组级编码方案;在这样一个FEC编码方案中,关键问题是确定I帧和P帧的冗余数量和每个FEC块中P帧的数量.使用Gibert模型[8]对无线网络进行建模,假设一个GOP由M个源数据帧组成,用编号m标识(1<=m<=M),Sm表示帧的大小.dm表示帧m在数据传输和视频解码过程中的质量失真,其主要是因为传输时损伤和解码时依赖于父帧造成的,也称为帧m的总失真,并且根据仿射模型[9]有:dm=tm+fm,其中tm是截断失真,即通过网络传输时丢包引起的视频帧m的失真.fm是漂移失真,即由于父帧不能完全重构引起的失真.πB表示丢包率,RTT表示环路延迟时间,μ表示当前可用带宽.

图4 非均匀的FEC编码方式Fig.4 Non-uniform FEC coding

4.2 算法实现

我们提出一种基于GOP(group of picture)的非均匀FEC编码.思路是基于I帧和P帧的数据优先级,通常I帧比P帧占有更多的比特.端到端的视频帧延迟不能超过给定的期限时间T,这是确定FEC冗余数的一个挑战性任务.一方面,提高冗余能够减缓传输丢帧,但增加了端到端的延迟.用较少的冗余数据包,接收端可以更早开始解码过程,但可能牺牲恢复性[10].下面将介绍I帧和P帧的FEC冗余估计算法.

(10)

(11)

(12)

冗余值可以用I帧所描述的步骤确定.如图4所示,假设把P帧分成t个分组,每个分组代表一个FEC块.分组的位置数表示最后P帧的索引数.例如,一个GOP中有29个P帧,分成r1=13,r2=22,r3=30,分配的冗余分组数是R(r1)=20,R(r2)=15和R(r3)=12.可以描述这个分组中P帧的总失真为:

(13)

其中,tm表示这一分组的截断失真,fri+1表示后继分组的漂移失真.因为同一个分组中的P帧被编码到一个FEC块中,所以只要接收足够的FEC包,恢复过程就开始执行.因此可以得出P帧的总失真如下:

(14)

算法2.FEC补偿算法

1.Input:video frames within a GOP,RTT,T,kmin=10;

2.Output:{km,nm}1<=m<=M;

6.forj=1toRdo

7.index=0;

8.dtemp=0; //dtemp为临时变量,用于比较.

9.fori=2toMdo

10.R(i)=R(i)+1; //加一个I帧.

12.R(i)=R(i)-1;

14.index=i;

16.endif

17.endfor

18.endfor

5 实验设计和性能分析

在实验室局域网环境下搭建了一个仿真实验床(testbed),如图5所示,用于测试提出的算法在实际应用时的效果.实验需要一台服务器、一台路由器和多台客户端.服务器配置Intel Core i7 4790 四核处理器,主频3.6GHz,16GB RAM;AMD HD6750,核心频率800MHz,显存1024M;安装64位Windows7 操作系统;使用VMware Workstation 10版本虚拟机,每个虚拟机配置了双核和2G的内存并安装Windows7系统.路由器安装并运行dummynet,用以调节延迟、丢包率和网络带宽模拟真实的网络环境.客户端都配置Intel Core i5-2.3GHz CPU,8GB内存,120GB SSD.

图5 网络拓扑结构Fig.5 Network topology

实验测试选取Dirt、Farcry和Starcraft这三个游戏,游戏SLA需求设定为30个FPS.让每个游戏单独运行于虚拟机中,并且让3个虚拟机同时运行在服务器上.

5.1 帧率控制算法对游戏帧数的影响

通过与不运行帧率控制算法时比较,分析各游戏的FPS值,如图6所示,图6(a)和图6(b)是游戏运行时对应的帧数,图6(c)和图6(d)是3秒内游戏帧数的概率百分比;图6(a)和图6(c)是不运行该算法时,各游戏的FPS值.从图6(a)可以看出,在一个GPU上同时运行多个游戏存在资源分配不平衡的问题.有些游戏的FPS值很高,有些游戏的FPS值很低,甚至低于30帧,从图6(c)中可以看出Dirt的帧数在23到28之间,占据了73%,达不到流畅的要求,Farcry的帧数比较分散且不稳定,这是因为由于多个游戏同时对GPU资源的争夺,有的游戏的资源请求得不到及时的处理,从而导致其FPS波动很大.从图6(a)上我们还可以看出,由于游戏场景的变换,所以他们的FPS值也一直在变换;游戏帧数的突上突下还说明运行在云游戏服务器上的游戏极易受到整个系统环境的影响,比如被系统中比较耗CPU资源的不是游戏程序的程序抢占了CPU资源,从而导致FPS突然下降.

图6 帧率控制算法分析Fig.6 Analysis of frame rate control algorithm

从图6(b)和图6(d)中可以看出,在运行该算法后,测试刚开始时Dirt的PFS低于30,此时,帧率控制算法检测到,就开始调度工作,通过释放其他两个游戏的一部分GPU资源给Dirt,从而使Dirt满足SLA需求,从图6(d)可知Dirt只有6%的帧小于30,且在27到29之间,说明该算法具有很好的及时性.经过分析可知,帧率控制算法能够有效调节各游戏帧数,满足最低服务等级协议,充分利用了GPU资源,为FEC编码提供保证.

5.2 FEC补偿算法对服务质量的影响

本小节我们从画面质量分析FEC补偿算法对云游戏用户体验的影响.

实验分别获取在运行该算法前后的一段视频,保存为YUV格式,从每一段视频上截取相同的长度为50s的视频,计算出多组PSNR数据,求取平均值,评估该算法对云游戏画面质量的影响.图7反映了该算法对游戏画面PSNR值的影响.观察这些数据可知,运行该算法时的画面质量比不运行时更好,PSNR平均高了7.85dB,这是因为FEC补偿算法分析了传输丢包率和网络状况从而减少总的丢包率,并且提供了冗余数据包,可以恢复丢失的源数据帧;还可以发现有线网络接受的平均视频质量是高于无线网络的,并且比无线网络更稳定.在表1中,展示了视频质量结果PSNR与游戏帧率的关系,可以发现视频质量随着帧率的增加而变好,并且帧率越高该算法效果越好.

图7 FEC补偿算法分析Fig.7 Analysis of FEC compensation algorithm

表1 PSNR数据表Table 1 Data table of PSNR

实验结果表明FEC补偿算法能够提高云游戏的画面质量,缓解丢帧所引起的花屏、卡顿现象,提高游戏服务质量.

5.3 策略整体对云游戏响应延迟的影响

实验分别在运行策略前和运行策略后进行测试,在这两个不同环境下触发云游戏的按键事件,通过观察游戏画面的改变测算出从事件发生到出现结果的总延迟,评估该策略对总延迟的影响.

表2反映了运行该策略前后云游戏的总延迟.观察这些数据可知,该策略会影响云游戏的总延迟,平均延迟增加了24ms.这主要是因为比原来增加了冗余包,需要更多的传输时延和处理延迟.文献[3]表明,不同类别的游戏可以容忍的延迟程度不同,例如,对延迟最敏感的第一人称射击游戏要求延迟不能超过100ms.在云游戏的应用场景中,该策略能够提高用户的游戏体验,所引起的延迟在可接受的范围内,基本满足云游戏严格的延迟要求.

表2 云游戏总延迟数据表Table 2 Total delay of cloud gaming

6 结束语

本文提出了云游戏中基于帧率控制的FEC弥补策略.其主要目的是通过FEC编码来解决无线网络中由于丢帧所引起的服务质量差的问题.该策略先通过帧率控制算法使运行在同一个GPU上的游戏满足SLA;然后通过FEC补偿算法根据网络状况最小化估算冗余包的数量,使客户端丢失的源数据可以恢复.实验结果表明,该策略能够优化游戏画面,提高云游戏的服务质量.

[1] Cai W,Shea R,Huang C Y,et al.A survey on cloud gaming:future of computer games[J].IEEE Access,2016,4(99):7605-7620.

[2] Ogata K.Discrete-time control systems [M].Englewood Cliffs,NJ:Prentice Hall,1995.

[3] Huang C Y,Hsu C H,Chen K T.Gaming anywhere:an open-source cloud gaming platform[J].ACM SIG Multimedia Records,2015,7(1):3-5.

[4] Hong H J,Chen D Y,Huang C Y,et al.Placing virtual machines to optimize cloud gaming experience[J].IEEE Transactions on Cloud Computing,2015,3(1):42-53.

[5] Dowty M,Sugerman J.GPU virtualization on VMware′s hosted I/O architecture [J].ACM SIGOPS Operating Systems Review,2009,43(3):73-82.

[6] Zhang C,Yao J,Qi Z,et al.vGASA:Adaptive scheduling algorithm of virtualized GPU resource in cloud gaming [J].IEEE Transactions on Parallel and Distributed Systems,2014,25(11):3036-3045.

[7] Ugon B,Nandong J,Zang Z.Advanced PID controller synthesis using multiscale control scheme[C].Proceedings of Industrial Electronics and Applications,IEEE,2014:775-780.

[8] Gilbert E N.Capacity of a burst-noise channel [J].Bell Labs Technical Journal,1960,39(5):1253-1265.

[9] Freris N M,Hsu C H,Singh J P,et al.Distortion-aware scalable video streaming to multinetwork clients [J].IEEE/ACM Transactions on Networking,2013,21(2):469-481.

[10] Wu J,Yuen C,Wang M,et al.Content-aware concurrent multipath transfer for high-definition video streaming over heterogeneous wireless networks [J].IEEE Transactions on Parallel and Distributed Systems,2016,27(3):710-723.

[11] Sharma V,Kar K,Ramakrishnan K K,et al.A transport protocol to exploit multipath diversity in wireless networks [J].IEEE/ACM Transactions on Networking(TON),2012,20(4):1024-1039.

[12] Wu J,Yuen C,Cheung N M,et al.Streaming mobile cloud gaming video over TCP with adaptive Source-FEC coding[J].IEEE Transactions on Circuits & Systems for Video Technology,2017,27(1):32-48.

[13] Wu J,Cheng B,Wang M,et al.Delivering high-frame-rate video to mobile devices in heterogeneous wireless networks [J].IEEE Transactions on Communications,2016,64(11):4800-4816.

猜你喜欢
控制算法数据包客户端
你的手机安装了多少个客户端
“人民网+客户端”推出数据新闻
——稳就业、惠民生,“数”读十年成绩单
基于模型预测控制算法的智能密度控制系统在选煤厂的应用
二维隐蔽时间信道构建的研究*
基于Backstepping的非线性无人船航向控制算法
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
C#串口高效可靠的接收方案设计
ABS自动优化控制算法及应用
基于非线控制算法的三相感应异步电机设计
新华社推出新版客户端 打造移动互联新闻旗舰