« 上一篇下一篇 »

虚拟化产品(一拖二)

最近一直在忙一拖二虚拟化产品,终于完成了一套可以正常使用的DEMO。那么到底什么是一拖二,简单来说就是一台PC机器可以两个人同时使用,各自看电影玩游戏互相不影响,而且性能也不错,就好像每个人都拥有一台真实的电脑一样。为了实现这个目标当然需要利用虚拟化技术,一台真实PC上运行两个虚拟机分别给两人使用,PC主板需要支持VT-D技术,这样才能进行设备直接分配,另外主板休眠状态需支持 S1 和 S3,这样当虚拟机都处于关机状态的时候真实主机可以进入S3休眠状态,可以省电,才有实战价值。然后我们需要在主板上插两片显卡,每片显卡接一台独立的显示器,每个虚拟机独立使用一片显卡,这样才能保证有最好的显示性能。另外还需要在主板上插一块PCIE转USB的扩展卡,因为主板上的USB接口数量有限,如果同时给两台虚拟机用的话会很紧张,无法满足实际需求,所以多插一块PCIE转USB的扩展卡,这样主板上自带的USB接口就可以全部分配给1号虚拟机使用,而PCIE转USB的扩展卡上的USB接口就可以分配给2号虚拟机使用,这样每台虚拟机就都有了足够的USB接口使用了。然后需要2套鼠标键盘(USB接口)分别接到两台虚拟机各自的USB接口上,然后在两台虚拟机各自的USB接口上各自接上一套USB接口的耳机,这样声音也有了。到此硬件似乎都配置好了,其实不然,还有一个非常关键的部件,那就是开关,每台虚拟机都需要一套独立的开关系统可以开机关机重启等而不会互相影响,那要怎么才能实现这个功能,这就需要开发一个控制板,虚拟机对应的开关都接到这块控制板上,然后控制板通过串口与PC主板进行连接,当用户按了某台虚拟机对应的开关后,控制板就能检测到信息,包括是哪台虚拟机的开关被按下了,是按的电源键还是重启键等等,控制板得到这些信息后通过串口传给PC主板,而PC主板上会运行着我们的Hypervisor或者也叫VMM(虚拟机监视器),这里面会包含我们自己开发的一个程序,这个程序会监听串口,所以当这个程序通过串口收到控制板发来的信息后,就知道该如何操控虚拟机了,比如打开2号虚拟机,或者关闭1号虚拟机等等。控制板还有另外一个重要功能就是控制真实的主板开关机。为了研发控制板,又重新拾起好久没有弄过的单片机技术,从原理图到开发板,到固件开发与调试,也弄了挺长时间,当然可以考虑采用51系列单片机,但是我为了与时俱进直接上的STM32平台。至此硬件环境已经都准备好了,接下来就是软件部分了,软件主要指的就是虚拟化软件了,这个还是有一些可选项:

  1.   linux+kvm+qemu

  2.  Xen虚拟化平台

  3. VMware虚拟化软件

  4. VirtualBox虚拟化软件

  5. Hyper-V虚拟化平台


当然最终肯定是选择linux+kvm+qemu,其中kvm是以linux模块的形式存在于linux当中,而qemu也是以应用程序的形式运行在linux之上,而linux更新很快,发行版又特别多,选型,配置,更新等等都是比较麻烦的事情,那有没有别人已经整合好的平台而省去这么多麻烦呢,当然有,这里我们直接采用Proxmox VE平台为基础进行开发。当然Proxmox VE有个比较大的缺点是不支持libvirt,而是自己开发了私有的虚拟机调度接口,主要原因是Proxmox VE是用perl开发的,而libvirt偏偏对perl支持力度很差,所以只能呵呵了。不过这点也不影响咱自己的工作,条条大路通罗马。


下面上几张效果图:


图一: 控制板特写,设计最多可以同时控制四台虚拟机,当然目前是需要用到两个,因为是一拖二嘛。


图二: 主板上插了两片显卡,两片显卡中间还插了一片PCIE转USB扩展卡,就是歪着的那个:)


图三: 两个电脑桌面开关,分别对应两台虚拟机,都接在控制板上。


图四: 两套鼠标键盘(USB接口),两个显示器,两个电脑开关,一台真实主机。


图五: 一台在看电影,一台在玩游戏。


下面是演示的视频录像,可以点击文字链接进行下载观看。

  基本演示      开机演示      关机演示      重启演示      休眠演示


产品到这里基本介绍完了,当然如果要商用的话还有非常多的细节要处理,这里只是介绍了一个梗概,如果以后有时间再慢慢细说。