CN115686758B - 一种基于帧统计的VirtIO-GPU性能可控方法 - Google Patents
一种基于帧统计的VirtIO-GPU性能可控方法 Download PDFInfo
- Publication number
- CN115686758B CN115686758B CN202310000513.1A CN202310000513A CN115686758B CN 115686758 B CN115686758 B CN 115686758B CN 202310000513 A CN202310000513 A CN 202310000513A CN 115686758 B CN115686758 B CN 115686758B
- Authority
- CN
- China
- Prior art keywords
- frame
- time
- gpu
- virtio
- execution
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 66
- 238000009877 rendering Methods 0.000 claims abstract description 103
- 230000007958 sleep Effects 0.000 claims abstract description 22
- 230000004622 sleep time Effects 0.000 claims description 10
- 230000001186 cumulative effect Effects 0.000 claims description 3
- 238000012937 correction Methods 0.000 claims description 2
- 230000008569 process Effects 0.000 abstract description 25
- 125000004122 cyclic group Chemical group 0.000 abstract 1
- 238000012545 processing Methods 0.000 description 12
- 230000003111 delayed effect Effects 0.000 description 9
- 239000008186 active pharmaceutical agent Substances 0.000 description 8
- 230000005059 dormancy Effects 0.000 description 5
- 239000012634 fragment Substances 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 230000007717 exclusion Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 229920006395 saturated elastomer Polymers 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 238000007500 overflow downdraw method Methods 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Image Generation (AREA)
Abstract
本发明公开了一种基于帧统计的VirtIO‑GPU性能可控方法,包括以下步骤:配置各虚拟机VirtIO‑GPU的性能百分比percent;根据所述性能百分比percent计算各虚拟机VirtIO‑GPU在一个帧周期内的统计帧与执行帧的数量numframe;帧周期循环过程中,目标虚拟机VirtIO‑GPU在其统计帧期间锁定共享的有名信号量gpu_sem以独占访问物理GPU,并执行图形渲染命令,根据统计帧期间执行命令的总数commandnumframe、统计帧的执行时间timeframe以及设置的性能百分比percent,计算得到本次帧周期内的执行帧中每个命令间的执行间隔时间timewait,然后解锁gpu_sem;目标虚拟机VirtIO‑GPU在其执行帧期间以进程休眠的方式,按照对应的间隔时间timewait执行图形渲染命令。本发明实现了VirtIO‑GPU的图形渲染性能的可配置和性能抗干扰。
Description
技术领域
本发明涉及虚拟化领域,尤其涉及一种基于帧统计的VirtIO-GPU性能可控方法。
背景技术
随着云桌面使用场景逐步下沉,应用 GPU 技术 (Graphics Processing Unit)可以大大加速 3D 渲染的速度,提高 3D 应用的效率。当前,主流的GPU云桌面方案主要包含以下三种:
(1) GPU透传方案:物理GPU直接透传给云桌面虚拟机。GPU透传方案可以直接利用物理GPU渲染,其性能最高,但需要虚拟机与物理GPU的深度绑定,一个物理GPU只能适配一个虚拟机,其灵活性和GPU资源利用率不足,且虚拟机迁移时也需要考虑显卡的绑定问题;
(2)分片虚拟化方案:将物理GPU划分成多个虚拟GPU,每个虚拟GPU绑定一个云桌面虚拟机,如AMD的SR-IOV方案、Intel的GVT-g方案以及NVIDIA的vGPU方案。分片虚拟化方案可以使得单个物理GPU同时支持多个虚拟机,但需特定的物理GPU硬件支持,且存在支持分片虚拟化的物理GPU价格昂贵、技术实现严重依赖于GPU厂商、GPU驱动不开源以及不同厂商的分片虚拟化方案不兼容等问题;
(3) API转发方案:通过实现包裹图形API的库,这些库在虚拟机调用相关的API时,将这些图形API通过远程过程调用的方法转至服务器主机上,然后调用主机上的图形驱动提供的API支持完成调用,Virtio-GPU就属于这种类型的方案。API转发方案利于实现,而且一定程度上可以实现多个虚拟机同时调用物理GPU的功能,但是其主要问题在于API转发过程中的开销太大,像VirtIO-GPU的性能最大只能达到宿主机物理GPU的30%左右;且当API转发方案用于多虚拟机场景时,难以实现虚拟机的图形渲染性能的可配置和隔离:一个虚拟机虚拟显卡的图形渲染性能总是会因为其他虚拟机对物理GPU的使用而上下大幅波动。
中国发明专利CN109656714A 公开了一种虚拟化显卡的GPU资源调度方法,可使负载低的虚拟显卡占用GPU资源的时间更少,负载高的虚拟显卡占用GPU资源的时间更多,以提高高负载虚拟显卡的性能及运行效率,提高虚拟化显卡的总体GPU资源利用率。该发明主要用于分片虚拟化技术,无法配置Virtio-gpu的图形渲染性能。
中国发明专利CN109712060A 公开了一种基于GPU容器的云桌面显卡共享方法及系统,可避免出现显卡资源闲置的情况,提高了显卡资源利用率,降低了使用成本。该发明主要关注于显卡的显存资源的可配置,但对于显卡渲染能力的可配置并未涉及。
中国发明专利CN109582425B 公开了一种基于云端与终端GPU融合的GPU服务重定向系统及方法利用云端和终端GPU统一与共享的理念、GPU重定向技术、GPU资源调度策略以及应用窗口与云桌面融合方法,为云桌面解决方案提供有效、低成本的图形加速支持,减轻了云端服务器的计算负载,并提高了终端计算机显卡的资源利用率。该发明主要关注于如何将图形渲染重定向到配置有GPU的云端服务器上,而Virtio-gpu是在同一GPU上实现多虚拟机的图形渲染,因此也无法用该发明的方案实现Virtio-gpu图形渲染性能的可配置和抗干扰。
中国发明专利CN107423115B公开了一种显卡虚拟化的方法、装置和系统。该发明专注于解决现有技术中的显卡虚拟化的方法实现多个虚拟机同时对物理机的显卡进行访问,负载度较高的技术问题,但并没有考虑Virtio-gpu图形渲染性能的可配置和抗干扰能力的实现。
发明内容
本发明要解决的技术问题就在于:在多虚拟机环境下实现VirtIO-GPU的图形渲染性能的可配置和性能抗干扰。
针对现有技术存在的技术问题,本发明提供一种基于帧统计的VirtIO-GPU性能可控方法,通过将VirtIO-GPU执行图形渲染命令的过程划分为连续的帧周期来实现VirtIO-GPU的图形渲染性能可配置和性能抗干扰。
为解决上述技术问题,本发明提出的技术方案为:
一种基于帧统计的VirtIO-GPU性能可控方法,包括以下步骤:
配置各虚拟机VirtIO-GPU的性能百分比percent;
根据所述性能百分比percent计算各虚拟机VirtIO-GPU在一个帧周期内的统计帧与执行帧的数量numframe;
目标虚拟机VirtIO-GPU在其统计帧期间锁定共享的有名信号量gpu_sem以独占访问物理GPU,并执行图形渲染命令,根据统计帧期间执行命令的总数commandnumframe、统计帧的执行时间timeframe以及设置的性能百分比percent,计算得到本次帧周期内的执行帧中每个命令间的执行间隔时间timewait,然后解锁gpu_sem;
目标虚拟机VirtIO-GPU在其执行帧期间按照对应的间隔时间timewait执行图形渲染命令。
进一步的,各虚拟机VirtIO-GPU在一个帧周期内的统计帧与执行帧的数量numframe的具体计算公式如下:
上式中,percent为当前虚拟机VirtIO-GPU的性能百分比。
进一步的,根据统计帧期间执行命令的总数commandnumframe、统计帧的执行时间timeframe以及设置的性能百分比percent,计算得到本次帧周期内的执行帧中每个命令间的执行间隔时间timewait的步骤包括:
获取当前统计帧期间执行命令的总数commandnumframe、当前统计帧执行时间timeframe以及命令的累计执行时间timeallcommands;
若timeallcommands<timeframe,且timeallcommands<timeframe×percent,令timewait=0;
若timeallcommands<timeframe,且timeallcommands>timeframe×percent,用预设的经验常量a更新commandnumframe后,根据timeframe和commandnumframe计算执行间隔时间timewait;
若timeallcommands>timeframe,根据上一个帧周期等待gpu_sem解锁的等待时间timewaitgpusem来修正timeframe,根据timeframe和commandnumframe计算执行间隔时间timewait。
进一步的,用预设的经验常量a更新commandnumframe的具体计算公式如下:
其中,等号右方的commandnumframe为更新前的当前统计帧期间执行命令的总数,timeframe为当前统计帧的执行时间,timeallcommands为命令的累计执行时间。
进一步的,根据timeframe和commandnumframe计算执行间隔时间timewait的具体计算公式如下:
其中,numframe为当前统计帧对应的帧周期内的统计帧与执行帧的总数,percent为当前虚拟机VirtIO-GPU的性能百分比,commandnumframe为当前统计帧期间执行命令的总数,timeframe为当前统计帧执行时间。
进一步的,根据timeframe和commandnumframe计算执行间隔时间timewait之前,还根据上一个帧周期等待gpu_sem解锁的等待时间timewaitgpusem来修正timeframe,具体计算公式如下:
其中,等号右方的timeframe为修正前的当前统计帧执行时间,timewaitgpusem为上一个帧周期等待gpu_sem解锁的等待时间,numframe为当前统计帧对应的帧周期内的统计帧与执行帧的总数,percent为当前虚拟机VirtIO-GPU的性能百分比。
进一步的,目标虚拟机VirtIO-GPU在其执行帧期间均按照对应的间隔时间timewait执行图形渲染命令具体包括以下步骤:
gpu_sem解锁后,若目标虚拟机VirtIO-GPU对应的执行间隔时间timewait=0,目标虚拟机VirtIO-GPU在其执行帧期间每收到一个图形渲染命令后直接执行该图形渲染命令;
gpu_sem解锁后,若目标虚拟机VirtIO-GPU对应的执行间隔时间timewait≠0,目标虚拟机VirtIO-GPU在其执行帧期间收到当前图形渲染命令后,计算当前图形渲染命令与上一图形渲染命令之间的实际执行时间间隔Intervaltimecommand,并根据实际执行时间间隔Intervaltimecommand计算得到休眠时间timesleep,目标虚拟机VirtIO-GPU按照休眠时间timesleep休眠对应时段后,执行当前图形渲染命令。
进一步的,根据实际执行时间间隔Intervaltimecommand计算得到休眠时间timesleep具体包括以下步骤:
当执行间隔时间timewait大于实际执行时间间隔Intervaltimecommand与累计超出时间timeremain之和时,将执行间隔时间timewait减去实际执行时间间隔Intervaltimecommand与累计超出时间timeremain之和得到休眠时间timesleep,根据执行间隔时间timewait与实际执行时间间隔Intervaltimecommand之差更新累计超出时间timeremain;
当执行间隔时间timewait小于实际执行时间间隔Intervaltimecommand与累计超出时间timeremain之和时,跳转执行当前图形渲染命令的步骤,根据执行间隔时间timewait与实际执行时间间隔Intervaltimecommand之差更新累计超出时间timeremain。
进一步的,为避免因意外导致的gpu_sem死锁问题,目标虚拟机VirtIO-GPU获取并锁定gpu_sem后,gpu_sem_lock_checker定时器定期检测gpu_sem锁定状态,若gpu_sem锁定时间到达预设的临界时间,将gpu_sem解锁。
本发明还提出一种图形渲染系统,包括计算机,所述计算机被编程或配置以执行任一所述的基于帧统计的VirtIO-GPU性能可控方法。
与现有技术相比,本发明的优点在于:
本发明将VirtIO-GPU执行图形渲染命令的过程划分为连续的帧周期,每个帧周期包含一个统计帧和若干个执行帧,统计帧中VirtIO-GPU可以独占物理GPU资源并不受限地执行图形渲染命令,然后根据统计帧中命令的执行情况来预估执行帧期间命令的执行时间间隔,并通过进程休眠的方式延迟执行帧期间渲染命令的执行,从而实现VirtIO-GPU的图形渲染性能可配置;
本发明创建共享的有名信号量gpu_sem:虚拟机在进入统计帧前,需要获取并锁定gpu_sem;结束统计帧时,再释放gpu_sem;在gpu_sem锁定期间,除了给gpu_sem加锁的VirtIO-GPU进程外,其他VirtIO-GPU进程均需等待gpu_sem解锁后才能继续执行,从而通过有名信号量机制来确保VirtIO-GPU对物理GPU进行独占访问,实现VirtIO-GPU的图形渲染性能抗干扰。
附图说明
图1为本发明实施例的总体思路示意图。
图2为本发明实施例的总体思路对应的步骤图。
图3为本发明实施例中统计帧的工作流程图。
图4为本发明实施例中执行帧的工作流程图。
具体实施方式
以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
在介绍本发明的具体实施例之前,对于相关术语介绍如下:
云桌面:云桌面又称桌面虚拟化,是虚拟化和云计算时代的典型应用。云桌面通过云计算技术在云端数据中心搭建服务器集群,创建多个虚拟机以提供远程的计算、存储、应用程序等个性化内容的远程服务,用户通过各种云终端设备通过网络连入远程云桌面,获得属于自己的计算、存储、个性化应用和数据内容,实现与本地PC一致的使用体验。
QEMU:全称为Quick Emulator,是一个功能强大的、开源的模拟器和虚拟机,它可以模拟出功能完整的计算机设备。
Libvirt:Libvirt是在云计算解决方案中被广泛使用的、用于管理虚拟化平台的开源的API,后台程序和管理工具。它可以用于管理KVM、Xen、VMware ESX,QEMU和其他虚拟化技术的虚拟机。
VirtIO-GPU:全称为Virtual I/O GPU,是一种基于virtio技术的半虚拟化显卡,旨在为虚拟环境提供一个通用的、高效的虚拟显卡设备。目前,QEMU和Linux内核均已支持VIRTIO-GPU设备。相比于QXL等完全虚拟化显卡,VIRTIO-GPU可以配合VirGL等工具,借助宿主机的物理显卡进行OpenGL硬件加速,从而大大提高虚拟机的图形渲染性能。
信号量:信号量(Semaphore)是一种进程/线程同步机制,在 POSIX 标准中,信号量分两种,一种是无名信号量,一种是有名信号量。无名信号量一般用于线程间同步或互斥,而有名信号量一般用于进程间同步或互斥。它们的区别和管道及命名管道的区别类似,无名信号量则直接保存在内存中,而有名信号量要求创建一个文件。
实施例一
为了在多虚拟机环境下实现VirtIO-GPU的图形渲染性能的可配置和性能抗干扰,我们关注以下三点:
(1) Virtio-GPU图形渲染性能的可配置:可以采用百分比配置的方式,将Virtio-GPU的图形渲染性能限制为最大可实现图形渲染性能的percent(0<percent<=100%),以便在多虚拟机场景下,可以灵活定制不同虚拟机的virtio-gpu的图形渲染性能;
(2) Virtio-GPU的性能抗干扰:单个Virtio-GPU虚拟机的图形渲染性能按设置的百分比分配,运行过程中不会因为其他虚拟机的干扰而出现大幅波动;
(3) Virtio-GPU的图形渲染性能的可配置和性能抗干扰功能的实现,应独立于具体的物理GPU和GPU驱动以外,以保证Virtio-GPU方案的广泛适用性。
通过对VirtIO-GPU虚拟机的图形渲染处理过程进行持续跟踪,我们总结出以下两个现象:
(1)单个虚拟机在执行过程中,在一个较短的时间段(比如0.5s)内,帧与帧之间画面的变化不大,且不同帧的帧内图形渲染命令数量大致相等。
(2)当虚拟机A和B同时渲染同一个场景时,若虚拟机A的渲染能力与虚拟机B渲染能力的性能百分比为percent(0<percent<=1),那么虚拟机A在一帧时间内处理的渲染命令数也大致相当于虚拟机B在一帧时间内处理的渲染命令数的percent。
根据上述现象,我们提出一种基于帧统计的VirtIO-GPU图形渲染方法,如图1和图2所示,包括以下步骤:
步骤一,在虚拟机配置时,配置各虚拟机VirtIO-GPU的性能百分比percent,即可以配置虚拟机VirtIO-GPU的渲染性能为最大性能的percent(0<percent<=1);
步骤二,将VirtIO-GPU执行图形渲染命令的过程按执行时间划分为一个个连续的帧周期,每个帧周期包含一个统计帧和若干执行帧,统计帧和执行帧中VirtIO-GPU渲染处理的图形场景基本不变,根据所述性能百分比percent计算各虚拟机VirtIO-GPU在一个帧周期内的统计帧与执行帧的总数numframe;
步骤三,目标虚拟机VirtIO-GPU在其统计帧期间独占访问物理GPU,并执行图形渲染命令,获取统计帧期间执行命令的总数commandnumframe、统计帧的执行时间timeframe以及设置的性能百分比percent,并由此计算得到本次帧周期内的对应执行帧中每个命令间的执行间隔时间timewait;
步骤四,目标虚拟机VirtIO-GPU在其执行帧期间按照对应的间隔时间timewait执行图形渲染命令,具体通过延迟执行的方式,延迟图形渲染命令的执行,确保每个命令的执行时间间隔均稳定在timewait附近,重新选取目标虚拟机并返回步骤三,进入帧周期循环过程。
本实施例中统计帧为每个帧周期内的第一帧,在步骤二中,在一个周期内的统计帧与执行帧的总数numframe的具体计算公式如下:
上式中,percent为当前虚拟机VirtIO-GPU的性能百分比。
在步骤三中,统计帧统计的是VirtIO-GPU在最大性能时的渲染能力,所以目标虚拟机VirtIO-GPU在统计帧期间执行渲染命令的过程不能受到其他虚拟机的干扰,即统计帧期间目标虚拟机VirtIO-GPU对物理GPU的使用应该是独占方式的。为实现统计帧期间对物理GPU的独占式使用,我们采用有名信号量机制:在不同虚拟机VirtIO-GPU进程间创建一个共享的有名信号量gpu_sem:各虚拟机VirtIO-GPU共享有名信号量gpu_sem,从而目标虚拟机VirtIO-GPU在其统计帧期间独占访问物理GPU的步骤包括:
目标虚拟机VirtIO-GPU获取并锁定gpu_sem,进入统计帧,在gpu_sem锁定期间,除了给gpu_sem加锁的VirtIO-GPU进程外,其余虚拟机VirtIO-GPU等待gpu_sem解锁后才能继续执行进程;
目标虚拟机VirtIO-GPU计算得到本次帧周期内对应的执行帧中每个命令间的执行间隔时间timewait后,解锁gpu_sem。
在步骤三中,根据统计帧期间执行命令的总数commandnumframe、统计帧的执行时间timeframe以及设置的性能百分比percent,计算得到对应的执行帧中每个命令间的执行间隔时间timewait的步骤包括:
获取当前统计帧期间执行命令的总数commandnumframe、当前统计帧执行时间timeframe以及命令的累计执行时间timeallcommands(即VirtIO-GPU收到命令到命令执行完毕的这段时间);
若timeallcommands<timeframe,且timeallcommands<timeframe×percent,则认为当前帧周期内渲染负载很低,在执行帧中无需通过延迟执行方式延迟渲染命令的执行,令timewait=0;
若timeallcommands<timeframe,且timeallcommands>timeframe×percent,则认为当前帧周期内渲染负载未饱和(虚拟机并非持续发送3d图形命令),那么需要根据此时的timeallcommands来扩展3d图形命令饱和时的统计帧内执行命令数commandnumframe,具体计算公式如下:
其中,a为一个经验常量,用来确保timeallcommands与物理GPU中命令的实际处理时间大致相等(timeallcommands中包含了大量的额外开销),等号右方的commandnumframe为更新前的当前统计帧期间执行命令的总数,timeframe为当前统计帧的执行时间,timeallcommands为命令的累计执行时间;
用预设的经验常量a更新commandnumframe后,根据统计帧中执行命令总数commandnumframe我们可以估计得到最大性能VirtIO-GPU的帧周期内的执行命令总数为numframe×commandnumframe,那为了保证性能配置为percent的VirtIO-GPU在帧周期内执行命令总数为numframe×commandnumframe×percent,根据修正后的timeframe和commandnumframe计算执行间隔时间timewait的计算公式为:
其中,numframe为当前统计帧对应的帧周期内的统计帧与执行帧的总数,percent为当前虚拟机VirtIO-GPU的性能百分比,commandnumframe为当前统计帧期间执行命令的总数,timeframe为当前统计帧执行时间;
若timeallcommands>timeframe,则认为当前帧周期内渲染负载未饱和,直接根据式(3),用timeframe和commandnumframe计算执行间隔时间timewait。
在步骤四中,每个虚拟机VirtIO-GPU在其执行帧期间均按照对应的间隔时间timewait执行图形渲染命令具体包括以下步骤:
gpu_sem解锁后,若目标虚拟机VirtIO-GPU对应的执行间隔时间timewait=0,则无需通过延迟执行方式延迟渲染命令的执行,目标虚拟机VirtIO-GPU在其执行帧期间每收到一个图形渲染命令后直接执行该图形渲染命令;
gpu_sem解锁后,若目标虚拟机VirtIO-GPU对应的执行间隔时间timewait≠0,则需要通过延迟执行方式延迟渲染命令的执行,实现渲染命令延时执行是采用进程休眠的方式来实现:目标虚拟机VirtIO-GPU在其执行帧期间收到新的图形渲染命令后,计算当前图形渲染命令与上一图形渲染命令之间的实际执行时间间隔Intervaltimecommand,并根据实际执行时间间隔Intervaltimecommand计算得到休眠时间timesleep,目标虚拟机VirtIO-GPU按照休眠时间timesleep休眠对应时段来暂停当前VirtIO-GPU进程的执行,以确保当前图形渲染命令与上一个命令之间的实际执行时间间隔Intervaltimecommand大体上等于timewait,休眠超时后再执行当前图形渲染命令。
在步骤四中,根据实际执行时间间隔Intervaltimecommand计算得到休眠时间timesleep具体包括以下步骤:
当执行间隔时间timewait大于实际执行时间间隔Intervaltimecommand与累计超出时间timeremain之和时,将执行间隔时间timewait减去实际执行时间间隔Intervaltimecommand与累计超出时间timeremain之和得到休眠时间timesleep,根据执行间隔时间timewait与实际执行时间间隔Intervaltimecommand之差更新累计超出时间timeremain;
当执行间隔时间timewait小于实际执行时间间隔Intervaltimecommand与累计超出时间timeremain之和时,那么VirtIO-GPU无需休眠直接执行3d图形命令的处理,跳转执行当前图形渲染命令的步骤,根据执行间隔时间timewait与实际执行时间间隔Intervaltimecommand之差更新累计超出时间timeremain。
需要说明的是,在步骤四中,渲染命令的执行除了主动地根据timewait进行的进程休眠延迟外,还存在等待gpu_sem解锁的等待时间timewaitgpusem,为了进一步减少虚拟机之间的性能干扰,步骤三中,根据timeframe和commandnumframe计算执行间隔时间timewait之前,还根据上一个帧周期等待gpu_sem解锁的等待时间timewaitgpusem来修正timeframe,具体计算公式如下:
其中,等号右方的timeframe为修正前的当前统计帧执行时间,timewaitgpusem为上一个帧周期等待gpu_sem解锁的等待时间,numframe为当前统计帧对应的帧周期内的统计帧与执行帧的总数,percent为当前虚拟机VirtIO-GPU的性能百分比;
最后,还需要对有名信号量gpu_sem可能出现的死锁问题进行处理:当一个VirtIO-GPU虚拟机进程在锁定信号量gpu_sem期间发生了死机、关机、重启等情况,均会导致信号量gpu_sem无法解锁,其他VirtIO-GPU虚拟机进程等待死锁的问题,为避免因意外导致的gpu_sem死锁问题,目标虚拟机VirtIO-GPU获取并锁定gpu_sem后,同步开启一个gpu_sem_lock_checker定时器,该定时器会定期(每1s)检测gpu_sem信号量的锁定状态,若发现gpu_sem信号量的锁定时间达到了预设的临界时间(统计帧的锁定时间一般是15ms或30ms,这里以100ms作为临界时间),那么就认为发生了信号链死锁问题,强制将gpu_sem信号量解锁。
通过上述步骤后,性能配置为percent的VirtIO-GPU在一个帧周期内执行的渲染命令数量将被控制在100%性能情况下一个帧周期内执行命令总数的percent倍,从而保证当前VirtIO-GPU的图形渲染性能为100%性能时的percent倍。
实施例二
根据实施例一的方法,本实施例基于QEMU实现了一个图形渲染系统,包括计算机,计算机被编程或配置以执行实施例一所述的基于帧统计的VirtIO-GPU性能可控的方法,系统运行的具体流程如下:
S1: 系统将Virtio-GPU执行图形渲染命令的过程按执行时间划分为一个个的帧周期,每个帧周期包含一个统计帧和若干执行帧;
S2:系统初始化时,根据实施例一的式(1),用配置的性能百分比percent计算各虚拟机VirtIO-GPU在一个帧周期所包含的帧数numframe;
S3:初始化有名信号量gpu_sem,有名信号量gpu_sem将用于实现多虚拟机进程间的同步和互斥;
S4:出入统计帧执行阶段,如图3所示,包括:
S4.1:先锁定gpu_sem,以阻止目标虚拟机VirtIO-GPU的统计帧期间其他虚拟机VirtIO-GPU访问物理GPU,具体的锁定时间为目标虚拟机VirtIO-GPU即将执行画面刷新命令(读取显卡中的帧缓存图像画面并发送给云桌面显示)之前;
S4.2:目标虚拟机Virtio-GPU正常执行图形渲染命令,系统统计得到统计帧期间执行命令的总数commandnumframe、统计帧执行时间timeframe以及命令的累计执行时间timeallcommands;
S4.3:若timeallcommands<timeframe,则系统认为当前场景为低负载场景(VirtIO-GPU未能得到充分使用),将按S4.4进行处理,否则跳转到S4.5;
S4.4:若timeallcommands<timeframe×percent,那么认为当前帧周期内,渲染性能配置为最高性能的percent的目标虚拟机Virtio-GPU足以胜任3d图形命令的实时处理,令timewait=0后直接跳转到步骤S5的执行帧执行阶段;否则,将按照实施例一中的式(2)重新计算得到新的commandnumframe;
S4.5:根据实施例一中的式(4),用上一个帧周期的等待gpu_sem解锁的等待时间timewaitgpusem来修正timeframe;
S4.6:根据实施例一中的式(3),计算得到每个命令的执行时间间隔timewait(单位us)后,解锁gpu_sem并进入步骤S5的执行帧执行阶段;
S5:进入执行帧处理阶段,如图4所示,包括;
S5.1:系统等待gpu_sem解锁,等待时间timewaitgpusem将累计并用于修正下一个帧周期的timeframe;
S5.2:初始化累计超出时间timeremain = 0,在接收到一个图形渲染命令后,VirtIO-GPU首先计算得到当前命令与上一个命令之间的实际执行时间间隔Intervaltimecommand(单位us);
S5.3:当timewait > Intervaltimecommand + timeremain 时,计算得到休眠时间timesleep(单位:us),VirtIO-GPU休眠timesleepus后再继续图形渲染命令的处理,timesleep的计算公式如下:
timesleep = timewait - (Intervaltimecommand + timeremain)(5)
当timewait <= Intervaltimecommand + timeremain 时,说明此时命令间的实际间隔时间+实际累计超过的时间要大于预期的等待时间,那么VirtIO-GPU无需休眠直接执行3d图形命令的处理;
S5.4:按如下公式更新timeremain:
timeremain = Intervaltimecommand + timeremain -timewait(6)
S5.5:继续接收新的图形渲染命令,并计算得到当前命令与上一个命令之间的实际执行时间间隔Intervaltimecommand,然后返回步骤S5.3,直到VirtIO-GPU已经完成了剩余的numframe-1帧的处理,或累计执行时间已经大于等于numframe×timeframe,则表明一个帧周期已经结束,VirtIO-GPU将返回步骤S2重新开始新的帧周期的处理。
步骤S4还包括信号量死锁问题的处理:在每个VirtIO-GPU虚拟机进程初始化的同时,开启一个gpu_sem_lock_checker定时器,该定时器会定期(每1s)检测gpu_sem信号量的锁定状态,若发现信号量的锁定时间达到了临界时间(统计帧的锁定时间一般是15ms或30ms,这里以100ms作为临界时间),那么就认为发生了信号链死锁问题,将强制将gpu_sem信号量解锁。
综上所述,本发明具有如下效果:
1. 实现了一种根据配置参数来调整VirtIO-GPU的图形渲染性能的性能可控方法和系统,经过实验验证,实施例一中的方法和实施例二中的系统在各个应用场景下均能很好地根据配置参数来控制虚拟机VirtIO-GPU图形渲染性能;
2. 能够有效避免虚拟机VirtIO-GPU之间对物理GPU的抢占式访问所造成的性能干扰,在多虚拟机场景下也能正常发挥图形渲染性能可配置的作用。
3. 实施例二中的系统基于QEMU和VirtIO-GPU实现,但未改变QEMU和VirtIO-GPU的内部核心逻辑,具体实现也独立于具体的物理GPU和GPU驱动,保持了良好的兼容性和适用性。
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。
Claims (10)
1.一种基于帧统计的VirtIO-GPU性能可控方法,其特征在于,包括以下步骤:
配置各虚拟机VirtIO-GPU的性能百分比percent;
根据所述性能百分比percent分别计算各虚拟机VirtIO-GPU在一个帧周期内的统计帧与执行帧的数量numframe;
目标虚拟机VirtIO-GPU在其统计帧期间锁定共享的有名信号量gpu_sem以独占访问物理GPU,并执行图形渲染命令,根据统计帧期间执行命令的总数commandnumframe、统计帧的执行时间timeframe以及设置的性能百分比percent,计算得到本次帧周期内的执行帧中每个命令间的执行间隔时间timewait,然后解锁gpu_sem;
目标虚拟机VirtIO-GPU在其执行帧期间按照对应的间隔时间timewait执行图形渲染命令。
3.根据权利要求1所述的基于帧统计的VirtIO-GPU性能可控方法,其特征在于,根据统计帧期间执行命令的总数commandnumframe、统计帧的执行时间timeframe以及设置的性能百分比percent,计算得到对应的执行帧中每个命令间的执行间隔时间timewait的步骤包括:
获取当前统计帧期间执行命令的总数commandnumframe、当前统计帧执行时间timeframe以及命令的累计执行时间timeallcommands;
若timeallcommands<timeframe,且timeallcommands<timeframe×percent,令timewait=0;
若timeallcommands<timeframe,且timeallcommands>timeframe×percent,用预设的经验常量a更新commandnumframe后,根据timeframe和commandnumframe计算执行间隔时间timewait;
若timeallcommands>timeframe,根据上一个帧周期等待gpu_sem解锁的等待时间timewaitgpusem来修正timeframe,根据timeframe和commandnumframe计算执行间隔时间timewait。
7.根据权利要求1所述的基于帧统计的VirtIO-GPU性能可控方法,其特征在于,目标虚拟机VirtIO-GPU在其执行帧期间均按照对应的间隔时间timewait执行图形渲染命令具体包括以下步骤:
gpu_sem解锁后,若目标虚拟机VirtIO-GPU对应的执行间隔时间timewait=0,目标虚拟机VirtIO-GPU在其执行帧期间每收到一个图形渲染命令后直接执行该图形渲染命令;
gpu_sem解锁后,若目标虚拟机VirtIO-GPU对应的执行间隔时间timewait≠0,目标虚拟机VirtIO-GPU在其执行帧期间收到当前图形渲染命令后,计算当前图形渲染命令与上一图形渲染命令之间的实际执行时间间隔Intervaltimecommand,并根据实际执行时间间隔Intervaltimecommand计算得到休眠时间timesleep,目标虚拟机VirtIO-GPU按照休眠时间timesleep休眠对应时段后,执行当前图形渲染命令。
8.根据权利要求7所述的基于帧统计的VirtIO-GPU性能可控方法,其特征在于,根据实际执行时间间隔Intervaltimecommand计算得到休眠时间timesleep具体包括以下步骤:
当执行间隔时间timewait大于实际执行时间间隔Intervaltimecommand与累计超出时间timeremain之和时,将执行间隔时间timewait减去实际执行时间间隔Intervaltimecommand与累计超出时间timeremain之和得到休眠时间timesleep,根据执行间隔时间timewait与实际执行时间间隔Intervaltimecommand之差更新累计超出时间timeremain;
当执行间隔时间timewait小于实际执行时间间隔Intervaltimecommand与累计超出时间timeremain之和时,跳转执行当前图形渲染命令的步骤,根据执行间隔时间timewait与实际执行时间间隔Intervaltimecommand之差更新累计超出时间timeremain。
9.根据权利要求1所述的基于帧统计的VirtIO-GPU性能可控方法,其特征在于,为避免因意外导致的gpu_sem死锁问题,目标虚拟机VirtIO-GPU获取并锁定gpu_sem后,gpu_sem_lock_checker定时器定期检测gpu_sem锁定状态,若gpu_sem锁定时间到达预设的临界时间,将gpu_sem解锁。
10.一种图形渲染系统,其特征在于,包括计算机,所述计算机被编程或配置以执行权利要求1~9任一所述的基于帧统计的VirtIO-GPU性能可控方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310000513.1A CN115686758B (zh) | 2023-01-03 | 2023-01-03 | 一种基于帧统计的VirtIO-GPU性能可控方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310000513.1A CN115686758B (zh) | 2023-01-03 | 2023-01-03 | 一种基于帧统计的VirtIO-GPU性能可控方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115686758A CN115686758A (zh) | 2023-02-03 |
CN115686758B true CN115686758B (zh) | 2023-03-21 |
Family
ID=85056917
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310000513.1A Active CN115686758B (zh) | 2023-01-03 | 2023-01-03 | 一种基于帧统计的VirtIO-GPU性能可控方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115686758B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116185571B (zh) * | 2023-04-20 | 2023-07-21 | 深圳市科力锐科技有限公司 | 数据迁移方法、设备、存储介质及装置 |
CN117992237B (zh) * | 2024-03-18 | 2024-06-21 | 麒麟软件有限公司 | 一种基于virgl图形技术栈的渲染API转发方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102890643A (zh) * | 2012-07-26 | 2013-01-23 | 上海交通大学 | 基于应用效果即时反馈的显卡虚拟化下的资源调度系统 |
CN111240631A (zh) * | 2020-02-20 | 2020-06-05 | 湖南麒麟信安科技有限公司 | 基于AMD显卡虚拟化传输Linux虚拟机屏幕画面的方法及系统 |
CN111522670A (zh) * | 2020-05-09 | 2020-08-11 | 中瓴智行(成都)科技有限公司 | 一种用于Android系统的GPU虚拟化方法、系统及介质 |
CN112102457A (zh) * | 2020-08-28 | 2020-12-18 | 西安万像电子科技有限公司 | 3d渲染方法及系统 |
-
2023
- 2023-01-03 CN CN202310000513.1A patent/CN115686758B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102890643A (zh) * | 2012-07-26 | 2013-01-23 | 上海交通大学 | 基于应用效果即时反馈的显卡虚拟化下的资源调度系统 |
CN111240631A (zh) * | 2020-02-20 | 2020-06-05 | 湖南麒麟信安科技有限公司 | 基于AMD显卡虚拟化传输Linux虚拟机屏幕画面的方法及系统 |
CN111522670A (zh) * | 2020-05-09 | 2020-08-11 | 中瓴智行(成都)科技有限公司 | 一种用于Android系统的GPU虚拟化方法、系统及介质 |
CN112102457A (zh) * | 2020-08-28 | 2020-12-18 | 西安万像电子科技有限公司 | 3d渲染方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN115686758A (zh) | 2023-02-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115686758B (zh) | 一种基于帧统计的VirtIO-GPU性能可控方法 | |
US10509673B2 (en) | Synchronous user space function execution from a kernel context | |
CN106844007B (zh) | 一种基于空间复用的虚拟化方法与系统 | |
US8970603B2 (en) | Dynamic virtual device failure recovery | |
US10242420B2 (en) | Preemptive context switching of processes on an accelerated processing device (APD) based on time quanta | |
CN111450524B (zh) | 云游戏中的信息处理方法、装置、云游戏服务器及介质 | |
CN108509251B (zh) | 一种适用于可信执行环境中的安全虚拟化系统 | |
EP3958121A1 (en) | Architecture and method for managing interrupts in a virtualized environment | |
US10877769B2 (en) | Multithreaded rendering for virtualized graphics processing | |
US11281388B2 (en) | Method for managing a multi-system shared memory, electronic device and non-volatile computer-readable storage medium | |
US9201823B2 (en) | Pessimistic interrupt affinity for devices | |
US9721091B2 (en) | Guest-driven host execution | |
US9003094B2 (en) | Optimistic interrupt affinity for devices | |
CN108549571B (zh) | 一种适用于可信执行环境中的安全虚拟化方法 | |
US9727364B2 (en) | Virtual device hypervisor memory limited receive queuing | |
US10002016B2 (en) | Configuration of virtual machines in view of response time constraints | |
CN107203394B (zh) | 一种高安全docker容器批量部署方法及装置 | |
US10733005B1 (en) | Providing access to mobile applications by heterogeneous devices | |
US9569241B2 (en) | Sharing devices assigned to virtual machines using runtime exclusion | |
CN114281529A (zh) | 分布式虚拟化的客户操作系统调度优化方法、系统及终端 | |
US10671425B2 (en) | Lazy timer programming for virtual machines | |
US20130212601A1 (en) | Method and system for maintaining game functionality for a plurality of game instances running on a computer system | |
CN111078355B (zh) | 基于安全态势感知的计算环境重构动态防御方法及系统 | |
CN114268479B (zh) | 防御共享存储侧信道攻击的处理方法、装置及电子设备 | |
Hirofuchi et al. | Postcopy live migration with guest-cooperative page faults |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |