一种基于virgl图形技术栈的渲染API转发方法与流程

文档序号:37929333发布日期:2024-05-11 00:08阅读:6来源:国知局
一种基于virgl图形技术栈的渲染API转发方法与流程

本发明涉及虚拟化桌面,具体提供一种基于virgl图形技术栈的渲染api转发方法。


背景技术:

1、为实现高性能云桌面、满足云桌面用户对于图像处理、平面设计、3d建模和3d游戏等对3d渲染性能有较高要求的应用场景的需求,业界开始研究如何通过宿主机服务器上的物理显卡来加速云桌面虚拟机上的3d图形渲染,即gpu虚拟化技术。

2、常见的gpu虚拟化技术可以分为三个类别:gpu直通、gpu硬件虚拟化和渲染api转发方案。其中gpu直通方案是将物理gpu直接透传到云桌面虚拟机中使用,虽然可以大幅提升云桌面3d渲染性能,但需要将物理gpu与虚拟机一一绑定;gpu硬件虚拟化方案则可以将物理gpu划分成多个虚拟gpu,可以同时满足多个虚拟机使用需要,但是存在需要显卡厂商和昂贵的专业显卡支持、不同厂商之间实现方案不兼容以及需要额外付费授权等问题;以“virgl”图形技术栈为代表的渲染api转发方案则是基于api转发的思想,将云桌面虚拟机中的3d渲染指令转发到宿主机,再由宿主机负责调用物理gpu完成3d渲染指令的执行并返回执行结果,基于此方案,无需专业显卡支持,通过一块消费级显卡即可同时满足多个虚拟机中的3d图形渲染加速需求,具有通用、成本低、适用范围广等优点。

3、然而,当前“virgl”图形技术栈实现的渲染api转发方案仍存在性能较低的缺点。经glmark2渲染基准程序测试发现:在cpu、内存、显卡均保持一致的情况下,采用“virgl”图形技术栈的云桌面虚拟机的3d渲染性能只能达到相同配置物理机的3d渲染性能的1/3,阻碍了“virgl”图形技术栈在实用商业领域的推广和使用。

4、如图1所示,“virgl”图形技术栈即是渲染api转发方案的一种开源实现。“virgl”图形技术栈主要包括四个部分的组件:(1)包含3d支持的virtio-gpu驱动;(2)包含virgl3d驱动程序的mesa库;(3)qemu 端实现的virtio-gpu虚拟显卡;(4)宿主机端的virglrenderer库;。“virgl”图形技术栈主要处理流程为:首先,包含virgl 3d驱动程序的mesa库会缓存3d应用产生的opengl指令,并将其封装成virgl指令;其次,virgl指令会通过包含3d支持的virtio-gpu驱动转发到宿主机服务器上qemu 端实现的virtio-gpu虚拟显卡;再次,virtio-gpu虚拟显卡将调用宿主机端的virglrenderer库完成virgl指令的解析,还原为opengl指令;最终,由宿主机端的mesa库来执行opengl指令,调用物理显卡驱动完成3d渲染任务。

5、如图1所示,为了同步虚拟机cpu和宿主机上物理gpu的执行过程,确保图形渲染不出现错误,virtio-gpu虚拟显卡在处理virgl指令的同时,还需要完成渲染同步工作,具体流程步骤如下:

6、① virtio-gpu虚拟显卡完成一条virgl指令的处理。一条virgl指令实际封装了一组opengl渲染指令,完成virgl指令的处理并不意味着物理gpu完成了这组opengl渲染指令的执行,而是virtio-gpu虚拟显卡调用virglrenderer库将virgl指令解析还原为opengl渲染指令,并加入到宿主机的opengl渲染指令执行缓存队列中,物理gpu会依次执行缓存队列中的opengl渲染指令;

7、② 为实现渲染同步,虚拟机需要知道物理gpu是何时完成了这组opengl渲染指令的执行,从而指导后续的渲染指令的生成。因此,当完成一条virgl指令的处理后,virtio-gpu虚拟显卡会通过virglrenderer库生成一个渲染同步指令加入到宿主机的opengl渲染指令执行缓存队列中;

8、③ 当物理gpu执行到缓存队列中的渲染同步指令后,会将渲染同步完成信号反馈到virglrenderer库维护的同步信号队列中;

9、④virtio-gpu虚拟显卡通过渲染同步查询定时器定期查询virglrenderer库中的同步信号队列,当发现有新的渲染同步完成信号后,即可判断出同步信号对应的渲染同步指令之前的virgl指令包含的opengl渲染指令已经执行完毕,进而向虚拟机反馈virgl指令完毕信号;

10、⑤ 虚拟机根据virgl指令完毕信号的信号标识来掌握所有已生成opengl渲染指令的完成情况,进而指导后续opengl渲染指令的生成。

11、通过上述渲染同步流程,可以发现在渲染同步操作中,存在两处影响opengl渲染指令执行效率的地方:

12、(1) 渲染同步查询定时器的查询时间间隔问题:渲染同步查询定时器是按固定时间间隔来查询virglrenderer库中的同步信号队列,这就使得可能物理gpu已经反馈了渲染同步完成信号,而virtio-gpu虚拟显卡仍需要一段时间后才能发现,从而导致渲染同步完成信号反馈不及时,影响了虚拟机对opengl渲染指令执行情况的判断,延误了后续渲染指令的生成。

13、(2) api转发链路和渲染同步完成信号反馈链路过长的问题:从图1的“virgl”渲染api转发方案框架可以发现,无论是虚拟机的opengl渲染指令转发到宿主机执行,还是宿主机反馈渲染同步完成信号回虚拟机,均需要经过较长的传播链路,存在较大的传播开销,使得渲染指令执行和同步信号反馈均存在一定的时延,这些时延也会影响虚拟机对opengl渲染指令执行情况的判断,延误了后续渲染指令的生成。后续渲染指令的生成的延误会使得物理gpu的实际使用率得不到提升,从而影响云桌面虚拟机的3d渲染性能。

14、经过上述分析,发现在“virgl”图形技术栈实现的渲染api转发方案中,api转发流程中的渲染同步阶段存在查询不及时、同步链路长等问题,导致“virgl”图形技术栈实现的渲染api转发方案性能较低。

15、中国发明专利“优化虚拟图形处理单元利用的方法和系统”(专利号:cn102446114b)。该发明提供了用于优化虚拟图形处理单元利用的方法、系统和计算机程序产品。实施例包括为多个虚拟机中的每个虚拟机指定计算密度级别;为多个虚拟机中的每个虚拟机指定优先级级别;针对多个服务器中的每个服务器判定该服务器是否包括可用于执行多个虚拟机的计算密集型任务的虚拟机图形处理单元(vgpu);以及根据虚拟机的计算密集度级别和优先级别以及可用于执行计算密集型任务的vgpu的数据,为多个虚拟机中的一虚拟机指定一个或多个vgpu。该发明主要专注于vgpu的优化,通过优化vgpu的资源调度,来提高物理gpu的利用率,因而其方法不适用于virtio-gpu等。

16、中国发明专利“一种多层次细粒度的虚拟化gpu调度优化方法”(专利号:cn108710536b)。该发明公开了一种多层次细粒度的虚拟化gpu调度优化方法,分别用了3种方式来优化调度策略:基于时间和事件的调度,基于流水线的无缝调度,以及混合基于环及基于虚拟机的调度。这3种调度策略分别利用了两个虚拟机切换造成的开销、虚拟机运行分成多个阶段同时运行以及多个虚拟机利用不同环同时工作这三点作为优化方法。该发明通过修改调度器及调度策略,大大降低了切换过程的开销,并且支持了多个虚拟gpu之间的并行执行,因此一个物理gpu共享的多个虚拟gpu的性能都能得到显著的提升,从而提升总体性能。然而,该发明主要专注于vgpu的性能提升,且与intel的gvt-g技术深度绑定,并不适用于virtio-gpu。另外,该发明主要是从vgpu的调度上进行优化,相当于是优化资源配置,并没有涉计到vgpu的内部实现,因而提升空间有限。

17、中国发明专利“一种基于推迟提交的gpu虚拟化优化方法”(专利号:cn103955394b)。该发明公开了一种基于推迟提交的gpu虚拟化优化方法。该发明通过缓存cuda函数调用信息及其依赖关系和批量发送缓存信息到宿主机gpu上执行的方法,减少了前后端通信的次数,从而对gpu虚拟化的性能进行优化。然而,该发明主要专注于cuda高性能计算方面,不涉及图形性能的优化。另外,该发明主要是通过修改vcuda库来提升虚拟机的通用计算效率,尚不涉及底层的虚拟gpu,故不能算严格意义上的gpu虚拟化的优化。

18、中国发明专利“一种基于xen安全计算机显示优化的方法”(专利号:cn102135866a)。该发明提供了一种基于xen安全计算机显示优化的方法,包括宿主系统的简化后端、客户系统的定制前端驱动、以及前后端之间的通信优化;该发明的主要思想是通过前后端共享内存、i/o端口截获等方法来优化前后端通信,通过减少宿主机和虚拟机之间的单次通信开销的方式来提升虚拟机的显示性能。但是该发明一定程度上会影响实际图形的输出。

19、中国发明专利“提升显示帧缓存图像读取效率的方法”(专利号:cn116166367a)。该发明提供了一种提升显示帧缓存图像读取效率的方法,采用比较前后帧图像的方式,得到当前帧图像变化的区域,通过仅读取显示帧缓存中图像变化区域内的图像数据的方法,有效减少减少从宿主机物理显卡中提取云桌面屏幕图像数据所造成的显卡性能损耗,从而提升云桌面的渲染性能。该发明用于基于virgl图形技术栈的虚拟gpu 3d加速方案的性能优化,减少读取从宿主机物理显卡中提取云桌面屏幕图像数据所造成的显卡性能损耗;但是缺乏对于如何通过让虚拟机在单位时间生成更多渲染指令的方式来提升宿主机物理gpu的利用率的优化。


技术实现思路

1、为了克服上述缺陷,提出了本发明,解决了现有技术中在“virgl”图形技术栈实现的渲染api转发方案中,渲染同步阶段存在查询不及时、同步链路长等技术问题。

2、本发明提出一种基于virgl图形技术栈的渲染api转发方法,包括以下步骤:

3、virtio-gpu虚拟显卡根据预设的频次判断物理gpu是否超载,若否,则执行以下操作:

4、s11:向qemu虚拟机发送前台应用的opengl渲染指令对应的virgl指令;

5、s12:qemu虚拟机上的virtio-gpu虚拟显卡接收所述virgl指令,并将virgl指令缓存到virgl指令缓存队列中;

6、s13:调用virglrenderer库依次处理virgl指令缓存队列中的一条virgl指令,并将处理后的virgl指令发送给宿主机mesa库;

7、s14:virglrenderer库向virtio-gpu虚拟显卡返回virgl指令处理完毕信号;

8、s15:virtio-gpu虚拟显卡生成并发送virgl指令执行完毕信号给qemu虚拟机,用于生成后续virgl指令使qeum虚拟机接收;

9、s16:virtio-gpu虚拟显卡通过virglrenderer库生成并发送渲染同步指令给宿主机mesa库;

10、s17:当物理gpu执行到渲染同步指令时,宿主机mesa库生成并发送渲染同步完成信号添加到virglrenderer库的同步信号队列中;

11、s18:当检测到有新增的渲染同步信号后,重复执行步骤s13至步骤s17。

12、进一步,所述步骤s18包括步骤:

13、s181:当渲染同步监听器监听到virglrenderer库的同步信号队列新增了一个渲染同步完成信号后,通知virtio-gpu虚拟显卡;

14、s182:virtio-gpu虚拟显卡接收到渲染同步监听器的通知信号后,重复执行步骤s13至步骤s17。

15、进一步,所述步骤s11包括步骤:

16、s111:虚拟机mesa库缓存前台应用的opengl渲染指令;

17、s112:当opengl渲染指令缓存已满或前台应用发送glflush/glfinish刷新指令后,虚拟机mesa库通过virgl 3d驱动程序将opengl渲染指令缓存封装成virgl指令并发送给虚拟机内核的virtio-gpu驱动;

18、s113:virtio-gpu驱动将virgl指令转发给qemu虚拟机。

19、进一步,所述步骤s13包括步骤:

20、步骤s131:virtio-gpu虚拟显卡调用virglrenderer库将virgl指令解析还原成opengl渲染指令集合;

21、步骤s132:将集合内的所有opengl渲染指令依次发送给宿主机mesa库。

22、进一步,所述渲染api转发方法还包括步骤:

23、virtio-gpu虚拟显卡根据预设的频次判断物理gpu是否超载,若是,则执行以下操作:

24、s21:向qemu虚拟机发送前台应用的opengl渲染指令对应的virgl指令;

25、s22:qemu虚拟机上的virtio-gpu虚拟显卡接收所述virgl指令;

26、s23:调用virglrenderer库处理所述virgl指令,并将处理后的virgl指令发送给宿主机mesa库;

27、s24:virtio-gpu虚拟显卡通过virglrenderer库生成并发送渲染同步指令给宿主机mesa库;

28、s25:当物理gpu执行到渲染同步指令时,宿主机mesa库生成并发送渲染同步完成信号添加到virglrenderer库的同步信号队列中;

29、s26:当检测到同步信号队列中有新增的渲染同步完成信号后,重复执行步骤s21至步骤s25。

30、进一步,物理gpu超载的判断方法包括步骤:

31、在物理gpu空闲阶段下执行云桌面刷新,获取当前virtio-gpu虚拟显卡读取物理gpu显存中的云桌面图像的耗时,作为云桌面图像读取阈值;

32、在物理gpu繁忙阶段下执行云桌面刷新,分别获取当前virtio-gpu虚拟显卡读取物理gpu显存中的云桌面图像连续三帧的耗时;

33、判断三次耗时是否都超过云桌面图像读取阈值的1.5倍;

34、若是,则认为物理gpu发生超载。

35、本发明的有益效果包括:

36、1. 渲染同步实时监听机制:使用渲染同步监听器替代定时器进行渲染同步完成信号反馈的实时监听,可以实时反馈渲染指令的执行情况,避免因定时器的时间间隔过大造成的反馈不及时问题。

37、2. 快速反馈机制:当完成一条virgl指令的处理后,在物理gpu不过载的前提下,无需等待渲染同步完成信号反馈,而是直接生成virgl指令执行完毕信号反馈回虚拟机,从而促使虚拟机更快地生成后续渲染指令,提高物理gpu的使用率。

38、3. virgl指令缓存执行机制:将原本由虚拟机进行的渲染指令执行情况评估转移到virtio-gpu虚拟显卡中进行,减轻了api转发链路和同步信号反馈链路过长造成的传播时延,提升渲染指令生成和执行效率。

39、4. 物理gpu超载判定方法:通过对云桌面刷新时读取物理gpu显存中的云桌面图像耗时的统计来评估物理gpu是否超载,在不增加物理gpu负担的情况下可以较为准确掌握物理gpu的超载情况。

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