总结自用
目录1.虚拟化技术概述
虚拟化[Virtualization]技术最早出现在20世纪60年代的IBM大型机系统,在70年代的System 370系列中逐渐流行起来,这些机器通过一种叫虚拟机监控器[Virtual Machine Monitor,VMM]的程序在物理硬件之上生成许多可以运行独立操作系统软件的虚拟机[Virtual Machine]实例。随着近年多核系统、集群、网格甚至云计算的广泛部署,虚拟化技术在商业应用上的优势日益体现,不仅降低了IT成本,而且还增强了系统安全性和可靠性,虚拟化的概念也逐渐深入到人们日常的工作与生活中。
虚拟化是一个广义的术语,对于不同的人来说可能意味着不同的东西,这要取决他们所处的环境。在计算机科学领域中,虚拟化代表着对计算资源的抽象,而不仅仅局限于虚拟机的概念。例如对物理内存的抽象,产生了虚拟内存技术,使得应用程序认为其自身拥有连续可用的地址空间[Address Space],而实际上,应用程序的代码和数据可能是被分隔成多个碎片页或段,甚至被交换到磁盘、闪存等外部存储器上,即使物理内存不足,应用程序也能顺利执行。
2.为什么要用虚拟化?
虚拟化是一种技术,它允许单个物理机器(如服务器、计算机或存储设备)被分割成多个独立的虚拟机,每个虚拟机都可以运行不同的操作系统和应用程序,就像它们是独立的物理设备一样。虚拟化带来了许多好处,包括但不限于以下几点:
- 1.资源利用率提高:通过在单个物理服务器上运行多个虚拟机,可以更高效地利用硬件资源,减少服务器的空闲时间。
- 2.成本节约:减少对物理硬件的需求,从而降低购买和维护成本。
- 3.灵活性和可扩展性:虚拟机可以根据需要快速创建、删除或重新配置,使得资源分配更加灵活。
- 4.隔离性:每个虚拟机都是独立的环境,一个虚拟机的故障或安全问题不会直接影响到其他虚拟机。
- 5.易于管理和维护:虚拟机可以像管理文件一样进行备份、复制和迁移,简化了系统管理。
- 6.提高安全性:可以在虚拟机中测试和隔离不受信任的应用程序,减少对主系统的风险。
- 7.灾难恢复和业务连续性:虚拟机可以快速备份和迁移,有助于在发生故障时快速恢复服务。
- 8.开发和测试环境:可以快速创建一致的开发和测试环境,无需担心影响到生产环境。
- 9.环境一致性:确保开发、测试和生产环境之间的一致性,减少因环境差异导致的问题。
- 10.云兼容性:虚拟化技术与云计算紧密结合,使得应用程序和资源可以更容易地迁移到云平台。
- 11.能源效率:通过减少物理服务器的数量,可以降低数据中心的能源消耗。
虚拟化技术的应用非常广泛,从服务器虚拟化、桌面虚拟化到网络虚拟化等,它为现代 IT 基础设施提供了灵活性和效率。
3.主流虚拟化方案
3.1虚拟化技术主要分类
- 平台虚拟化(platform virtualization):针对计算机和操作系统的虚拟化。
- 资源虚拟化(resource virtualization):针对特定的系统资源的虚拟化,比如内存、存储、网络资源等。
- 应用程序虚拟化(application virtualization):包括仿真、模拟、解释技术等。
3.2平台虚拟化技术分类
我们通常所说的虚拟化主要是指平台虚拟化技术,通过使用控制程序(Control Program,也被称为 VirtualMachine Monitor 或 Hypervisor),隐藏特定计算平台的实际物理特性,为用户提供抽象的、统一的、模拟的计算环境(称为虚拟机)。虚拟机中运行的操作系统被称为客户机操作系统(GuestOs),运行虚拟机监控器的操作系统被称为主机操作系统(Host OS),当然某些虚拟机监控器可以脱离操作系统直接运行在硬件之上(如VMWARE的ESX产品)。运行虚拟机的真实系统我们称之为主机系统。
- 操作系统级虚拟化(operating system level virtualization)
在传统操作系统中,所有用户的进程本质上是在同一个操作系统的实例中运行,因此内核或应用程序的缺陷可能影响到其它进程。操作系统级虚拟化是一种在服务器操作系统中使用的轻量级的虚拟化技术,内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程,不同实例中的进程完全不了解对方的存在。
比较著名的有 Solaris Container,FreeBsD Jail 和 OpenVz 等。
比如OPENVZ:这个平台是最便宜的VPS平台,在各个ps商哪里都是价格最低的。OPENVZ本身运行在linux之上,它通过自己的虚拟化技术把一个服务器虚拟化成多个可以分别安装操作系统的实例,这样的每个实体就是一个VPS,从客户的角度来看这就是一个虚拟的服务器,可以等同看做一台独立的服务器。
OPENVZ虚拟化出来的VPS只能安装linux操作系统,不能安装windows系统,比如Centos、Fedora、Gentoo、Debian等。不能安装windows操作系统是openvz的第一个缺点,需要使用windows平台的用户不能使用OPENVZVPS。
OPENVZ的第二个缺点是OPENVZ不是完全的虚拟化,每个VPS账户共用母机内核,不能单独修改内核。好在绝大多少用户根本不需要修改内核,所以这个缺点对多数人可以忽略不计。而这一点也正是openvz的优点,这一共用内核特性使得openvz的效率最高,超过KVM、Xen、VMware等平台。在不超售的情况下,openvz是最快速效率最高的VPS平台。
-
部分虚拟化(partial virtualization)
VMM 只模拟部分底层硬件,因此客户机操作系统不做修改是无法在虚拟机中运行的,其它程序可能也需要进行修改。在历史上,部分虚拟化是通往全虚拟化道路上的重要里程碑,最早出现在第一代的分时系统 CTSS 和 IBM M44/44X 实验性的分页系统中。 -
全虚拟化(full virtualization)
全虚拟化是指虚拟机模拟了完整的底层硬件,包括处理器、物理内存、时钟、外设等,使得为原始硬件设计的操作系统或其它系统软件完全不做任何修改就可以在虚拟机中运行。
操作系统与真实硬件之间的交互可以看成是通过一个预先规定的硬件接口进行的。全虚拟化 VMM 以完整模拟硬件的方式提供全部接口(同时还必须模拟特权指令的执行过程)。举例而言,x86 体系结构中,对于操作系统切换进程页表的操作,真实硬件通过提供一个特权CR3寄存器来实现该接口,操作系统只需执行"mov pgtable,%%cr3"汇编指令即可。
全虚拟化 VMM 必须完整地模拟该接口执行的全过程。如果硬件不提供虚拟化的特殊支持,那么这个模拟过程将会十分复杂:一般而言,VMM 必须运行在最高优先级来完全控制主机系统,而Guest OS需要降级运行,从而不能执行特权操作。当 Guest OS执行前面的特权汇编指令时,主机系统产生异常(GeneralProtection Exception),执行控制权重新从 Guest OS 转到 VMM 手中。VMM 事先分配一个变量作为影子CR3 寄存器给 Guest OS,将 pgtable 代表的客户机物理地址(Guest Physical Address)填入影子 CR3 寄存器,然后VMM 还需要 pgtable 翻译成主机物理地址(Host Physical Address)并填入物理 CR3 寄存器,最后返回到 Guest OS中。随后 VMM 还将处理复杂的 Guest OS 缺页异常(Page Fault)。
比较著名的全虚拟化VMM 有 Microsoft Virtual PC、VMware Workstation、Sun Virtual Box、Parallels Desktop for Mac和QEMU。
-
超虚拟化(Paravirtualization)
这是一种修改 Guest OS 部分访问特权状态的代码以便直接与 VMM 交互的技术。在超虚拟化虚拟机中,部分硬件接口以软件的形式提供给客户机操作系统,这可以通过 Hvpercall (VMM 提供给 Guest OS 的直接调用,与系统调用类似)的方式来提供。例如,Guest OS把切换页表的代码修改为调用Hypercall来直接完成修改影子 CR3 寄存器和翻译地址的工作。由于不需要产生额外的异常和模拟部分硬件执行流程,超虚拟化可以大幅度提高性能,比较著名的 VMM 有 Denali、Xen。 -
硬件辅助虚拟化(Hardware-assisted virtualization)
硬件辅助虚拟化是指借助硬件(主要是主机处理器)的支持来实现高效的全虚拟化。例如有了Intel-VT 技术的支持,Guest Os 和VMM 的执行环境自动地完全隔离开来,Guest Os 有自己的""套寄存器”,可以直接运行在最高级别。因此在上面的例子中,Guest Os 能够执行修改页表的汇编指令。Intel-VT 和 AMD-V 是目前x86 体系结构上可用的两种硬件辅助虚拟化技术。
这种分类并不是绝对的,一个优秀的虚拟化软件往往融合了多项技术。例如 VMware Workstation 是一个著名的全虚拟化的 VMM,但是它使用了一种被称为动态二进制翻译的技术把对特权状态的访问转换成对影子状态的操作,从而避免了低效的 Trap·And-Emulate 的处理方式,这与超虚拟化相似,只不过超虚拟化是静态地修改程序代码。对于超虚拟化而言,如果能利用硬件特性,那么虚拟机的管理将会大大简化,同时还能保持较高的性能。
3.3KVM虚拟化技术架构
3.4KVM架构解析
从rhel6开始使用,红帽公司直接把KVM的模块做成了内核的一部分。
xen用在rhel6之前的企业版中默认内核不支持,需要重新安装带xen功能的内核。
KVM 针对运行在 x86 硬件上的、驻留在内核中的虚拟化基础结构。KVM 是第一个成为原生 Linux 内核(2.6.20)的一部分的 hypervisor,它是由 Avi Kivity 开发和维护的,现在归 Red Hat 所有。
这个 hypervisor 提供 x86 虚拟化,同时拥有到 PowerPC® 和IA64 的通道。另外,KVM 最近还添加了对对称多处理(SMP)主机(和来宾)的支持,并且支持企业级特性,比如活动迁移(允许来宾操作系统在物理服务器之间迁移)。
KVM 是作为内核模块实现的,因此 Linux 只要加载该模块就会成为一个hypervisor。KVM 为支持 hypervisor 指令的硬件平台提供完整的虚拟化(比如 Intel® Virtualization Technology [intel V 或 AMD Virtualization[AMD-V]产品)。KVM 还支持准虚拟化来宾操作系统,包括 Linux 和 Windows®。
这种技术由两个组件实现。第一个是可加载的 KVM 模块,当在 Linux 内核安装该模块之后,它就可以管理虚拟化硬件,并通过/proc 文件系统公开其功能。第二个组件用于 PC 平台模拟,它是由修改版 QEMU 提供的。QEMU作为用户空间进程执行,并且在来宾操作系统请求方面与内核协调。
当新的操作系统在 KVM 上启动时(通过一个称为 KVM 的实用程序),它就成为宿主操作系统的一个进程,因此就可以像其他进程一样调度它。但与传统的 Linux 进程不一样,来宾操作系统被 hypervisor 标识为处于"来宾" 模式(独立于内核和用户模式)。
每个来宾操作系统都是通过 /dev/KVM 设备映射的,它们拥有自己的虚拟地址空间,该空间映射到主机内核的物理地址空间。如前所述,KVM 使用底层硬件的虚拟化支持来提供完整的(原生)虚拟化。I/0 请求通过主机内核映射到在主机上(hypervisor)执行的 QEMU 进程。
KVM 在 Linux 环境中以主机的方式运行,不过只要底层硬件虚拟化支持,它就能够支持大量的来宾操作系统.
3.5 KVM软件安装
- 查看cpu是否支持VT技术
cat /proc/cpuinfo|grep -E 'vmx|svm'
- centos7安装软件
# uname -r
3.10.0-862.el7.x86_64
# yum install *qemu* *virt* *librbd1-devel* -y
# 在安装虚拟机出错的情况下,一般是操作系统的版本问题
yum upgrade
qemu-kvm:主包
libvirt:API接口
virt-manager:图形管理程序
在所谓的kvm技术中,应用到的其实有2个东西:qemu+kvm
kvm负责cpu虚拟化+内存虚拟化,实现了cpu和内存虚拟化,但kvm不能模拟其他设备
qemu是模拟IO设备(网卡、磁盘),kvm加上qemu之后就能实现真正意义上的服务器虚拟化
因为用到了上面两个东西,所以一般称之为qemu-kvm
libvirt则是调用kvm虚拟化技术的接口用于管理的,用libvirt管理方便
- 启动服务
systemctl status libvirtd
- 查看kvm模块加载
# lsmod|grep kvm
kvm_intel 174841 122
kvm 578518 1 kvm_intel
irqbypass 13503 29 kvm
标签:八股,VMM,常问,操作系统,虚拟化,虚拟机,KVM,硬件
From: https://www.cnblogs.com/even160941/p/18393188