CN114968152B - 减少virtio-gpu额外性能损耗的方法 - Google Patents
减少virtio-gpu额外性能损耗的方法 Download PDFInfo
- Publication number
- CN114968152B CN114968152B CN202210466651.4A CN202210466651A CN114968152B CN 114968152 B CN114968152 B CN 114968152B CN 202210466651 A CN202210466651 A CN 202210466651A CN 114968152 B CN114968152 B CN 114968152B
- Authority
- CN
- China
- Prior art keywords
- gpu
- virtio
- drawing command
- screen
- window area
- 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 31
- 238000012544 monitoring process Methods 0.000 claims description 21
- 230000006870 function Effects 0.000 claims description 19
- 238000013507 mapping Methods 0.000 claims description 7
- 230000003139 buffering effect Effects 0.000 claims description 3
- 230000008569 process Effects 0.000 abstract description 6
- 230000002194 synthesizing effect Effects 0.000 abstract description 2
- 238000012545 processing Methods 0.000 description 15
- 238000005516 engineering process Methods 0.000 description 11
- 238000005457 optimization Methods 0.000 description 10
- 230000001133 acceleration Effects 0.000 description 6
- 238000009877 rendering Methods 0.000 description 5
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 235000013599 spices Nutrition 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 230000007423 decrease Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000013075 data extraction Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000013468 resource allocation Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/14—Digital output to display device ; Cooperation and interconnection of the display device with other functional units
- G06F3/1454—Digital output to display device ; Cooperation and interconnection of the display device with other functional units involving copying of the display data of a local workstation or window to a remote workstation or window so that an actual copy of the data is displayed simultaneously on two or more displays, e.g. teledisplay
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- 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
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Controls And Circuits For Display Device (AREA)
Abstract
本发明涉及一种减少VIRTIO‑GPU额外性能损耗的方法,在VIRTIO‑GPU将绘图命令发送给Virglrenderer进行执行的过程中,预先对绘图命令进行监听,当监听到命令中包含draw操作时,记录下draw操作涉及的窗口区域;当VIRTIO‑GPU接收到屏幕刷新命令时,VIRTIO‑GPU又会到该装置中获取记录下的窗口区域,在调用glReadPixels接口时,将根据窗口区域的位置和大小来提取物理显卡帧缓存中的像素数据;最后,将提取到的窗口像素数据与缓存的上一帧屏幕画面进行数据合成后输出。本发明在大部分应用场景下能够有效减少减少从宿主机物理显卡中提取屏幕画面图像数据所造成的显卡性能损耗,从而提升VIRTIO‑GPU的图像性能。
Description
技术领域
本发明属于虚拟化桌面技术领域,具体涉及减少VIRTIO-GPU额外性能损耗的方法。
背景技术
云桌面是虚拟化和云计算时代的典型应用。通过在云端数据中心搭建服务器集群、创建多个虚拟机、用户通过云终端设备远程连入虚拟机的方式,云桌面可以提供给用户与本地PC一致的使用体验。这种技术使得管理人员只需云端数据中心进行集中的系统维护,大大降低了管理人员的工作量,也使得使用人员无需担心因本地PC故障导致的数据丢失问题,越来越受到企业和个人的青睐。
目前,大多数云桌面厂商使用QEMU/KVM的架构来实现桌面虚拟化,并搭配使用VGA、QXL、Cirrus等虚拟显卡进行图像输出。这类虚拟显卡成本低廉、易部署,且兼容性较好,但因为虚拟显卡通常是借由宿主机CPU来模拟执行图像命令的缘故,也存在性能不足、无法胜任大型3D应用的问题,其应用范围有限。
为提升虚拟显卡的图像性能特别是3D性能,研究者们引入了“Virgl”图形技术栈,通过该图形技术栈所提供的组件,虚拟机可以借助VirtIO-GPU虚拟显卡和Vieglrenderer组件来访问宿主机OpenGL接口,进而利用宿主机的物理显卡进行图形处理,从而大大提高虚拟机的图形性能。
由于处理后生成的屏幕画面均位于宿主机物理显卡的帧缓存中,为了实现远端显示屏上的云桌面屏幕画面的呈现,QEMU提供了egl-headless图形协议,通过该协议,QEMU可以将宿主机物理显卡的帧缓存中的屏幕画面提取到内存中,并通过云桌面协议发送到远端显示屏上呈现。
然而,当egl-headless读取宿主机物理显卡的帧缓存时,将不可避免地占用宿主机物理显卡的执行时间和带宽,造成额外的性能损耗,而且这种性能损耗会随着虚拟机的数量以及虚拟机中云桌面分辨率的增加而同步增加:虚拟机越多、分辨率越大,则额外性能损耗越大。
这种额外的性能损耗也给VirtIO-GPU的图形性能造成了负面影响:由于VirtIO-GPU的图形性能依赖于宿主机物理显卡的图形处理性能,额外性能损耗增加,宿主机物理显卡能够分配给虚拟机VIRTIO-GPU的图形处理时间和带宽也就相应减少,从而导致虚拟机VIRTIO-GPU的图形处理能力的降低。
中国发明专利“基于SPICE协议的智能支持显卡直通和虚拟显卡的显示方法”(专利号:CN109358951B)。该发明具体涉及一种基于SPICE协议的智能支持显卡直通和虚拟显卡的显示方法。与现有技术相比较,该发明沿用了原有SPICE协议,可自适应物理显卡透传和虚拟显卡两种方式,展示虚拟桌面,与原有系统兼容性高。虚拟机通过virtIO与服务端通信,不直接与客户端通信,提高系统安全性。该发明采用的是显卡直通方式来满足用户的高性能显示需求,并未采用VIRTIO-GPU方案,也未涉及减少虚拟机画面提取造成的宿主机物理显卡的额外性能开销。
中国发明专利“优化虚拟图形处理单元利用的方法和系统”(专利号:CN102446114B)。该发明提供了用于优化虚拟图形处理单元利用的方法、系统和计算机程序产品。实施例包括为多个虚拟机中的每个虚拟机指定计算密度级别;为多个虚拟机中的每个虚拟机指定优先级级别;针对多个服务器中的每个服务器判定该服务器是否包括可用于执行多个虚拟机的计算密集型任务的虚拟机图形处理单元(VGPU);以及根据虚拟机的计算密集度级别和优先级别以及可用于执行计算密集型任务的VGPU的数据,为多个虚拟机中的一虚拟机指定一个或多个VGPU。该发明主要专注于VGPU的优化,通过优化VGPU的资源调度,来提高物理GPU的利用率,因而其方法不适用于VIRTIO-GPU等。
中国发明专利“一种多层次细粒度的虚拟化gpu调度优化方法”(专利号:CN108710536B)。该发明公开了一种多层次细粒度的虚拟化GPU调度优化方法,分别用了3种方式来优化调度策略:基于时间和事件的调度,基于流水线的无缝调度,以及混合基于环及基于虚拟机的调度。这3种调度策略分别利用了两个虚拟机切换造成的开销、虚拟机运行分成多个阶段同时运行以及多个虚拟机利用不同环同时工作这三点作为优化方法。该发明通过修改调度器及调度策略,大大降低了切换过程的开销,并且支持了多个虚拟GPU之间的并行执行,因此一个物理GPU共享的多个虚拟GPU的性能都能得到显著的提升,从而提升总体性能。然而,该发明主要专注于vGPU的性能提升,且与Intel的GVT-g技术深度绑定,并不适用于VIRTIO-GPU。另外,该发明主要是从vGPU的调度上进行优化,相当于是优化资源配置,并没有涉及到vGPU的内部实现,因而提升空间有限。
中国发明专利“一种基于推迟提交的gpu虚拟化优化方法”(专利号:CN103955394B)。该发明公开了一种基于推迟提交的GPU虚拟化优化方法。具体步骤为:1)客户机上的GPU虚拟化框架前端读入一待执行CUDA应用程序的二进制文件,查找并标记可推迟提交的循环;2)前端执行到可推迟提交的循环部分时,直到该循环结束之前,缓存所有的CUDA函数调用信息及其依赖关系,跳过该函数调用的执行,然后在该循环结束之后将该缓存信息一次发送到宿主机上的GPU虚拟化框架后端;3)后端根据该缓存信息重新构建函数调用并执行,然后将所有任务执行结果打包一次发回前端;可推迟提交的循环指不去执行循环中的CUDA函数调用,循环依然可以正确执行。该发明减少了前后端通信的次数,而从对GPU虚拟化的性能进行优化。然而,该发明主要专注于CUDA高性能计算方面,不涉及图形性能的优化。另外,该发明主要是通过修改vCUDA库来提升虚拟机的通用计算效率,尚不涉及底层的虚拟GPU,故不能算严格意义上的GPU虚拟化的优化。
中国发明专利“基于AMD显卡虚拟化传输Linux虚拟机屏幕画面的方法及系统”(专利号:CN111240631A)。该发明在显卡虚拟化环境下,利用AMD显卡的显卡驱动API抓取渲染区域的虚拟机屏幕画面,并将抓取的虚拟机屏幕画面在显卡内部直接编码为数据帧后传输到操作系统内存,将操作系统内存中数据帧传送给瘦终端,因此虚拟机屏幕画面数据到达操作系统不需要经过多次拷贝,可以提高获取画面的速度,更快的将虚机画面传送给瘦终端,提供用户体验。该发明通过减少从物理显卡中提取虚拟机屏幕画面数据的开销来提升虚拟机的图形性能。但该发明是基于显卡直通方式下的优化,不涉及基于VIRTIO-GPU方式下的优化。
发明内容
为解决已有技术存在的不足,本发明提供了一种减少VIRTIO-GPU额外性能损耗的方法,包括如下步骤:
步骤S1:在虚拟机所依赖的QEMU中构建绘图命令监听分析装置;
步骤S2:QEMU在内存中维护一张屏幕画面帧缓存,用于缓存最近发送给远程客户端的屏幕画面;
步骤S3:VIRTIO-GPU接收到绘图命令后,将绘图命令发送给绘图命令监听分析装置;
步骤S4:绘图命令监听分析装置解析绘图命令,在绘图命令是针对屏幕画面帧缓存且包含特定的draw操作时,对draw操作进行进一步分析,得到并记录draw操作对应的窗口区域的位置及大小,得到窗口区域列表;
步骤S5:绘图命令监听分析装置将绘图命令转发给virglrenderer组件,通过virglrenderer组件完成物理显卡上的图形绘制操作;
步骤S6:VIRTIO-GPU接收到虚拟机中VIRTIO-GPU驱动发送的屏幕刷新命令,从绘图命令监听分析装置中获取步骤S4所得到的窗口区域列表;并根据该窗口区域列表从屏幕画面帧缓存中提取该窗口区域列表对应位置处的图像像素数据;
步骤S7:QEMU将步骤S6得到的图像像素数据整合到步骤S2中在内存维护的屏幕画面帧缓存上,将整合后的屏幕画面数据发送给远程客户端进行呈现。
其中,所述步骤S4中,通过从draw操作中提取相关参数得到draw操作指定的映射区域的大小和位置,将其作为一个窗口区域记录到窗口区域列表中。
其中,所述步骤S6中,通过glReadPixels函数从屏幕画面帧缓存中提取窗口区域列表对应位置处的图像像素数据。
其中,所述步骤S7中,QEMU以得到的图像像素数据替换内存中已有的屏幕画面帧缓存上对应窗口区域列表中的数据,以得到整合后的屏幕画面数据。
其中,所述步骤S4中,绘图命令监听分析装置解析的绘图命令针对屏幕画面帧缓存且包含特定的draw操作时,对所有的draw操作进行分析,得到完整绘图命令中所有draw操作对应的窗口区域位置及大小。
本发明在大部分应用场景下能够有效减少减少从宿主机物理显卡中提取屏幕画面图像数据所造成的显卡性能损耗,从而提升VIRTIO-GPU的图像性能。
附图说明
图1:已有技术的egl-headless+VIRTIO GPU方案下的云桌面画面输出流程。
图2:图形绘制好后通过draw操作将绘制的图形映射到屏幕画面帧缓存的示例图。
图3:本发明的egl-headless+VIRTIO GPU方案下的云桌面画面输出流程。
具体实施方式
图1为已有技术的egl-headless+VIRTIO GPU方案下的云桌面画面输出流程。如图1所示,采用QEMU/KVM的架构实现的云桌面系统中,可以通过egl-headless协议+VIRTIO-GPU的方案来为云桌面提供图形加速支持。
首先,虚拟机系统通过VirtIO-GPU驱动,向VirtIO-GPU显卡发送绘图命令,发送的绘图命令包含一组图形绘制操作(2D、3D矢量图形的绘制、渲染和映射等)和操作所需的数据。
其次,VirtIO-GPU显卡接收到绘图命令后,先对其进行简单分析,根据绘图命令的类型来调用Virglrenderer组件提供的对应接口,将绘图命令转发给Virglrenderer进行后续处理。
再次,Virglrenderer接收到绘图命令后,将进行进一步解析,将绘图命令重新分解为一个个的图形绘制操作,再根据图形绘制操作的要求和数据,重新组装为opengl函数命令,并通知物理显卡进行图形绘制,最终的绘制结果将由显卡同步更新到屏幕画面的帧缓存之中。
最后,根据设置的屏幕刷新率,虚拟机系统将周期性发送屏幕刷新命令给VirtIO-GPU显卡,VirtIO-GPU显卡收到屏幕刷新命令后,将通过egl-headless协议,将物理显卡中的屏幕画面帧缓存数据提取到内存中,并通过云桌面协议发送到远端客户机的显示屏上呈现。
通过上述方案,虚拟机可以借助宿主机的物理显卡来加速图形特别是3d图形处理,从而大大提升了虚拟机的图形处理能力。然而,egl-headless协议+VIRTIO-GPU的方案的额外性能损耗较大,导致虚拟机的图形性能与宿主机图形性能之间仍存在较大差距。
在egl-headless协议+VIRTIO-GPU方案中,egl-headless协议是通过opengl的glReadPixels函数提取帧缓存中的屏幕画面并发送给远端的客户机的。glReadPixels函数的调用会造成大量的显卡损耗,且提取的数据量越大,损耗越大。经测试,当云桌面的屏幕分辨率为1920x1080时,造成的宿主机物理显卡性能损耗接近10%。而当一台宿主机同时开启多台虚拟机时,造成的性能损耗将随着虚拟机数量的增加而线性增加,使得宿主机的GPU资源并不能得到充分利用。
在实际应用中,云桌面并非每帧屏幕画面都完全不同,相邻两帧屏幕画面之间往往只有一小部分是不一样的,要实现云桌面的画面刷新,理论上只需要读取这一部分不一样的画面数据即可,如此以来,glReadPixels函数造成的性能损耗也会大大减少。但在现有的egl-headless协议加VIRTIO-GPU方案中,VIRTIO-GPU只是将图形命令转发给virglrenderer组件进行处理,在VIRTIO-GPU中并不能得到相邻两帧屏幕画面之间发生图像变化的区域,因此也就无法在调用glReadPixels函数时设置提取区域的大小和位置,而只能是整个屏幕画面数据读取,造成了大量的GPU性能损耗。
本发明的目的,就是基于egl-headless协议+VIRTIO-GPU方案,在VIRTIO-GPU转发绘图命令到virglrenderer时,提前对绘图命令进行预处理,根据绘图操作分析得到屏幕画面帧缓存中实际发生了图像改变的窗口区域,在执行屏幕刷新命令时,根据得到的窗口区域去调用glReadPixels函数,从而尽可能减少屏幕刷新时从宿主机物理显卡中提取帧缓存时所需复制的数据量,从而减少宿主机物理显卡性能损耗,使宿主机的GPU资源得到充分利用。
在基于opengl的图形绘制系统中,操作系统在通过opengl函数完成图形的绘制后,会再发送一个针对屏幕画面帧缓存的绘图命令,该绘图命令中包含特定的draw操作,将绘制好的图形作为贴图映射到屏幕画面帧缓存中,draw操作中会指定映射的区域大小和位置,如图2所示。
而由于draw命令同样也包含在虚拟机发送给VirtIO-GPU的绘图命令中,因此,可以通过对绘图命令进行分析,在发现了draw操作时,就可以进一步得到上一帧的屏幕画面与下一帧屏幕画面之间发生了图像改变的窗口区域了。更进一步,在刷新屏幕画面时,可以只从物理显卡的帧缓存中提取窗口区域处的像素数据,并通过将提取得到的数据覆盖到上一帧屏幕画面的缓存上的方式进行画面刷新,从而减少glReadPixels函数的调用造成的显卡损耗。
为实现上述思路,本发明引入了一种新的绘图命令监听分析装置,如图3所示,该装置可以在VIRTIO-GPU将绘图命令发送给Virglrenderer进行执行的过程中,预先对绘图命令进行监听,当监听到命令中包含draw操作时,记录下draw操作涉及的窗口区域;当VIRTIO-GPU接收到屏幕刷新命令时,VIRTIO-GPU又会到该装置中获取记录下的窗口区域,在调用glReadPixels接口时,将根据获窗口区域的位置和大小来提取物理显卡帧缓存中的像素数据;最后,将提取到的窗口像素数据与缓存的上一帧屏幕画面进行数据合成后输出。
一个完整的处理流程如下:
1、在虚拟机所依赖的QEMU中构建绘图命令监听分析装置,QEMU初始化绘图命令监听分析装置和屏幕画面帧缓存。
2、QEMU在内存中维护一张屏幕画面帧缓存,用于缓存最近发送给远程客户端的屏幕画面。
3、VIRTIO-GPU接收到绘图命令后,将绘图命令发送给绘图命令监听分析装置。
4、绘图命令监听分析装置解析绘图命令:
(1)当发现绘图命令并非针对屏幕画面帧缓存时,跳过后续处理,直接将绘图命令转发给virglrenderer;按照已有技术进行绘图命令处理-提取屏幕画面帧缓存数据,并通过云桌面协议发送到远端客户机;
(2)当发现绘图命令针对屏幕画面帧缓存时,进一步深入解析,当发现特定draw操作时,从draw操作数据中提取相关参数,分析得到draw操指令映射对应的窗口区域位置及大小,并将窗口区域位置及大小添加到窗口区域列表中;
(3)重复(2)操作,直到得到所有的窗口区域。
3、绘图命令监听分析装置将绘图命令转发给virglrenderer组件,通过virglrenderer组件完成物理显卡上的图形绘制操作;
4、当VIRTIO-GPU接收到虚拟机中VIRTIO-GPU驱动发送的屏幕刷新命令时,调用egl-headless从图命令监听分析装置中获取窗口区域列表;并根据该窗口区域列表通过glReadPixels函数从屏幕画面帧缓存中提取该窗口区域列表对应位置处的图像像素数据。
5、QEMU将得到的图像像素数据整合到上一次屏幕画面帧缓存上,将整合后的屏幕画面数据发送给远程客户端进行呈现。具体的,QEMU以得到的图像像素数据替换内存中已有的屏幕画面帧缓存上对应窗口区域列表中的数据,以得到整合后的屏幕画面数据。
6、QEMU将屏幕画面帧缓存发送给远端客户机进行最终呈现。
7、一帧画面发送完毕后,绘图命令监听分析装置清空记录的窗口区域列表,并继续监听VIRTIO-GPU的绘图命令执行过程。
在部分情况下,如果在两次屏幕刷新命令执行期间,绘图命令监听分析装置均无法从执行过的绘图命令中解析到针对屏幕画面帧缓存的draw操作时,将仍按照原本的全屏幕画面数据提取方式从宿主机物理显卡的屏幕画面帧缓存中提取数据。
本发明具有如下效果:
1、在大部分应用场景下能够有效减少减少从宿主机物理显卡中提取屏幕画面图像数据所造成的显卡性能损耗,从而提升VIRTIO-GPU的图像性能;根据测试结果,上述方法可以将从物理显卡显存中提取像素数据的性能损耗从原本的10%减少到4%左右。
2、在多虚拟机场景下,能够有效缓解多虚拟机造成的宿主机物理显卡性能损耗线性增加的问题,确保宿主机物理显卡得到充分利用;
3、未改变QEMU内部核心逻辑,保持了软件的良好兼容性。
本发明中,所谓的云桌面又称桌面虚拟化,是虚拟化和云计算时代的典型应用。云桌面通过云计算技术在云端数据中心搭建服务器集群,创建多个虚拟机以提供远程的计算、存储、应用程序等个性化内容的远程服务,用户通过各种云终端设备通过网络连入远程云桌面,获得属于自己的计算、存储、个性化应用和数据内容,实现与本地PC一致的使用体验。云桌面通过云桌面传输协议向用户交付。云桌面传输协议是云桌面核心技术之一,决定着云桌面的效率和展现效果。
本发明中,所谓的QEMU全称为Quick Emulator,是一个功能强大的、开源的模拟器和虚拟机。作为模拟器使用时,它可以通过动态翻译指令,直接在操作系统上运行不同架构的应用程序;作为虚拟机使用时,它可以模拟出功能完整的计算机设备。在Linux环境下,QEMU通常配合KVM使用,其中KVM负责CPU、内存等的虚拟化,QEMU负责外设的虚拟化,如硬盘、网卡、显卡等。
本发明中,所谓的KVM全称为Kernel-based Virtual Machine,即基于内核的虚拟机,是采用硬件虚拟化技术的全虚拟化解决方案。
本发明中,所谓的VirtIO-GPU全称为Virtual I/O GPU,是一种基于virtio技术的半虚拟化显卡。virtio及相关设备规范由组织OASIS维护,旨在为虚拟环境提供一个通用的、高效的虚拟设备机制。目前,QEMU和Linux内核均已支持VIRTIO-GPU设备。相比于QXL等完全虚拟化显卡,VIRTIO-GPU可以配合VirGL等工具,借助宿主机的物理显卡进行OpenGL硬件加速,从而大大提高虚拟机的图形性能。
本发明中,所谓的OpenGL全称为Open Graphics Library,是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口,该接口通常用于与图像处理单元交互,以实现硬件加速。
本发明中,所谓的Virglrenderer是“Virgl”图形技术栈的组件之一,用于在KVM_QEMU虚拟机中实现OpenGL加速功能。
本发明中,所谓的“Virgl”图形技术栈:Virgl是Dave Airlie(from Red Hat)的一个研究项目。该项目在虚拟机中创建一个虚拟GPU,通过它允许虚拟机操作系统(Guest OS)使用物理机(宿主机,Host)的物理GPU来加速3D渲染。“Virgl”图形技术栈主要包括四个部分的组件:(1) Linux 内核4.4开始,包含3D支持的Virtio-gpu驱动;(2)Mesa包含virgl 3D驱动程序;(3)QEMU 2.5开始包含的Virtio-gpu虚拟显卡;(4) Virglrenderer库:给QEMU等模拟器提供API接口,实现OpenGL加速功能。
本发明中,所谓的EGL-HEADLESS是QEMU提供的一种显示协议,用于在云桌面中启用VirtIO-GPU的硬件加速功能,负责维护OpenGL上下文,以及从宿主机物理显卡的显存中提取云桌面的图像画面。
本发明中,所谓的glReadPixels是OpenGL提供的像素操作函数,其功能是从显卡显存中将已经绘制好的像素读取到内存中,EGL-HEADLESS就是使用该函数来从宿主机物理显卡的屏幕画面帧缓存中提取云桌面的屏幕画面的。
本发明中,所谓的绘图命令是虚拟机发送给QEMU的Virtio-GPU的图形绘制命令,每个绘图命令均包含一组图形绘制操作(2D、3D矢量图形的绘制、渲染和映射等)和操作所需数据,Virtio-GPU接收到绘图命令后,将其转发给Virglrenderer,由Virglrenderer再对其进行解析、转换为OpenGL函数执行。
本发明中,所谓的帧缓存是存放于显卡显存中的屏幕所显示画面的一个直接映象,又称为位映射图(Bit Map)或光栅。屏幕画面帧缓存的每一存储单元对应屏幕上的一个像素,整个帧缓存对应一帧图像,绘图命令的执行结果,最终都会更新到帧缓存中。
本发明中,所谓的屏幕刷新命令是指,为实现显示器屏幕画面的刷新,计算机操作系统会根据系统设置的屏幕刷新率,周期性发送屏幕刷新命令,用以告知显卡将屏幕画面帧缓存输出到计算机显示屏上呈现。两次屏幕刷新命令执行期间,系统可能执行一次或多次绘图命令。
虽然本发明已利用上述较佳实施例进行说明,然其并非用以限定本发明的保护范围,任何本领域技术人员在不脱离本发明的精神和范围之内,相对上述实施例进行各种变动与修改仍属本发明所保护的范围,因此本发明的保护范围以权利要求书所界定的为准。
Claims (5)
1.一种减少VIRTIO-GPU额外性能损耗的方法,其特征在于,包括如下步骤:
步骤S1:在虚拟机所依赖的QEMU中构建绘图命令监听分析装置;
步骤S2:QEMU在内存中维护一张屏幕画面帧缓存,用于缓存最近发送给远程客户端的屏幕画面;
步骤S3:VIRTIO-GPU接收到绘图命令后,将绘图命令发送给绘图命令监听分析装置;
步骤S4:绘图命令监听分析装置解析绘图命令,在绘图命令是针对屏幕画面帧缓存且包含特定的draw操作时,对draw操作进行进一步分析,得到并记录draw操作对应的窗口区域的位置及大小,得到窗口区域列表;
步骤S5:绘图命令监听分析装置将绘图命令转发给virglrenderer组件,通过virglrenderer组件完成物理显卡上的图形绘制操作;
步骤S6:VIRTIO-GPU接收到虚拟机中VIRTIO-GPU驱动发送的屏幕刷新命令,从绘图命令监听分析装置中获取步骤S4所得到的窗口区域列表;并根据该窗口区域列表从屏幕画面帧缓存中提取该窗口区域列表对应位置处的图像像素数据;
步骤S7:QEMU将步骤S6得到的图像像素数据整合到步骤S2中在内存中维护的屏幕画面帧缓存上,将整合后的屏幕画面数据发送给远程客户端进行呈现。
2.如权利要求1所述的减少VIRTIO-GPU额外性能损耗的方法,其特征在于:所述步骤S4中,通过从draw操作中提取相关参数得到draw操作指定的映射区域的大小和位置,将其作为一个窗口区域记录到窗口区域列表中。
3.如权利要求1所述的减少VIRTIO-GPU额外性能损耗的方法,其特征在于:所述步骤S6中,通过glReadPixels函数从屏幕画面帧缓存中提取窗口区域列表对应位置处的图像像素数据。
4.如权利要求1所述的减少VIRTIO-GPU额外性能损耗的方法,其特征在于:所述步骤S7中,QEMU以得到的图像像素数据替换内存中已有的屏幕画面帧缓存上对应窗口区域列表中的数据,以得到整合后的屏幕画面数据。
5.如权利要求1所述的减少VIRTIO-GPU额外性能损耗的方法,其特征在于:所述步骤S4中,绘图命令监听分析装置解析到绘图命令针对屏幕画面帧缓存且包含特定的draw操作时,对所有的draw操作进行分析,得到完整绘图命令中所有draw操作对应的窗口区域位置及大小。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210466651.4A CN114968152B (zh) | 2022-04-29 | 2022-04-29 | 减少virtio-gpu额外性能损耗的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210466651.4A CN114968152B (zh) | 2022-04-29 | 2022-04-29 | 减少virtio-gpu额外性能损耗的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114968152A CN114968152A (zh) | 2022-08-30 |
CN114968152B true CN114968152B (zh) | 2024-04-19 |
Family
ID=82979336
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210466651.4A Active CN114968152B (zh) | 2022-04-29 | 2022-04-29 | 减少virtio-gpu额外性能损耗的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114968152B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116166367B (zh) * | 2023-04-25 | 2023-07-04 | 麒麟软件有限公司 | 提升显示帧缓存图像读取效率的方法 |
CN116775217A (zh) * | 2023-06-27 | 2023-09-19 | 深圳市青葡萄科技有限公司 | 一种云桌面vgpu实现方法、装置、设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011053769A (ja) * | 2009-08-31 | 2011-03-17 | Nec Personal Products Co Ltd | サーバ装置及び画面データの送信方法 |
CN104660687A (zh) * | 2015-02-02 | 2015-05-27 | 上海视聪网络信息技术有限公司 | 虚拟桌面显示的实现方法和系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20220048311A (ko) * | 2020-10-12 | 2022-04-19 | 주식회사 케이티 | 가상화 환경에서 사용자 가상머신의 화면을 미러링하는 방법 |
-
2022
- 2022-04-29 CN CN202210466651.4A patent/CN114968152B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011053769A (ja) * | 2009-08-31 | 2011-03-17 | Nec Personal Products Co Ltd | サーバ装置及び画面データの送信方法 |
CN104660687A (zh) * | 2015-02-02 | 2015-05-27 | 上海视聪网络信息技术有限公司 | 虚拟桌面显示的实现方法和系统 |
Non-Patent Citations (1)
Title |
---|
基于KVM的3D远程桌面同步技术的研究与实现;汤雄;中国优秀硕士学位论文 信息科技;20200115(第1期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN114968152A (zh) | 2022-08-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP4198909A1 (en) | Image rendering method and apparatus, and computer device and storage medium | |
CN109582425B (zh) | 一种基于云端与终端gpu融合的gpu服务重定向系统及方法 | |
CN114968152B (zh) | 减少virtio-gpu额外性能损耗的方法 | |
US8638336B2 (en) | Methods and systems for remoting three dimensional graphical data | |
US8773443B2 (en) | Compression for co-processing techniques on heterogeneous graphics processing units | |
US12067409B2 (en) | Streaming per-pixel transparency information using transparency-agnostic video codecs | |
CN104660687A (zh) | 虚拟桌面显示的实现方法和系统 | |
US9235452B2 (en) | Graphics remoting using augmentation data | |
US20110169844A1 (en) | Content Protection Techniques on Heterogeneous Graphics Processing Units | |
CN112486609A (zh) | 一种基于云桌面的虚拟显卡实现方法和装置 | |
CN110968395A (zh) | 一种在模拟器中处理渲染指令的方法及移动终端 | |
US10733689B2 (en) | Data processing | |
CN114567784B (zh) | 一种用于飞腾显卡的vpu视频解码输出方法及系统 | |
CN114222185B (zh) | 视频播放方法、终端设备及存储介质 | |
CN113141511A (zh) | 一种图形渲染方法及设备 | |
CN113674132B (zh) | 一种通过检测显卡能力切换窗口管理渲染后端的方法 | |
CN114570020A (zh) | 数据处理方法以及系统 | |
CN114089896A (zh) | 一种渲染图像截取方法及装置 | |
CN116546228B (zh) | 用于虚拟场景的推流方法、装置、设备及存储介质 | |
CN115794294A (zh) | vhost-user-gpu虚拟机的远程桌面实现方法及系统 | |
US11094032B2 (en) | Out of order wave slot release for a terminated wave | |
CN118043842A (zh) | 一种渲染格式选择方法及其相关设备 | |
CN114035903A (zh) | 实现Linux KVM虚拟机支持3D应用的方法及系统 | |
WO2021109105A1 (en) | Synchronization between graphical processing units and display processing units | |
CN116166367B (zh) | 提升显示帧缓存图像读取效率的方法 |
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 |