[kvm][qemu]影响虚拟化热迁移的设备

2018-04-09 11:15:10 浏览数 (1)

前言

虚拟化场景下,热迁移、HA都会受到部分设备的影响。设备的实现上,包含“透传”、“直通”、“passthrough”,基本上就限制了虚拟机的迁移能力。 作者认为,热迁移和HA,都是必要的。热迁移是DRS(Distributed Resource Scheduler)和DPM(Dynamic power management)的基础能力,甚至用热迁移的方法做hypervisor热升级。 HA则更加重要,直接影响服务质量,能不能快速恢复业务,HA的能力至关重要。 对于这部分的优化和改进,如下文。

分析 1,USB passthrough VS USB redirect USB passthrough的实现上,qemu通过libusb,直接访问host上的usb设备。 USB redirect的实现上,在host上启动一个usb redirect server。server监听TCP端口,通过socket和client进行通信,对于data请求,则通过libusb对host上的usb进行操作。对于qemu来说,增加一个chardev,它的后端是一个tcp连接。 对比起来,就是数据经过TCP转发过一次,数据再经过libusb和host的kernel交互。目前,USB redirect server写的比较粗糙,对于TCP的死链接处理比较差,意味着如果发生了qemu所在的Host发生crash后,HA不起来。(需要自己添加TCP keepalive的处理,patch作者发送给了maintainer,不过maintainer似乎理解错了,后来又继续mail。patch的地址https://www.mail-archive.com/spice-devel@lists.freedesktop.org/msg42189.html)。 另外,需要在Host上管理usb redir server进程。 再者,就是usbip技术,不过qemu目前没有支持,在技术选型的时候,看到过这样一份邮件(https://lists.gnu.org/archive/html/qemu-devel/2010-12/msg00008.html),usbip被喷的有点惨。 2,iscsi blk 分布式的target设备,访问的方式有两种: 其一,使用iscsiadm发现、挂载target到host上,就会生成/dev/sdx设备,sdx设备可以直接给qemu用raw的方式访问,或者格式化文件系统,mount之后,创建文件给qemu作为卷使用。 其二,qemu直接作为iscsi client,直接和target通信,进行访问。 第一种方式的操作空间更大,尤其是抽象成了本地块设备,同时还能使用host的blk layer,甚至使用host的cache。但是!!!如果在网络波动的时候,host上会出现D状态的进程。 而第二种访问方式,则不会出现D状态,对于qemu来说,后端只是一个TCP连接。 作者倾向使用第二种方式,避免Host上挂块这种操作。毕竟qemu发生异常只是影响了这一台vm;而Host发生异常则会影响Host上的所有的vm(4.14上依然还有iscsi挂块引起的kernel die,具体分析见前文)。 3,cdrom / floppy 私有云上,cdrom和floppy还有一定存在的价值,比如说安装操作系统和驱动。 不过,无论是使用cdrom安装操作系统还是使用floppy安装驱动(例如安装windows的时候,需要virtio驱动),都是只读的需求。 基于只读的情况,作者最倾向使用http协议。 同理,使用http协议访问iso或者vfd文件,对于qemu来说,后端都只是一个TCP连接,如果发生网络异常,qemu都是可以操作的。 对比之下,还有nfs或者smb,把远程的目录mount到Host上访问,同样,可能会陷入D状态。还有一些例如SFF协议,映射到Host上成为/dev/srx设备的,或者cdrom passthrough,作者以为有那么一点杂技的味道。首先,物理介质的cdrom已经比较少见了;其次,光驱的成本,以及需要占用物理服务器的盘位;再次,iso文件无论是保存,还是复制传播,都要方便太多了。 就用http协议吧!没毛病! 4,PCI passthrough / scsi passthrough 这两种,作者没有什么办法来解决。

kvm

0 人点赞