虚拟化及KVM概述

1、虚拟化介绍

(1)概念

广义上的虚拟化是指使用软件定义的方式重新划分IT资源,实现IT资源的动态分配、灵活调度、跨域共享,整体提高IT资源利用率;

狭义上的虚拟化即指服务器虚拟化,即将服务器物理资源抽象成逻辑资源,即一台服务器在逻辑上虚拟出多台服务器,且相互隔离运行。

VMM(虚拟机监视器),是一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件,也可叫做Hypervisor。

早期的X86架构并不适合于虚拟化,X86架构存在17条敏感的非特权指令,这些指令在虚拟化环境中执行时可能会导致系统异常。(这里会比较迷糊,给大家梳理下指令之间的关系就会豁然开朗啦:①特权指令是操作和管理系统资源的指令,一般由OS发出运行在权限最高的Ring0上  ②敏感指令是指操作特权资源的指令,如读取敏感的寄存器或内存、访问所有I/O指令等等  ③所有特权指令都是敏感指令,但并不是所有敏感指令都是特权命令)

说了这么多,即能否虚拟化的关键在于系统所有的敏感指令是否都是特权指令,是的话则可以虚拟化,否的话则不可以虚拟化 。因此诞生了全虚拟化、半虚拟化、硬件辅助虚拟化技术。

(2)全虚拟化

介绍:全虚拟化是通过二进制翻译技术来实现x86架构支持虚拟化的一种方案。Guest OS指令段在执行前进行整段翻译,将其中的敏感非特权指令替换为Ring0中执行对应特权指令,非特权指令直接执行,特权指令首先会被陷入VMM,VMM通过一系列的模拟操作来实现此特权指令,然后返回给Guest OS,Guest OS从上次被中断的地方继续执行。

优缺点:优点是Guest OS无需修改,缺点则是扫描指令耗时长及需要二进制翻译,整体性能差、效率低。

代表产品:Virtual box、VMware Workstation及早期ESX。

(3)半虚拟化

介绍:半虚拟化是直接修改Guest OS的内核代码,将敏感非特权指令进行替换,通过超级调用直接和底层的虚拟化层Hypervisor来通讯,实现对底层物理资源的统一调度。

优缺点:优点为性能非常接近物理机,但缺点是仅支持开源操作系统,因此兼容性和可移植性差。

代表产品:Xen和Hyper-V(微软)。

(4)硬件辅助虚拟化

无论是全虚拟化还是半虚拟化,都有自身无法避免的缺陷,不能同时满足用户对效率高和兼容性强的需求。因此随着硬件技术的不断发展,推出了硬件辅助虚拟化,也是后续主流的虚拟化方式。

介绍:硬件辅助虚拟化引入了VMX模式(Virtural Machine extension),解决非特权敏感指令无法陷入的问题。VMX模式包括两种模式:①VMX根模式(VMM运行所处模式)②VMX非根模式(Guest OS运行所处模式)。当VM虚机需要调用底层硬件资源产生特权指令或敏感非特权指令时,CPU则从VMX非根模式切换到VMX根模式(此过程也叫VM-Exit),由VMM统一执行,VMM完成调度后,CPU则从VMX根模式切换到VMX非根模式(此过程也叫VM-Entry)

优点:由于虚拟化硬件可提供全新的架构,支持操作系统直接在上面运行,无需进行二进制转换,减少了相关的性能开销,极大简化了 VMM 设计,进而使 VMM 能够按通用标准进行编写,性能更加强大。

代表产品:KVM和VMvare ESXi。

2、KVM概述

(1)初步概念

KVM全称Kernel-based Virtual Machine(基于内核的虚拟机),Kvm作为一个模块内建于Linux内核中,依托于Linux社区内核,虚拟机内存和CPU调度等完全由Host kernel实现。广义的KVM就是指KVM虚拟化技术,狭义的KVM多数是指底层kvm模块,内核kvm模块区分CPU类型,IntelAmd,具体为kvm-intel.kokvm-amd.kokvm.ko在KVM中,每一个虚拟机都是由Linux调度程序管理的标准进程。但是KVM虚拟化的实现需要硬件支持(比如Intel的VT技术和AMD的V技术),是基于硬件的虚拟化。

(2)详细介绍

一个KVM客户机就对应一个Linux进程,每个vCPU对应这个进程下的一个线程,还有单独处理I/O的线程,属于同一个进程组。所以,宿主机上Linux Kernel可以像调度普通Linux进程一样调度KVM虚拟机,这种机制使得Linux Kernel的进程优化和调度功能优化等策略,都能用于KVM虚拟机。

由于KVM嵌入Linux内核中,除了硬件辅助虚拟化(如VT-d)的硬件设备能被虚拟机看见外,其他的I/O设备都是QEMU模拟出来的,所以QEMU是KVM天生的好基友。

可以说KVM就是在硬件辅助虚拟化技术之上构建起来的VMM。但并非要求所有硬件虚拟化技术都支持才能运行KVM虚拟化,KVM对硬件最低的依赖是CPU的硬件虚拟化支持(比如:Intel的VT-x技术和AMD的AMD-V技术),而其他的内存和I/O的硬件虚拟化支持,会让整个KVM虚拟化下的性能得到更多的提升。

(3)KVM架构

KVM虚拟化的核心主要由以下两个模块组成:

KVM内核模块:它属于标准Linux内核的一部分,是一个专门提供虚拟化功能的模块,主要负责CPU和内存的虚拟化,包括:客户机的创建、虚拟内存的分配、CPU执行模式的切换、vCPU寄存器的访问、vCPU的执行。

QEMU用户态工具:它是一个普通的Linux进程,为客户机提供设备模拟的功能,包括模拟BIOS、PCI/PCIE总线、磁盘、网卡、显卡、声卡、键盘、鼠标等。同时它通过ioctl系统调用与内核态的KVM模块进行交互。

如上图中,在KVM虚拟化架构下,每个客户机就是一个QEMU进程,在一个宿主机上有多少个虚拟机就会有多少个QEMU进程。客户机中的每一个虚拟CPU对应QEMU进程中的一个执行线程,一个宿主机Host中只有一个KVM内核模块,所有虚拟机都与这个内核模块进行交互。

  • 19
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值