杨声远 吴朋朋 雍文龙
关键词:云桌面;SPICE桌面传输协议;USB重定向;USBRedir 技术;丢帧算法
中图分类号:TP311.13 文献标识码:A 文章编号:1006-8228(2023)11-108-04
0 引言
由于线上办公成了常态,所以无论是企业还是个人,对云桌面的需求大大增加。云桌面可以在很大程度上解决一些企业和个人对于计算机性能的需求,云桌面可以节省企业运行成本。随着虚拟化技术的发展、硬件设备性能的增强、网络技术的升级,云桌面技术[1]也在企业中有了较强的认可度。云桌面主要有如下几个方面的技术特点。
⑴ 计算和存储的集约化:在云桌面的服务器端只需要较弱的计算性能和存储性能即可,将本地处理的数据在数据中心进行处理。
⑵ 计算资源的共享化:根据所需性能进行分配算力,可以错峰填谷,应对不同时段的计算需求。
⑶ 云数据中心统一管理调度:对算力和数据进行同一调度来实现高效利用资源等。
同时,云桌面还具有接入便利,节能减排,安全性高的强大优势。
1 背景介绍
由于虚拟化桌面[2]的应用场景多,各家厂商都相继推出自家厂商的云桌面协议以提供完整化的云桌面解决方案,主要包括Citrix的ICA、VMware的PCoIP、Microsoft 的RDP(Window 自带的远程桌面所使用的协议)、Red Hat 的SPICE 等。这几种协议各有其优缺点,而SPICE 协议相对其他协议有以下几点优点:
⑴ 传输时使用的TCP协议安全性较高且不易丢帧;
⑵ 对图像传输有自适应能力,图像展示的体验较好;
⑶ 因为其开源的特性使用成本相较于其他协议较低;
⑷ 因為计算过程都放在的服务端上所以对CPU性能的要求较低。
当然也有对视频的支持较差、服务器响应延迟等缺点。
综上所述,对于企业来说使用SPICE 由于其开源的特性,使用成本相较于其他协议较低,在如今的线上办公来说具有较高的性价比。但由于SPICE 的一些局限性包括不支持3D 显示等,对于具体的应用还应该做具体分析。
2 SPICE 基础框架
SPICE 虚拟化桌面传输协议基本可以划分为四部分:SPICE protocol、SPICE Cliennt、SPICE Server 和SPICE Guest。SPICE protocol 主要充当其他三部分之间交互的规范[3];
SIPCE 协议的基础框架示意图如图1 所示。下面详细介绍一下SPICE 服务端与客户端的基本架构。
2.1 客户端架构
在SPICE Client 中Application 是程序的开始类,Application 类最先接收到SPICE Server 发送的命令,然后对不同的命令分别创建SPICE 连接的主要类RedClient、Red Screen 和Monior。在Application 类中还需要允许主消息循环来进行连接、断开、错误以及I/O 等事件的处理。
客户端架构示意图如图2 所示。
在SPICE Client 中RedClient 是整个SPICE 协议在客户端实现的主体,在协议中也被称为Main Channel,它拥有所有其他的实例化通道,并且可以控制他们(创建,连接,断开等),并且处理控制,配置和迁徙。所有的Channel 都是依次从RedPeer、RedChannelBase 和RedChannel 基础而来,在这一过程中每一层都担任着各不相同的作用。通道的网络连接管理[4]主要依赖RedPeer,其通过将套接字操作进行封装来完成加密或不加密的网络链路控制[5],为所有的服务提供基础保障;RedChannelBase 是在网络连接的基础上进行服务端与客户端的协议协商和验证以正式建立SPICE 功能连接[6];RedChannel 是在SPICE 连接完全建立后处理所有通道的共同事件。RedScreen 是客户端中屏幕内容渲染、显示和控制相关的类。RedScreen 通过ScreenLayer 将屏幕按照z 轴方向进行分层,根据不同的显示层来渲染对应的画面;通过RedWindow 类来负责各种窗体的渲染和状态控制。RedWindow_p-平台特定的窗口数据和方法。RedWidow-继承RedDrawable和RedWindow_p。基本窗口状态和功能的跨平台实现(例如,显示、隐藏、移动、最小化、设置标题、设置光标等)。
2.2 服务端架构
SPICE Server 没有图形化界面,通过GObject 面向对象编写,与客户端最大的不同在于,其是作为一个为libspice 库提供使用而非一个可以独自运行的程序。libspice 在服务端非常依赖于虚拟化软件[7],常用的是QEMU。Server 自身用来监听客户端的连接请求,接受连接并使用它们通信。其中,SPICE 服务器基于libspice(一个虚拟设备接口可插拔库)。VDI 提供了一个通过软件组件来发布虚拟设备接口的标准方式,使得软件组件能够与虚拟设备(QEMU)交互。
服务端架构示意图如图3 所示。
QEMU 是底层虚拟化软件的一种,在QEMU 提供了虚拟的QXL 接口与I/O 接口。在QEMU 上运行虚拟机操作系统时,分别通过代理接口、输入接口和音频接口(放音与收音)完成MainChannel、InputsChannel、RecordChannel 通道和PlaybackChannel 通道的建立。图形设备接口的封装调用通过使用QXL 驱动,便于显示通道与游标通道进行相关操作。Red Dispatcher负责与QXL 驱动接口。
3 SPICE 优化分析与实现
针对SPICE 存在问题的分析提出以下几种优化方案:
3.1 USB 重定向方案设计与实现
USB 重定向设备是在位于Server 端的虚拟USB设备与位于用户终端的物理设备之间建立连接,是在应用层的实现,通过在虚拟机上创建一个虚拟的USB外设驱动[8],来使应用程序获得数据,并重定向USB 设备的URB 请求及应答重。
USB 重定向主要基于SPICE 桌面传输协议和USBRedir 技术。USB 重定向基于SPICE Server 和Client spice-gtk 实现。Guest 端、SPICE Client 和Server。对由Guest 端发出USB 设备的控制请求和读写请求,并将请求协议分组。
USB 重定向的处理流程及实现过程如图4 所示。
下面以USB 设备的读请求为例解释USB 重定向过程。以读请求为例的USB 重定向处理时序过程如图5 所示。
3.2 视频性能优化与改进
视频传输的流畅度及清晰度也是也是影响用户体验感的重要元素之一,SPICE 协议采取传统的直接对静态图像进行压缩,而没有考虑视频在一定帧数区间是没有发生任何变化的,从而大大加大了SPICE 服务端的压力。所以,在用户使用过程中,在带宽不是较好的情况下,视频传输效果较差,极易出现延迟或严重丢帧的现象。本文大致采用改善丢帧算法的方法来减少服务端的CPU 压力,根据不同的网络情况,采取不同的丢帧策略,从而达到较为流畅的视频播放效果。视频优化原理如图6 所示。
首先优化丢帧算法[9],然后在SPICE Server 端增加了RedStream_Bandwidth 函數,其表示当前视频流占用带宽情况,丢帧算法根据当前带宽占比情况,选择最为合适的丢帧策略。将优化的丢帧算法与RedStream_Bandwidth 函数[10]进行结合,显著的提高了SPICE 协议视频传输性能,大大地减少了虚拟桌面在视频播放中的延迟和丢帧现象。视频流占用带宽比,其值的变化范围是[0,1]。在SPICE 协议中,该比值是一个不变的值,不能根据实际的网络带宽情况进行相应的优化。当视频流没有丢帧率,而其他板块需要带宽的情况下,就可以适当的增加丢帧率[11],从而达到整体的流畅度,使用户获得一个较好的体验感,也有利于网络带宽的利用。
丢帧率的计算是:统计服务端发送过来的帧数和客户端的实际接收帧数,当服务端帧数一定的情况下,只有增加客户端的实际接收帧数,减少客户端的丢帧数,才可以达到减少视频丢帧率的目的。将丢帧率与视频流占用带宽的比例因子相互结合,设定两个合理的丢帧率界限。如果当前丢帧率大于设定值,就要在不影响其他应用程序的情况下合理地倾斜网络带宽的使用,从而达到视频流畅的播放。如果当前丢帧率小于设定值,需要降低视频流的网络带宽使用,合理的增加丢帧率,将网络带宽分配给其他用户从而达到整体的运行流畅使得用户获得较好的使用体验。
3.3 建立客户端性能评估机制
目前,SPICE 采用的瘦客户机机制[12]可以有效降低使用门槛,对个人PC 的要求极低。然而,随着时代的发展,个人PC 性能逐渐提高。如果考虑使用云桌面来办公,那么个人PC 的性能就无法被充分利用了。随着用户对流畅度的要求越来越高,对传输性能的要求也越来越苛刻。为了解决这个问题,可以建立客户端性能评估机制,以利用那些性能较高的客户端的计算和存储性能,提高传输性能。而对于性能不足的客户端,仍然采用原方案,这样可以有效地提升传输性能,同时提高用户体验。这种方法既可以充分利用性能较高的计算机,又可以避免由于性能不足而导致的用户体验下降。在未来,这种方法将变得越来越重要。
对于性能评估较高的客户端,主要采取以下几个措施以利用其优势。
⑴ 客户端将服务端传输过的页面进行缓存。通过页面缓存可以实现对页面的拖动占用较小的带宽。
⑵ 图像渲染由客户端承担部分。对于需要滚动显示的长界面,平移等渲染任务可以交由客户端处理进一步提升传输性能。
具体方案如图7 所示:
由Monitor 检查设备性能由Decider 决定是否启用客户端的缓存模块并决定是由服务端单独执行渲染任务后传给客户端显示还是,由服务端和客户端分别执行一部分渲染操作。并最终进入Display Module来进一步处理。
4 结束语
本文通过简单介绍云桌面原理和主流桌面协议,重点分析了SPICE 协议框架的客户端和服务端框架。同时,针对用户在使用过程中可能遇到的播放视频时的延迟、丢帧和USB 设备无法重定向等问题,提供了一些关键的原理技术,如USB 设备虚拟化框架、虚拟多通道技术和USBRedir 技术,并给出了相应的解决方案。
值得注意的是,本文在解决视频卡顿或严重丢帧问题时,优化了SPICE 协议的丢帧算法,为提供更流畅的视频播放体验做出了重要贡献。通过本文的研究,我们可以更加深入地了解云桌面技术及其相关协议,并掌握一些关键的技术和解决方案,这对于企业的IT部门和云服务提供商都有着重要的指导意义。
总之,云桌面技术作为云计算的重要应用之一,具有广泛的应用前景和市场需求。通过本文的研究,我们可以更加深入地了解其相关协议和关键技术,为提供更好的用户体验和解决实际问题提供了有力支持。我们期待在未来的研究中,能够进一步深化云桌面技术的应用和优化,为用户提供更加优质的云服务体验。