宿主机与vm通信

Communication between Guests and Hosts
宿主机和vm之间的通信应该是件简单的事---古老成熟的TCP/IP套接字(socket)应该是任何远程通信的第一选择。然而,一旦一些特殊的虚拟化相关的约束限制被添加进来则一切将变得异常复杂。
1)首先,客户机和宿主机是不同的机器,管理也当然不同
2)其次,客户机管理员和宿主机管理员可能是不同人员
3)客户机管理者可能会无意中阻止通过防火墙规则进入主机的基于IP的通信通道,从而使得基于TCP/IP通信通道变得不可用
其中最后一点需要详细阐述下:系统管理员希望对外开放互联是有所保留的(有限开放原则)。基于这种考虑,客户机管理员和主机管理员之间是存在对立问题的。当然他们对于数据安全来说是互相不信任的,原来将数据存储在操作系统中而如今存储在云端将导致这样一种情况:任何数据泄露对于管理员和它的老板来说无疑灭顶之灾。
我们真正需要的是一个特殊的客户机和宿主机间的通信信道,使得宿主机不会被客户机阻止在外面,同样客户机也不会被宿主机挡在外面,实现真正的平等。这是有着特殊目的的低带宽通信通道,但是绝不是TCP/IP的翻版实现。本文也提及了一些其它需求。
经过多次迭代尝试,我们选择了一个特殊实现:virtio-serial。它的实现基础基于virtio,允许暴露定制设备到客户机中的一个通用的串行虚拟总线。virtio设备充分抽象以至于客户机驱动不需要知道他们真实运行的总线类型:比如客户机抽象为x86架构的PCI设备而宿主机原始设备室s390。这意味着相同的客户驱动既可以在x86下又可以在s390下被用来与virtio串口设备通信。在幕后,virtio层依赖于客户机架构类型,与主机virtio-pci设备或virtio-s390设备协同工作。
主机设备在qemu中编码。主机virtio串口设备能够在同一个主机设备上管理多个通信信道或端口。端口的数量能够达到virtio串行设备的最大极限,当前限制是到31,但一台设备可以很好的支持2 ^ 31个端口。这个设备从qemu0.13发布版本之后或fedora13版本之后都可获得。
客户机驱动为Linux和Windows客户机而写。API暴露了包括open,read,write,poll,close调用等。对于Linux客户机,端口打开可以分为阻塞模式或非阻塞模式。驱动被包括在内核版本2.6.35以后,内核2.6.37还包括异步IO的支持,比如SIGIO将被投递到感兴趣的用户空间应用中而不论此时宿主机端的连接是建立状态还是关闭状态,或者端口已经被热插拔了。
端口的使用异常简单,当使用qemu时直接在命令行添加:
-chardev socket,path=/tmp/port0,server,nowait,id=port0-char
-device virtio-serial
-device virtserialport,id=port1,name=org.fedoraproject.port.0,chardev=port0-char

这将创建一个拥有一个端口和暴露到客户机中名称为‘org.fedoraproject.port.0‘的设备。客户机应用能够打开 /dev/virtio-ports/org.fedoraproject.port.0并且开始和主机进行通信。主机应用能够打开/tmp/port0这个unix域的socket用于和客户机通信。当然,这儿有其它qemu字符设备的后端能够使用区别于unix域的套接字。还有就是可以使用一个qemu内部的API。更多的调用选项和例子在调用和测试部分给出。

对于客户机,测试套件给出了示例C代码和python代码。原始的测试套件用来验证用户和内核之间接口的功能,在之后会被移到自动测试中,使得更快添加测试用例,不仅检查正确性,同时也回归测试和错误检测。

已经使用virtio串口的项目包括Matahari, Spice, libguestfs 和Anaconda。我简单的介绍Anaconda是如何使用virtio串口的:打开Fedora14,如果一个名字为 ‘org.fedoraproject.anaconda.log.0‘ 的virtio串口端口发现了,则客户机安装的Fedora将会自动发送Anaconda的log到宿主机。virt-install被修改用于创建这样一个virtio串口端口。这意味着能够在主机上获得相关的log,会使得调试早期的anaconda输出变的更加简单(不要担心在crash之前安装或网络驱动不可获得阶段的客户机文件系统错误)
更多的应用:有许多virtio串口应用,非常容易编码:
    
1)当主机关机时关闭或暂停挂起虚拟机
2)宿主机和客户机之间的剪贴板复制/粘贴(Spice团队在搞)
3)当一个VNC/Spice连接关闭,锁定客户机中的桌面会话
4)监控中定期监测CPU /内存/电源使用率
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值