半虚拟化驱动
-
VirtIO
- qemu纯软件模拟的I/O设备:回路长,效率低
- virtio半虚拟化驱动可以获得更好的I/O性能,需要在客户机中安装virtio驱动(linux,windows等)
-
直接分配设备
在kvm/qemu中,虚拟机可以使用的设备分为三种:- 纯软件模拟的设备:软驱什么的
- 半虚拟化设备:virtio的驱动
- 硬件直通:pci设备直接分配 (intel VT-d的支持)网卡,硬盘,USB设备,VGA显卡,设备直通,但是只允许一个客户机使用。
-
热插拔需要
- BIOS: qemu/kvm默认使用seaBIOS作为虚拟机的BIOS,支持pci的热插拔
- PCI总线:需要CPU的VT-d支持
- 操作系统
- 虚拟机中的驱动程序
-
动态迁移
分为静态迁移和动态迁移,也有人说冷迁移和热迁移。
静态迁移:
- 关闭客户机后复制镜像。问题:不能保存客户机中运行的工作负载,就是内存中的数据。
- 暂停客户机后,复制内存镜像到另外的机器中运行,可以保存迁移之前的内存状态和工作负载。
动态迁移
动态迁移是指在保证客户机服务的正常运行的同时,让虚拟机在不同的宿主机见迁移。一个成功的动态迁移,需要保证客户机的内存,硬盘,网络迁移之后保持不变,而且迁移过程的服务暂停时候应该很短或者没有。
动态迁移效率的衡量标准:
- 整体的迁移时间
- 服务暂停的时间
- 对运行中服务的影响
动态迁移的应用场景:
- 负载均衡:一台服务器过载时,将正在运行的虚拟机迁移负载较低的服务器上;
- 解除硬件依赖: 服务器需要升级的时候,将该服务器上的虚拟机迁移到别的机器以便升级;
- 节约能源:负载普遍过低的时候,集中服务以节省能源;
- 远程的迁移。
-
动态迁移的例子:基于共享存储的动态迁移。
如果源宿主机和迁移的目的宿主机共享存储,则只需传输vcpu状态,内存和虚拟内存中的设备状态到目的主机就可以,否则还需要传输存储。
考虑到平台:后备镜像使用的是共享存储,但是增量镜像不是共享的,因为这是由业务性质决定的,实验教学用的虚拟机不是提供长期和稳定的服务,将网络I/O替换为磁盘I/O提高了性能。
基于共享存储的动态迁移流程:- 虚拟机在源宿主机上正常运行,迁移开始;
- 虚拟机的内存页传输到目的宿主机上,同时QEMU/KVM记录下期间对已传输内存页的所有修改操作;
- 估计传输速度,当剩余内存可在一定时间周期内传输完成时(30s?),关闭源宿主机上的虚拟机,完成传输;
- 传输保存的内存页修改操作;
- 在目的宿主机上恢复虚拟机的运行状态。
服务暂停的时间:内存页传输时间+虚拟机临时停机时间+修改操作传输的时间+恢复启动的时间?
这个时间和网络带宽有很大关系,如果虚拟机内存页频繁修改,内存I/O速率大于网络I/O则动态迁移不可能完成。
-
KSM(共享内存) Kernel Samepage Merging 内存同页合并
KSM让内核检查正在运行的应用程序,并比较他们的内存,如果多个进程之间共享完全相同的内存页,就合并成一个单一的内存页,并标记为"copy on write",当由进程试图修改cow的内存页的时候,在复制出一个新的内存页。
在KVM/QEMU中,一个客户机就是一个QEMU进程,当多个虚拟机运行的是一个操作系统的时候,KSM的作用就会很显著。主要由两个方面:- 相同的内存合并,减少了客户机的内存使用量。
- 是内存过载使用的一种很好的实现方式。
但是,KSM需要由进程检测可以合并的内存页,虽然内存使用量降低,但是CPU的使用量会提高。
-
其他特性:
。。。。
网友评论