SPICE(二)

SPICE (二)

spice项目,一种远程访问虚拟机的开源解决方案,客户端可以访问远程虚拟机的显示和设备(例如键盘、鼠标、音频和usb等设备)。

  1. spice将CPU密集型和GPU密集型任务尽可能放到客户端运行,用户就可以获得与本地类似的用户体验;
  2. 无论是客户端和远程虚拟机之间是跨局域网还是跨广域网,spice都能提供良好的用户体验。

1. 图像命令流

spice基本组件包括:

  1. spice协议
    主要是定义了spice服务端与客户端之间的数据传输协议
  2. spice服务端
  3. spice客户端

与spice相关的组件:

  1. QXL设备, QEMU提供
  2. QXL驱动,虚拟机OS的显示驱动包括两部分,内核态驱动和Xorg驱动

需要注意:ARMv8当前遇到的问题

  1. QXL设备,需要手动修改,将其纳入编译
  2. 内核态QXL驱动,需要修改代码。(详细介绍敬请期待)

图像命令流

  1. 在虚拟机客户OS中,用户应用程序向显示引擎(GDI/X引擎,例如Xorg)发送图像渲染操作命令(X级);
  2. 显示引擎通过QXL驱动将图像渲染操作命令(X级)转换成QXL命令,并将QXL命令推送到QXL设备的命令环缓冲中;
  3. libspice(spice服务端)从QXL设备的命令环中获取QXL命令,并将其添加到显示命令树。显示命令树其实就是一组QXL命令,这组命令的运行结果就是屏幕显示数据(帧);命令树主要是用于优化命令传输(有些QXL命令对帧数据没有作用,可以直接抛弃)和视频流检测。
  4. libspice还维护了一个向客户端发送命令的发送队列。这些命令在发送给客户端之前需要翻译成spice协议消息。
  5. QXL命令传送给客户端之后,就会从命令树和发送队列中将该命令删除。libspice将发送完成的QXL命令推回给QXL释放环。QXL驱动负责回收。

猜你喜欢

转载自blog.csdn.net/lsshao/article/details/112788583