SPICE
协议初探
spice 协议初探 灵跃桌面云
2
序 言
SPICE,即 Simple Protocol for Independent Computing Environment(独立计算环境简单协议)是
红帽企业虚拟化桌面版的主要技术组件之一,具有自适应能力的远程提交协议,能够提供与物理桌
面完全相同的最终用户体验。借助支持 SPICE 协议的客户端(如 remote-viewer)或者通过浏览器,
用户可以访问自己的虚拟桌面,如下图 1所示。
图 1 spice remote-viewer客户端
spice 协议初探 灵跃桌面云
3
目 录
序 言 ..................................................................................................................................................... 2
版权声明 ................................................................................................................................................ 4
1. 特点................................................................................................................................................. 5
2. 架构................................................................................................................................................. 5
3. 实现................................................................................................................................................. 7
Spice客户端 ............................................................................................................................. 7
Spice Server ............................................................................................................................... 8
Spice 协议 ................................................................................................................................ 9
QXL Device ............................................................................................................................ 10
QXL Guest Drivers .................................................................................................................. 10
Spice Agent ............................................................................................................................. 10
VDIPort Device and Driver ...................................................................................................... 10
spice 协议初探 灵跃桌面云
4
版权所有 © 虫洞奇迹科技有限公司 2017。 保留一切权利。
非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以
任何形式传播。
商标声明
和其他成都虫洞奇迹科技有限公司商标均为成都虫洞奇迹科技有限公司的商标。
本文档提及的其他所有商标或注册商标,由各自的所有人拥有。
注意
您购买的产品、服务或特性等应受成都虫洞奇迹科技有限公司商业合同和条款的约束,本文档中
描述的全部或部分产品、服务或特性可能不在您的购买或使用范围之内。除非合同另有约定,成
都虫洞奇迹科技有限公司对本文档内容不做任何明示或默示的声明或保证。
由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使
用指导,本文档中的所有陈述、信息和建议不构成任何明示或暗示的担保。
成都虫洞奇迹科技有限公司
电话:400-090-2980
邮箱:contact@
网址:
spice 协议初探 灵跃桌面云
5
1. 特点
Spice 虚拟桌面传输协议,最初是由 Qumranet 开发,后来被 RedHat 收购并开源。经过几年的
社区开发,Spice协议已经能在实际应用中一展拳脚,和商业协议 ICA 、PCoIP 等相抗衡,与上述
商业化的远程桌面协议相比,Spice协议具有如下优点:
(1)开源:易于扩展和功能定制;
(2)跨平台:Windows/Linux/Mac OS 平台全兼容;
(3)支持外接设备:除常用 USB设备外,打印机和扫描仪等设备也能在远程使用;
(4)丰富的媒体支持:包括视频、音频、图像;
(5)更小的带宽占用:Spice里内置图像压缩算法,有效减少数据传输时的带宽占用;
(6)更安全的数据传输:Spice可以使用 OpenSSL加密传输数据。
2. 架构
Spice 包含四个部分:协议、客户端侧、服务端侧和虚拟机侧。其中,
(1) 协议:是客户端侧、服务端侧和虚拟机侧三个部分交互时所遵循的准则;
(2) 客户端:负责接收并转换虚拟机数据,以及发送用户输入数据到虚拟机,从而使得用户
能够与虚拟机进行交互;
(3) 服务端:是集成在 Hypervisor内部的一个用户层组件,使得 Hypervisor(如 QEMU)支
持 Spice协议;
(4) 虚拟机侧:指所有部署在虚拟机内部的必需组件,如 QXL驱动、Spice Agent 等。
spice 协议初探 灵跃桌面云
6
图 2 Spice 相关组件
(一)Spice 图形命令流
图 3展示了 Spice的基本框架,以及图形命令流如何从虚拟机内部达到 Spice终端(平台环境
为 QEMU+libSpice)。图形命令开始于虚拟机内部的图形应用程序向 OS 请求绘制操作(如 GDI
命令)。之后,Spice会利用安装在虚拟机内部的 QXL驱动,捕获应用程序的绘制操作,进而转化
为 Spice QXL 命令,并传递到 QEMU虚拟的 QXL设备后端。接着,LibSpice会读取上述 QXL 命
令,进行重组和优化,并封装成 Spice 协议消息格式,发送到终端。最后,终端依据 Spice 协议解
析对应的图形操作消息,进而完成画面更新操作。
图 3 Spice图形命令流
(二)Agent 命令流
如图 4所示,为 Spice Agent 对应的命令交互流程,Spice Agent 位于虚拟机内部。Spice Server
和 client 借助 Agent 在虚拟机内部执行一系列动作,如设置虚拟机显示配置等。Spice Agent 通过
spice 协议初探 灵跃桌面云
7
位于虚拟机内部的 VDIPort 设备驱动与 VDIPort 设备(由 QEMU 虚拟的设备)进行交互,VDIPort
虚拟设备与 Spice Server通过QEMU 的VDI Interface 进行交互,从而最终实现 Spice Agent与 Spice
Server以及 Spice Client 三者之间的交互,其中消息格式均遵从 Spice协议。
图 4 Spice Agent 图形命令流
3. 实现
Spice客户端
如图 5 所示,Spice 客户端通过建立不同的通道来处理不同的事件。客户端将每个 Channel 实
现为一个单独的线程,具体通过定义一个以单独线程运转的 RedChannel 基类的方式来实现,之后
从此基类中派生所需要的具体功能类。
客户端 Channel 类包括:RedClient、DisplayChannel、CursorChannel、 InputsChannel、
PlaybackChannel、RecordChannel 等。RedClient 负责建立主通道,之后主通道通过 channel_type创
建下述通道:
(1)DisplayChannel:负责处理图形命令、图片以及视频流显示;
(2)InputsChannel:负责处理键盘和鼠标输入;
(3)CursorChannel:负责处理指针设备位置、可见性以及形状的显示;
(4)PlaybackChannel:负责接收服务端的声音数据,并在客户端播放;
(5)RecordChannel:负责客户端声音设备声音捕获,并将其传递到虚拟机内。
spice 协议初探 灵跃桌面云
8
图 5 Spice client 实现
Spice Server
如图 6所示,Spice Server 内部对应于 client,也存在若干个通道。这些通道主要负责向虚拟机
的虚拟设备(如键盘鼠标等)传递客户端侧用户的输入,以及接收并显示虚拟机虚拟显卡对应的画
面(QXL)。为了使得 Spice Server能够相对独立,其借助 QEMU提供的各种虚拟设备后端接口来
与虚拟机所见的虚拟设备进行交互,如 Playback Interface 等。
spice 协议初探 灵跃桌面云
9
图 6 Spice Server实现
Spice 协议
如图 7 所示,Spice 协议是构建起整个虚拟桌面的核心。借助于 Spice 协议,虚拟桌面各个组
件之间才能够顺利交互。
图 7 Spice 协议
spice 协议初探 灵跃桌面云
10
QXL Device
Spice Server 支持 QXL VDI interface,负责为虚拟机提供虚拟显卡,包括初始化显卡的 ROM 与
RAM 等的地址映射、IO端口映射、显存区域更新、光标位置通知、设备 IRQ请求、显卡模式设置
及重置等显卡基本功能。同时,QXL设备后端,负责与 Spice Server 交互,从而实现在终端实时进
行虚拟桌面的显示。
QXL Guest Drivers
QXL虚拟设备对应的驱动,使操作系统能够正确识别相应的设备。
Spice Agent
虚拟机内部的守护进程,接收来自客户端或者服务器的相关操作请求,比如设置虚拟机的分辨
率等。
VDIPort Device and Driver
VDIPort 设备由 Spice Server 为虚拟机所虚拟的串口通信设备,提供给虚拟机内部 Agent 通道
以及 usb 重定向通道使用,其在 QEMU侧均对应于一种名称为 Spicevmc 的字符设备后端。