spice入门

上传人:oq****t 文档编号:11700860 上传时间:2017-09-03 格式:PDF 页数:10 大小:344.20KB
返回 下载 相关 举报
spice入门_第1页
第1页 / 共10页
spice入门_第2页
第2页 / 共10页
spice入门_第3页
第3页 / 共10页
spice入门_第4页
第4页 / 共10页
spice入门_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《spice入门》由会员分享,可在线阅读,更多相关《spice入门(10页珍藏版)》请在金锄头文库上搜索。

1、红帽Spice 入门1.IntroductionSPICE(独立计算环境的简单协议)-SimpleProtocolforindependentComputingEnvironmentSpice 是一个开放的远程计算解决方案,使得客户端可以访问远程机器桌面和设备(比如键盘,鼠标,audio和USB)。通过Spice我们可以像使用本地计算机一样访问远程机器,这样可以把CPUGPU密集工作从客户端移交给远程高性能机器。Spice适用于LAN和WAN,并且不会损害用户体验Spice项目提供了和虚拟桌面进行交互的解决方案,并且是完全开源的。Spice项目可以处理虚拟设备(后端back-end)和前端 f

2、ront-end。在前端和后端间通过VDI(VirtualDeviceInterfaces)进行交互。2.BasicArchitectureSpice由三个基本部分组成:Spice 协议,Spiceserver和Spiceclient。2.1Graphic CommandsFlow上图显示Spice的基本架构,以及guest到client之间传送的graphic命令数据流当GuestOS上一个user应用请求OS图形引擎执行一个渲染操作。图形引擎传送命令给QXL驱动,QXL驱动会把OS命令转换为QXL命令然后推送到QXL设备的commandsRIng缓冲中。commandsRing是QXLDe

3、vice中的一个队列。Libspice会从这个commandsRing取得命令数据,然后加到graphics命令树上。显示树上包含一组操作命令,这些命令的执行会产生显示内容。这棵树可以优化掉那些会被覆盖掉的命令,命令树还用来检测video数据流。当命令从libspice的发送队列发送给客户端时,发送命令被转换为Spice协议消息,同时这个命令从发送队列和树上移除。当libspice 不再需要一个命令时,它被推送到releasering。驱动使用这个队列来释放相应的命令资源当客户端从libspice接收到一个命令时,客户端使用这个命令来更新显示。2.2Agent Commands FlowSpi

4、ce 代理是guest中的一个软件模块。Spiceserver和Spiceclient使用代理来执行在guest上下文中的工作,比如配置guestdisplay设置。上图显示了spiceclient和server通过VDI 驱动和设备进行通信的过程。Message包括client的guest显示配置信息,server的鼠标移动信息以及代理的配置应答。驱动使用Input/OutputRings和VDIPortDevice通信。客户端和server生成的信息都写入到服务其中相同的写队列中,然后再写入VDIPortDevice的outputbufferring。Messageport决定是否mess

5、ages被server处理还是推送给客户端。2.3Spice ClientSpice跨平台客户端是终端用户的接口2.3.1ClientBasicStructure2.3.2ClientClasses下面是SpiceClient关键类的简介。为了有一个清晰的跨平台结构,Spice定义了一个通用的接口,而把平台相关的实现放在了一个并行的目录中。这个通用的接口就是Platformclass,定义了许多低级服务,比如timer和cursor操作。Application是一个主要的类,包含Clients, monitos和screens,这个类实现了通用的应用功能:命令行解析,主循环,时间处理,鼠标事件

6、重定向,全屏切换等等。2.3.2.1 Channelsclient和服务断通过channels进行通信,每一个channel类型对应着特定的数据类型。每个channel使用专门的TCP 端口,这个端口可以是安全的或者不安全的。在客户端,每一个channel会有一个专门的线程来处理,所以我们可以为每一个channel设置单独的优先级来达到不同的QoSRedClient是主channel。它拥有所有其他的实例化通道,并且可以控制他们(创建,连接,断开等),并且处理控制,配置和迁徙。可用channel包括:Main- 由RedClient实现DisplayChannel- 处理图形化命令,图像和数据

7、流InputsChannel- 键盘和鼠标事件CursorChannel- 指针设备位置,显示和光标形状。PlaybackChannel- 从服务器接受audio,然后在client进行播放RecordChannel- 在client端进行录音2.3.2.2 Screens和WindowsScreenLayer-screenlayer绑定到特定的screen,用来提供矩形区域的操作。layer是z-orderRedScreen- 实现screen的逻辑,控制window,使用 screenlayers来显示他的内容RedDrawable- 基本pixmap的平台特定实现。它支持基本的渲染操作。

8、2.4Spice serverspiceserver是通过libspice和VDIlibrary实现的。VDI提供了一个标准的方法来发布虚拟设别的接口。这使得其他的软件部件可以和这些virtualdevice交互。一方面,server使用Spice 协议和远程client通信,另一方面,它和VDIhost应用进行交互。server为了远程显示的目的,server维护了一个命令序列和一棵树来管理当前对象的依赖关系和覆盖关系。QXL命令被处理转换为Spice 协议,然后发送给客户端。2.4.1Server structureServer通过channels和client通信。每一个channel类

9、型对应一种特定类型的数据。每一个channel使用专用的TCPport。服务端的channel和client的channel是对应的,也有Main,Inputs,Display,CursorPlayback和RecordMain 和inputchannel是用来控制的,display 和cursorchannels被每个display的redworker线程控制。audioplayback和recordchannels有他们自己的处理函数。Libspice和VDIhost应用和各种功能接口进行通信 如Agent,keryboard, record等等如上图所示Spiceserver包括如下主要

10、部件:2.4.1.1 Red ServerServer自身,用来监听客户端的连接请求,接受连接并使用它们通信。负责如下工作:1. 管理channels拥有或者管理channels(注册,注销和关闭)通知client活动的channels,以便client能够创建他们Main 和 inputchannels的管理链接的建立socket操作,以及链接管理处理SSL和票据2.VDI接口3. 迁移进程协作4. 处理用户commands5. 和guestangent 通信2.4.1.2 图形子系统不像Spice中的其他子系统,graphics子系统在server中通过专有的线程并行运行。这种结构使得QE

11、MU流,以及输入的图形命令的处理和渲染保持独立,因此消耗很多的CPU资源。上图显示了Spiceserver图形子系统的结构。Redserver实例化一个dispatcher,并带有QXLinterface.dispatcher为这个QXLinterface创建redworker.worker处理的命令有三个来源:1. 同步的QXL设备命令,2.redservercommands,3. 异步的QXL设备命令.1和2 由dispatcher 通过socket分发; 3由worker从QXL设备rings拖下来。2.5Spice Protocolspiceprotocol 用于client 和ser

12、ver间的通信. 比如传输图形对象, 键盘和鼠标事件, 光标信息,audioplayback和录音,以及控制命令。细节文档参见Spice协议2.6QXL设备2.7QXLGUEST 驱动2.8SpiceAgentSpice代理是一个可选部件用来增强用户体验以及执行面向guest的工作。例如,当使用客户端鼠标模式时,agent插入鼠标位置和状态到guest. 此外,它可以用来配置guest显示设置。未来的功能包括从guest复制对象或者粘贴对象到guest.2.9VDIPort Device 和 DriverSpice协议支持client到服务器端代理之间的通信channel。当使用QEMU时,S

13、pice代理驻留在guest上。VDIport是一个QEMUPCI设备用来和agent之间通信,使用一个特定的代理协议进行通信。3 Features3.1Graphic commandsSpice支持2D图形命令的传输和处理(3D图形命令暂时还不支持),而其他的远程桌面解决方案一般使用framebuffer的更新。QXL设备命令是通用的平台独立的,所以Windows和 Xdrivers都可以使用它。3.2 硬件加速基本的Spiceclient渲染是通过Cario执行的,cario本身又是跨平台的设备独立的库。Cario为二维绘图提供了向量图形原语。硬件加速是一个额外的渲染模式,渲染通过clie

14、nt的GPU而不是软件实现的。硬件加速在linux是通过OpenGL实现,在Windows中为GDI。使用硬件加速有如下有点 高性能渲染 - 使用OpenGL,Spiceclient能够渲染的更快。使用硬件进行拉伸要比耗费大量软件操作的拉伸高效的多。因此,Spice 能够达到更好的用户体验。 减少客户端CPU使用率 - 客户端可以用节约下来的CPU时间,用来执行其他的工作,比如audio和Cario不同,Cario是一个完全独立的软件库,而OpenGL则是一个硬件库,依赖于驱动和硬件实现。因此Spice可能会碰到不正确的渲染,或者clienthost崩溃。此外,尽管OpenGL是标准的,但是各

15、个厂商的硬件和驱动实现可能有所差别。因此,在不同的GPUs上,Spice可能显示不同的渲染输出,已经不同的性能表现。此外,还有一些设备并不支持OpenGL3.3Image CompressionSpice提供了几个image压缩算法,可以在初始化时选择,并能在运行时动态更改。Quic是Spice专有的image压缩工具,基于SFALIC算法。LZ算法是另外一个选择。Quic和LZ都是本地算法。GlobalLZ是另外一个Spice专有算法,使用LZ以及一个基于历史的全局字典。GLZ利用图像中的重复模式来减少网络流量,这对于运行于WAN环境下的远程桌面是重要的。Spice提供了针对每副图片压缩的自

16、动选择模式,针对图片的属性启发性的选择LZ/GLZ和Quic压缩算法。一般来说,人造图片使用LZ/GLZ更好,而真实图片则使用Quic3.4video压缩Spice对于图片使用的是无损压缩算法,这是为了避免关键显示对象信息的丢失。但是,由于video流可能是带宽的主要消耗者,因为video中的每一帧都是一个单独的图像。此外这些图像并不是关键数据。因此,Spice对这些视频流采用有损压缩,Spiceserver启发性的识别视频区域更新频率搞得区域,这些区域的更新采用MotionJPEG算法编码,编码后发送给client。这种机制节省了很多带宽,改善了Spice性能,尤其是在WAN网络上。当然,在某些情况下,启发行为可能会导致低质量的图像。3.5CachingSpice实现client 图像高速缓存,以便避免冗余的传输。Caching可以应用到任何发送给client的数据,包括pixmaps,pallettes和cursors。每一个图片都有一个唯一的id和cache提示。不一致的images有不同的ids

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号