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

前言

虚拟化场景下,热迁移、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 这两种,作者没有什么办法来解决。

原文发布于微信公众号 - AlwaysGeek(gh_d0972b1eeb60)

原文发表时间:2018-03-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CSDN技术头条

携程开源Redis多数据中心解决方案XPipe

Redis在携程内部得到了广泛的使用,根据客户端数据统计,整个携程全部Redis的读写请求在每秒200W,其中写请求约每秒10W,很多业务甚至会将Redis当成...

48790
来自专栏battcn

为什么要前后端分离?有什么优缺点?

前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+tomcat的方式(也可以中间加一个nodejs)有效的进行解耦,并且前后端分离会为以后的大型...

55320
来自专栏纯洁的微笑

电商平台备战促销季的运维秘诀——高可用服务层

13220
来自专栏JAVA高级架构

电商平台备战促销季的运维秘诀——高可用服务层

14720
来自专栏魏琼东

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET平台开发指南 - 实现业务

业务分层         依据行业经验来看,分层是解决复杂问题的简单方法,通过分层,可以把一个复杂问题分解为不同层次应用的小问题,解决各层小问题的难度小于总的问...

207110
来自专栏顾宇的研习笔记

AWS 上的生产环境架构优化案例

在AWS 上的生产环境性能分析案例一文中,记录了我对客户应用生产环境的一次性能分析。接下来,我们要根据所发现的性能问题进行架构优化,以提升可用性和性能。同时,这...

18310
来自专栏后台全栈之路

基于汇编的 C/C++ 协程 - 背景知识

近几年来,协程在 C/C++ 服务器中的解决方案开始涌现。本文主要阐述以汇编实现上下文切换的协程方案,并且说明其在异步开发模式中的应用。

45340
来自专栏BestSDK

一提交代码系统就崩溃? 给你8个避免此尴尬的技巧

当一群人作为一个整体同时进行一个程序的编写时,每个个体都会面临两方面的权衡: ●个人部分的实现——你需要保证你负责的代码部分可以正常运行; ● 整体部分的实现—...

38670
来自专栏Android 开发者

Android 开发者 | 应用兼容性注意事项

30140
来自专栏Rainbond开源「容器云平台」

技术解读Rainbond Service Mesh微服务架构_开源PaaS Rainbond

20520

扫码关注云+社区

领取腾讯云代金券