前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[qemu][vnc]虚拟化平台上远程连接遇到的几个问题分析

[qemu][vnc]虚拟化平台上远程连接遇到的几个问题分析

作者头像
皮振伟
发布2018-04-09 11:13:24
5.9K1
发布2018-04-09 11:13:24
举报
文章被收录于专栏:皮振伟的专栏皮振伟的专栏

前言:

虚拟化平台上,不管是调试,还是实际使用,都离不开远程连接。在使用vnc、spice的时候,遇到过一些问题。

分析:

1,frame buffer

先说一下物理原理。以我们的PC为例:假设显示器的分辨率是1920*1080,就意味着显示器是是一个1920*1080个pixel(像素)的矩形,每个pixel显示出来的颜色拼在一起,就组成了显示器上看到的内容了。

如果每个pixel是ARGB888格式的,也就是说它需要使用Alpha 8bit,Red 8bit,Green 8bit,Blue 8bit共32个bit来表示。用一块1920*1080*32bit的内存,可以存放下整个屏幕的一帧,这块内存叫做frame buffer。把这块内存的数据,使用相应的硬件转换成VGA、HDMI传送给显示器,显示器就可以显示出来画面。

那么,所谓的硬解画图,就是一种画图能力很强的硬件(即GPU),来操作frame buffer。软解画图,就是CPU来操作frame buffer。

那么虚拟化的vnc、spice呢?qemu启动vnc、spice服务,把虚拟机的frame buffer拿出来(通过虚拟video设备实现),client使用对应的协议就可以拿到虚拟机的frame buffer。进而显示出来虚拟机的画面。

2,卡顿

给PC安装过操作系统的朋友都知道,如果没有安装显卡驱动,桌面卡顿的比较厉害。

如果鼠标从point1(x1,y1)移动到point2(x2,y2),如果画图响应很快,那么在显示器上看到的鼠标就移动到对应的位置上,如果画图很慢,就会看到鼠标是一顿一顿的移动到位置上。

可见,前后两帧的内容变化很大,就会觉得卡顿。前后两帧的内容变化比较均匀,帧率高一些,就会觉得画面流畅。

在虚拟化平台上,使用vnc、spice会使用一定的网络带宽。如果画面很卡顿,可以试着调高一下传输质量,看看效果会不会改善。

如果有色差,试着调整一下color depth,看看效果会不会改善。

3,鼠标移速不一致

在vnc上,是一个常见问题。可以看到虚拟机里面的鼠标和外面物理机上的鼠标的位置不一致,而且它们的移速不一致。在外面移动了很大一段距离,在虚拟机里面只是移动了一小段。

在物理机上,和虚拟机里面,它们的分标率不一样,vnc客户端在计算鼠标的移动距离的时候,计算了比例,导致出来了移速不一致的问题。

在不改变客户端的情况下,给虚拟机配置一个tablet设备,会让鼠标重合。

<input type='tablet' bus='usb'> <address type='usb' bus='0' port='1'/> </input>

注意,尽量把tablet设备配置给usb1.0。因为多数pc对usb 1.0支持的更好,usb3.0可能还需要安装驱动,而且1.0速度很低,比较适合这种低速的io设备。

tablet并不是从本质上解决鼠标的移速问题,而且通过tablet校验,修改了数据。而且,这种方法在windows上表现比较好。

4,鼠标不重合

在web的vnc上,这个问题比较常见。表现出来的现象是,鼠标在物理机上,和虚拟机里面的移速是一致的,但是始终相差一段距离。

因为vnc的内容是通过web view实现,web在计算鼠标的位置x,y的时候,是从view的起始地址开始计算的。在设置给vnc的时候,把对应的偏移量计算一下,就可以解决这个问题。

5,鼠标拖影

在web的vnc上,解决了上述问题4的时候,会发现鼠标移动快的时候就会出现拖影。

思考一下整个过程:

a,鼠标从point1(x1,y1)移动到point2(x2,y2),vnc客户端通过vnc向服务端发送了鼠标移动的事件。

b,vnc客户端(其实是一个websockfy代理)接受到鼠标移动事件,把事件传递给qemu。

c,qemu处理事件,向虚拟机注入irq。

d,虚拟机相应irq,画图,更新frame buffer。

e,qemu获取到新的frame buffer。

f,websockfy获取到新的frame buffer。

g,web view更新frame buffer,我们看到了鼠标移动后的画面。

算下来,整个路径还是挺长的。而且没有太多的改进空间。物理机上的鼠标已经移动到了新的位置,但是web上的内容需要经过这么长的路径才能更新出来。所以就看到了鼠标拖影。

后来想到了一投机的办法,在物理机上,把鼠标设置成只有1pixel的点,那么就看不到物理机上的鼠标。尽管web上的内容更新的慢了一点,但是用户无感知。

后记:

Good luck~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-09-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AlwaysGeek 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档