QEMU 4.1 已发布,它现已成为开源 Linux 虚拟化堆栈的重要组成部分之一。

原标题:QEMU 4.2发布 针对Linux虚拟化进行了许多改进 来源:开源中国QEMU
4.2 已正式发布,它是开源 Linux 虚拟化堆栈的关键部分。QEMU
是一个纯软件实现的通用模拟器和虚拟机,它有三种模式,几乎可以模拟任何硬件设备:Full-system
emulation:可在任何支持的硬件架构上运行任何操作系统User-mode
emulation:运行另一个 Linux/BSD 程序Virtualization:接近本机性能运行 KVM
和 Xen 虚拟机该版本的一些功能更新要点包括有:支持 Intel AVX-512
BFloat16(BF16)扩展所有 CPU 型号的最新更新目前都默认禁用了
TSX(事务同步扩展)扩展ARM 内核的 Tiny Code
Generator(TCG)仿真具有更好的性能在 ARM 上支持 QEMU,以与超过 256 个
CPU 一起运行ASpeed AST2600 型号支持TCG
插件支持被动监视指令和内存访问block:NBD block driver
现在支持更有效地处理读取时复制请求block:用于复制 sparse images 的 NBD
服务器优化,以及 NBD
服务器/客户端实现的常规修复/改进block/crypto:改善了用于 LUKS 磁盘加密的
AES-XTS 加密的性能vfio-pci 支持“ failover_pair_id”属性,可更轻松地迁移
VFIO
设备……完整更新内容请查看更新日志:

导读

  • what’s QEMU
  • what’s KVM
  • what’s QEMU-KVM

QEMU 4.1 为 ARM, MIPS, POWER, s390, x86
的各种架构专用位带来了许多改进,甚至为 RISC-V
也带来了许多重要的附加功能。在 ARM 前端,现在支持 Cortex-M 处理器的 FPU
模拟,支持 ARMv8.5 RNG 以及添加了其他位。在 RISC-V 方面,支持 Spike
机器模型,ISA 1.11 以及对设备树中 CPU 拓扑的支持。在 x86 前端,支持新的
Hygon Dhyana 和 Intel Snow Ridge CPU 型号以及对 RdRand 扩展的模拟支持。

what’s QEMU

WIKI定义如下:

QEMU (short for Quick Emulator) is a free and open-source hosted
hypervisor that performs hardware virtualization.

QEMU是一个主机上的VMM(virtual machine
monitor),通过动态二进制转换来模拟CPU,并提供一系列的硬件模型,使guest
os认为自己和硬件直接打交道,其实是同QEMU模拟出来的硬件打交道,QEMU再将这些指令翻译给真正硬件进行操作。
通过这种模式,guest
os可以和主机上的硬盘,网卡,CPU,CD-ROM,音频设备和USB设备进行交互。但由于所有指令都需要经过QEMU来翻译,因而性能会比较差:

QEMU工作原理

QEMU 4.1 的一些新增功能包括对 VirtIO GPU 2D/3D
的渲染支持,可以卸载到外部的 vhost
用户进程,以及各种网络和块设备改进,不过对 Python 2 的支持已终止。

澳门新葡萄京所有网站,运行模式

QEMU提供多种运行模式:

  • User-mode emulation
    这种模式下QEMU上仅进运行一个linux或其他系统程序,由和主机不同的指令集来编译运行。这种模式一般用于交叉编译及交叉调试使用。
  • System emulation
    这种模式QEMU模拟一个完整的操作系统,包括外设。可用来实现一台物理主机模拟提供多个虚拟主机。QEMU也支持多种guest
    OS:Linux,windows,BSD等。支持多种指令集:x86,MIPS,ARMv8,PowerCP,SPARC,MicroBlaze等等。
  • KVM Hosting
    这种模式下QEMU处理包括KVM镜像的启停和移植,也涉及到硬件的模拟,guest的程序运行由KVM请求调用QEMU来实现。
  • Xen Hosting
    这种模式下QEMU仅参与硬件模拟,guest的运行完全对QEMU不可见。

有关 QEMU 4.1
的详细更新内容请点此查看。

what’s KVM?

WIKI定义如下:

Kernel-based Virtual Machine(KVM) is a virtualization infrastructure
for the Linux kernel that it into a hypervisor.

KVM实际是linux内核提供的虚拟化架构,可将内核直接充当hypervisor来使用。KVM需要处理器硬件本身支持虚拟化扩展,如intel
VT 和AMD AMD-V技术。
KVM自2.6.20版本后已合入主干并发行,除此之外,还以模块形式被移植到FreeBSD和illumos中。除了支持x86的处理器,同时也支持S/390,PowerPC,IA-61以及ARM等平台。

QEMU
是一个纯软件实现的通用模拟器和虚拟机,它有三种模式,几乎可以模拟任何硬件设备:

工作原理

KVM包含一个内核模块kvm.ko用来实现核心虚拟化功能,以及一个和处理器强相关的模块如kvm-intel.ko或kvm-amd.ko。
KVM本身不实现任何模拟,仅仅是暴露了一个/dev/kvm接口,这个接口可被宿主机用来主要负责vCPU的创建,虚拟内存的地址空间分配,vCPU寄存器的读写以及vCPU的运行。
有了KVM以后,guest
os的CPU指令不用再经过QEMU来转译便可直接运行,大大提高了运行速度。但KVM的kvm.ko本身只提供了CPU和内存的虚拟化,所以它必须结合QEMU才能构成一个完整的虚拟化技术,也就是下面要介绍的技术。

  • Full-system emulation:可在任何支持的硬件架构上运行任何操作系统
  • User-mode emulation:运行另一个 Linux/BSD 程序
  • Virtualization:接近本机性能运行 KVM 和 Xen 虚拟机

what’s QEMU-KVM

从前面的介绍可知,KVM负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化,但kvm并不能模拟其他设备。还必须有个运行在用户空间的工具才行,KVM的开发者选择了比较成熟的开源虚拟化软件QEMU来作为这个工具,QEMU模拟IO设备(网卡,磁盘等),对其进行了修改,最后形成了QEMU-KVM。

具体的架构如图所示

在QEMU-KVM中,KVM运行在内核空间,QEMU运行在用户空间,实际模拟创建、管理各种虚拟硬件,QEMU将KVM整合了进来,通过/ioctl
调用
/dev/kvm,从而将CPU指令的部分交给内核模块来做,KVM实现了CPU和内存的虚拟化,但kvm不能虚拟其他硬件设备,因此qemu还有模拟IO设备(磁盘,网卡,显卡等)的作用,KVM加上QEMU后就是完整意义上的服务器虚拟化。
综上所述,QEMU-KVM具有两大作用:

  1. 提供对cpu,内存(KVM负责),IO设备(QEMU负责)的虚拟
  2. 对各种虚拟设备的创建,调用进行管理(QEMU负责)

这个方案中,QEMU模拟其他的硬件,如Network,
Disk,同样会影响这些设备的性能。于是又产生了pass
through半虚拟化设备virtio_blk, virtio_net,提高设备性能。

工作原理图

澳门新葡萄京所有网站 1

总结

通过前面三节描述,大家应该能基本掌握三种不同技术之前的区别和联系了。

澳门新葡萄京所有网站 2

参考

  1. QEMU:https://en.wikipedia.org/wiki/QEMU
  2. KVM:https://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine
  3. http://changfei.blog.51cto.com/4848258/1672147
  4. http://blog.csdn.net/shengxia1999/article/details/52244119

 

(文/开源中国)