KVM虚拟化技术基础框架

简介: KVM虚拟化技术基础框架

KVM虚拟化技术

KVM简介

KVM(Kernel-based Virtual Machine,基于内核的虚拟机)是一种内建于Linux中的开源虚拟机啊技术。具体而言,KVM可帮助用户将Linux转变成虚拟机监控程序,使主机计算机能够运行多个隔离的虚拟环境,即虚拟客户机或虚拟机(VM)。

KVM是Linux的一部分,Linux2.6.20或者更新版本包括KVM。KVM于2006年首次公布,并在一年后合并到主流Linux内核版本中。由于KVM属于现有的Linux代码,因此它能够立即享受每一项新的Linux功能、修复和发展,无需进行额外工程。


KVM功能特性

1、内存管理

KVM从Linux继承了强大的内存管理功能。一个虚拟机的内存与任何其他的linux进程的内存一样进行存储,可以以大页面的形式进行交换以实现更高的性能,也可以以磁盘文件的形式进行共享。NUMA(Non-Uniform Memory Access,非一致存储访问结构)很好地解决了CPU资源地扩展问题,它可以把几十个甚至上百个CPU组合在一个服务器内,支持非一致性内存访问,针对多处理器的内存设计,允许虚拟机有效地访问大量内存。

KVM支持最新地给予硬件地内存虚拟化功能,支持Intel地扩展页表(EPT)和AMD地嵌套页表(NPT,也叫“快速虚拟机啊索引-RVI”),以实现更低的CPU利用率和更高的吞吐量。内存页面共享通过一项名为内核同页合并(KernelSame-pageMerging,KSM)的内核功能来支持。KSM扫描每个虚拟机的内存,如果虚拟机拥相同的内存页面,KSM将这些页面合并到一个在虚拟机之间共享的页面,仅存储一个副本。如果一个客户机尝试更改这个共享页面,它将得到自己的专用副本。

2、存储

KVM能够使用Linux支持的任何存储来存储虚拟机镜像,包括IDE、SCSI和SATA的本地磁盘,网络附加存储NAS(包括NFS和SAMBA/CIFS)或者支持iSCSI和光纤通道的SAN。多路径I/O可用于改进存储吞吐量和提供冗余。由于KVM是Linux内核的一部分,它可以利用所有领先存储供应商都支持的一种成熟且可靠的存储基础架构,它的存储堆栈在生产部署方面具有良好的记录。

KVM还支持全局文件系统(GFS2)等共享文件系统上的虚拟机镜像,以允许虚拟机镜像在多个宿主之间共享或使用逻辑卷共享。磁盘镜像支持按需分配,仅在虚拟机需要时分配存储空间,而不是提前分配整个存储空间,提高存储利用率。LVM的原生磁盘格式为QCOW2,支持快照,允许多级快照、压缩和加密。

3、设备驱动程序

KVM支持混合虚拟化,其中准虚拟化的驱动程序安装在客户机操作系统中,允许虚拟机使用优化的I/O接口而不使用模拟的设备,从而为网络和块设备提供高性能的I/O。KVM准虚拟化的驱动程序使用IBM和Redhat(红帽)联合Linux社区开发的VirtIO标准,它是一个与虚拟机管理程序独立的、构建设备驱动程序的接口,允许为多个虚拟机管理程序使用一组相同的设备驱动程序,能够实现更出色的虚拟机交互性。

4、性能和可伸缩性

KVM也继承了Linux的性能和可伸缩性.。KVM虚拟化性能在很多方面(如计算能力、网络带宽等)已经可以达到非虚拟化原生环境的95%以上的性能。KVM的扩展性也非常良好,客户机和宿主机都可以支持非常多的CPU数量和大量的内存。


KVM架构及相关组件

KVM本身不执行任何设备模拟,需要用户空间程序QEMU通过/dev/kvm接口设置一个虚拟机客户机的地址空间,想它向它提供模拟的I/O设备。并将它的视频显示映射回宿主机的显示屏。

1、KVM模块

KVM模块是KVM 虚拟机的核心部分。KVM仅支持硬件虚拟化。其主要功能是初始化CPU硬件,打开虚拟化模式,然后将虚拟客户机在虚拟机模式下,并对虚拟客户机的运行提供一定的支持。

以KVM在Intel的CPU上运行为例,在被内核加载的时候,KVM模块会先初始化内部的数据结构;之后KVM模块检测系统当前的CPU,然后打开CPU控制寄存器CR4中的虚拟化模式开关,并通过执行VMXON指令将宿主操作系统至于虚拟化模式的根模式;最后KVM模块创建特殊设备文件/dev/kvm,并等待来自用户空间的命令。接下来虚拟机的创建和运行是一个用户空间程序(QEMU)和KVM模块互相配合的过程。

2、QEMU

QEMU是一个开源的虚拟机纯软件的实现,性能低下。但是其优点是支持本身编译运行的平台上就可以实现虚拟机的功能,甚至虚拟机可以与宿主机不同架构。QEMU代码中有着整套虚拟机的实现,包括处理器、内存虚拟化以及虚拟设备模拟(比如网卡、显卡、存储控制器及硬盘等)。

3、Libvirt

Libvirt是KVM的管理工具。Libvirt除了能管理KVM这种Hypervisor,还能管理Xen,Virtualbox等,OpenStack底层也使用Libvirt。

Libvirt包含:后台Daemon程序libvirted、API库和命令行工具virsh。

libvirted:服务程序,接收和处理API请求;

API库:使得其他人可以开发给予Libvirt的高级工具,比如virt-manager,是图形化的KVM管理工具;

virsh:是人们经常要用的KVM命令行工具。


KVM的网络模型概述

KVM虚拟化使用一种称之为虚拟交换的技术实现虚拟机的网络互联,虚拟交换是运行在宿主机的一个软件结构,虚拟主机通过这个虚拟交换进行直连,实现与外界通信。虚拟交换可以运行在NAT模式、路由模式等。

目前,常见的是桥接模式。在虚拟化环境中,目前见过最多的就是桥接模式。现在流行的Docker一般在基于NAT模式实现的。

相关文章
|
存储 缓存 安全
数据中心(DC)网络虚拟化框架
[RFC7364]问题陈述:网络虚拟化overlay 定义了使用overlay网络构建大型多租户数据中心网络的基本原理。这些大型数据中心经常使用计算、存储和网络虚拟化来支持大量的通信域和终端系统。
685 0
数据中心(DC)网络虚拟化框架
|
虚拟化 云计算
《私有云计算整合、虚拟化和面向服务的基础设施》一1.1面向服务的基础设施框架层次展现
本节书摘来自华章出版社《私有云计算整合、虚拟化和面向服务的基础设施》一 书中的第1章,第1.1节,作者:(美)Stephen R.Smoot Nam K.Tan,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1002 0
|
机器学习/深度学习 Linux KVM
Debian11安装KVM虚拟化并安装Centos
grep --color --perl-regexp 'vmx | svm' /proc/cpuinfo 首先检查其是否支持虚拟化. 分别用以下条命令查看
1118 0
Debian11安装KVM虚拟化并安装Centos
|
机器学习/深度学习 存储 Linux
CentOS 7 部署 KVM 虚拟化
CentOS 7 部署 KVM 虚拟化
632 0
|
安全 IDE KVM
[ 云计算相关 ] KVM虚拟化平台windows虚拟机迁移到openstack虚拟化平台(KVM虚拟化环境中Windows虚拟机安装Virtio驱动程序)
KVM虚拟化平台windows虚拟机迁移到openstack虚拟化平台(KVM虚拟化环境中Windows虚拟机安装Virtio驱动程序) 因为这也不是我的本职工作,只是这次恰巧碰到了,帮着解决了以下,我就没深究原理了,问我原理可能我也不知道,只是这个操作步骤吧,亲测有效。
459 0
[ 云计算相关 ] KVM虚拟化平台windows虚拟机迁移到openstack虚拟化平台(KVM虚拟化环境中Windows虚拟机安装Virtio驱动程序)
|
11月前
|
存储 监控 网络安全
【KVM虚拟化】· 虚拟机的冷迁移和热迁移
【KVM虚拟化】· 虚拟机的冷迁移和热迁移
854 0
|
11月前
|
KVM 虚拟化 Windows
【KVM虚拟化】· KVM中的网络
【KVM虚拟化】· KVM中的网络
196 0
|
11月前
|
存储 KVM 文件存储
【KVM虚拟化】· 存储池、存储卷
【KVM虚拟化】· 存储池、存储卷
382 0
|
11月前
|
存储 监控 安全
【KVM虚拟化】· virsh文件管理
【KVM虚拟化】· virsh文件管理
319 0
|
11月前
|
XML Shell API
【KVM虚拟化】· virsh管理命令
【KVM虚拟化】· virsh管理命令
246 0