KVM虚拟化- KVM虚拟化介绍

1  概念

        虚拟化技术 VMM (Virtual Machine Monitor) Hypervisor:虚拟化是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

目前有多种虚拟化系统:

        软件虚拟化(仿真):使用二进制转换和其他仿真技术来运行操作系统(不用修改)。软件虚拟化的性能要比硬件虚拟化或半虚拟化要差,比如QEMU。

       硬件虚拟化 IntelVT (Intel Virtualization Technology):使用完全虚拟化技术

       准虚拟化 para­virtualization:Xen

       完全虚拟化 full virtualizatio :  KVM

1.1  虚拟化架构

虚拟化架构

KVM虚拟化架构

        Guest:客户机系统,包括CPU(vCPU)、内存、驱动(Console、网卡、I/O 设备驱动等),被 KVM 置于一种受限制的 CPU 模式下运行。

        KVM:运行在内核空间,提供CPU 和内存的虚级化,以及客户机的 I/O 拦截。Guest 的 I/O 被 KVM 拦截后,交给 QEMU 处理。

        QEMU:修改过的为 KVM 虚机使用的 QEMU 代码,运行在用户空间,提供硬件 I/O 虚拟化,通过 IOCTL /dev/kvm 设备和 KVM 交互。

        其实 QEMU 原本不是 KVM 的一部分,它自己就是一个纯软件实现的虚拟化系统,所以其性能低下。但是,QEMU 代码中包含整套的虚拟机实现,包括处理器虚拟化,内存虚拟化,以及 KVM需要使用到的虚拟设备模拟(网卡、显卡、存储控制器和硬盘等)。                   

        为了简化代码,KVM 在 QEMU 的基础上做了修改。VM 运行期间,QEMU 会通过 KVM 模块提供的系统调用进入内核,由 KVM 负责将虚拟机置于处理的特殊模式运行。遇到虚机进行 I/O 操作,KVM 会从上次的系统调用出口处返回 QEMU,由 QEMU 来负责解析和模拟这些设备。从 QEMU 的角度看,QEMU 使用了 KVM 模块的虚拟化功能,为自己的虚机提供了硬件虚拟化加速。除此以外,虚机的配置和创建、虚机运行说依赖的虚拟设备、虚机运行时的用户环境和交互,以及一些虚机的特定技术比如动态迁移,都是 QEMU 自己实现的

1.2  KVM (Kernel-based Virtual Machine基于内核的虚拟机)

        KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。

        KVM是一种完全虚拟化技术,是集合在内核中的虚拟化功能模块,由硬件检测其开关,所以需要硬件的支持,以Intel虚拟化技术为例——CPU上要有VT-x,芯片上要有VT-d,需要VMDq intel网卡,SR-LOV PCI组织定义的单根设备虚拟化协议,其次需要操作系统的支持,centos内核必须是3.5以上的版本才可以,最后还需要软件的支持,也就是需要安装软件包。

1)VT­x  [运行ESXI上的64bit  Guest  OS基本指令]

        Intel运用Virtualization虚拟化技术中的一个指令集。VT­x有助于提高基于软件的虚拟化解决方案 的灵活性与稳定性。通过按照纯软件虚拟化的要求消除虚拟机监视器(VMM)代表客户操作系统 来听取、中断与执行特定指令的需要,不仅能够有效减少 VMM 干预,还为 VMM 与客户操作系 统之间的传输平台控制提供了有力的硬件支持,这样在需要 VMM干预时,将实现更加快速、可 靠和安全的切换。

2)VT­d  [虚拟机可以直接针对周边硬体做存取,由北桥晶片来支援及BIOS来开启]

        简单来说  ,VT­d技术可以使其中一个Guest  OS可以直接存取硬体设备,例如Raid  Card,Lan Card,Display  Card。假设Display  Card  pass  through  到Guest  OS后,只有这个Guest  OS可以控 制及使用。事实上在虚拟环境中,还是有许多直接硬体存取的机会,如备份伺服器,常常需要直 接存取HBA  Card才能加快速度,此时VT­d就大派用场。

3)VT­c  [架构都是以Network为主,  要由I/O装置来支援]

A)Virtual  Machine  Direct  Connect

        虚拟机上的虚拟网络卡传送主要透过  VMM(或是  hypervisor)来进行传输,  而VMDc允许VM 可以直接针对实体网路  I/O进行存取。虽然在  Intel  VT­d技术中已经允许虚拟机可以直接和 实体I/O连结.不过VMDc使用了PCI­SIG的Single  Root  I/O  Virtualization的技术。透过这项技 术更进一步提升VT­d的功能。它可以同时让多个虚拟机与实体  I/O装置同时建立通道!

B)Virtual  Machine  Device  Queues

        目前我们使用的虚拟化不管是 RHEL的KVM或是Xen还是VMware/Citrix,在处理虚拟机的网络卡时都会透过一个由VMM(或是叫 Hypervisor) 所管理的虚拟化Switch ,而这Switch主要的功能就是转送封包给正确的虚拟机.,但哪一些封包要流向哪一个虚拟机都需要额外的CPU资 源才能完成这些工作。而 Intel所使用的VMDq就是为了减少这些额外CPU的处理,透过网卡 晶片内建的Layer2 classifier / sorter以加速网路资料的传送,它可以先行将不同的虚拟机所需的封包,直接在晶片里面安排好再透过receive  queue,直接给虚拟机.这样就不需再透过Virtual switch转送封包.!大大减少网路的负载与CPU的使用率!

 4)KVM使用QEMU来进行I/O硬件仿真。QEMU是用户空间仿真器,可以模拟多种架构处理器,性能也很不错。KVM还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面。使用KVM可以运行不用修改的Linux或Windows系统。每个虚拟机都有独立的虚拟硬件——网卡、硬盘、图形适配器等。KVM有两个模块——处理器虚化模块与内存虚化模块。KVM具有以下功能:

A) 内存管理:

        KVM继承了Linux系统管理内存的诸多特性,比如,分配给虚拟使用的内存可以被交换至交换空间、能够使用大内存页以实现更好的性能,以及对NUMA的支持能够让虚拟机高效访问更大的内存空间等。

        KVM基于Intel的EPT(ExtendedPage Table)或AMD的RVI(Rapid Virtualization Indexing)技术可以支持更新的内存虚拟功能,这可以降低CPU的占用率,并提供较好的吞吐量。EPT (Extended Page Table),扩展页表 ,是一种地址翻译机制。用下面命令来查看 #cat   /proc/cpuinfo  |  grep  ept

        此外,KVM还借助于KSM(Kernel Same-pageMerging)这个内核特性实现了内存页面共享。这些共享页面通常是通用库或其他相同、高使用率的数据。KSM通过扫描每个虚拟机的内存查找各虚拟机间相同的内存页,并将这些内存页合并为一个被各相关虚拟机共享的单独页面。在某虚拟机试图修改此页面中的数据时,KSM会重新为其提供一个新的页面副本。实践中,运行于同一台物理主机上的具有相同GuestOS的虚拟机之间出现相同内存页面的概率是很的,比如共享库、内核或其它内存对象等都有可能表现为相同的内存页,因此,KSM技术可以降低内存占用进而提高整体性能。

        NPT (Nested Page Tables),嵌入页表,是另一种地址翻译机制

B)存储

C) 设备驱动程序

D) 性能和可伸缩性

5)KVM所支持的功能包括:

支持CPU 和 memory 超分(Overcommit)

支持半虚拟化I/O (virtio)

支持热插拔 (cpu,块设备、网络设备等)

支持对称多处理(Symmetric Multi-Processing,缩写为 SMP )

支持实时迁移(Live Migration)

支持 PCI 设备直接分配和 单根I/O 虚拟化 (SR-IOV)

支持 内核同页合并 (KSM )

     支持 NUMA (Non-Uniform Memory Access,非一致存储访问结构 )

6)KVM工具集合:

libvirt:操作和管理KVM虚机的虚拟化 API,使用 C 语言编写,可以由 Python,Ruby, Perl, PHP, Java 等语言调用。可以操作包括 KVM,vmware,XEN,Hyper-v, LXC 等 Hypervisor。

Virsh:基于 libvirt 的 命令行工具 (CLI)

Virt-Manager:基于 libvirt 的 GUI 工具

virt-v2v:虚机格式迁移工具

virt-* 工具:包括 Virt-install (创建KVM虚机的命令行工具), Virt-viewer (连接到虚机屏幕的工具),Virt-clone(虚机克隆工具),virt-top 等

sVirt:安全工具

1.3   CPU 服务器架构——SMP,MMP,NUMA 

从系统架构来看,目前的服务器大体可以分为三类:

1)多处理器结构 (SMP  Symmetric Multi-Processor 对称多处理器):

       所有的CPU共享全部资源,如总线,内存和I/O系统等,操作系统或管理数据库的复本只有一个,这种系统有一个最大的特点就是共享所有资源。多个CPU之间没有区别,平等地访问内存、外设、一个操作系统。SMP 服务器的主要问题,那就是它的扩展能力非常有限。实验证明, SMP 服务器 CPU 利用率最好的情况是 2 至 4 个 CPU 。

2)非一致存储访问结构 (NUMA  Non-Uniform Memory Access):

       它由多个 SMP 服务器通过一定的节点互联网络进行连接,协同工作,完成相同的任务,从用户的角度来看是一个服务器系统。其基本特征是由多个 SMP 服务器 ( 每个 SMP 服务器称节点 ) 通过节点互联网络连接而成,每个节点只访问自己的本地资源 ( 内存、存储等 ) ,是一种完全无共享 (Share Nothing) 结构。

       NUMA 服务器的基本特征是具有多个 CPU 模块,每个 CPU 模块由多个 CPU( 如 4 个 ) 组成,并且具有独立的本地内存、 I/O 槽口等。在一个物理服务器内可以支持上百个 CPU 。但 NUMA 技术同样有一定缺陷,由于访问远地内存的延时远远超过本地内存,因此当 CPU 数量增加时,系统性能无法线性增加。多用于数据库。

3)海量并行处理结构 (MPP  Massive Parallel Processing) :

       MPP 模式则是一种分布式存储器模式,能够将更多的处理器纳入一个系统的存储器。一个分布式存储器模式具有多个节点,每个节点都有自己的存储器,可以配置为SMP模式,也可以配置为非SMP模式。单个的节点相互连接起来就形成了一个总系统。MPP可以近似理解成一个SMP的横向扩展集群,MPP一般要依靠软件实现。

注:CMP,单芯片多处理器。


转载请注明出处,谢谢!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鬼刺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值