`

KVM/Qemu虚拟化技术简介

 
阅读更多

介绍1    

KVM虚拟机是基于linux内核虚拟化,自linux2.6.20之后就集成在linux的各个主要发行版本中。它使用linux自身的调度器进行管理,所以相对于xen,其核心源码很少。KVM的虚拟化需要硬件的支持(如intel VT技术或者AMD V技术),是基于硬件的完全虚拟化。而xen早期则是基于软件模拟的para-virtualization,新版本是基于硬件支持的完全虚拟化。

qemu是一种模拟处理器,现在运用最多的就是将KVM和QEMU结合起来。

准确来说,KVM是Linux kernel的一个模块,可以用命令modprobe去加载KVM模块。加载了该模块后,才能进一步通过工具创建虚拟机。但是仅有KVM模块是不够的。因为用户无法直接控制内核去做事情,还必须有一个运行在用户空间的工具才行。这个用户空间的工具,kvm开发者选择了已经成型的开源虚拟化软件QEMU。说起来QEMU也是一个虚拟化软件。它的特点是可虚拟不同的CPU。比如说在x86的CPU上可虚拟一个power的CPU,并可利用它编译出可运行在power上的CPU,并可利用它编译出可运行在power上的程序。KVM使用了QEMU的一部分,并稍加改造,就成了可控制KVM的用户空间工具了。所以你会看到,官方提供的KVM下载有两大部分(qemu和kvm)三个文件(KVM模块、QEMU工具以及二者的合集)。也就是说,你可以只升级KVM模块,也可以只升级QEMU工具。这就是KVM和QEMU 的关系。

      如下图:

       

      Linux Kernel-based Virtual Machine (KVM) 是一款 Linux 开放源码虚拟化软件,基于硬件虚拟化扩展(Intel VT-   X 和 AMD-V)和 QEMU 的修改版。KVM 的实现模块又两个,分别是: kvm.ko是提供核心虚拟化的基础架构;特定于处理器的模块 kvm-intel.ko 和 kvm-amd.ko 。其设计目标是在需要引导多个未改动的 PC 操作系统时支持完整的硬件模拟。

       一个普通的linux进程有两种运行模式:内核和用户。而KVM增加了第三种模式:客户模式(有自己的内核和用户模式)。在kvm模型中,每一个虚拟机都是由linux调度程序管理的标准进程。

       kvm由两个部分组成:一个是管理虚拟硬件的设备驱动,该驱动使用字符设备/dev/kvm作为管理接口;另一个是模拟PC硬件的用户空间组件,这是一个稍作修改的qemu进程。

介绍2

 现在所说的虚拟化,一般都是指在CPU硬件支持基础之上的虚拟化技术。KVM也同hyper-V、Xen一样依赖此项技术。没有CPU硬件虚拟化的支持,KVM是无法工作的。
准 确来说,KVM是Linux的一个模块。可以用modprobe去加载KVM模块。加载了模块后,才能进一步通过其他工具创建虚拟机。但仅有KVM模块是 远远不够的,因为用户无法直接控制内核模块去作事情:还必须有一个用户空间的工具才行。这个用户空间的工具,开发者选择了已经成型的开源虚拟化软件 QEMU。说起来QEMU也是一个虚拟化软件。它的特点是可虚拟不同的CPU。比如说在x86的CPU上可虚拟一个Power的CPU,并可利用它编译出 可运行在Power上的程序。KVM使用了QEMU的一部分,并稍加改造,就成了可控制KVM的用户空间工具了。所以你会看到,官方提供的KVM下载有两 大部分三个文件,分别是KVM模块、QEMU工具以及二者的合集。也就是说,你可以只升级KVM模块,也可以只升级QEMU工具。这就是KVM和QEMU 的关系

介绍3

Qemu:
是一个完整的可以单独运行的软件,它可以用来模拟机器,非常灵活和可移植。它主要通过一个特殊的“重编译器”将为特定处理器编写二进制代码转换为另一种。

(也就是,在PPCmac上面运行MIPS代码,或者在X86 PC上运行ARM代码)

KQemu:
当源和目标代码有同样的架构的时候(就像最普通的情况 x86运行在x86上面),同样需要解析代码去除任何'特权指令'并且把它们替换为上下文转换。为了尽量使这个过程有效,有个内核模块KQemu处理这个事情。作为一个内核模块,KQemu仅仅需要替换最底层的ring0-only指令。在这个情况下,Qemu仍然为模拟的机器分配所有的RAM并且加载代码。不同的是,KQemu不需要重新编译代码,它仅仅调用KQemu去扫描/打补丁/执行。所有外围的硬件仿真是在Qemu中做的。虽然大部分代码都是没有变换的,但是KQemu还是需要转换ring0代码(VM内核的绝大部分代码),所以性能仍然不好。


KVM:
 KVM包括很多部件:首先,它是一个Linux内核模块(现在包括在主线中)用于转换处理器到一种新的用户 (guset)模式。用户模式有自己的ring状态集合,但是特权ring0的指令会陷入到管理器(hypervisor)的代码(遇到特权指令需要陷入hypervisor进行特殊处理)由于这是一个新的处理器执行模型,代码不需要任何的改动。除了处理器状态转换,这个内核模块同样处理很小一部分低层次的模拟,比如MMU注册(用于管理VM)和一部分PCI模拟的硬件

kvm-qemu:

可执行程序像普通Qemu一样:分配RAM,加载代码,不同于重新编译或者调用callingKQemu,它创建了一个线程(这个很重要);这个线程调用KVM内核模块去切换到用户模式,并且去执行VM代码。当遇到一个特权指令,它从新切换会KVM内核模块。该内核模块在需要的时候,像Qemu线程发信号去处理大部分的硬件仿真。这个体系结构一个比较巧妙的一个地方就是客户代码被模拟在一个posix线程,这允许你使用通常Linux工具管理。如果你需要一个有2或者4核的虚拟机,kvm-qemu创建2或者4个线程,每个线程调用KVM内核模块并开始执行。并发性(若果你有足够多的真实核)或者调度(如果你不管)是被通用的Linux调度器,这个使得KVM代码量十分的小。当一起工作的时候,KVM管理CPU和MEM的访问,QEMU仿真硬件资源(硬盘,声卡,USB,等等)当QEMU单独运行时,QEMU同时模拟CPU和硬件。

在可预见的未来,Qemu团队专注于硬件模拟和可移植性,同时KVM团队专注于内核模块(如果某些部分确实有性能提升的话,KVM会将一小部分模拟代码移进来)和与剩下的用户空间代码的交互。

分享到:
评论

相关推荐

    Qemu-kvm虚拟化技术介绍.pdf

    "Qemu-kvm虚拟化技术介绍" Qemu-kvm虚拟化技术是当前虚拟化技术的热点之一,该技术结合了Qemu和KVM两者的优势,提供了高性能和灵活的虚拟化解决方案。下面我们将对Qemu-kvm虚拟化技术的原理、架构和特点进行详细的...

    Qemu-kvm虚拟化技术介绍.pptx

    "Qemu-kvm 虚拟化技术介绍" 本文将对 Qemu-kvm 虚拟化技术进行详细的介绍,涵盖 Qemu-kvm 的原理、架构、虚拟化技术、磁盘格式、虚拟机硬盘生产等方面。 一、KVM 原理简介 KVM(Kernel-based Virtual Machine)是...

    虚拟化技术KVM.pdf

    ### 虚拟化技术KVM #### 一、虚拟化技术概述 ##### 1.1 计算机虚拟化技术定义 计算机虚拟化技术是一种能够整合资源、提高硬件利用率的技术,通过创建虚拟的计算机环境(虚拟机)来实现。这种技术能够允许在同一台...

    SHELL脚本自动部署KVM虚拟化

    ### 主流虚拟化技术简介 目前市场上主流的虚拟化技术主要包括: 1. **KVM**(Kernel-based Virtual Machine):基于Linux内核的虚拟化技术,提供了高性能的虚拟化功能。 2. **Xen**:一种开源虚拟化技术,支持半...

    KVM虚拟化学习.pdf

    #### 一、KVM虚拟化技术简介 KVM(Kernel-based Virtual Machine)是一种构建在Linux操作系统上的开源虚拟化技术,它为用户提供了一个强大的虚拟化解决方案,尤其适用于服务器环境。作为一种主流的虚拟化技术,KVM...

    KVM实现机制与原理

    KVM主要依赖于x86硬件的虚拟化技术,即Intel VT-x或AMD SVM,以实现对多个操作系统实例的同时运行和隔离。这一特性使得KVM成为现代云基础设施中不可或缺的一部分,尤其是在那些追求高性能、高安全性和资源高效利用的...

    KVM虚拟化部署和使用文档

    KVM是基于Linux内核的,它利用半虚拟化技术提供高性能的虚拟化服务。KVM与QEMU相结合,QEMU负责模拟硬件,KVM作为内核模块处理虚拟化的低级操作。KVM需要硬件支持VT技术,对于Intel CPU,可以使用`cat /proc/cpuinfo...

    介绍QEMU 原理的文档资料

    ### QEMU-KVM虚拟化技术详解 #### 一、QEMU概述 QEMU(Quick Emulator)是一款开源的机器模拟器,它可以在一种类型的计算机上模拟另一种类型计算机的硬件环境,使得不同体系结构的操作系统和应用程序能够运行在一...

    qemu代码分析.pdf

    ### QEMU代码分析 #### QEMU简介 QEMU(Quick Emulator)是一...这种模拟方式不仅可以提高模拟性能,还使得QEMU成为一个非常灵活和强大的工具,适用于多种场景,包括但不限于虚拟化环境、软件测试、安全研究等领域。

    KVM协议分析

    综上所述,KVM作为一种高效的虚拟化技术,在宿主模型的基础上结合了Intel VT-x等硬件辅助虚拟化技术,从而实现了高性能的虚拟机管理。通过深入理解其架构和技术细节,可以帮助我们更好地应用和发展这项技术。

    KVM实战:原理、进阶与性能调优.pdf

    KVM原理简介部分(第2章)详细介绍了硬件虚拟化技术,包括CPU、内存和I/O的虚拟化。同时,讲解了KVM架构、内核模块、QEMU用户态设备模拟以及与QEMU/KVM结合的组件和上层管理工具。构建KVM环境(第3章)涉及硬件系统...

    qemu code overview

    ### QEMU代码概述 #### 一、QEMU项目简介 QEMU(Quick Emulator)是一个开源的机器模拟器,能够模拟x86、ARM、PowerPC等架构的计算机硬件...无论是对于虚拟化技术的学习还是实践,QEMU都是一个不可或缺的工具和平台。

    KVM.rar_kvm

    总结来说,KVM是一款强大的虚拟化技术,它将Linux内核转变为虚拟机监控程序,结合QEMU提供高效、灵活的虚拟化环境。通过了解KVM的工作原理和管理方式,你可以构建出满足各种需求的虚拟化基础设施。

    再看云虚拟化安全_QEMU通用漏洞挖掘新思路.pdf

    在这个过程中,虚拟化技术,特别是Hypervisor,起到了关键作用。 【云虚拟化的安全探索】 Hypervisor是云虚拟化的核心,它如同一个守护者,确保各个虚拟机(Guest)与底层硬件(Host)之间保持安全隔离。任何能够...

    KVM虚拟机的应用

    #### 一、KVM虚拟化技术简介 KVM(Kernel-based Virtual Machine)是一种开源的全虚拟化解决方案,它直接集成在Linux内核中,能够将Linux系统转换为一个虚拟机监控器,允许在宿主机上运行多个独立的客户操作系统。...

    kvm实现客户机与宿主机的通信

    #### 一、KVM与虚拟化技术概述 ##### 1.1 虚拟化技术定义及分类 **虚拟化技术**是一种资源管理技术,能够将计算机系统的硬件资源抽象为多个虚拟化的环境,使多个操作系统或应用程序可以在同一台物理机器上同时运行...

    KVM服务器添加虚拟机

    KVM(Kernel-based Virtual Machine)是一种基于Linux内核的全虚拟化技术。它允许用户在其上运行多个隔离的操作系统实例,即虚拟机(VM)。KVM利用了Linux 2.6.20及以上版本内核提供的硬件辅助虚拟化特性,如Intel ...

Global site tag (gtag.js) - Google Analytics