一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种动态定时器及VirtIOGPU性能优化方法与流程

2022-07-31 06:54:17 来源:中国专利 TAG:

一种动态定时器及virtio gpu性能优化方法
技术领域
1.本专利申请属于virtio gpu性能优化技术领域,更具体地说,是涉及一种动态定时器及基于该动态定时器的virtio gpu性能优化方法。


背景技术:

2.在介绍本发明背景之前,首先介绍一下本行业的相关缩略语和关键术语。
3.云桌面:云桌面又称桌面虚拟化,是虚拟化和云计算时代的典型应用。云桌面通过云计算技术在云端数据中心搭建服务器集群,创建多个虚拟机以提供远程的计算、存储、应用程序等个性化内容的远程服务,用户通过各种云终端设备通过网络连入远程云桌面,获得属于自己的计算、存储、个性化应用和数据内容,实现与本地pc一致的使用体验。云桌面通过云桌面传输协议向用户交付。云桌面传输协议是云桌面核心技术之一,决定着云桌面的效率和展现效果。
4.qemu:全称为quick emulator,是一个功能强大的、开源的模拟器和虚拟机。作为模拟器使用时,它可以通过动态翻译指令,直接在操作系统上运行不同架构的应用程序;作为虚拟机使用时,它可以模拟出功能完整的计算机设备。在linux环境下,qemu通常配合kvm使用,其中kvm负责cpu、内存等的虚拟化,qemu负责外设的虚拟化,如硬盘、网卡、显卡等。
5.kvm:全称为kernel-based virtual machine,即基于内核的虚拟机,是采用硬件虚拟化技术的全虚拟化解决方案。
6.virtio gpu:全称为virtual i/o gpu,也写做virtio-gpu,是一种基于virtio技术的半虚拟化显卡。virtio及相关设备规范由组织oasis维护,旨在为虚拟环境提供一个通用的、高效的虚拟设备机制。目前,qemu和linux内核均已支持virtio gpu设备。相比于qxl等完全虚拟化显卡,virtio gpu可以配合virgl等工具,借助宿主机的物理显卡进行硬件加速,从而大大提高虚拟机的图形性能。
7.本发明的背景介绍如下:
8.桌面虚拟化是虚拟化技术中的重要分支,其中又以远程桌面虚拟化最为关键。远程虚拟化通常被称为云桌面,其常常采用客户端-服务器的架构模式。用户在云端数据中心搭建服务器集群,创建多个虚拟机,然后通过云终端设备远程连入虚拟机。
9.通过这种方式,云桌面可以提供给用户与本地pc一致的使用体验。云桌面技术使得管理人员只需对云端数据中心进行集中的系统维护,大大降低了管理人员的工作量,同时也使得用户无需担心因本地pc故障导致的数据丢失问题,因此越来越受到企业和个人的青睐。
10.目前,大多数云桌面厂商使用qemu/kvm的架构来实现虚拟化,并搭配使用virtio gpu、qxl等虚拟显卡进行图像输出。其中qxl虚拟显卡采用基于cpu的软件渲染机制,性能较低,主要用于办公等对图形性能要求较低的场景,而virtio gpu目前已支持了后端硬件加速,可以将虚拟机的图形渲染请求转发到宿主机上的物理显卡进行处理。借助于物理显卡强大的渲染能力,virtio gpu目前的性能要大大高于qxl显卡。
11.但即便如此,目前virtio gpu相比于物理显卡,仍存在很大的性能差距,也就是qxl显卡<<virtio<<gpu物理显卡。经测试,在鲲鹏服务器和amd radeon rx550显卡下,虚拟机的3d图形性能仅相当于宿主机的30%左右。显然,这种水平的图形性能目前仍然只能用于办公等轻负荷场景,无法应用于大型的3d应用和游戏。因此,为了进一步提高virtio gpu的图形性能,扩大其应用范围,我们有必要通过一些技术手段和方法,来继续提升其渲染能力。
12.现有技术的优缺点:
13.(1)中国发明专利“优化虚拟图形处理单元利用的方法和系统”(专利号:cn102446114b)。该发明提供了用于优化虚拟图形处理单元利用的方法、系统和计算机程序产品。实施例包括为多个虚拟机中的每个虚拟机指定计算密度级别;为多个虚拟机中的每个虚拟机指定优先级级别;针对多个服务器中的每个服务器判定该服务器是否包括可用于执行多个虚拟机的计算密集型任务的虚拟机图形处理单元(vgpu);以及根据虚拟机的计算密集度级别和优先级别以及可用于执行计算密集型任务的vgpu的数据,为多个虚拟机中的一虚拟机指定一个或多个vgpu。该发明主要专注于vgpu的优化,通过优化vgpu的资源调度,来提高物理gpu的利用率,因而其方法不适用于virtio gpu等。
14.(2)中国发明专利“一种多层次细粒度的虚拟化gpu调度优化方法”(专利号:cn108710536b)。该发明公开了一种多层次细粒度的虚拟化gpu调度优化方法,分别用了3种方式来优化调度策略:基于时间和事件的调度,基于流水线的无缝调度,以及混合基于环及基于虚拟机的调度。这3种调度策略分别利用了两个虚拟机切换造成的开销、虚拟机运行分成多个阶段同时运行以及多个虚拟机利用不同环同时工作这三点作为优化方法。该发明通过修改调度器及调度策略,大大降低了切换过程的开销,并且支持了多个虚拟gpu之间的并行执行,因此一个物理gpu共享的多个虚拟gpu的性能都能得到显著的提升,从而提升总体性能。然而,该发明主要专注于vgpu的性能提升,且与intel的gvt-g技术深度绑定,并不适用于virtio gpu。另外,该发明主要是从vgpu的调度上进行优化,相当于是优化资源配置,并没有涉及到vgpu的内部实现,因而提升空间有限。
15.(3)中国发明专利“一种基于推迟提交的gpu虚拟化优化方法”(专利号:cn103955394b)。该发明公开了一种基于推迟提交的gpu虚拟化优化方法。具体步骤为:1)客户机上的gpu虚拟化框架前端读入一待执行cuda应用程序的二进制文件,查找并标记可推迟提交的循环;2)前端执行到可推迟提交的循环部分时,直到该循环结束之前,缓存所有的cuda函数调用信息及其依赖关系,跳过该函数调用的执行,然后在该循环结束之后将该缓存信息一次发送到宿主机上的gpu虚拟化框架后端;3)后端根据该缓存信息重新构建函数调用并执行,然后将所有任务执行结果打包一次发回前端;可推迟提交的循环指不去执行循环中的cuda函数调用,循环依然可以正确执行。该发明减少了前后端通信的次数,而从对gpu虚拟化的性能进行优化。然而,该发明主要专注于cuda高性能计算方面,不涉及图形性能的优化。另外,该发明主要是通过修改vcuda库来提升虚拟机的通用计算效率,尚不涉及底层的虚拟gpu,故不能算严格意义上的gpu虚拟化的优化。
16.目前发展现状
17.目前,virtio gpu已支持硬件加速,可将虚拟机的渲染请求转发到宿主机的物理显卡上,由物理显卡代为渲染。这种方式可以极大的提高virtio gpu的图像性能,但限于实
现机制等原因,与物理显卡相比,virtio gpu仍存在较大的性能差距。
18.要想继续提高virtio gpu的性能,首先需要对virtio gpu的实现原理进行分析。图1是虚拟机在使用virtio gpu(已开启硬件加速)时的图像数据流的示意图,通过该图1,可以对virtio gpu的功能、实现原理以及与其它模块的关系有初步的了解。
19.参照图1,虚拟机的图像渲染和输出过程主要分为如下步骤:
20.步骤1、虚拟机内的应用程序(包括窗口系统和用户程序等)发送图像渲染请求给virtio gpu驱动;
21.步骤2、virtio gpu驱动将渲染请求整合后转发至virtio gpu设备(由宿主机侧的qemu创建);
22.步骤3、virtio gpu设备继续将渲染请求转发至物理显卡;
23.步骤4、物理显卡处理各个渲染请求,并生成最终的桌面图像;
24.步骤5、virtio gpu从物理显卡获取桌面图像;
25.步骤6、virtio gpu将桌面图像转发至spice服务器等;
26.步骤7、spice服务器将桌面图像通过spice协议发送给spice客户端;
27.步骤8、spice客户端接收桌面图像,并展示给用户。
28.显然,在整个过程中,步骤3~5是virtio gpu的核心部分,也是提升其性能的关键所在。下面我们将对这部分进行详细分析,以便理解其中存在的性能瓶颈。
29.图2是virtio gpu处理单个渲染请求的示意图,步骤大致如下:
30.1.virtio gpu设备收到渲染请求;
31.2.virtio gpu将渲染请求转发至物理显卡;
32.3.virtio gpu查询物理显卡中所有渲染请求的完成状态,并将已完成的请求通知给应用程序。若当前请求也已处理完成,则本次渲染结束,否则进入步骤4。
33.4.virtio gpu启动超时时间为10毫秒的状态轮询定时器,待定时器超时后再次进入步骤3;
34.需要注意的是,步骤3中查询的是所有已转发到物理显卡的请求的完成状态,而不仅仅是当前请求。由于物理显卡处理请求需要耗费一定时间,所以在一般情况下,当virtio gpu转发请求后立即查询状态时,当前请求都是未完成的,而已完成的都是之前的请求。下面结合图3进行具体分析:
35.这里将重点分析渲染请求n和n 1,它们的处理过程分别代表了两种情况:
36.对于请求n:当物理显卡处理完请求n后不久,virtio gpu便收到并转发了请求n 1,然后立即查询了完成状态。于是,virtio gpu及时的发现了请求n已处理完成,并通知了应用程序。
37.而对于请求n 1:当物理显卡处理完请求n 1后,virtio gpu在相当长的时间内都没有收到新的请求,故也没能及时的查询完成状态。直到状态轮询定时器(10毫秒)超时后,virtio gpu才迟迟的发现请求n 1早已完成,然后通知了应用程序。
38.通过对比请求n和n 1的处理过程,我们发现请求n的状态反馈是较及时的,而请求n 1的状态反馈则被大大延后,从而导致了二者在物理渲染时间相近的情况下,请求n 1(体现在virtio gpu上)的虚拟渲染时间要远远大于请求n(最高可接近10毫秒)。
39.显然,产生该性能问题的主要原因是轮询定时器的超时时间过长。目前,物理显卡
的性能正在飞速提升,大部分渲染请求都能在很短的时间内完成。经测试,在鲲鹏服务器和amd radeon rx550显卡下,绝大部分的virtio gpu渲染请求的处理耗时都在微秒级别。故此处以10毫秒为周期进行状态查询时,就会出现物理显卡早已处理完成,但virtio gpu仍未知的情况,进而导致virtio gpu层面的虚拟渲染时间过长,最终体现为性能低下。


技术实现要素:

40.本发明需要解决的技术问题是提供一种动态定时器及基于该动态定时器的virtio gpu性能优化方法,该动态定时器的超时时间可动态变化,来替代virtio gpu中的固定时间间隔的状态轮询定时器,可解决virtio gpu中渲染请求完成状态的反馈不及时的问题,从而提高渲染请求的处理速度,并最终提高其整体图形性能。
41.为了解决上述问题,本发明所采用的技术方案是:
42.一种动态定时器,通过动态算法计算超时时间,使得超时时间可动态变化。
43.进一步,动态算法包括但不限于指数递增算法、动态逼近算法、移动平均算法的一种。指数递增算法为规定区间内的指数递增算法。
44.进一步,规定区间内的指数递增算法为:
45.本次的超时时间=上次的超时时间
×
倍增系数;
46.超时时间的初始值为100微秒,最大值为10毫秒,倍增系数≥2。
47.进一步,动态逼近算法为:各个渲染任务的动态定时器的初始(即第1次)超时时间是动态变化的,其受前一个任务的完成情况的影响;若前一个任务在初始超时时间内完成,则当前渲染任务会尝试缩短初始超时时间,若前一个任务未能在初始超时时间内完成,则当前任务会尝试增大初始超时时间;第2次及以后的超时时间不受前一个任务影响,为固定的100微秒。
48.进一步,动态逼近算法具体为:
49.将渲染任务定义为n,当前的渲染任务的动态定时器的初始超时时间定义为tn,下一个渲染任务的动态定时器的初始超时时间定义为t
n 1
,则有:
[0050][0051]
其中:时间单位均为微秒,n为渲染任务,rn表示渲染任务n完成时动态定时器的重启次数,所有初始超时时间的最小值均为100;
[0052][0053]
[0054]
进一步,移动平均算法为:各个渲染任务的动态定时器的超时时间(包括第1次及以后)均是动态变化的,具体超时时间为前数个任务完成时的总超时时间的移动平均值。
[0055]
进一步,具体超时时间为前10个任务完成时的总超时时间的移动平均值。
[0056]
进一步,将渲染任务定义为n,当前的渲染任务的动态定时器的单次超时时间定义为tn,下一个渲染任务的单次超时时间定义为t
n 1
,渲染任务n完成时的总超时间定义为tn,上一个渲染任务完成时的总超时时间定义为t
n-1
,以此类推,则有:
[0057][0058]
其中:时间单位均为微秒,p为最近10个任务在首次超时内的完成率(即p=最近10个任务中在首次超时内完成的数量
÷
10),tn=tn*(1 rn),rn表示渲染任务n完成时动态定时器的重启次数,所有超时时间的最小值均为100;
[0059][0060]
一种基于动态定时器的virtio gpu性能优化方法,利用了上述的动态定时器,具体步骤如下:
[0061]
步骤s1、virtio gpu设备收到渲染请求;
[0062]
步骤s2、virtio gpu将渲染请求转发至物理显卡;
[0063]
步骤s3、virtio gpu查询物理显卡中所有渲染请求的完成状态,并将已完成的请求通知给应用程序;若当前请求也已处理完成,本次渲染结束,否则若当前请求未处理完成,进入步骤s4;
[0064]
步骤s4、virtio gpu启动动态定时器,待动态定时器超时后再次进入步骤s3。
[0065]
进一步,本方法的虚拟机3d图形性能的渲染能力为宿主机的60%-95%。
[0066]
由于采用了上述技术方案,本发明取得的有益效果是:
[0067]
1.解决了virtio gpu中渲染请求完成状态的反馈不及时的问题,从而提高了渲染请求的处理速度,并最终提高了virtio gpu的整体图形性能。
[0068]
2.未改变qemu内部核心逻辑,保持了软件的良好兼容性。
[0069]
3.之前虚拟机的3d图形性能仅相当于宿主机的30%左右,而采用本方法后,渲染能力可达到更强的水平:(1)在鲲鹏920服务器和amd radeon rx550显卡环境下,使用3d图形性能测试工具glmark2在虚拟机内对virtio gpu进行测试,其性能得分为4093,相当于宿
主机(6663分)的61%,较之前(约30%)提高了约200%;(2)在intel i5-9500 cpu和intel uhd graphics 630显卡环境下,虚拟机glmark2得分为2641,相当于宿主机(2869分)的92%,较之前(约30%)提高了约300%。所以本发明的方法相比之前的虚拟机3d图形性能,提高了2-3倍,性能提升幅度极高。
附图说明
[0070]
图1为启用virtio gpu硬件加速的虚拟机的图像数据流图;
[0071]
图2为virtio gpu处理单个渲染请求的过程图;
[0072]
图3为virtio gpu连续处理多个渲染请求的过程图;
[0073]
图4为实施例一引入动态定时器的virtio gpu处理单个渲染请求的过程图。
具体实施方式
[0074]
下面结合实施例对本发明做进一步详细说明。
[0075]
本发明公开了一种动态定时器,动态定时器的动态性主要体现在超时时间的动态计算上,通过动态算法计算超时时间,使得超时时间可动态变化。本发明的动态定时器不侧重于动态定时器本身,而在于通过引入一种可变的超时时间机制,来替代原有的固定超时时间机制,以提高virtio gpu的响应速度,实现性能的提升。
[0076]
该动态定时器还可持多种超时时间动态计算算法,并根据用户配置随时切换,目前支持的算法有:指数递增算法、动态逼近算法、移动平均算法
[0077]
指数递增算法为规定区间内的指数递增算法,具体为:
[0078]
本次的超时时间=上次的超时时间
×
倍增系数;
[0079]
超时时间的初始值为100微秒,最大值为10毫秒,倍增系数≥2。比如倍增系数可以为2、3、4等自然数。
[0080]
对于指数递增算法,其超时时间的初始值、最大值和倍增系数可支持通过配置文件进行动态配置并即时生效。
[0081]
除此之外,本发明还公开了一种基于该动态定时器的virtio gpu性能优化方法,该动态定时器通过动态算法计算超时时间,使得超时时间可动态变化。
[0082]
具体步骤如下:
[0083]
步骤s1、virtio gpu设备收到渲染请求;
[0084]
步骤s2、virtio gpu将渲染请求转发至物理显卡;
[0085]
步骤s3、virtio gpu查询物理显卡中所有渲染请求的完成状态,并将已完成的请求通知给应用程序;若当前请求也已处理完成,本次渲染结束,否则若当前请求未处理完成,进入步骤s4;
[0086]
步骤s4、virtio gpu启动动态定时器,待动态定时器超时后再次进入步骤s3。
[0087]
本发明方法性能优异,利用本方法的虚拟机3d图形性能的渲染能力为宿主机的60%-95%。
[0088]
下面举例详细说明。
[0089]
实施例一
[0090]
本实施例的动态算法是规定区间内的指数递增算法,比如设置规则为:
[0091]
本次的超时时间=上次的超时时间
×
倍增系数。
[0092]
超时时间的初始值为100微秒,最大值为10毫秒。
[0093]
基于该动态定时器的virtio gpu性能优化方法参见图4,具体包括以下步骤:
[0094]
步骤s1、virtio gpu设备收到渲染请求;
[0095]
步骤s2、virtio gpu将渲染请求转发至物理显卡;
[0096]
步骤s3、virtio gpu查询物理显卡中所有渲染请求的完成状态,并将已完成的请求通知给应用程序。若当前请求也已处理完成,则本次渲染结束;否则若当前请求未处理完成,进入步骤s4。
[0097]
步骤s4、virtio gpu启动动态定时器,待动态定时器超时后再次进入步骤3。其中,动态定时器的超时时间采用了规定区间内的指数递增算法,规则如下(亦可参见表1):倍增系数定为。
[0098]
本次的超时时间=上次的超时时间
×
2;
[0099]
超时时间的初始值为100微秒,最大值为10毫秒;
[0100]
表1动态定时器的超时时间
[0101][0102][0103]
通过以上步骤后,即可大幅改善virtio gpu中渲染请求完成状态的反馈延迟(第8次及以后才都维持在10毫秒,大多数情况下,反馈的延迟将不高于100微秒),进而提高渲染请求的处理速度,并最终提高其整体图形性能。
[0104]
本发明的动态定时器用于轮询virtio gpu中的渲染请求完成状态,其通过特定的算法动态计算定时器的超时时间,虽然实施例采用的是一定区间内的指数递增算法,但其它动态计算方法都应属于本发明的范畴。
[0105]
示例二、动态逼近算法:
[0106]
在本实施例的动态逼近算法中,各个渲染任务的动态定时器的初始(即第1次)超时时间是动态变化的,其受前一个任务的完成情况的影响。若前一个任务在首次超时内完成,则当前渲染任务会尝试缩短初始超时时间,若前一个任务未能在首次超时内完成,则当
前任务会尝试增大初始超时时间。另外,第2次及以后的超时时间不受前一个任务影响,为固定的100微秒。
[0107]
算法逻辑:
[0108]
将当前的渲染任务n的动态定时器的初始超时时间定义为tn,下一个渲染任务的动态定时器的初始超时时间定义为t
n 1
,则有:
[0109][0110]
其中:时间单位均为微秒,n为渲染任务,rn表示渲染任务n完成时动态定时器的重启次数,所有初始超时时间的最小值均为100。
[0111][0112][0113]
具体步骤:
[0114]
步骤1.为渲染任务n启动动态定时器,并将超时时间设置为tn,定时器重启次数rn设置为0;
[0115]
步骤2.动态定时器首次超时,并检查渲染任务n的完成状态,根据情况:
[0116]
(1)若已完成,则使t
n 1
=t
n-100,本次渲染结束;
[0117]
(2)若未完成,进入步骤3;
[0118]
步骤3.重新启动动态定时器,设置超时时间为100微秒,并将重启次数rn加1;
[0119]
步骤4.动态定时器再次超时,并检查渲染任务完成状态,根据情况:
[0120]
(1)若未完成:进入步骤3;
[0121]
(2)若已完成,则使t
n 1
=tn 100
×rn
,本次渲染结束。
[0122]
示例三、移动平均算法:
[0123]
在本实施例的移动平均算法中,各个渲染任务n的动态定时器的超时时间(包括第1次及以后)是动态变化的,其主要参考前10个任务完成时的总超时时间的移动平均值。
[0124]
算法逻辑:
[0125]
将渲染任务定义为n,当前的渲染任务n的动态定时器的单次超时时间定义为tn,下一个渲染任务的单次超时时间定义为t
n 1
,当前的渲染任务n完成时的总超时间定义为tn,上一个渲染任务完成时的总超时时间定义为t
n-1
,以此类推,则有:
[0126][0127]
其中:时间单位均为微秒,p为最近10个任务在首次超时内的完成率(即p=最近10个任务中在首次超时内完成的数量
÷
10),tn=tn*(1 rn),rn表示渲染任务n完成时动态定时器的重启次数,所有超时时间的最小值均为100。
[0128][0129]
具体步骤为:
[0130]
1.为渲染任务n启动动态定时器,并将超时时间设置为tn,定时器重启次数rn设置为0;
[0131]
2.动态定时器首次超时,检查并保存渲染任务n在首次超时时的完成状态,根据情况:
[0132]
(1)若已完成:进入步骤5;
[0133]
(2)若未完成,进入步骤3;
[0134]
3.重新启动动态定时器,并设置超时时间为tn,将重启次数rn加1;
[0135]
4.动态定时器再次超时,并检查渲染任务完成状态,根据情况:
[0136]
(1)若未完成:进入步骤3;
[0137]
(2)若已完成,步骤5;
[0138]
5.计算并保存任务n完成时的总的超时时间为tn,即tn=tn×
(1 rn);
[0139]
6.统计并分析最近10个渲染任务在“首次超时”内的完成情况,并计算首次完成率p,然后根据公式计算下一个渲染任务的超时时间t
n 1

[0140]
7.本次渲染结束。
[0141]
之前虚拟机的3d图形性能仅相当于宿主机的30%左右,而采用本方法后,渲染能力可达到更强的水平:(1)在鲲鹏920服务器和amd radeon rx550显卡环境下,使用3d图形性能测试工具glmark2在虚拟机内对virtio gpu进行测试,其性能得分为4093,相当于宿主机(6663分)的61%,较之前(约30%)提高了约200%;(2)在intel i5-9500 cpu和intel uhd graphics 630显卡环境下,虚拟机glmark2得分为2641,相当于宿主机(2869分)的92%,较之前(约30%)提高了约300%。所以本发明的方法相比之前的虚拟机3d图形性能,提高了2-3倍,性能提升幅度极高。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献