-
KVM虚拟化技术原理简介
2020-12-09 00:12:22后来,随着计算硬件、网络技术、存储技术的飞速发展,人们发现,每个人独自拥有一台计算机似乎有些浪费,因为它大多数时候是空闲的。那么,如果将计算资源集中起来,大家共享,类似现代操作系统那样分时复用,将是对...KVM
KVM架构概述
- KVM架构很简单,就是内核的一个模块
- KVM是集成到内核的hypervisorI(虚拟监视器),是X86架构且硬件支持虚拟化技术的linux的全虚拟化解决方案,他是linux 很小的模块,他可以利用linux做任务调度,内存管理与硬件设备交互等工作
- 一个虚拟机就是一个普通的linux 进程,通过这个进程的管理,完成对虚拟化的管理
KVM运行时的三种模式
-
客户模式: 可以简单理解成客户机在操作系统运行中的模式, 客户模式又分为内核模式和用户模式。
-
用户模式: 为用户提供虚拟机管理的用户空间工具以及代表用户执行 I/O, Qemu 运行在这个模式之下。
-
内核模式: 模拟 CPU 以及内存, 实现客户模式的切换, 处理从客户模式的退出。 KVM 内核模块运行在这个模式下
KVM工作原理
- 用户模式的 Qemu 利用接口 libkvm 通过 ioctl 系统调用进入内核模式。 KVMDriver 为虚拟机创建虚拟 CPU 和虚拟内存, 然后执行 VMLAU·NCH 指令进入客户模式, 装载 Guest OS 并运行。 Guest OS 运行过程中如果发生中断或者影子缺页等异常, 将暂停 Guest OS 的运行并保存当前上下文退出到内核模式来处理这些异常。 内核模式处理这些异常时如果不需要 I/O则处理完成后重新进入客户模式。 如果需要 I/O 则进入到用户模式, 由 Qemu 来处理 I/O,处理完成后进入内核模式, 再进入客户模式
硬件虚拟化技术
最早的硬件虚拟化技术出现在1972年的大型机IBM System/370 系统上,而真正让硬件虚拟化技术“走入寻常百姓家”的是2005年年末Intel发布的VT-x硬件虚拟化技术,以及AMD于2006年发布的AMD-V。本书中除了特别说明,默认以Intel的硬件虚拟化技术作为代表来介绍。
优点**
- 集中化管理(远程管理、维护)
- 提高硬件利用率(物理资源利用率低——例如峰值,虚拟化解决了“空闲”容量)
- 动态调整机器/资源配置(虚拟化把系统的应用程序和服务硬件分离、提高了灵活性)
- 高可靠(可部署额外的功能和方案,可提高透明负载均衡、迁移、恢复复制等应用环境)
缺点
- 前期高额费用(初期的硬件支持)
- 降低硬件利用率(特定场景——例如极度吃资源的应用不一定适合虚拟化)
- 更大的错误影响面(本地物理机down机会导致虚拟机均不可用,同时可能虚拟机中文件全部损坏)
- 实施配置复杂、管理复杂(管理人员运维、排障困难)
- 一定的限制性(虚拟化技术涉及各种限制,必须与支持/兼容虚拟化的服务器、应用程序及供应商结合使用)
- 安全性(虚拟机技术自身的安全隐患)
1、CPU虚拟化
CPU是计算机系统最核心的模块,我们的程序执行到最后都是翻译为机器语言在CPU上执行的。在没有CPU硬件虚拟化技术之前,通常使用指令的二进制翻译(binary translation)来实现虚拟客户机中CPU指令的执行,很早期的VMware就使用这样的方案,其指令执行的翻译比较复杂,效率比较低。所以Intel最早发布的虚拟化技术就是CPU虚拟化方面的,这才为本书的主角—KVM的出现创造了必要的硬件条件。
Intel在处理器级别提供了对虚拟化技术的支持,被称为VMX(virtual-machine extensions)。有两种VMX操作模式:VMX 根操作(root operation) 与VMX 非根操作(non-root operation)。作为虚拟机监控器中的KVM就是运行在根操作模式下,而虚拟机客户机的整个软件栈(包括操作系统和应用程序)则运行在非根操作模式下。进入VMX非根操作模式被称为“VM Entry”;从非根操作模式退出,被称为“VM Exit”。
VMX的根操作模式与非VMX模式下最初的处理器执行模式基本一样,只是它现在支持了新的VMX相关的指令集以及一些对相关控制寄存器的操作。VMX的非根操作模式是一个相对受限的执行环境,为了适应虚拟化而专门做了一定的修改;在客户机中执行的一些特殊的敏感指令或者一些异常会触发“VM Exit”退到虚拟机监控器中,从而运行在VMX根模式。正是这样的限制,让虚拟机监控器保持了对处理器资源的控制。
一个虚拟机监控器软件的最基础的运行生命周期及其与客户机的交互软件通过执行VMXON指令进入VMX操作模式下;在VMX模式下通过VMLAUNCH 和VMRESUME指令进入客户机执行模式,即VMX非根模式;当在非根模式下触发VM Exit时,处理器执行控制权再次回到宿主机的虚拟机监控器上;最后虚拟机监控可以执行VMXOFF指令退出VMX执行模式。
逻辑处理器在根模式和非根模式之间的切换通过一个叫作VMCS(virtual-machine control data structure)的数据结构来控制;而VMCS的访问是通过VMCS指针来操作的。VMCS指针是一个指向VMCS结构的64位的地址,使用VMPTRST和VMPTRLD指令对VMCS指针进行读写,使用MREAD、VMWRITE和VMCLEAR等指令对VMCS实现配置。
对于一个逻辑处理器,它可以维护多个VMCS数据结构,但是在任何时刻只有一个VMCS在当前真正生效。多个VMCS之间也是可以相互切换的,VMPTRLD指令就让某个VMCS在当前生效,而其他VMCS就自然成为不是当前生效的。一个虚拟机监控器会为一个虚拟客户机上的每一个逻辑处理器维护一个VMCS数据结构。
根据Intel的官方文档,我们这里列举部分在非根模式下会导致“VM Exit”的敏感指令和一些异常供读者朋友参考,这对于理解KVM的执行机制是必要的,因为KVM也必须按照CPU的硬件规范来实现虚拟化软件逻辑。
1)一定会导致VM Exit的指令:CPUID、GETSEC、INVD、XSETBV等,以及VMX 模式引入的INVEPT、INVVPID、VMCALL、VMCLEAR、VMLAUNCH、VMPTRLD、VMPTRST、VMRESUME、VMXOFF、VMXON等。
2)在一定的设置条件下会导致VM Exit的指令:CLTS、HLT、IN、OUT、INVLPG、INVPCID、LGDT、LMSW、MONITOR、MOV from CR3、MOV to CR3、MWAIT、MWAIT、RDMSR、RWMSR、VMREAD、VMWRITE、RDRAND、RDTSC、XSAVES、XRSTORS等。如在处理器的虚拟机执行控制寄存器中的“HLT exiting”比特位被置为1时,HLT的执行就会导致VM Exit。
3)可能会导致VM Exit的事件:一些异常、三次故障(Triple fault)、外部中断、不可屏蔽中断(NMI)、INIT信号、系统管理中断(SMI)等。如在虚拟机执行控制寄存器中的“NMI exiting”比特位被置为1时,不可屏蔽中断就会导致VM Exit。
最后提一下,由于发生一次VM Exit的代价是比较高的(可能会消耗成百上千个CPU执行周期,而平时很多指令是几个CPU执行周期就能完成),所以对于VM Exit的分析是虚拟化中性能分析和调优的一个关键点。2、内存虚拟化
内存虚拟化的目的是给虚拟客户机操作系统提供一个从0地址开始的连续物理内存空间,同时在多个客户机之间实现隔离和调度。在虚拟化环境中,内存地址的访问会主要涉及以下4个基础概念,
1)客户机虚拟地址,GVA(Guest Virtual Address)
2)客户机物理地址,GPA(Guest Physical Address)
3)宿主机虚拟地址,HVA(Host Virtual Address)
4)宿主机物理地址,HPA(Host Physical Address)
内存虚拟化就是要将客户机虚拟地址(GVA)转化为最终能够访问的宿主机上的物理地址(HPA)。对于客户机操作系统而言,它不感知内存虚拟化的存在,在程序访问客户机中虚拟地址时,通过CR3寄存器可以将其转化为物理地址,但是在虚拟化环境中这个物理地址只是客户机的物理地址,还不是真实内存硬件上的物理地址。所以,虚拟机监控器就需要维护从客户机虚拟地址到宿主机物理地址之间的一个映射关系,在没有硬件提供的内存虚拟化之前,这个维护映射关系的页表叫作影子页表(Shadow Page Table)。内存的访问和更新通常是非常频繁的,要维护影子页表中对应关系会非常复杂,开销也较大。同时需要为每一个客户机都维护一份影子页表,当客户机数量较多时,其影子页表占用的内存较大也会是一个问题。
Intel CPU 在硬件设计上就引入了EPT(Extended Page Tables,扩展页表),从而将客户机虚拟地址到宿主机物理地址的转换通过硬件来实现。当然,这个转换是通过两个步骤来实现的,如图2-3所示。首先,通过客户机CR3寄存器将客户机虚拟地址转化为客户机物理地址,然后通过查询EPT来实现客户机物理地址到宿主机物理地址的转化。EPT的控制权在虚拟机监控器中,只有当CPU工作在非根模式时才参与内存地址的转换。使用EPT后,客户机在读写CR3和执行INVLPG指令时不会导致VM Exit,而且客户页表结构自身导致的页故障也不会导致VM Exit。所以通过引入硬件上EPT的支持,简化了内存虚拟化的实现复杂度,同时也提高了内存地址转换的效率。除了EPT,Intel在内存虚拟化效率方面还引入了VPID(Virtual-processor identifier)特性,在硬件级对TLB资源管理进行了优化。在没有VPID之前,不同客户机的逻辑CPU在切换执行时需要刷新TLB,而TLB的刷新会让内存访问的效率下降。VPID技术通过在硬件上为TLB增加一个标志,可以识别不同的虚拟处理器的地址空间,所以系统可以区分虚拟机监控器和不同虚拟机上不同处理器的TLB,在逻辑CPU切换执行时就不会刷新TLB,而只需要使用对应的TLB即可。VPID的示意图如图2-4所示。当CPU运行在非根模式下,且虚拟机执行控制寄存器的“enable VPID”比特位被置为1时,当前的VPID的值是VMCS中的VPID执行控制域的值,其值是非0的。VPID的值在3种情况下为0,第1种是在非虚拟化环境中执行时,第2种是在根模式下执行时,第3种情况是在非根模式下执行但“enable VPID”控制位被置0时。
3、I/O虚拟化
在虚拟化的架构下,虚拟机监控器必须支持来自客户机的I/O请求。通常情况下有以下4种I/O虚拟化方式。
1)设备模拟:在虚拟机监控器中模拟一个传统的I/O设备的特性,比如在QEMU中模拟一个Intel的千兆网卡或者一个IDE硬盘驱动器,在客户机中就暴露为对应的硬件设备。客户机中的I/O请求都由虚拟机监控器捕获并模拟执行后返回给客户机。
2)前后端驱动接口:在虚拟机监控器与客户机之间定义一种全新的适合于虚拟化环境的交互接口,比如常见的virtio协议就是在客户机中暴露为virtio-net、virtio-blk等网络和磁盘设备,在QEMU中实现相应的virtio后端驱动。
3)设备直接分配:将一个物理设备,如一个网卡或硬盘驱动器直接分配给客户机使用,这种情况下I/O请求的链路中很少需要或基本不需要虚拟机监控器的参与,所以性能很好。
4)设备共享分配:其实是设备直接分配方式的一个扩展。在这种模式下,一个(具有特定特性的)物理设备可以支持多个虚拟机功能接口,可以将虚拟功能接口独立地分配给不同的客户机使用。如SR-IOV就是这种方式的一个标准协议。
表2-1展示了这4种I/O虚拟化方式的优缺点,给读者一个概括性的认识。在这4种方式中,前两种都是纯软件的实现,后两种都需要特定硬件特性的支持。设备直接分配在Intel平台上就是VT-d(Virtualization Technology For Directed I/O)特性,一般在系统BIOS中可以看到相关的参数设置。Intel VT-d为虚拟机监控器提供了几个重要的能力:I/O设备分配、DMA重定向、中断重定向、中断投递等。图2-5描述了在VT-d硬件特性的帮助下实现的设备直接分配的架构,并与最传统的、通过软件模拟设备的I/O设备虚拟化进行了对比。
尽管VT-d特性支持的设备直接分配方式性能可以接近物理设备在非虚拟化环境中的性能极限,但是它有一个缺点:单个设备只能分配给一个客户机,而在虚拟化环境下一个宿主机上往往运行着多个客户机,很难保证每个客户机都能得到一个直接分配的设备。为了克服这个缺点,设备共享分配硬件技术就应运而生,其中SR-IOV(Single Root I/O Virtualization and Sharing)就是这样的一个标准。实现了SR-IOV规范的设备,有一个功能完整的PCI-e设备成为物理功能(Physical Function,PF)。在使能了SR-IOV之后,PF就会派生出若干个虚拟功能(Virtual Function,VF)。VF看起来依然是一个PCI-e设备,它拥有最小化的资源配置,有用独立的资源,可以作为独立的设备直接分配给客户机使用。Intel的很多高级网卡如82599系列网卡就支持SR-IOV特性,一个85299网卡PF就即可配置出多达63个VF,基本可满足单个宿主机上的客户机分配使用。当然,SR-IOV这种特性可以看作VT-d的一个特殊例子,所以SR-IOV除了设备本身要支持该特性,同时也需要硬件平台打开VT-d特性支持。
KVM虚拟化平台部署
1.虚拟机资源
CPU:双核双线程+CPU虚拟机开启
内存:8G
硬盘:300G
双网卡:单网卡
操作系统:Centos7.4
2.安装KVM
# KVM 模块 yum -y install qemu-kvm # 安装KVM 调试工具,可不安装 yum -y install qemu-kvm-tools # 构建虚拟机的命令行工具 yum -y install virt-install # qemu 组件,创建磁盘、启动虚拟机等 yum -y install qemu-img # 网络支持工具 yum -y install bridge-utils # 虚拟机管理工具 yum -y install libvirt # 图形界面管理虚拟机 yum -y install virt-manager #以下是安装的内容 yum groupinstall -y "GNOME Desktop" yum -y install qemu-kvm yum -y install qemu-kvm-tools yum -y install virt-install yum -y install qemu-img yum -y install bridge-utils yum -y install libvirt yum -y install virt-manager
3.设置KVM网络
KVM网络的两种模式:
NAT:默认设置,数据包由 NAT 方式通过主机的接口进行传送,可以访问外网,但是无法从外部访问虚拟机网络
网桥:这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机内部,但需要网卡支持(一般有线网卡都支持)
以下使用的时Bridge网桥模式进行部署
[root@kvm yum.repos.d]# vi /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=none DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=df840518-cb68-4ccb-bdd4-d2080d74ca84 DEVICE=ens33 ONBOOT=yes BRIDGE=br0
4.KVM部署与管理
创建KVM镜像目录和存储目录,上传CentOS7镜像
[root@kvm ~]# mkdir -p /data-kvm/iso [root@kvm ~]# mkdir -p /data-kvm/store [root@kvm ~]# mkdir /abc 上传CentOS-7-x86_64-DVD-1708.iso至/data-kvm/iso 查看镜像 [root@kvm ~]# ls /data-kvm/iso/ CentOS-7-x86_64-DVD-1708.iso [root@kvm ~]# virt-manager
按提示操作就可以安装了 -
KVM虚拟化技术 实战与原理解析.pdf
2018-03-24 11:53:35KVM虚拟化技术 实战与原理解析.pdf;KVM虚拟化技术 实战与原理解析.pdf -
KVM虚拟化技术__实战与原理解析 + Linux KVM虚拟化架构实战指南(带书签)
2018-03-12 21:38:53KVM虚拟化技术__实战与原理解析 + Linux KVM虚拟化架构实战指南(带书签) -
KVM虚拟化技术 实战与原理解析 高清完整PDF
2018-03-05 21:04:36资源共享----《KVM虚拟化技术:实战与原理解析》 资源共享----《KVM虚拟化技术:实战与原理解析》 资源共享----《KVM虚拟化技术:实战与原理解析》 资源共享----《KVM虚拟化技术:实战与原理解析》 资源共享----... -
KVM虚拟化技术实战与原理解析
2019-01-10 15:36:28KVM虚拟化技术实战与原理解析 全书一共9章:第1章介绍了云计算和虚拟化的概念,并对KVM等几种流行的虚拟化技术做了比较;第2章介绍了KVM的基本架构、QEMU的作用以及Intel的硬件虚拟化技术;第3章详细讲解了KVM依赖的... -
KVM虚拟化技术 实战与原理解析
2018-12-10 18:15:06《KVM虚拟化技术:实战与原理解析》不仅系统介绍了KVM虚拟机的功能、特性和使用方法,而且还深入地剖析了KVM虚拟机的核心技术和工作原理,对KVM做了全面而透彻的讲解。 -
KVM虚拟化技术:实战与原理解析
2018-01-22 21:30:04kvm虚拟化技术:实战与原理解析 pdf扫描 图书详细介绍了kvm虚拟化技术的应用场景与原理 -
KVM虚拟化技术__实战与原理解析_带书签
2017-12-26 10:39:15KVM虚拟化技术__实战与原理解析_带书签,KVM虚拟化技术__实战与原理解析_带书签,KVM虚拟化技术__实战与原理解析_带书签 -
KVM虚拟化技术实战与原理解析(书签版)
2018-09-13 09:50:18有完整详尽的一二级书签;讲述KVM虚拟化技术就优秀的书; 之前的版本传错了,这个才有详尽的一二级目录,降1分以示歉意。 -
《kvm虚拟化技术 实战与原理解析》读书笔记
2017-04-08 12:42:30《kvm虚拟化技术 实战与原理解析》1、kvm原理简介2、kvm核心基础功能3、kvm管理功能4、kvm性能测试以及参考数据《kvm虚拟化技术 实战与原理解析》
1、kvm原理简介
x86平台虚拟化技术中,新引入的虚拟化层通常称为虚拟机监控器(Virtual Machine Monitor,VMM),也叫做Hypervisor. 宿主机是真实的物理平台,客户机是虚拟出来的平台。 虚拟化实现的技术方式有多种,比如软件虚拟化和硬件虚拟化,再比如准虚拟化和全虚拟化。准虚拟化需要修改客户机操作系统。 Xen是开源准虚拟化技术的例子,是取代内核由自身管理系统资源的架构。 KVM全称 kernel Virtual Machine,内核虚拟机。它作为一个模块,成为linux内核的一部分。它是全虚拟化的解决方案,部分准虚拟化。 虚拟级监控器的主要职能是管理真实的物理平台,并为每个虚拟客户机提供对应的虚拟硬件平台。 虚拟机的架构分为类型一和类型二。类型一是虚拟机在系统上电后首先加载运行虚拟机监控程序,而传统的操作系统运行在创建的虚拟机上。类型二是系统上电后运行一般意义上的操作系统,虚拟机监控程序作为特殊的应用程序,视作操作系统功能的扩展。 虚拟机的创建和运行是一个用户空间的应用程序(QEMU)和KVM模块相互配合。大部分的输入和输出设备交给QEMU来负责。
2、kvm核心基础功能
- 内存管理
- 存储
- cpu
- 网络
- 显示
3、kvm管理功能
它们一般对qemu-kvm命令进行封装和功能增强,提供更友好的用户交互接口。基于libvirt API, openstack提供一个模块化的web用户界面。libvirt API为其他虚拟化管理工具提供一套通用的API管理包括qemu/kvm的多种Hypervisor.
4、kvm性能测试以及参考数据
- 内存性能测试
- 磁盘I/O性能测试
- cpu性能测试
- 网络性能测试
-
kvm虚拟化技术部署文档
2020-10-13 17:18:24虚拟化技术文档包含了:虚拟化基础原理及分类、安装配置、网络环境、kvm迁移、qemu-img工具的使用 -
kvm虚拟化原理
2020-06-14 09:51:22如果把物理平台,包括CPU,内存,外设作为资源,那么对应的虚拟化技术就是平台虚拟化。 VMM(virtual machine monitor) 虚拟机监视器,也叫hypervisor。虚拟机监视器运行的环境叫做host,而虚拟出来的虚拟机成为guest...名词描述
如果把操作系统共及其提供的系统调用作为资源,那么虚拟化就表现为操作系统虚拟化。linux容器虚拟化就是一个操作系统上,虚拟化出了多个同样的操作系统。
如果把物理平台,包括CPU,内存,外设作为资源,那么对应的虚拟化技术就是平台虚拟化。VMM(virtual machine monitor) 虚拟机监视器,也叫hypervisor。虚拟机监视器运行的环境叫做host,而虚拟出来的虚拟机成为guest
虚拟化重要一步,就是截取计算元件对物理资源的访问,并重定向到虚拟化资源池中。如果是使用纯软件的方式实现这种截取,那么就称为软件虚拟化,如果是通过硬件方式实现,那么就称为硬件虚拟化。
我的理解
qemu+kqemu就是纯软件的虚拟化,
而qemu+kvm是利用的硬件虚拟化的技术。
利用硬件虚拟化的好处,无需进行二进制转换,减少性能开销,极大简化了VMM的设计,性能更强大。
完整的情况下需要CPU、主板芯片组、BIOS和软件的支持。即使在只有CPU支持的情况下,性能也会比不支持情况好。
intel virtualizaton Technology(IntelVT)
半虚拟化,为了解决纯软件虚拟化下,性能的问题,改动guest操作系统,使他可以自己运行在虚拟环境下。本质上,弱化了对虚拟机特殊指令的被动截取要求,将其转化为guest操作系统的主动通知。Xen是代表
全虚拟化,不需要对guest操作系统进行任何改动,理论上支持任何可在真是物理平台上运行的操作系统。随着硬件虚拟化的出现,全虚拟化的性能已经超过了半虚拟化。
linux kernel通过加载kvm模块变身成一个hypervisor
KVM是基于虚拟化扩展(intel VT或AMD-V)的X86硬件。是linux完全原生的全虚拟化解决方案。
部分的半虚拟化支持,注意是通过半虚拟网络驱动程序的形式用于linux和windowsguest系统。
每个虚拟CPU显示为一个常规的linux进程。
KVM本身不执行任何模拟,需要用户空间程序通过/dev/kvm借口设置一个guest虚拟服务器的地址空间,向他提供模拟的IO,并将它的视频显示映射回数组的显示屏,目前这个应用程序就是QEMU。KVM原理
架构
内存管理
一个虚拟机的内存与任何其他linux进程的内存一样进行存储,可以以大页面的形式进行交换以实现更高的性能,也可以以磁盘文件的形式共享。NUMA(非一致性内存访问,针对多处理器的内存设计)支持允许虚拟机有效的访问大量内存。
KVM支持最新的基于硬件的内存虚拟化功能,支持Intel的扩展页表(EPT)和AMD的嵌套页表(NPT,也交快速虚拟化索引-RVI),以实现更低的CPU利用率和更高的吞吐量。
内存页面共享通过一种名为内核同页合并(kernel same-page merging,KSM)的内核功能来支持,KSM扫描每个虚拟机的内存如果虚拟拥有相同的内存页面,KSM将这些页面合并到一个虚拟机之间共享的页面,修改时在获得专享副本
存储
KVM能够使用linux支持的任何存储来存储虚拟机镜像。KVM原声磁盘格式为QCOW2,支持快照,允许多级快照,压缩和加密。
设备驱动程序
KVM支持混合虚拟化,其中准虚拟化的驱动程序安装在guest os中,允许虚拟机使用优化的IO借口而不实用模拟的设备,从而为网络和快设备提供高性能的IO。这个准虚拟化驱动程序使用IBM和ReadHat联合linux社区开发的VirtIO标准。它是一个与虚拟机管理程序独立的、构建设备驱动程序的借口,允许为多个虚拟机管理程序使用一组相同的设备驱动程序。(virtIO是安装在guest os中的模块)
性能和可伸缩性
KVM虚拟化性能在很多方面(计算能力和原生带宽)可以达到非虚拟化原生环境的95%以上。RHEL6.x系统一个KVM客户机可以支持160个虚拟CPU和多大2T内存,一个宿主机支持4096个CPU核心和多达64T内存
原理
虚拟化模型
VMM或Hypervisor的主要职能:管理真是的物理硬件平台,并为每个虚拟guest提供对应虚拟硬件平台。
guest任然可以作为自己的VMM,称为嵌套虚拟化。KVM支持嵌套虚拟化。
KVM架构
两种架构,类型一,系统上电之后首先加载运行虚拟机监控程序,传统的操作系统运行在其创建的虚拟机中,可以视为一个特别为虚拟化而剪裁过的操作系统内核。一般会提供一个具有一定特权的特殊虚拟机。由这个特权虚拟机提供用户日常操作和管理使用的操作系统环境。代表Xen,VMware ESX/ESXi和微软Hyper-V。类型二,上电后仍然运行一般意义上的操作系统,VMM作为特殊的应用程序,视为操作系统功能的扩展。其最大优势在于可以充分利用现有操作系统,不必实现物理资源管理和调度算法。但是会收到诉诸操作系统的一些限制。无法仅仅为了虚拟机优化,而对操作系统做出修改。
qemu通过/dev/kvm借口设置一个虚拟客户机的地址空间,向他提供墨迹IO设备,并将显示映射回宿主机显示屏。
KVM模块
主要功能,初始化CPU硬件,打开虚拟化模式,然后将虚拟客户机运行在虚拟机模式下,并对虚拟客户机的运行提供一定的支持。
为了软件简洁,KVM仅支持硬件虚拟化。KVM先初始化内部数据结构
KVM打开CPU控制寄存器CR4中的虚拟化模式开关,通过执行VMXON指令将host操作系统置于虚拟化模式中的根模式
KVM模块创建/dev/kvm并等待用户空间命令。
KVM和qemu通过对/dev/kvm的ioctl系统调用来通信。
针对虚拟处理器的最重要的IOCTL调用就是执行“虚拟处理器”。通过它,用户空间准备好的虚拟机在KVM模块支持下,被置于虚拟化模式中的非根模式下,并开始执行二进制指令。在非根模式下,所有敏感的二进制指令都会被处理器捕获到,处理器在保存现场之后自动切换到根模式,由KVM决定如何进一步处理(要么由KVM模块直接处理,要么反悔用户空间交由用户空间程序处理)。
内存虚拟化,在硬件支持二维地址翻译之前是最复杂的部分。在虚拟机模式下,内存管理单元的页表必须在一次查询的时候完成两次地址转换。除了要将客户机虚拟地址转换为客户机物理地址,还需要再转为host的物理地址。使用影子页表机制。通过硬件支持,二维分页机制。
处理器对设备的访问主要通过IO指令和MMIO,其中IO指令会被处理器直接接货,MMIO会通过配置内存虚拟化来捕获。对性能要求较高的虚拟设备才会由KVM内核模块直接负责,比如虚拟终端控制器和虚拟始终,这样可以大量减少处理器的模式切换开销。Qemu设备模型
大部分输入输出都交给qemu来负责
qemu虚拟机是一个纯软件的实现,性能底下。qemu的代码中有整套的虚拟机实现,包括处理器虚拟化,内存虚拟化,以及KVM使用到的虚拟设备模拟(网卡,下卡,存储控制器和硬盘等)。
KVM在qemu基础上进行了修改,虚拟机运行期间,qemu会通过KVM模块提供的系统调用进入内核,由KVM模块负责将虚拟机置于处理器的特殊模式运行。遇到虚拟机进行输入输出操作,kvm从上次的系统调用出口处反悔qemu,由qemu来负责解析和模拟这些设备(是不是可以理解为,从创建虚拟机后,就交由kvm负责,运行在特殊模式,直到发生了IO操作,切换到用户态,交由qemu负责)。
从qemu角度来看,使用了KVM模块的虚拟化功能,为自己的虚拟机提供硬件虚拟化的枷锁,极大的提升了虚拟机性能。除此之外,虚拟机的配置和创建,虚拟机运行以来的虚拟设备,虚拟机运行时用户操作环境和交互,以及一些针对虚拟机的特殊技术(诸如动态歉意),都是由qemu自己实现的。kvm和qemu都可以选择其他虚拟机或技术来枷锁,比如qemu可以选择xen或者kqemu,而kvm也可以选择其他应用程序,只要它按照kvm提供的API来设计。
-
kvm虚拟化技术:实战与原理解析
2013-11-12 09:23:17kvm虚拟化技术:实战与原理解析 在具体内容上,本书不仅系统介绍了 KVM虚拟机的功能、特性和使用方 法,而且还深入地剖析了 KVM虚拟机的核心技术和工作原理,对 KVM做了全面而透彻的讲解。 对其内容详细...kvm虚拟化技术:实战与原理解析
在具体内容上,本书不仅系统介绍了 KVM虚拟机的功能、特性和使用方 法,而且还深入地剖析了 KVM虚拟机的核心技术和工作原理,对 KVM做了全面而透彻的讲解。
对其内容详细阅读 -
读KVM虚拟化技术实战与原理解析
2018-11-01 16:30:251、软件虚拟化和硬件虚拟化:实现虚拟化的重要一步在于:虚拟化层必须能够截获计算元件对物理资源的直接访问,并将其重定向到虚拟资源池中。硬件虚拟化,就是物理平台本身提供了对特殊指令的截获和重定向的硬件支持 ... -
《KVM虚拟化技术实战和原理解析》读书笔记(一)
2016-10-18 21:39:25《KVM虚拟化技术实战和原理解析》第一章和第二章读书笔记 -
REDHAT的KVM虚拟化技术白皮书
2010-04-06 11:21:44READHAT的KVM虚拟化技术白皮书,总结的很详细,包括虚拟化技术的发展,KVM的设计原理及机制等,很适合入门的人快速了解虚拟化技术及KVM -
[原] KVM 虚拟化原理探究(3)— CPU 虚拟化
2016-08-10 16:24:00目录 KVM 虚拟化原理探究(3)— CPU 虚拟化 CPU 虚拟化简介 Intel-V 技术 Intel-V虚拟化技术结构 总结 KVM 虚拟化原理探究(3)— CPU 虚拟化 标签(空格分隔): KVM CPU... -
KVM虚拟化技术实战与原理解析——读书笔记
2014-11-11 21:24:23第1章介绍了云计算和虚拟化的概念,并对KVM等几种流行的虚拟化技术做了比较; 第2章介绍了KVM的基本架构、QEMU的作用以 及Intel的硬件虚拟化技术; 第3章详细讲解了KVM依赖的硬件环境配置,编译和安装KVM... -
KVM 虚拟化介绍及原理
2017-07-27 01:09:11KVM 虚拟化介绍及原理 kvm : Kernel-based Virtual Machine 虚拟化的目的:将底层硬件虚拟化,形成一个将既有的...虚拟化技术的分类、主流技术及实现其技术的应用1.模拟:Emulation ,硬件被模拟后的结果可以和上一 -
KVM虚拟化原理与实践
2013-12-03 12:51:55KVM虚拟化原理与实践(连载) 更新时间: 十 19th, 2013 云计算概念很火,其底层虚拟化技术也是近年来的研究热点,KVM (kernel-based virtual machine,内核虚拟机) 也越来越流行了,大名鼎鼎的Google... -
(技术分析)kvm虚拟化原理
2018-10-23 20:14:08VMCS结构VMCS是保持在内存中的数据结构,包含了虚拟cpu的相关寄存器的内容和虚拟cpu相关的控制信息,每个VMCS对应一个虚拟CPU。VMCS在使用时需要与物理CPU绑定。在任意给定时候,VMCS与物理CPU是一对一的绑定关系,... -
KVM虚拟化基本原理介绍(以ARM64架构为例)
2019-04-20 21:57:28最近学习KVM,做了些代码分析,把学习的过程(主要是基于4.15版本内核arm64架构kvm的代码分析)形成几个技术文档。初步计划分为guest os退出处理分析、内存虚拟化分析和guest以及host之前切换分析等几个部分,如果... -
KVM虚拟化技术实战与原理解析笔记
2013-10-18 10:30:00书的直接传送门,http://smilejay.com/2013/10/kvm-principles-and-pratices-published/ 因为自己在看书的时候并不能很好的集中注意力,所以将在看书时认为比较重要的地方记录下来,帮助自己记忆,方便分享给大家。... -
[原] KVM 虚拟化原理探究(4)— 内存虚拟化
2016-08-16 17:06:00可以说内存是除了CPU外最重要的组件,Guest最终使用的还是宿主机的内存,所以内存虚拟化其实就是关于如何做Guest到宿主机物理内存之间的各种地址转换,如何转换会让转换效率更高呢,KVM经历了三代的内存虚拟化技术,...
-
T+V15.0专属云年结流程及相关问题
-
转行做IT-第2章 HTML入门及高级应用
-
php使用Qrcode生成二维码
-
DedeCms标签生成器(2.6).exe
-
【2021】Python3+Selenium3自动化测试(不含框架)
-
US Domain Center建站神器 6: 将收藏夹图标添加到我的网站
-
01 Python编程语言历史及特性.mp4
-
PTA教育超市《函数部分》理论题
-
专家系统PID.pdf
-
(新)备战2021软考网络规划设计师培训学习套餐
-
2021年危险化学品经营单位主要负责人考试内容及危险化学品经营单位主要负责人试题及答案
-
vgg19_weights_tf_dim_ordering_tf_kernels_notop.h5
-
Visual Studio 开发STM32实现USB虚拟串口功能——方法2 使用stm32CubeMX完成USB配置
-
python数据分析基础
-
将多个PDF文件合并位一个.zip
-
lceda-windows-x64-6.4.7.exe
-
国家注册信息安全工程师体系课程(CISP-PTE)
-
Kotlin协程极简入门与解密
-
彻底学会正则表达式
-
Binary indexed tree