vhost-user-gpu虚拟机的远程桌面实现方法及系统转让专利

申请号 : CN202310078478.5

文献号 : CN115794294B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李唯实孙立明张铎谢明

申请人 : 麒麟软件有限公司

摘要 :

本发明公开了一种vhost‑user‑gpu虚拟机的远程桌面实现方法及系统,本发明的远程桌面实现方法包括在使用vhost‑user‑gpu虚拟显卡的虚拟机进行渲染输出时,利用egl‑headless协议将虚拟机渲染上下文中的帧缓存图像数据读取到内存指定区域,并将内存指定区域中的帧缓存图像数据通过指定的远程桌面协议发送到远端以实现对虚拟机的远程桌面访问;本发明旨在实现vhost‑user‑gpu方案下的虚拟机的远程桌面访问,远程桌面访问开销小,对虚拟机性能负面影响小,兼容包括不限于SPICE协议、VNC在内的多种远程桌面访问协议。

权利要求 :

1.一种vhost‑user‑gpu虚拟机的远程桌面实现方法,其特征在于,包括在使用vhost‑user‑gpu虚拟显卡的虚拟机进行渲染输出时,利用egl‑headless协议将虚拟机渲染上下文中的帧缓存图像数据读取到内存指定区域,并将内存指定区域中的帧缓存图像数据通过指定的远程桌面协议发送到远端以实现对虚拟机的远程桌面访问,所述vhost‑user‑gpu虚拟显卡包括独立运行于用户态的vhost‑user‑gpu数据面后端以及位于qemu中的vhost‑user‑gpu显示设备,虚拟机通过virtio‑gpu驱动来加载位于qemu中的vhost‑user‑gpu显示设备,利用宿主机物理显卡来进行虚拟机中的图像渲染处理,所述vhost‑user‑gpu数据面后端通过宿主机中的共享内存来直接访问虚拟机的渲染命令处理队列,若从渲染命令处理队列中截获到图像渲染命令,则调用virglrenderer组件来利用宿主机物理显卡完成图像渲染硬件加速,渲染后的图像存放在宿主机物理显卡的帧缓存中,并在渲染命令处理完毕后将处理结果通过渲染命令处理队列反馈给虚拟机。

2.根据权利要求1所述的vhost‑user‑gpu虚拟机的远程桌面实现方法,其特征在于,所述利用egl‑headless协议将虚拟机渲染上下文中的帧缓存图像数据读取到内存指定区域的触发条件包括定时执行和基于虚拟机发送的屏幕刷新命令flush触发执行。

3.根据权利要求2所述的vhost‑user‑gpu虚拟机的远程桌面实现方法,其特征在于,所述基于虚拟机发送的屏幕刷新命令flush触发执行包括:当vhost‑user‑gpu数据面后端从渲染命令处理队列中截获到屏幕刷新命令flush时,所述vhost‑user‑gpu数据面后端将屏幕刷新命令flush转发给vhost‑user‑gpu显示设备,vhost‑user‑gpu显示设备在收到屏幕刷新命令flush后,立即通过egl‑headless协议将虚拟机渲染上下文中的帧缓存图像数据读取到内存指定区域。

4.根据权利要求3所述的vhost‑user‑gpu虚拟机的远程桌面实现方法,其特征在于,所述立即通过egl‑headless协议将虚拟机渲染上下文中的帧缓存图像数据读取到内存指定区域之后,还包括基于在egl‑headless协议中增加的针对屏幕刷新命令flush处理情况反馈功能将屏幕刷新命令flush的执行结果通过渲染命令处理队列实时反馈给虚拟机。

5.根据权利要求4所述的vhost‑user‑gpu虚拟机的远程桌面实现方法,其特征在于,还包括在vhost‑user‑gpu数据面后端从渲染命令处理队列中截获到虚拟机中切换屏幕分辨率操作对应的扫描输出命令scanout时,所述vhost‑user‑gpu数据面后端将扫描输出命令scanout转发给vhost‑user‑gpu显示设备,vhost‑user‑gpu显示设备在收到扫描输出命令scanout后,根据扫描输出命令scanout中指定的屏幕大小来变更用于存放虚拟机对应帧缓存图像数据的内存指定区域大小,使得内存指定区域大小跟虚拟机的屏幕大小相匹配。

6.根据权利要求5所述的vhost‑user‑gpu虚拟机的远程桌面实现方法,其特征在于,所述vhost‑user‑gpu显示设备绑定有一个socket字符设备,所述vhost‑user‑gpu数据面后端将屏幕刷新命令flush和扫描输出命令scanout转发给vhost‑user‑gpu显示设备是指:所述vhost‑user‑gpu数据面后端基于socket字符设备采用socket文件对的方式与vhost‑user‑gpu显示设备进行数据交互以将屏幕刷新命令flush和扫描输出命令scanout转发给vhost‑user‑gpu显示设备。

7.一种vhost‑user‑gpu虚拟机的远程桌面实现系统,包括相互连接的微处理器、存储器和显卡设备,其特征在于,所述微处理器被编程或配置以执行权利要求1~6中任意一项所述vhost‑user‑gpu虚拟机的远程桌面实现方法。

8.一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其特征在于,所述计算机程序用于被微处理器编程或配置以执行权利要求1~6中任意一项所述vhost‑user‑gpu虚拟机的远程桌面实现方法。

说明书 :

vhost‑user‑gpu虚拟机的远程桌面实现方法及系统

技术领域

[0001] 本发明涉及虚拟机技术领域,具体涉及一种vhost‑user‑gpu虚拟机的远程桌面实现方法及系统。

背景技术

[0002] 目前,大多数厂商使用QEMU/KVM的架构来实现桌面虚拟化,并搭配使用VGA、QXL、Cirrus等虚拟显卡进行图像输出。这类虚拟显卡成本低廉、易部署,且兼容性较好,但因为虚拟显卡通常是借由宿主机的CPU来模拟执行图像命令的缘故,也存在性能不足、无法胜任大型3D应用的问题,其应用范围有限。
[0003] 作为渲染API转发方案的具体实现,virtio‑gpu半虚拟化显卡方案采用virtio半虚拟化技术,可以将虚拟机中的图像渲染命令封装转发给宿主机的virglrenderer组件(给QEMU等虚拟机管理器提供渲染API接口,并可以调用宿主机物理显卡来实现虚拟机图像渲染的硬件加速),再由virglrenderer组件将图像渲染命令解析后提交给宿主机物理显卡进行渲染,从而实现虚拟机图像渲染的硬件加速,其性能相比VGA、QXL、Cirrus等纯虚拟显卡有了明显提升。然而,因为virtio技术本身的限制,virtio‑gpu与虚拟机进行数据通信时仍需要多次VM Exit(退出虚拟机)和VM Entry(返回虚拟机)操作,每次VM Exit和VM Entry都需要保存和还原虚拟机的运行时快照,产生了大量额外开销,限制了virtio‑gpu的渲染性能的提升。
[0004] 为了进一步提升虚拟机的图像渲染性能,业界又提出了vhost‑user‑gpu显卡方案,vhost‑user‑gpu显卡基于vhost‑user技术实现,由QEMU中的vhost‑user‑gpu设备和用户态独立运行的vhost‑user‑gpu数据面后端组成,其中vhost‑user‑gpu数据面后端可以直接跟虚拟机进行数据通信和调用virglrenderer组件进行图像渲染,无需再经过VM Exit和VM Entry操作。相比virtio‑gpu显卡,vhost‑user‑gpu显卡的图像渲染性能有了进一步提升。
[0005] 虽然vhost‑user‑gpu显卡的图像渲染性能相比virti‑gpu显卡有了进一步提升,但与采用了virtio‑gpu显卡的虚拟机可以实现网络远程访问相比,采用了vhost‑user‑gpu显卡的虚拟机则只能通过spice协议(SimpleProtocol forIndependent Computing Environment,简单协议独立计算环境协议)的gl模式在宿主机上本地访问,使得vhost‑user‑gpu方案下的虚拟机仅能在宿主机上进行本地桌面访问。造成这种情况的主要原因是目前在QEMU中仅实现了对采用vhost‑user‑gpu显卡的虚拟机的spice gl模式的支持。
[0006] spice gl模式是QEMU所实现的带渲染节点的spice协议访问方式,在spice gl模式下,spice协议服务为virtio‑gpu提供了渲染节点绑定支持,以便virtio‑gpu可以调用渲染节点指向的物理显卡完成图像渲染硬件加速。同时,在进行虚拟机屏幕刷面输出时,spice gl模式会直接驱动宿主机物理显卡向其连接的显示器输出虚拟机屏幕画面,也正是因为这种屏幕刷面输出方式,导致在spice gl模式下只能在宿主机上以本地桌面的方式访问虚拟机,而无法做到对虚拟机的远程桌面访问。这样就导致极大限制了vhost‑user‑gpu显卡的应用范围,目前业界尚未有就vhost‑user‑gpu显卡方案下的虚拟机远程访问方法的专门研究。

发明内容

[0007] 本发明要解决的技术问题:针对vhost‑user‑gpu虚拟机无法远程桌面访问的现状,提供一种vhost‑user‑gpu虚拟机的远程桌面实现方法及系统。本发明旨在实现vhost‑user‑gpu方案下的虚拟机的远程桌面访问,远程桌面访问开销要小,对虚拟机性能负面影响小,兼容包括不限于SPICE协议、VNC在内的多种远程桌面访问协议。
[0008] 为了解决上述技术问题,本发明采用的技术方案为:
[0009] 一种vhost‑user‑gpu虚拟机的远程桌面实现方法,包括在使用vhost‑user‑gpu虚拟显卡的虚拟机进行渲染输出时,利用egl‑headless协议将虚拟机渲染上下文中的帧缓存图像数据读取到内存指定区域,并将内存指定区域中的帧缓存图像数据通过指定的远程桌面协议发送到远端以实现对虚拟机的远程桌面访问。
[0010] 可选地,所述vhost‑user‑gpu虚拟显卡包括独立运行于用户态的vhost‑user‑gpu数据面后端以及位于qemu中的vhost‑user‑gpu显示设备,虚拟机通过virtio‑gpu驱动来加载位于qemu中的vhost‑user‑gpu显示设备以利用宿主机物理显卡来进行虚拟机中的图像渲染处理。
[0011] 可选地,所述vhost‑user‑gpu数据面后端通过宿主机中的共享内存来直接访问虚拟机的渲染命令处理队列,若从渲染命令处理队列中截获到图像渲染命令则调用virglrenderer组件来利用宿主机物理显卡完成图像渲染硬件加速,渲染后的图像存放在宿主机物理显卡的帧缓存中。
[0012] 可选地,所述立即通过egl‑headless协议将虚拟机渲染上下文中的帧缓存图像数据读取到内存指定区域之后,还包括基于在egl‑headless协议中增加的针对的屏幕刷新命令flush处理情况反馈功能将屏幕刷新命令flush的执行结果通过渲染命令处理队列实时反馈给虚拟机,以确保vhost‑user‑gpu的渲染性能不会因反馈不及时受到影响。
[0013] 可选地,所述利用egl‑headless协议将虚拟机渲染上下文中的帧缓存图像数据读取到内存指定区域的触发条件包括定时执行和基于虚拟机发送的屏幕刷新命令flush触发执行。
[0014] 可选地,所述基于虚拟机发送的屏幕刷新命令flush触发执行包括:当vhost‑user‑gpu数据面后端从渲染命令处理队列中截获到屏幕刷新命令flush时,所述vhost‑user‑gpu数据面后端将屏幕刷新命令flush转发给vhost‑user‑gpu显示设备,使得vhost‑user‑gpu显示设备在收到屏幕刷新命令flush后立即利用egl‑headless协议将虚拟机渲染上下文中的帧缓存图像数据读取到内存指定区域,再将屏幕刷新命令flush的执行结果通过渲染命令处理队列反馈给虚拟机。
[0015] 可选地,还包括在vhost‑user‑gpu数据面后端从渲染命令处理队列中截获到虚拟机中切换屏幕分辨率操作对应的扫描输出命令scanout时,所述vhost‑user‑gpu数据面后端将扫描输出命令scanout转发给vhost‑user‑gpu显示设备,使得vhost‑user‑gpu显示设备在收到扫描输出命令scanou后,根据扫描输出命令scanout中指定的屏幕大小来变更用于存放虚拟机对应帧缓存图像数据的内存指定区域大小,使得内存指定区域大小跟虚拟机的屏幕大小相匹配。
[0016] 可选地,所述vhost‑user‑gpu显示设备绑定有一个socket字符设备,所述vhost‑user‑gpu数据面后端将屏幕刷新命令flush和扫描输出命令scanout转发给vhost‑user‑gpu显示设备是指:所述vhost‑user‑gpu数据面后端基于socket字符设备采用socket文件对的方式与vhost‑user‑gpu显示设备进行数据交互以将屏幕刷新命令flush和扫描输出命令scanout转发给vhost‑user‑gpu显示设备。
[0017] 此外,本发明还提供一种vhost‑user‑gpu虚拟机的远程桌面实现系统,包括相互连接的微处理器、存储器和显卡设备,所述微处理器被编程或配置以执行所述vhost‑user‑gpu虚拟机的远程桌面实现方法。
[0018] 此外,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序用于被微处理器编程或配置以执行所述vhost‑user‑gpu虚拟机的远程桌面实现方法。
[0019] 和现有技术相比,本发明主要具有下述优点:
[0020] 1、本发明能够实现使用vhost‑user‑gpu虚拟显卡的虚拟机的远程桌面访问。本发明在vhost‑user‑gpu方案中引入egl‑headless协议,主要是看中了egl‑headless协议的另一个作用:从宿主机物理显卡读取指定渲染上下文中的帧缓存图像数据。借由egl‑headless协议,可以将虚拟机渲染上下文中的帧缓存图像数据读取到内存指定区域,再通过远程桌面传输协议将图像传输至远程客户端呈现,从而实现了vhost‑user‑gpu方案下的虚拟机的远程桌面访问,扩展了vhost‑user‑gpu方案的使用范围。
[0021] 2、本发明将内存指定区域中的帧缓存图像数据通过指定的远程桌面协议发送到远端以实现对虚拟机的远程桌面访问时,可以根据需要采用所需的远程桌面传输协议,例如spice协议或vnc协议等,由于不依赖于特定的远程桌面传输协议,因此具有兼容性好的优点,不仅可以使用spice协议进行传输,也可以使用vnc等其他的远程桌面协议进行传输,进一步增加了远程桌面访问模式的灵活性。
[0022] 3、本发明在vhost‑user‑gpu方案中引入egl‑headless协议实现远程桌面访问为内存复制级别的操作,实现远程桌面访问模式的开销小,对虚拟机性能的影响程度低。
[0023] 4、本发明未改变虚拟机内部的图像渲染流程,虚拟机内仍使用virtio‑gpu驱动,无需在虚拟机内部做任何特殊改动或安装特殊组件,且qemu层的改动未改变qemu内部核心逻辑,保持了良好兼容性。

附图说明

[0024] 图1为本发明实施例方法的基本流程示意图。
[0025] 图2为本发明实施例方法的系统原理示意图。

具体实施方式

[0026] 如图1所示,本实施例提供一种vhost‑user‑gpu虚拟机的远程桌面实现方法,包括在使用vhost‑user‑gpu虚拟显卡的虚拟机进行渲染输出时,利用egl‑headless协议将虚拟机渲染上下文中的帧缓存图像数据读取到内存指定区域,并将内存指定区域中的帧缓存图像数据通过指定的远程桌面协议发送到远端以实现对虚拟机的远程桌面访问。egl‑headless协议是qemu提供的一种图像协议,该协议的主要功能是为virtio‑gpu显卡提供渲染节点绑定支持,virtio‑gpu显卡可以通过该协议中申明的渲染节点路径来调用所对应的宿主机物理显卡进行图像渲染。在vhost‑user‑gpu方案中,使用vhost‑user‑gpu虚拟显卡的虚拟机配置vhost‑user‑gpu虚拟显卡时会直接指定渲染节点,而无需再通过egl‑headless协议来绑定渲染节点。本实施例方法在vhost‑user‑gpu方案中引入egl‑headless协议,主要是看中了egl‑headless协议的另一个作用:从宿主机物理显卡读取指定渲染上下文中的帧缓存图像数据。借由egl‑headless协议,可以将虚拟机渲染上下文中的帧缓存图像数据读取到内存指定区域,再通过远程桌面传输协议将图像传输至远程客户端呈现,从而实现了vhost‑user‑gpu方案下的虚拟机的远程桌面访问。而且本实施例方法根据需要采用所需的远程桌面传输协议,例如spice协议或vnc协议等,由于不依赖于特定的远程桌面传输协议,因此具有兼容性好的优点。
[0027] 参见图2,vhost‑user‑gpu虚拟显卡包括独立运行于用户态的vhost‑user‑gpu数据面后端以及位于qemu中的vhost‑user‑gpu显示设备,虚拟机通过virtio‑gpu驱动来加载位于qemu中的vhost‑user‑gpu显示设备以利用宿主机物理显卡来进行虚拟机中的图像渲染处理。虚拟机通过virtio‑gpu驱动来加载vhost‑user‑gpu显示设备,虚拟机中的图像渲染处理流程与virtio‑gpu方案中保持一致,在此不再详细说明。
[0028] 本实施例中,vhost‑user‑gpu数据面后端通过宿主机中的共享内存来直接访问虚拟机的渲染命令处理队列,若从渲染命令处理队列中截获到图像渲染命令则调用virglrenderer组件来利用宿主机物理显卡完成图像渲染硬件加速,渲染后的图像存放在宿主机物理显卡的帧缓存中,并在渲染命令处理完毕后将处理结果通过渲染命令处理队列反馈给虚拟机。参见图2可知,virglrenderer组件解析图像渲染命令时,利用opengl驱动,通过显卡所绑定的渲染节点来调用宿主机物理显卡进行指定渲染上下文中的图像渲染加速,渲染后的图像将直接保留在宿主机物理显卡指定渲染上下文中的帧缓存中,从而利用宿主机物理显卡完成图像渲染硬件加速。本实施例中共享内存的实现方法如下:为实现vhost‑user‑gpu数据面后端与虚拟机驱动之间的直接数据通信,在宿主机上创建大页内存,并将大页内存配置为虚拟机内存,通过大页内存来实现虚拟机和宿主机之间的内存共享,使得在宿主机用户态运行的vhost‑user‑gpu数据面后端可以通过大页内存共享的方式直接访问虚拟机内存空间中的图像渲染命令队列。
[0029] 本实施例中,利用egl‑headless协议将虚拟机渲染上下文中的帧缓存图像数据读取到内存指定区域的触发条件包括定时执行和基于虚拟机发送的屏幕刷新命令flush触发执行。定时执行为远程桌面访问实现中常规的实现方式,例如,qemu主进程会定期驱动SPICE、VNC等远程桌面协议实现访问图像缓存区域,当发现图像缓存区域有更新后,会根据协议将图像缓存区域中的图像数据发送给远端,但是该方式下会存在不能即时响应的问题。因此,为确保基于egl‑headless协议的vhost‑user‑gpu的渲染性能,本实施例中通过基于虚拟机发送的屏幕刷新命令flush触发执行的触发条件,能够在定时执行的基础上实现屏幕刷新的即时执行,可有效减少画面的延迟。
[0030] 本实施例中,基于虚拟机发送的屏幕刷新命令flush触发执行包括:当vhost‑user‑gpu数据面后端从渲染命令处理队列中截获到屏幕刷新命令flush时,vhost‑user‑gpu数据面后端将屏幕刷新命令flush转发给vhost‑user‑gpu显示设备,使得vhost‑user‑gpu显示设备在收到屏幕刷新命令flush后立即执行利用egl‑headless协议获取虚拟机渲染上下文中的帧缓存图像数据读取到内存指定区域。
[0031] 本实施例中,为确保vhost‑user‑gpu的渲染性能不会因反馈不及时受到影响,立即通过egl‑headless协议将虚拟机渲染上下文中的帧缓存图像数据读取到内存指定区域之后,还包括基于在egl‑headless协议中增加的针对的屏幕刷新命令flush处理情况反馈功能将屏幕刷新命令flush的执行结果通过渲染命令处理队列实时反馈给虚拟机,确保虚拟机可以第一时间收到屏幕刷新命令flush的执行结果反馈,确保vhost‑user‑gpu虚拟显卡的渲染性能不会因反馈不及时受到影响。
[0032] 为保证vhost‑user‑gpu方案的稳定性,本实施例中还包括在vhost‑user‑gpu数据面后端从渲染命令处理队列中截获到虚拟机中切换屏幕分辨率操作对应的扫描输出命令scanout时,所述vhost‑user‑gpu数据面后端将扫描输出命令scanout转发给vhost‑user‑gpu显示设备,使得vhost‑user‑gpu显示设备在收到扫描输出命令scanout后,立即根据扫描输出命令scanout中指定的屏幕大小来变更用于存放虚拟机对应帧缓存图像数据的内存指定区域大小,使得内存指定区域大小跟虚拟机的屏幕大小相匹配。本实施例通过增加图像缓存的内存指定区域大小变更操作,可避免当虚拟机内屏幕分辨率发生变化时帧缓存图像大小跟图像缓存区域大小不匹配所造成的内存溢出问题。
[0033] 参见图2,本实施例中vhost‑user‑gpu显示设备绑定有一个socket字符设备,所述vhost‑user‑gpu数据面后端将屏幕刷新命令flush转发给vhost‑user‑gpu显示设备是指所述vhost‑user‑gpu数据面后端基于socket字符设备采用socket文件对的方式与vhost‑user‑gpu显示设备进行数据交互,从而将屏幕刷新命令flush和扫描输出命令scanout转发给vhost‑user‑gpu显示设备。
[0034] 此外,本实施例还提供一种vhost‑user‑gpu虚拟机的远程桌面实现系统,包括相互连接的微处理器、存储器和显卡设备,所述微处理器被编程或配置以执行所述vhost‑user‑gpu虚拟机的远程桌面实现方法。此外,本实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序用于被微处理器编程或配置以执行所述vhost‑user‑gpu虚拟机的远程桌面实现方法。
[0035] 本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、CD‑ROM、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0036] 以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。