云桌面的基本框架
Weidong Shi的2011年发表的文章:“SHARC: A scalable 3D graphics virtual appliance delivery framework in cloud”中
描述了“可扩展3D桌面云”的SHARC框架,分为3个部分:
virtualization servers (虚拟化服务器,这篇文章使用Xen)
graphics rendering servers (图形图像渲染服务器,使用物理显卡)
media streaming servers (视频流服务器,采用H.264压缩,RTSP传输)
1.1 virtualization servers框架
图形虚拟化
为了支持虚拟机的3D应用,SHARC采用了虚拟OpenGL驱动(从Chromium的OpenGL驱动修改)。
VMGL是一个Xen虚拟环境下的Linux虚拟OpenGL驱动,它也是从Chromium的OpenGL驱动修改而来的)。
SHARC提供了一个Linux GLX驱动,它实现了很多Chromium和VMGL中没有实现的函数。
SHARC为Windows实现了一个显示驱动(Windows DDK),将图形渲染命令和数据从虚拟机共享内存中提取出来(一个dom0级的代理程序),将它发送到graphics rendering server中。
实现了虚拟Direct3D驱动, 将Direct3D API转换为OpenGL命令(从WineX's D3D Driver(WineD3D)修改),采用这种方式支持Direct3D。
音频虚拟化
声卡模拟器(SB16)
交互虚拟化
使用Windows DDK实现了虚拟键盘和鼠标输入(针对Windows虚拟机)
使用Linux udev实现了输入守护服务(针对Linux虚拟机)
1.2 graphics rendering server框架
执行图形渲染命令,将渲染后的cJPEG数据流传输到media streaming servers中。
渲染上下文调度
SHARC’s graphics rendering server从Chromium’s server修改而来。
SHARC 渲染图像帧到 Pbuffer,(因为graphics rendering server渲染图像不是为了显示,而是为了发送到media streaming server,这一点和Chromium、VMGL是不同的)。
选用cJPEG格式压缩渲染后的帧,使用GPU's SIMD处理器,后来使用Nvidia's CUDA GPU编程。
对象的Cache
如果Cache中存在要渲染的图行对象,virtualization servers不需要再传输一遍
GPU的JPEG压缩
因为要传输给media streaming servers,所以使用JPEG压缩一下,节省20%的带宽。
1.3 media streaming server框架
采用SMP系统,接收cJPEG流,转码成H.264的码流,之后传输出去。
使用FFMPEG(集成X264的H.264编码器),H.264编码只是用了I和P帧
使用Live555实现RTP/RTSP协议的支持,使用Red5实现RTMP协议支持
1.4 streaming VNC support
SHARC扩展了标准VNC协议,以支持3D的虚拟应用
使用overlay view的模式显示实时的3D虚拟应用
实验结果
2.1 实验条件
硬件:
virtualization server: 1个E5410 2.33 GHz,16 GB,Xen 3.1
graphics rendering server: 4个PCIe x16插槽,4 块Nvidia 9800GT显卡
media streaming servers:2个E5410 2.33 GHz,4GB
客户端:1个Dual-Core AMD Opteron Processor 2210, 2GB
网络设备:Cisco 千兆交换机
测试实例:
Tux Racer (a GPL racing game)
Alien Arena (a FPS GPL game)
War of Warcraft 3 demo (a popular RPG game)
2.2 性能分析支持
使用IEEE Std 1588-2002进行个机器之间的同步,以获得小于毫秒级的精确计数器
实现了一个屏幕水印功能
2.3 初步结果(结果有些片面,不能反映系统的性能)
时延分析
总时延113ms左右
OpenGL的API调用次数和传输带宽(virtualization server 到 graphics rendering server)
media streaming server的传输带宽
使用Tux Racer例子(这只是最简单的图形),800帧的平均带宽在1.5Mbps