简介
Spice是一个开放远程计算方案,提供客户端远程访问显示和设备(例如:键盘、鼠标、声音)。其主要应用场景是远程访问虚拟机,尽管其他用途也是支持的而且已经有许多发展阶段。
当用户尝试去分流一些对于CPU和GPU不敏感的任务的时候,Spice提供一个类桌面的用户体验。
Spice基本模块:
- Spice Server
- Spice Client
- Spice Protocol
- 相关组件:QXL设备和驱动,Spice Agent
spice server
spice server是以libspice的方式呈现给qemu,通过spice protocol,spice server与qemu交互,同时与远端的spice client通信。server通过channel与client通信,每个channel是一个单独的线程,负责一个特定的功能。qxl设备作为一个pci设备为qemu所使用,以提高guest图形性能。
spice client
spice client作为远程访问的客户端程序,主要用来连接、控制、通信和显示。一般来说,通过解析命令行参数、运行主消息循环、处理事件等来实现。
spcie agent
spice agent是一个可选组件,主要用来提升用户体验和管理guest端的事务。qemu通过VDI port device的输入输出环与guest通信,server从VDI port输入环读取消息到读缓冲区,由message port决定是由server处理还是转发给client。server和client产生的消息则放入写入队列,写入到vdi port device的输出环。
qxl
上图显示的是使用qemu和spice时的图形命令流。从guest端的GDI或者图形引擎执行渲染命令开始,图形引擎将命令传递给QXL driver,QXL driver将渲染命令转换成QXL命令,传送到QXL device的命令环,libspice则从中读取命令添加到图形命令树中。同时,还维护一个到client端的命令队列,用来更新client端的显示。简单的理解就是,spice server在host端完成图形的渲染,然后压缩发送给client端,client端再解压缩显示更新。提升了用户的图形体验。