基于spice远程桌面协议-无人所武红杰20170502

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

KVM Qemu 之间的关系
• KVM是内核的模块,采用硬件辅助虚拟化技术Intel-VT,AMD-V • 使用KVM,Guest OS的CPU指令不用经过Qemu转译,直接运行,大
大提高了速度 • KVM通过/dev/kvm暴露接口,用户态程序可以通过ioctl来访问这个接口
open("/dev/kvm") ioctl(KVM_CREATE_VM) ioctl(KVM_CREATE_VCPU) for (;;) {
基于spice远程桌面协议
无人装备所 武红杰 2017.4
目录
• 虚拟化基本类型 • KVM QEMU关系 • 为什么是spice • 架构 • Spice client • spice客户端优化 • 搭建
虚拟化的基本类型
• 无虚拟化
▫ CPU一般设为四个Ring ▫ Kernel Mode一般跑在Ring 0上 ▫ User Mode一般跑在Ring 3上 ▫ 对于一个普通的传统的Linux系统没有问题
▫ Hypervisor运行在Kernel Mode, Ring 0 ▫ Guest OS不能直接运行在Ring 0,而是
需要对Kernel进行修改,将运行在Ring 0上的指令转为调用Hypervisor ▫ Guest OS上的APP运行在Ring 3
虚拟化的基本类型
• Full Virtualization without Hardware Assist非硬件辅助 全虚拟化 ▫ Hypervisor运行在Ring 0 ▫ Hypervisor对Guest OS提供CPU模拟,由Hypervisor 模拟一个CPU给VM,VM不直接使用真实的CPU ▫ Guest OS不做修改,还是试图运行在Ring 0上,只不 过是模拟CPU的Ring 0 ▫ Hypervisor对Guest OS的Ring 0上的指令进行转译, 变成真实CPU的指令,只能运行在Ring 1上
▫ Docker
KVM Qemu 之间的关系
• Qemu是一个模拟器,它向Guest OS模拟CPU,也模拟其他的硬件 • 正如非硬件辅助全虚拟化讲到的,Guest OS认为自己和硬件直接打交道,
其实是同Qemu模拟出来的硬件打交道,Qemu将这些指令转译给真正的硬件。 • 由于所有的指令都要从Qemu里面过一手,因而性能比较差
• 虚拟化
▫ 在Guest机器和Host机器中间加一层 Hypervisor
▫ Host机器看它像跑在自己上面的程序 ▫ Guest机器看它像自己所运行的硬件 ▫ 如果Host机器和Guest机器都跑相同的Linux,
它们的Kernel都想运行在Ring 0,可怎么办?
虚拟化的基本类型
• 半虚拟化Paravirtualization
• Qemu还会模拟其他的硬件,如Network, Disk,同样会影响这些设备的性能 • 于是产生pass through半虚拟化设备virtio_blk, virtio_net,提高设备性能 • Qemu-kvm对kvm的整合在1.3.0正式merge到master
为什么是spice
• 开源的远程桌面方案 • 客户端远程访问显示及设备 • 强调虚机环境
▫ 使用frame buffer更新 ▫ Fill,copy,stretch,path stroke,text,pointer
shape
• 无损图片,有损视频及音频
Spice 架构
Guest Spice Agent
Devices (QXL,VDIPort)
Devices (QXL,VDIPort)
• 跨平台
▫ 特殊的 显示接口针对linux windows平台各自实现
Spice Image 缓存
• 客户端缓存: 图标,调色板和鼠标;消除发送数据 冗余
• 显卡驱动生成的图片拥有唯一ID并且包含是否缓 存标记
• Spice支持多显示通道,缓存在各个通道中共享 • Libspice-server管理图片缓存及刷新
• Virtual Device Interface (VDI) :定义一组接口由 不同插件实现
• libspice –VDI 插件,运行在VDI宿主程序中(例 如:qemu);通过spice 协议与客户端交互
Spice Server – 接口
Spice 客户端
• 客户端接口 spicy ,remote-viewer;Android; ios
虚拟化的基本类型
• 硬件辅助全虚拟化 • Full Virtualization with Hardware Assist
▫ Intel VT and AMD-V创建一个新的Ring -1单 独给Hypervisor使用
▫ Guest OS可以直接使用Ring 0而无需修改
虚拟化的基本类型
• OS virtualization (容器级虚拟化)
• Arm
▫ 其他video 引擎,如RK3188 中视频引擎(VE), A20 中的视频引擎等
鼠标
• 客户端模式
▫ 客户体验好,客户端将鼠标事件通过鼠标通道并同 步到server端
• 服务端模式
▫ 服务端控制鼠标,同步到客户端
其他功能
• Usb 2.0 • Spicewebdav 磁盘共享 • 双屏
QEMU/KVM
Spice server (libspice)
Spice protocol
HOST
Client Spice Client
Spice 协议
• Client-server 通信:channel,TCP/IP • 远程指令
▫ 显示指令,键盘及鼠标事件,音频流 等
• 安全认证 • 连接建立及控制 • 流量控制
▫ 不需要guest外围网络
• 接近物理机的用户体验
▫ 高质量的视频及音频
• 瘦客户端,密集计算后置 • 适合局域网广域网
为什么是spice: 对比
BIOS屏幕显示 全彩支持 更改分辨率 多显示器
图像传输 视频播放支持 音频传输
鼠标控制
USB传输
SPICE 能 能
VNC 能 能


多(显高示达器4画支面持)只有一个屏幕
图像和图形传 输
图像传输
GPU加速支持 不能
双向语音可以 控制不能客户端服务器 Nhomakorabea都可以控制
服务器端控制
USB可以通过 网络传输
不能
RDP 不能 能 能 多显示器支持
图像和图形传输 GPU加速支持 双向语音可以控制
服务器端控制
USB可以通过网络传输
Spice如何工作
• 传输显示命令及命令数据(2D)
Channels
• Main –控制、配置、管理整个连接 • Display – 执行图形指令,图片和视频流 • Inputs – 客户端键盘鼠标输入 • Cursor – 鼠标位置,可见性,形状 • Playback –声音播放 • Record –客户端录音
Spice-server 组件-可插拔组件
Spice 优化方向
• 视频重定向
▫ Dxva ▫ LAV Filters
• Flash 重定向
▫ Libcef
• Qxl驱动重写
▫ Wddm
• 显卡穿透 wine d3d
谢谢
ioctl(KVM_RUN) switch (exit_reason) { case KVM_EXIT_IO: /* ... */ case KVM_EXIT_HLT: /* ... */ } }
KVM Qemu 之间的关系
• Qemu将KVM整合进来,通过ioctl调用/dev/kvm接口,将有关CPU指令的 部分交由内核模块来做,就是qemu-kvm (qemu-system-XXX)
Image压缩
• 无损压缩
▫ QUIC ▫ LZ;lz4 ▫ GLZ
Video 压缩
• 有损压缩
▫ Jpeg ▫ Mjpeg
硬件加速
• 上屏指令,Cairo 库,跨平台 • Linux中 X11;framebuffer驱动 • X86 中
▫ GDI windows ▫ openGL linux
相关文档
最新文档