虚拟桌面显示的实现方法和系统.pdf

上传人:111****11 文档编号:1672209 上传时间:2018-07-03 格式:PDF 页数:17 大小:1.07MB
返回 下载 相关 举报
摘要
申请专利号:

CN201510054113.4

申请日:

2015.02.02

公开号:

CN104660687A

公开日:

2015.05.27

当前法律状态:

实审

有效性:

审中

法律详情:

实质审查的生效IPC(主分类):H04L 29/08申请日:20150202|||公开

IPC分类号:

H04L29/08; G06F3/14

主分类号:

H04L29/08

申请人:

上海视聪网络信息技术有限公司

发明人:

翁树华; 李禹华; 许卫梁

地址:

201400上海市奉贤区环城西路2200号第一幢2128室

优先权:

专利代理机构:

深圳市世纪恒程知识产权代理事务所44287

代理人:

胡海国

PDF下载: PDF下载
内容摘要

本发明公开了一种虚拟桌面显示的实现方法,通过虚拟机利用在宿主机中共享的图形处理器GPU,截取虚拟桌面上的屏幕数据,并对截取的屏幕数据进行编码;宿主机对编码的屏幕数据进行相应的分析处理;协议客户端对分析处理后的屏幕数据解码后进行显示。本发明还公开了一种虚拟桌面显示的实现系统。本发明对传统桌面传输协议进行加速,起到了提升虚拟机响应速度和节省网络带宽的双重目的。

权利要求书

权利要求书
1.  一种虚拟桌面显示的实现方法,其特征在于,所述虚拟桌面显示方法包括步骤:
虚拟机利用在宿主机中共享的图形处理器GPU,截取虚拟桌面上的屏幕数据,并对截取的屏幕数据进行编码;
宿主机对编码的屏幕数据进行相应的分析处理;
协议客户端对分析处理后的屏幕数据解码后进行显示。

2.  如权利要求1所述的虚拟桌面显示的实现方法,其特征在于,所述虚拟机利用在宿主机中共享的GPU,截取虚拟桌面上的屏幕数据,并对截取的屏幕数据进行编码的步骤包括:
按照设定的频率定时截取虚拟桌面上的屏幕数据;
判断当前帧的屏幕数据与上一帧的屏幕数据是否发生变化,若有变化,则传输当前帧的屏幕数据中变化的增量数据;若无变化,则只传输当前帧的屏幕数据中的更新消息;
将判断后的待传输的屏幕数据编码成H264格式;
设置外设部件MEMPCI驱动模式,将编码后的屏幕数据通过MEMPCI驱动的读写接口发送给宿主机。

3.  如权利要求1所述的虚拟桌面显示的实现方法,其特征在于,所述宿主机对编码的屏幕数据进行相应的分析处理的步骤包括:
MEMPCI设备接收从虚拟机发送过来的编码后的屏幕数据,并将接收的屏幕数据保存至缓存中;
协议服务器读取缓存中的屏幕数据,按预先配置的协议规则对缓存中的屏幕数据打包处理后发送给协议客户端。

4.  如权利要求3所述的虚拟桌面显示方法,其特征在于,所述宿主机的协议服务器读取缓存中的屏幕数据,按预先配置的协议规则对缓存中的屏幕数据打包处理后发送给协议客户端的步骤包括:
设置虚拟桌面数据队列和当前数据缓冲区;
对读取的屏幕数据进行运算;
将运算后的屏幕数据加入虚拟桌面数据队列并更新到当前数据缓冲区中;
对运算后的屏幕数据添加帧索引和时间戳,并打包发送给协议客户端。

5.  如权利要求4所述的虚拟桌面显示方法,其特征在于,所述屏幕数据包括原始数据和增量数据,所述对读取的屏幕数据进行运算的步骤包括:
判断读获的屏幕数据的类型;
若是原始数据,则按FIFO先进先出方式加入虚拟桌面数据队列中;若是增量数据,则根据增量数据的当前帧数据和上一帧数据,通过运算后还原成一帧数据。

6.  一种虚拟桌面显示的实现系统,其特征在于,包括虚拟机、宿主机和协议客户端,其中,
所述虚拟机,用于利用在宿主机中共享的GPU,截取虚拟桌面上的屏幕数据,并对截取的屏幕数据进行编码;
所述宿主机,用于对编码的屏幕数据进行相应的分析处理;
所述协议客户端,用于对分析处理后的屏幕数据解码后进行显示。

7.  如权利要求6所述的虚拟桌面显示的实现系统,其特征在于,所述虚拟机包括:
截取模块,用于按照设定的频率定时截取虚拟桌面上的屏幕数据;
判断模块,用于判断当前帧的屏幕数据与上一帧的屏幕数据是否发生变化,若有变化,则传输当前帧的屏幕数据中变化的增量数据;若无变化,则只传输当前帧的屏幕数据中的更新消息;
编码模块,用于将判断后的待传输的屏幕数据编码成H264格式;
传输模块,用于设置MEMPCI驱动模式,将编码后的屏幕数据通过MEMPCI驱动的读写接口发送给所述宿主机。

8.  如权利要求6所述的虚拟桌面显示的实现系统,其特征在于,所述宿主机还包括MEMPCI设备和协议服务器,
所述MEMPCI设备,用于接收从虚拟机发送过来的编码后的屏幕数据,并将接收的屏幕数据保存至缓存中;
所述协议服务器,用于读取缓存中的屏幕数据,按预先配置的协议规则对缓存中的屏幕数据打包处理后发送给协议客户端。

9.  如权利要求8所述的虚拟桌面显示的实现系统,其特征在于,所述协议服务器包括:
设置模块,用于设置虚拟桌面数据队列和当前数据缓冲区;
运算模块,用于对读取的屏幕数据进行运算;
加入模块,用于将运算后的屏幕数据加入虚拟桌面数据队列并更新到当前数据缓冲区中;
发送模块,用于对运算后的屏幕数据添加帧索引和时间戳,并打包发送给协议客户端。

10.  如权利要求9所述的虚拟桌面显示的实现系统,其特征在于,所述运算模块包括:
判断单元,用于判断读获的屏幕数据的类型;
执行单元,用于若是原始数据,则按FIFO方式加入虚拟桌面数据队列中;若是增量数据,则根据增量数据的当前帧数据和上一帧数据,通过运算后还原成一帧数据。

说明书

说明书虚拟桌面显示的实现方法和系统
技术领域
本发明涉及通讯领域,尤其涉及虚拟桌面显示的实现方法和系统。
背景技术
虚拟桌面是云计算技术的一个典型应用。它能够为用户提供远程的计算机桌面服务,用户桌面机所需要的操作系统和应用软件运行在数据中心服务器,用户的操作行为采用桌面显示协议将操作系统桌面视图以图像的方式传送到用户终端设备上。
桌面传输协议是核心,桌面传输协议的好坏直接决定了终端用户的云桌面用户体验,用户体验一般由两个因素决定:虚拟桌面的响应速度和网络带宽占用情况,而响应速度和网络带宽占用,决定于虚拟桌面获取,编码,传输所采用的算法和网络协议。
目前主流的桌面传输协议有三类:
一类以VNC(Virtual Network Computing,虚拟网络计算机)为代表,虚拟机屏幕数据的获取和编码以软件方式实现,所有计算都由CPU完成。在虚拟化环境下,CPU是非常宝贵的计算资源,用CPU处理图像获取,比较与编码,计算量巨大,非常耗费CPU,势必造成虚拟机内部可用的计算资源降低,用户体验较慢,另外,为了节省CPU资源,虚拟桌面的图像编码一般采用较少CPU资源的算法,如BMP或JPEG,这两数据压缩比率较低,造成在网络上传输的数据量大,带宽占用高。
第二类以Citrix的ICA(Independent Computing Architecture,独立计算结构)协议为代表,虚拟桌面的编码和数据压缩部分或全部由硬件实现,这样就将CPU从图形编解码中解放出来,由于数据编码用硬件实现,可以选用数据压缩率高的编码算法,这样网络带宽占用率可以显著的降低。微软的RDP(Remote Display Protocol,远程显示协议)协议、增强实现RemoteFX、VMWare的PCOIP协议属于这种类型。
第三类介于以上两种之间,屏幕获取和编码由软件实现,但是对软件做 了优化,采用了优秀的图像及视频获取启发算法,对虚拟桌面尽量在源头上传输变化的数据,这样就不用传输整幅图片,尽量节省网络传输带宽,另外多采用Cache机制,将桌面数据划成小块放入cache中,尽量不传输没有变化的数据,也可以在一定程度上降低对图形的处理。本质上这类协议还是用CPU解码,但从技术上尽量优化,这类协议以SPICE(Simple Protocol for Independent Computing Environment,简单协议独立计算环境)为代表。
从效果上来看,第二类效果最好,特别是ICA协议,虚拟机图形和视频应用,效果都不错。第三类次之,第一类效果最差。但第二类协议的核心技术基本上被各大虚拟化厂商所垄断,外界无从知道其实现细节。因此,传统桌面传输协议中存在的虚拟桌面数据传输响应速度慢以及网络带宽占用高,是一个亟待解决的问题。
发明内容
本发明的主要目的在于提供一种虚拟桌面显示的实现方法和系统,旨在解决传统桌面传输协议中存在的虚拟桌面数据传输响应速度慢以及网络带宽占用高的问题。
为实现上述目的,本发明提供一种虚拟桌面显示的实现方法,所述虚拟桌面显示方法包括步骤:
虚拟机利用在宿主机中共享的图形处理器GPU,截取虚拟桌面上的屏幕数据,并对截取的屏幕数据进行编码;
宿主机对编码的屏幕数据进行相应的分析处理;
协议客户端对分析处理后的屏幕数据解码后进行显示。
优选地,所述虚拟机利用在宿主机中共享的GPU,截取虚拟桌面上的屏幕数据,并对截取的屏幕数据进行编码的步骤包括:
按照设定的频率定时截取虚拟桌面上的屏幕数据;
判断当前帧的屏幕数据与上一帧的屏幕数据是否发生变化,若有变化,则传输当前帧的屏幕数据中变化的增量数据;若无变化,则只传输当前帧的屏幕数据中的更新消息;
将判断后的待传输的屏幕数据编码成H264格式;
设置外设部件MEMPCI驱动模式,将编码后的屏幕数据通过MEMPCI驱动的读写接口发送给宿主机。
优选地,所述宿主机对编码的屏幕数据进行相应的分析处理的步骤包括:
MEMPCI设备接收从虚拟机发送过来的编码后的屏幕数据,并将接收的屏幕数据保存至缓存中;
协议服务器读取缓存中的屏幕数据,按预先配置的协议规则对缓存中的屏幕数据打包处理后发送给协议客户端。
优选地,所述宿主机的协议服务器读取缓存中的屏幕数据,按预先配置的协议规则对缓存中的屏幕数据打包处理后发送给协议客户端的步骤包括:
设置虚拟桌面数据队列和当前数据缓冲区;
对读取的屏幕数据进行运算;
将运算后的屏幕数据加入虚拟桌面数据队列并更新到当前数据缓冲区中;
对运算后的屏幕数据添加帧索引和时间戳,并打包发送给协议客户端。
优选地,所述屏幕数据包括原始数据和增量数据,所述对读取的屏幕数据进行运算的步骤包括:
判断读获的屏幕数据的类型;
若是原始数据,则按FIFO方式加入虚拟桌面数据队列中;若是增量数据,则根据增量数据的当前帧数据和上一帧数据,通过运算后还原成一帧数据。
为了解决上述的技术问题,本发明进一步提供一种虚拟桌面显示的实现系统,包括虚拟机、宿主机和协议客户端,其中,
所述虚拟机,用于利用在宿主机中共享的GPU,截取虚拟桌面上的屏幕数据,并对截取的屏幕数据进行编码;
所述宿主机,用于对编码的屏幕数据进行相应的分析处理;
所述协议客户端,用于对分析处理后的屏幕数据解码后进行显示。
优选地,所述虚拟机包括:
截取模块,用于按照设定的频率定时截取虚拟桌面上的屏幕数据;
判断模块,用于判断当前帧的屏幕数据与上一帧的屏幕数据是否发生变化,若有变化,则传输当前帧的屏幕数据中变化的增量数据;若无变化,则只传输当前帧的屏幕数据中的更新消息;
编码模块,用于将判断后的待传输的屏幕数据编码成H264格式;
传输模块,用于设置MEMPCI驱动模式,将编码后的屏幕数据通过MEMPCI驱动的读写接口发送给所述宿主机。
优选地,所述宿主机还包括MEMPCI设备和协议服务器,
所述MEMPCI设备,用于接收从虚拟机发送过来的编码后的屏幕数据,并将接收的屏幕数据保存至缓存中;
所述协议服务器,用于读取缓存中的屏幕数据,按预先配置的协议规则对缓存中的屏幕数据打包处理后发送给协议客户端。
优选地,所述协议服务器包括:
设置模块,用于设置虚拟桌面数据队列和当前数据缓冲区;
运算模块,用于对读取的屏幕数据进行运算;
加入模块,用于将运算后的屏幕数据加入虚拟桌面数据队列并更新到当前数据缓冲区中;
发送模块,用于对运算后的屏幕数据添加帧索引和时间戳,并打包发送给协议客户端。
优选地,所述运算模块包括:
判断单元,用于判断读获的屏幕数据的类型;
执行单元,用于若是原始数据,则按FIFO方式加入虚拟桌面数据队列中;若是增量数据,则根据增量数据的当前帧数据和上一帧数据,通过运算后还原成一帧数据。
本发明提供的虚拟桌面显示的实现方法,通过虚拟机利用在宿主机中共享的图形处理器GPU,截取虚拟桌面上的屏幕数据,并对截取的屏幕数据进行编码;宿主机对编码的屏幕数据进行相应的分析处理;协议客户端对分析处理后的屏幕数据解码后进行显示。本发明可在开源桌面云协议如SPICE或VNC上实现,作为开源桌面云协议的一个增强组件,对传统桌面传输协议进行加速,起到了提升虚拟机响应速度和节省网络带宽的双重目的。
附图说明
图1为本发明虚拟桌面显示的实现方法一实施例的流程示意图;
图2为图1中所述虚拟机利用在宿主机中共享的GPU,截取虚拟桌面上的屏幕数据,并对截取的屏幕数据进行编码的步骤的细化流程示意图;
图3为图1中所述宿主机对编码的屏幕数据进行相应的分析处理的步骤的 细化流程示意图;
图4为图3中所述宿主机的协议服务器读取缓存中的屏幕数据,按预先配置的协议规则对缓存中的屏幕数据打包处理后发送给协议客户端的步骤的细化流程示意图;
图5为图4中所述对读取的屏幕数据进行运算的步骤的细化流程示意图;
图6为本发明虚拟桌面显示的实现系统一实施例的功能模块示意图;
图7为图6中所述虚拟机的功能模块示意图;
图8为图6中所述协议服务器的功能模块示意图;
图9为图8中所述运算模块的功能模块示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明提供一种虚拟桌面显示的实现方法,参照图1,图1为本发明虚拟桌面显示的实现方法一实施例的流程示意图,在一实施例中,所述虚拟桌面显示方法包括步骤:
步骤S100、虚拟机利用在宿主机中共享的GPU,截取虚拟桌面上的屏幕数据,并对截取的屏幕数据进行编码。
在主机BIOS中配置CPU虚拟化支持和DirectIO支持,并安装好显卡。将显卡ID号添加到虚拟机配置Libvirt文件中,启动虚拟机,并为虚拟机安装驱动程序,重启虚拟机,显卡驱动生效。在宿主机BIOS中设置显卡的GPU共享模式,并调整虚拟机启动参数,使虚拟机可以使用宿主机的GPU资源,在虚拟机内部实现虚拟机桌面截屏程序,该程序截图和编码完全利用GPU完成,CPU不参与截图和编码具体工作。虚拟机的桌面截屏程序以操作系统服务程序的形式存在,随虚拟机的启动而启动,虚拟机的关闭而结束。虚拟机的桌面截屏程序利用在宿主机中共享的GPU,截取虚拟桌面上的屏幕数据,所述的定时截屏服务程序,包括以一定的频率,一般为30ms,定时截取虚拟机桌面,所述截取的屏幕数据包括屏幕宽度和高度消息、读写状态值、虚拟 桌面数据类型和桌面数据。其中,数据类型包括原始数据和增量数据。利用GPU强大的硬件截屏与编码能力,将桌面图像编码为H264格式。
步骤S200、宿主机对编码的屏幕数据进行相应的分析处理。
宿主机中的MEMPCI设备接收从虚拟机发送过来的编码后的屏幕数据,并将接收的屏幕数据保存至缓存中;协议服务器读取缓存中的屏幕数据,按预先配置的协议规则对缓存中的屏幕数据打包处理后发送给协议客户端。
步骤S300、协议客户端对分析处理后的屏幕数据解码后进行显示。
协议客户端接收宿主机发送过来的处理后的屏幕数据,在终端显示设备上进行显示。由于在虚拟机里截取的屏幕数据被编码成H264格式,协议客户端需要将屏幕数据先解码。协议客户端将屏幕数据解码为YUV格式,其中,解码的方式可以用硬件实现,也可以用软件实现。在本实施例中,协议客户端进一步将YUV格式转换成显示库能够识别的格式,例如bitmap格式,并将转换后格式显示在终端设备上,对于有些显示输出库函数,可以直接显示H264格式图像,则转码不是必须的,可以直接解码后即可显示输出。
本实施例提供的虚拟桌面显示的实现方法,可在开源桌面云协议如SPICE或VNC上实现,作为该协议的一个增强组件,对传统桌面传输协议进行加速,从而起到了提升虚拟机响应速度和节省网络带宽的双重目的。
如图2所示,图2为图1中所述步骤S100的细化流程示意图,在本实施例中,所述步骤S100包括:
步骤S110、按照设定的频率定时截取虚拟桌面上的屏幕数据。
虚拟机的桌面截屏程序利用在宿主机中共享的GPU,截取虚拟桌面上的屏幕数据,所述的定时截屏服务程序,包括以一定的频率,一般为30ms,定时截取虚拟机桌面,所述截取的屏幕数据包括屏幕宽度和高度消息、读写状态值、虚拟桌面数据类型和桌面数据。
步骤S120、判断当前帧的屏幕数据与上一帧的屏幕数据是否发生变化,若有变化,则传输当前帧的屏幕数据中变化的增量数据;若无变化,则只传输当前帧的屏幕数据中的更新消息。
虚拟机判断当前帧的屏幕数据与上一帧的屏幕数据是否发生变化,若有变化,则传输当前帧的屏幕数据中变化的增量数据;若无变化,则只传输当 前帧的屏幕数据中的更新消息。虚拟机尽量不传输没有变化的数据,在一定程度上降低对屏幕数据的处理。
步骤S130、将判断后的待传输的屏幕数据编码成H264格式。
虚拟机截取的屏幕数据被编码成H264格式进行保存,H264格式较传统桌面传输协议如VNC协议中所使用的bitmap或JPG格式,具有数据压缩量高的优点,如果承载相同图像质量的屏幕数据,则以H264格式进行传输时,数据量少,网络带宽占用低。
步骤S140、设置外设部件MEMPCI驱动模式,将编码后的屏幕数据通过MEMPCI驱动的读写接口发送给宿主机。
虚拟机设置外设部件MEMPCI驱动模式,所述虚拟机里面MEMPCI设备驱动,即实现了数据缓冲区在虚拟机内核态的读写,内核态对CPU调用优先级比应用态更高,保证桌面数据传输更及时。之所以将虚拟机与宿主机设置成MEMPCI驱动的模式,是因为屏幕数据的数据量非常大,而采用PCI驱动的方式理论上传输速率为PCI总线的传输速率。第二个好处是实现在QEMU底层完成,处理优先级高,受应用程序干扰少。与RemoteFX相比,即使虚拟机没有网络,也可以传输桌面图像。
本实施例提供的虚拟桌面显示的实现方法,按照设定的频率定时截取虚拟桌面上的屏幕数据;判断当前帧的屏幕数据与上一帧的屏幕数据是否发生变化,若有变化,则传输当前帧的屏幕数据中变化的增量数据;若无变化,则只传输当前帧的屏幕数据中的更新消息;将判断后的待传输的屏幕数据编码成H264格式;设置外设部件MEMPCI驱动模式,将编码后的屏幕数据通过MEMPCI驱动的读写接口发送给宿主机。本实施例尽量不传输没有变化的数据,在一定程度上降低对屏幕数据的处理。以H264格式传输,数据量少,网络带宽占用低。将虚拟机与宿主机设置成MEMPCI驱动的模式,传输速率快,处理优先级高,受应用程序干扰少。
如图3所示,图3为图1中所述步骤S200的细化流程示意图,在本实施例中,所述步骤S200包括:
步骤S210、MEMPCI设备接收从虚拟机发送过来的编码后的屏幕数据,并将接收的屏幕数据保存至缓存中。
虚拟机内截屏数据与主机数据交换,采用QEMU模拟PCI设备的方式,从而实现MEMPCI设备驱动,虚拟机启动时,将MEMPCI设备添加到虚拟机中,所述MEMPCI设备是QEMU模拟的一个PCI设备,用于虚拟机的屏幕数据与宿主机里面的数据实时进行交互,在宿主机里面运行桌面协议处理程序,将虚拟机桌面数据按相应的协议打包,以设定的协议格式与终端交互,将虚拟机截取的屏幕数据在终端上呈现出来。宿主机的MEMPCI设备接收从虚拟机发送过来的编码后的屏幕数据,并将接收的屏幕数据保存至缓存中。
步骤S220、协议服务器读取缓存中的屏幕数据,按预先配置的协议规则对缓存中的屏幕数据打包处理后发送给协议客户端。
协议服务器读取缓存中的屏幕数据,按预先配置的协议规则对缓存中的屏幕数据打包处理后发送给协议客户端。所述虚拟机与宿主机之间的屏幕数据通过MEMPCI设备传输,是通过互斥锁机制保障的,对共享数据区数据的读写,虚拟机将截取的屏幕数据写入到该缓冲区,写完毕打开读锁,Host驱动读取数据完毕打开写锁,客户端就可以往设备缓冲区写入数据,实现数据的同步。
本实施例提供的虚拟桌面显示的实现方法,MEMPCI设备接收从虚拟机发送过来的编码后的屏幕数据,并将接收的屏幕数据保存至缓存中;协议服务器读取缓存中的屏幕数据,按预先配置的协议规则对缓存中的屏幕数据打包处理后发送给协议客户端。所述虚拟机与宿主机之间的屏幕数据通过MEMPCI设备传输,是通过互斥锁机制保障的,对共享数据区数据的读写,虚拟机将截取的屏幕数据写入到该缓冲区,写完毕打开读锁,Host驱动读取数据完毕打开写锁,客户端就可以往设备缓冲区写入数据,实现数据的同步。
如图4所示,图4为图3中所述步骤S220的细化流程示意图,在本实施例中,所述步骤S220包括:
步骤S221、设置虚拟桌面数据队列和当前数据缓冲区。
协议服务器设置虚拟桌面数据队列和当前数据缓冲区,建立的当前数据桌面数据缓冲区,每一个缓冲区代表一个虚拟桌面。考虑效率与容错性,缓冲区大小为50个绘图区。
步骤S222、对读取的屏幕数据进行运算。
协议服务器对读取的屏幕数据进行判断,判断读获的屏幕数据的类型,若是原始数据,则按FIFO方式加入虚拟桌面数据队列中;若是增量数据,则根据增量数据的当前帧数据和上一帧数据,通过运算后还原成一帧数据。
步骤S223、将运算后的屏幕数据加入虚拟桌面数据队列并更新到当前数据缓冲区中。
协议服务器将运算后的屏幕数据加入虚拟桌面数据队列并将运算后的屏幕数据更新到当前数据缓冲区中。虚拟桌面队列为发送到协议客户端的桌面数据的存储场所。
步骤S224、对运算后的屏幕数据添加帧索引和时间戳,并打包发送给协议客户端。
协议服务器对运算后的屏幕数据添加帧索引和时间戳,以便在协议客户端进行同步与错误侦测,并打包发送给协议客户端。
本实施例提供的虚拟桌面显示的实现方法,设置虚拟桌面数据队列和当前数据缓冲区;对读取的屏幕数据进行运算;将运算后的屏幕数据加入虚拟桌面数据队列并更新到当前数据缓冲区中;对运算后的屏幕数据添加帧索引和时间戳,并打包发送给协议客户端。在运算后的屏幕数据添加帧索引和时间戳,从而方便协议客户端进行同步与错误侦测。
如图5所示,图5为图4中所述步骤S222的细化流程示意图,在本实施例中,所述步骤S222包括:
步骤S222a、判断读获的屏幕数据的类型。
协议服务器判断读获的屏幕数据的类型,所述屏幕数据包括原始数据和增量数据。
步骤S222b、若是原始数据,则按FIFO方式加入虚拟桌面数据队列中;若是增量数据,则根据增量数据的当前帧数据和上一帧数据,通过运算后还原成一帧数据。
协议服务器对屏幕数据的类型进一步进行判定,若是原始数据,则按FIFO方式加入虚拟桌面数据队列中;若是增量数据,则根据增量数据的当前帧数据和上一帧数据,通过运算后还原成一帧数据。
本实施例提供的虚拟桌面显示的实现方法,判断读获的屏幕数据的类型, 若是原始数据,则按FIFO方式加入虚拟桌面数据队列中;若是增量数据,则根据增量数据的当前帧数据和上一帧数据,通过运算后还原成一帧数据。本实施例中,尽量不传输没有变化的数据,从而在一定程度上降低对屏幕数据的处理。
如图6所示,图6为本发明虚拟桌面显示的实现系统一实施例的功能模块示意图,在一实施例中,所述虚拟桌面显示的实现系统,包括虚拟机10、宿主机20和协议客户端30,其中,
所述虚拟机10,用于利用在宿主机中共享的GPU,截取虚拟桌面上的屏幕数据,并对截取的屏幕数据进行编码;
所述宿主机20,用于对编码的屏幕数据进行相应的分析处理;
所述协议客户端30,用于对分析处理后的屏幕数据解码后进行显示。
在主机BIOS中配置CPU虚拟化支持和DirectIO支持,并安装好显卡。将显卡ID号添加到虚拟机配置Libvirt文件中,启动虚拟机10,并为虚拟机10安装驱动程序,重启虚拟机10,显卡驱动生效。在宿主机20的BIOS中设置显卡的GPU共享模式,并调整虚拟机启动参数,使虚拟机10可以使用宿主机20的GPU资源,在虚拟机10内部实现虚拟机桌面截屏程序,该程序截图和编码完全利用GPU完成,CPU不参与截图和编码具体工作。虚拟机10的桌面截屏程序以操作系统服务程序的形式存在,随虚拟机10的启动而启动,虚拟机的关闭而结束。虚拟机10的桌面截屏程序利用在宿主机中共享的GPU,截取虚拟桌面上的屏幕数据,所述的定时截屏服务程序,包括以一定的频率,一般为30ms,定时截取虚拟机桌面,所述截取的屏幕数据包括屏幕宽度和高度消息、读写状态值、虚拟桌面数据类型和桌面数据。其中,数据类型包括原始数据和增量数据。利用GPU强大的硬件截屏与编码能力,将桌面图像编码为H264格式。
宿主机20中的MEMPCI设备接收从虚拟机发送过来的编码后的屏幕数据,并将接收的屏幕数据保存至缓存中;协议服务器读取缓存中的屏幕数据,按预先配置的协议规则对缓存中的屏幕数据打包处理后发送给协议客户端30。
协议客户端30接收宿主机20发送过来的处理后的屏幕数据,在终端显 示设备上进行显示。由于在虚拟机里截取的屏幕数据被编码成H264格式,协议客户端30需要将屏幕数据先解码。协议客户端30将屏幕数据解码为YUV格式,其中,解码的方式可以用硬件实现,也可以用软件实现。在本实施例中,协议客户端30进一步将YUV格式转换成显示库能够识别的格式,例如bitmap格式,并将转换后格式显示在终端设备上,对于有些显示输出库函数,可以直接显示H264格式图像,则转码不是必须的,可以直接解码后即可显示输出。
本实施例提供的虚拟桌面显示的实现系统,可在开源桌面云协议如SPICE或VNC上实现,作为该协议的一个增强组件,对传统桌面传输协议进行加速,从而起到了提升虚拟机响应速度和节省网络带宽的双重目的。
如图7所示,图7为图6中所述虚拟机的功能模块示意图,在本实施例中,所述虚拟机10包括:
截取模块11,用于按照设定的频率定时截取虚拟桌面上的屏幕数据;
判断模块12,用于判断当前帧的屏幕数据与上一帧的屏幕数据是否发生变化,若有变化,则传输当前帧的屏幕数据中变化的增量数据;若无变化,则只传输当前帧的屏幕数据中的更新消息;
编码模块13,用于将判断后的待传输的屏幕数据编码成H264格式;
传输模块14,用于设置MEMPCI驱动模式,将编码后的屏幕数据通过MEMPCI驱动的读写接口发送给所述宿主机。
虚拟机的桌面截屏程序的截取模块11利用在宿主机中共享的GPU,截取虚拟桌面上的屏幕数据,所述的定时截屏服务程序,包括以一定的频率,一般为30ms,定时截取虚拟机桌面,所述截取的屏幕数据包括屏幕宽度和高度消息、读写状态值、虚拟桌面数据类型和桌面数据。
虚拟机的判断模块12判断当前帧的屏幕数据与上一帧的屏幕数据是否发生变化,若有变化,则传输当前帧的屏幕数据中变化的增量数据;若无变化,则只传输当前帧的屏幕数据中的更新消息。虚拟机尽量不传输没有变化的数据,在一定程度上降低对屏幕数据的处理。
虚拟机编码模块13将截取的屏幕数据编码成H264格式进行保存,H264格式较传统桌面传输协议如VNC协议中所使用的bitmap或JPG格式,具有 数据压缩量高的优点,如果承载相同图像质量的屏幕数据,则以H264格式进行传输时,数据量少,网络带宽占用低。
虚拟机的传输模块14设置外设部件MEMPCI驱动模式,所述虚拟机里面MEMPCI设备驱动,即实现了数据缓冲区在虚拟机内核态的读写,内核态对CPU调用优先级比应用态更高,保证桌面数据传输更及时。之所以将虚拟机与宿主机设置成MEMPCI驱动的模式,是因为屏幕数据的数据量非常大,而采用PCI驱动的方式理论上传输速率为PCI总线的传输速率。第二个好处是实现在QEMU底层完成,处理优先级高,受应用程序干扰少。与RemoteFX相比,即使虚拟机没有网络,也可以传输桌面图像。
本实施例提供的虚拟桌面显示的实现系统,尽量不传输没有变化的数据,在一定程度上降低对屏幕数据的处理。以H264格式传输,数据量少,网络带宽占用低。将虚拟机与宿主机设置成MEMPCI驱动的模式,传输速率快,处理优先级高,受应用程序干扰少。
进一步参见图6,在一实施例中,所述宿主机20还包括MEMPCI设备21和协议服务器22,其中,
所述MEMPCI设备21,用于接收从虚拟机发送过来的编码后的屏幕数据,并将接收的屏幕数据保存至缓存中;
所述协议服务器22,用于读取缓存中的屏幕数据,按预先配置的协议规则对缓存中的屏幕数据打包处理后发送给协议客户端。
虚拟机内截屏数据与主机数据交换,采用QEMU模拟PCI设备的方式,从而实现MEMPCI设备驱动,虚拟机启动时,将MEMPCI设备21添加到虚拟机中,所述MEMPCI设备21是QEMU模拟的一个PCI设备,用于虚拟机的屏幕数据与宿主机里面的数据实时进行交互,在宿主机里面运行桌面协议处理程序,将虚拟机桌面数据按相应的协议打包,以设定的协议格式与终端交互,将虚拟机截取的屏幕数据在终端上呈现出来。宿主机的MEMPCI设备接收从虚拟机发送过来的编码后的屏幕数据,并将接收的屏幕数据保存至缓存中。
协议服务器22读取缓存中的屏幕数据,按预先配置的协议规则对缓存中的屏幕数据打包处理后发送给协议客户端。所述虚拟机与宿主机之间的屏幕 数据通过MEMPCI设备21传输,是通过互斥锁机制保障的,对共享数据区数据的读写,虚拟机将截取的屏幕数据写入到该缓冲区,写完毕打开读锁,Host驱动读取数据完毕打开写锁,客户端就可以往设备缓冲区写入数据,实现数据的同步。
本实施例提供的虚拟桌面显示的实现系统,所述虚拟机与宿主机之间的屏幕数据通过MEMPCI设备传输,是通过互斥锁机制保障的,对共享数据区数据的读写,虚拟机将截取的屏幕数据写入到该缓冲区,写完毕打开读锁,Host驱动读取数据完毕打开写锁,客户端就可以往设备缓冲区写入数据,实现数据的同步。
如图8所示,图8为图6中所述协议服务器的功能模块示意图,在本实施例中,所述协议服务器22包括:
设置模块221,用于设置虚拟桌面数据队列和当前数据缓冲区;
运算模块222,用于对读取的屏幕数据进行运算;
加入模块223,用于将运算后的屏幕数据加入虚拟桌面数据队列并更新到当前数据缓冲区中;
发送模块224,用于对运算后的屏幕数据添加帧索引和时间戳,并打包发送给协议客户端。
协议服务器的设置模块221设置虚拟桌面数据队列和当前数据缓冲区,建立的当前数据桌面数据缓冲区,每一个缓冲区代表一个虚拟桌面。考虑效率与容错性,缓冲区大小为50个绘图区。
协议服务器的运算模块222对读取的屏幕数据进行判断,判断读获的屏幕数据的类型,若是原始数据,则按FIFO方式加入虚拟桌面数据队列中;若是增量数据,则根据增量数据的当前帧数据和上一帧数据,通过运算后还原成一帧数据。
协议服务器的加入模块223将运算后的屏幕数据加入虚拟桌面数据队列并将运算后的屏幕数据更新到当前数据缓冲区中。虚拟桌面队列为发送到协议客户端的桌面数据的存储场所。
协议服务器的发送模块224对运算后的屏幕数据添加帧索引和时间戳,以便在协议客户端进行同步与错误侦测,并打包发送给协议客户端。
本实施例提供的虚拟桌面显示的实现系统,在运算后的屏幕数据添加帧索引和时间戳,从而方便协议客户端进行同步与错误侦测。
如图9所示,图9为图8中所述运算模块的功能模块示意图,在本实施例中,所述运算模块222包括:
判断单元2221,用于判断读获的屏幕数据的类型;
执行单元2222,用于若是原始数据,则按FIFO方式加入虚拟桌面数据队列中;若是增量数据,则根据增量数据的当前帧数据和上一帧数据,通过运算后还原成一帧数据。
协议服务器的判断单元2221判断读获的屏幕数据的类型,所述屏幕数据包括原始数据和增量数据。
协议服务器的执行单元2222对屏幕数据的类型进一步进行判定,若是原始数据,则按FIFO方式加入虚拟桌面数据队列中;若是增量数据,则根据增量数据的当前帧数据和上一帧数据,通过运算后还原成一帧数据。
本实施例提供的虚拟桌面显示的实现系统,尽量不传输没有变化的数据,从而在一定程度上降低对屏幕数据的处理。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

虚拟桌面显示的实现方法和系统.pdf_第1页
第1页 / 共17页
虚拟桌面显示的实现方法和系统.pdf_第2页
第2页 / 共17页
虚拟桌面显示的实现方法和系统.pdf_第3页
第3页 / 共17页
点击查看更多>>
资源描述

《虚拟桌面显示的实现方法和系统.pdf》由会员分享,可在线阅读,更多相关《虚拟桌面显示的实现方法和系统.pdf(17页珍藏版)》请在专利查询网上搜索。

本发明公开了一种虚拟桌面显示的实现方法,通过虚拟机利用在宿主机中共享的图形处理器GPU,截取虚拟桌面上的屏幕数据,并对截取的屏幕数据进行编码;宿主机对编码的屏幕数据进行相应的分析处理;协议客户端对分析处理后的屏幕数据解码后进行显示。本发明还公开了一种虚拟桌面显示的实现系统。本发明对传统桌面传输协议进行加速,起到了提升虚拟机响应速度和节省网络带宽的双重目的。。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 电学 > 电通信技术


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1