• KVM+QEMU虚拟化概念


    概念:

    KVM,即Kernel-basedvirtual machine,由redhat开发,是一种开源、免费的虚拟化技术。对企业来说,是一种可选的虚拟化解决方案。

    定义:基于Linux内核的虚拟机

    解释:

    KVM 、XEN、Hyper-V 这类 Hypervisor 是为商用而生的,他们本身就是一种 OS,直接运行
    在硬件之上,例如KVM,架构是:硬件 ---> {Linux Kernel + KVM} ---> VM,即加载了
    KVM module 的 Linux Kernel 本身就是一种完备的 Hypervisor,运行在内核态。这样做的
    好处在于可以使用 Kernel 本身的 CPU 调度 和 内存管理,不用像XEN一样自己实现,所以
    说,KVM 是基于 Linux Kernel 的。

    优点:

    KVM最大的好处就在于它是与Linux内核集成的,所以速度很快。KVM的宿主操作系统必须是Linux,支持的客户机操作系统包括Linux、Windows、Solaris和BSD,运行在支持虚拟化扩展的x86和x86_64硬件架构上,cpu支持VT技术。

    QEMU:

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

    硬件基础:

    KVM功能,是以扩展虚拟化CPU为硬件基础(如Intel-VT,AMD-V),利用CPU虚拟化技术。

    实现方式:(模块化)

    KVM作为内核的一个模块,来提供虚拟化功能。如果系统需要虚拟化功能,则KVM模块可以被linux内核按需动态加载到内存运行。如果不需要的KVM功能,可以动态卸载该模块。

    KVM+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才能构成一个完整的虚拟化技术,这样,KVM和QEMU联合就提供了一个模拟的(虚拟的)硬件层(CPU、内存、IO设备等),虚拟机就运行在这个模拟的硬件层之上。

                                                                

    上图,是KVM虚拟机的整体架构。KVM内核模块在运行时按需加载进入内核空间运行。KVM本身不执行任何硬件设备模拟,需要用户空间程序QEMU通过/dev/kvm接口设置一个虚拟客户机的地址空间,向它提供模拟的I/O等硬件设备。

    总结:KVM内核模块在运行时只关注CPU调度和内存管理;而包括网卡在内的其他I/O硬件设备是QEMU虚拟提供的。

    KVM是以扩展虚拟化的CPU为硬件基础,但是KVM也可运行在不支持虚拟化技术的CPU之上。只不过,后者是使用QEMU提供的纯粹的模拟方式,性能较低。

     

    KVM管理工具:

    Virtual Machine Manager(VMM),由redhat开发的,是一个图形化管理工具。

    KVM也有自己的语法规则,你可以使用KVM的语法规则编写命令,使用命令行方式来管理虚拟机。 For more information, reference to :

    The Kernel VirtualMachine - Community Ubuntu Documentation

    KVM tutorials onhowtoforge.com

    KVM/Virsh -Community Ubuntu Documentation

     

    KVM的优势和劣势:

    优势:KVM是一个免费开源软件,提供了虚拟化解决方案;提供了强大的命令行接口。

    劣势:KVM可以运行在不支持虚拟化的CPU硬件上,但是在这样的话,效率会很低;KVM也可能会和虚拟机virtualbox冲突; KVM只是提供命令行接口,用户可以写脚本来管理KVM,并没有一个友好的GUI。

    转载自:https://blog.csdn.net/j123kaishichufa/article/details/40653213

  • 相关阅读:
    微信小程序之项目的创建
    Java中的线程--多线程面试题
    Java中的线程--并发库中的集合
    Java中的线程--线程中的工具
    Java中的线程--Lock和Condition实现线程同步通信
    Linux指定用户运行程序
    CPU、内存、磁盘三者的关系
    shell从字符串中提取子串(正则表达式)
    ssh登录失败的常见问题分析
    正则表达式匹配不含有某字符串的行
  • 原文地址:https://www.cnblogs.com/dannylinux/p/9229032.html
Copyright © 2020-2023  润新知