IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 关于KVM -> 正文阅读

[系统运维]关于KVM

一 前言

1.1 什么是虚拟化?

在计算机技术中,虚拟化(技术)或虚拟技术(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分区、组合为一个或多个电脑配置环境。

由此,打破实体结构间的不可切割的障碍,使用户可以比原本的配置更好的方式来应用这些电脑硬件资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理配置所限制。

一般所指的虚拟化资源包括计算能力和数据存储。

由于目前信息技术领域的很多企业都曾在宣传中将该企业的某种技术称为虚拟化技术,这些技术涵盖的范围可以从Java虚拟机技术到系统管理软件,这就使得准确的界定虚拟技术变得困难。因此各种相关学术论文在谈到虚拟技术时常常提到的便是如前面所提到的那个不严格的定义。

1.2 为什么要用虚拟化

同一台物理机运行多个不同版本应用软件

硬件依赖性较低和便于数据迁移

1.3 虚拟化技术的优势

1. 降低运营成本

服务器虚拟化降低了IT基础设施的运营成本,令系统管理员摆脱了繁重的物理服务器、OS、中间件及兼容性的管理工作,减少人工干预频率,使管理更加强大、便捷。

2. 提高应用兼容性

服务器虚拟化提供的封装性和隔离性使大量应用独立运行于各种环境中,管理人员不需频繁根据底层环境调整应用,只需构建一个应用版本并将其发布到虚拟化后的不同类型平台上即可。

3. 加速应用部署

采用服务器虚拟化技术只需输入激活配置参数、拷贝虚拟机、启动虚拟机、激活虚拟机即可完成部署,大大缩短了部署时间,免除人工干预,降低了部署成本。

4. 提高服务可用性

用户可以方便地备份虚拟机,在进行虚拟机动态迁移后,可以方便的恢复备份,或者在其他物理机上运行备份,大大提高了服务的可用性。

5. 提升资源利用率

通过服务器虚拟化的整合,提高了CPU、内存、存储、网络等设备的利用率,同时保证原有服务的可用性,使其安全性及性能不受影响。

6. 动态调度资源

在服务器虚拟化技术中,数据中心从传统的单一服务器变成了统一的资源池,用户可以即时地调整虚拟机资源,同时数据中心管理程序和数据中心管理员可以灵活根据虚拟机内部资源使用情况灵活分配调整给虚拟机的资源。

7. 降低能源消耗

通过减少运行的物理服务器数量,减少CPU以外各单元的耗电量,达到节能减排的目的。

1.4 KVM简介

KVM,基于内核的虚拟机(英语:Kernel-based Virtual Machine,缩写为 KVM),是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hypervisor。KVM在2007年2月被导入Linux 2.6.20核心中,以可加载核心模块的方式被移植到FreeBSD及illumos上。

KVM在具备Intel VT或AMD-V功能的x86平台上运行。它也被移植到S/390,PowerPC与IA-64平台上。在Linux内核3.9版中,加入ARM架构的支持。

KVM目前由Red Hat等厂商开发,对CentOS/Fedora/RHEL等Red Hat系发行版支持极佳。

1.5 关于KVM

KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机)。

是x86架构且硬件支持虚拟化技术(如 intel VT 或 AMD-V)的Linux全虚拟化解决方案。

它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)。

KVM还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面。

KVM能在不改变linux或windows镜像的情况下同时运行多个虚拟机,(它的意思是多个虚拟机使用同一镜像)并为每一个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器……)同时KVM还能够使用ksm技术帮助宿主服务器节约内存。

在主流的Linux内核,如2.6.20以上的内核均已包含了KVM核心。

1.6 关于Virtual Machine Manager

在电脑运算中,红帽公司的Virtual Machine Manager是一个虚拟机管理员,可以让用户管理多个虚拟机。

基于内核的虚拟机libvirt与Virtual Machine Manager。?

Virtual Machine Manager可以让用户:

创建、编辑、引导或停止虚拟机。

查看并控制每个虚拟机的控制台。

查看每部虚拟机的性能以及使用率。

查看每部正在运行中的虚拟机以及主控端的即时性能及使用率信息。

不论是在本机或远程,皆可使用KVM、Xen、QEMU。

1.7 其他虚拟化软件

①?Xen

Xen是一个开放源代码虚拟机监视器,由XenProject开发。它打算在单个计算机上运行多达128个有完全功能的操作系统。

在旧(无虚拟硬件)的处理器上执行Xen,操作系统必须进行显式地修改(“移植”)以在Xen上运行(但是提供对用户应用的兼容性)。这使得Xen无需特殊硬件支持,就能达到高性能的虚拟化。

② QEMU

QEMU是一套由Fabrice Bellard所编写的模拟处理器的自由软件。它与Bochs,PearPC近似,但其具有某些后两者所不具备的特性,如高速度及跨平台的特性。经由KVM(早期为kqemu加速器,现在kqemu已被KVM取代)这个开源的加速器,QEMU能模拟至接近真实电脑的速度。

QEMU有两种主要运作模式:

1?User mode模拟模式,亦即是用户模式。

QEMU能引导那些为不同中央处理器编译的Linux程序。而Wine及Dosemu是其主要目标。

2 System mode模拟模式,亦即是系统模式。

QEMU能模拟整个电脑系统,包括中央处理器及其他周边设备。它使得为系统源代码进行测试及除错工作变得容易。其亦能用来在一部主机上模拟数部不同虚拟电脑。

KVM架构

KVM原理介绍

KVM是一个非常精巧的设计方式,它只是Linux的一个内核模块,但是这个内核模块一旦装载立即可以成为一个hypervisor,如果不装载就还是一个正常的Linux系统。有了KVM模块以后Linux就有了三种运行模式:

Guest Mode:来宾模式,此模式只负责非I/O类操作或者说是非特权指令操作,如算术运行,由于是虚拟而非模拟,底层架构一样,所以此时Guest OS可以直接通过KVM Driver直接运行到物理CPU的ring 3上执行。如果是模拟那么此时就需要经过User Mode转到CPU执行。但一旦需要跟I/O打交道或需要运行特权指令,就需要Guest OS中的进程进行内部系统调用到达Geust OS的内核空间,然后经过User Mode到Kernel Mode这么一个过程。

User Mode:用户模式,此模式就代表来宾模式执行I/O类操作请求(站在虚拟机角度),因为QEMU就在用户模式运行(QEMU负责模拟I/O设备提供给Guest OS使用)。

Kernel Mode:内核模式,此模式是真正可以操作硬件的,当Guest OS执行I/O类操作或特权指令操作时需要向用户模式提交请求,然后由用户模式再次发起硬件操作请求给内核模式从而真正操作硬件。

KVM组件

在一个装载了KVM模块的Linux系统上,其运行的KVM虚拟机表现为一个个线程,Linux系统可以正常管理。KVM核心就两个组件:/dev/kvm和QEMU。

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

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

1)/dev/kvm

/dev/kvm是一个字符设备,工作于Hypervisor。在用户空间,可通过这个接口(调用ioctl系统调用)管理虚拟机或通过这个接口编程序用来管理虚拟机,实现VM创建、删除、分配内存、读写VCPU的寄存器、想VCPU注入中断、运行VCPU等功能。如virsh或qemu-kvm这些工具都是都可以用来管理KVM虚拟机。

2)QEMU

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

为了简化开发和代码重用,KVM在QEMU的基础上进行了修改。虚拟机运行期间,QEMU 会通过KVM模块提供的系统调用进入内核,由KVM模块负责将虚拟机置于处理器的特殊模式运行。遇到虚拟机进行输入输出操作,KVM模块会从上次的系统调用出口处返回 QEMU,由QEMU来负责解析和模拟这些设备。

从QEMU角度来看,也可以说QEMU使用了KVM模块的虚拟化功能,为自己的虚拟机提供硬件虚拟化的加速,从而极大地提高了虚拟机的性能。除此之外,虚拟机的配置和创 建,虚拟机运行依赖的虚拟设备,虚拟机运行时的用户操作环境和交互,以及一些针对虚拟机的特殊技术(诸如动态迁移),都是由QEMU自己实现的。

小结?

KVM的特性和局限性

KVM特性支持

一、内存管理

KVM从Linux继承了强大的内存管理功能,一个虚拟机的内存与任何其他Linux进程的内存一样进行存储,可以以大页面的形式进行交换以实现更高的性能,

KVM支持最新的基于硬件的内存虚拟化功能,支持使用Intel EPT或AMD RVI技术来完成内存地址映射,GVAàHPA,以实现更低的CPU利用率和更高的吞吐量。

支持KSM(Kernel Same-page Merging,相同内存页合并),比如在KVM上同时运行多个Linux相同版本的主机,它们都会载入一些相同的动态库,由于是只读的,所以可以进行合并。KSM通过扫描每个虚拟机的内存,查找个虚拟机间相同的内存页,并将这些内存页合并成一个各相关虚拟机能够共享的独立内存页面,从而实现了内存页面共享。节约内存使用,使得我们的KVM可以过载使用内存,虚拟机内存分配可以大于物理机内存。如果这些合并页中有某个虚拟机需要修改,那么此时KVM就会进行copy on write机制给它重新生成一个副本,它只能修改自己的而不能修改共享的。

二、硬件支持

由于KVM出现的较晚,充分利用了先进技术,所以KVM运行的物理机必须要支持硬件辅助虚拟化且只能是X64架构。

由于KVM是寄宿在Linux内核之上,所以支持的硬件取决于Linux内核支持的硬件。

三、存储

KVM可以支持任何Linux内核支持的存储设备,如:

本地存储:IDE、SCSI、SAN、SATA、SAS、PCI-E等。

网络附加存储:NAS、SAMBA等

存储区域网络:SAN,ISCSI。

分布式存储:GlustFS

KVM的原生磁盘格式为QCOW2,它支持快照,允许多级快照、压缩和加密。

四、实时迁移

各个Hypervisor利用共享存储实现实时虚拟机迁移,并且虚拟机运行的服务无中断。但是KVM实现实时迁移有一些前提条件,如:

1.镜像文件必须放在共享存储。

2.共享存储还必须放在同一个位置,否则配置文件会找不到。

3.各个Hypervisor必须要兼容。

4.CPU必须拥有相同特性,最好同款CPU。

5.两台Hypervisor的时间必须要一致。

6.两台Hypervisor必须有一样的网络配置。

五、支持的Guest OS

像XEN那种半虚拟化,由于要修改系统内核才能运行,所以不是每个系统都支持,比如Windows系统。但KVM属于全虚拟化技术,所以支持大多数系统,如:Linux、Windows、OpenBSD、FreeBSD、OpenSolaris等。另外,运行在KVM上的Windows还通过了微软的虚拟化认证,也就是说,如果你在KVM上面运行正版Windows系统,如果出现异常,微软官方是承认可提供技术支持的。当然这也是红帽跟微软的勾当而已。

六、设备驱动

还是那句话,Linux内核支持的驱动,KVM都支持。另外,KVM是一个混合类型的VMM,因为KVM能够以模拟(QEMU)的方式支持完全虚拟机,又能够支持在Guest OS中安装驱动实现IO的半虚拟化,也就是两阶段IO,前半部分IO在Guest OS上,后半部分在宿主机上。

现在在KVM中常用的IO半虚拟化组件叫virtio,由IBM和RedHat联合研发,是一个比较通用的半虚拟化IO组件。目前,基于virtio有virtio-blk支持块存储半虚拟化、virtio-net支持网络半虚拟化、virtio-pci支持pci设备虚拟化、virtio-console支持控制台的虚拟化、virtio-ballon支持动态内存的扩展和收缩。而virtio在Linux 2.6.25内核已经收录,只要编译内核时选择了virtio模块就可以,但是如果是微软的系统那么还需要去RedHat官方下载对应的virtio程序才可以支持。

七、性能和可伸缩性

KVM也继承了Linux的性能和可伸缩性。KVM虚拟化性能在很多方面(如计算能力、网络带宽等)已经可以达到非虚拟化原生环境的95%以上的性能。KVM的扩展性也非常良好,客户机和宿主机都可以支持非常多的CPU数量和非常大量的内存。例如,Redhat官方文档就介绍过,RHEL 6.x系统中的一个KVM客户机可以支持160个虚拟CPU和多达2TB的内存,KVM宿主机支持4096个CPU核心和多达64TB的内存。

KVM局限性

一、CPU过载使用

KVM允许过载使用CPU,但是过载能力有限,过载使用不但不会提升性能反而会降低性能。一般所有虚拟CPU数量加在一起不要大于物理CPU核心数,一旦超过物理CPU数量依然需要调度。

二、虚拟化时间需要依赖外部时钟才能实现精确计时

Linux系统有个特性,它有两套时钟,一套是硬件时钟、另一套是系统启动时从硬件读取的时间称为系统时间。当系统一旦启动后,系统时间就开始自己记时了,根据CPU震荡频率来计时,比如是一个2G赫兹的CPU,那么系统就认为1s中震荡2G个时钟周期,它就认为时间过1s,计时非常精确。但是很遗憾的是,一旦我们做了虚拟化,就意味着这颗CPU未必就是供这一个虚拟机所使用的,比如2G赫兹的CPU,这个虚拟机只得到了1G赫兹,那么此虚拟化还是以2G赫兹为1s计时,就会比正常时间整整慢一半。所以任何虚拟机的时钟都不会精确,包括vmware workstations(vmware提供的vmware tools工具就是实现把虚拟机时间一直跟系统时间同步),一般所有虚拟化都需要提供一个时钟服务器,一直同步这个比较精确的时间。

三、MAC地址

KVM的MAC地址分配机制跟vmare一样,前24位固定,后24后随机。当虚拟机量特别大时,可能会出现MAC地址冲突。

四、性能影响

对于CPU MMU来讲,在完全虚拟化模式下,性能大概有10%的损耗;如果支持EPT技术以及硬件辅助虚拟化技术,性能损耗大概在5%左右。

对于网络IO在完全虚拟化模式下,只相当于物理硬件性能的60%左右;半虚拟化模式下75%;透传模式下95%。

对于磁盘IO如果使用模拟的方式,只相当于物理硬件性能的40%左右;如果使用半虚拟化性能在85%左右,所以磁盘IO是最需要半虚拟化的;如果是透传大概在95%左右。

对于显卡设备模拟,相当于物理硬件设备的50%左右;然后半虚拟化是不支持的。

对于时间计时在完全虚拟化模式下,是不可能精确;在半虚拟化模式下,可以做到精确,因为它有一个特殊模块来完成计时辅助。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-17 15:47:33  更:2021-08-17 15:49:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 9:23:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码