虚拟化技术之KVM
一、前置知识
1.计算机构成
- cpu
- RAM
- 各种资源
显卡
光驱
键盘
等外设
2.cpu
3.上下文切换
context switching
4.进程
进程是程序运行的一次实例,进程是资源分配的最小单位
pid
进程描述符
内存
io等
5.线程
线程是CPU调度的最小单位
6.进程vs线程
- 做个简单的比喻:进程=火车,线程=车厢
- 线程在进程下行进(单纯的车厢无法运行)
- 一个进程可以包含多个线程(一辆火车可以有多个车厢)
- 不同进程间数据很难共享(一辆火车上的乘客很难换到另外一辆火车,比如站点换乘)
- 同一进程下不同线程间数据很易共享(A车厢换到B车厢很容易)
- 进程要比线程消耗更多的计算机资源(采用多列火车相比多个车厢更耗资源)
- 进程间不会相互影响,一个线程挂掉将导致整个进程挂掉(一列火车不会影响到另外一列火车,但是如果一列火车上中间的一节车厢着火了,将影响到所有车厢)
- 进程可以拓展到多机,进程最多适合多核(不同火车可以开在多个轨道上,同一火车的车厢不能在行进的不同的轨道上)
- 进程使用的内存地址可以上锁,即一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。(比如火车上的洗手间)-“互斥锁”
- 进程使用的内存地址可以限定使用量(比如火车上的餐厅,最多只允许多少人进入,如果满了需要在门口等,等有人出来了才能进去)-“信号量”
7.用户空间
User space 是用户程序的运行空间。
8.内核空间
Kernel space 是 Linux 内核的运行空间
top
us
CPU 消耗在 User space 的时间百分比
sy
消耗在 Kernel space 的时间百分比
ni
niceness 的缩写,CPU 消耗在 nice 进程(低优先级)的时间百分比
id
idle 的缩写,CPU 消耗在闲置进程的时间百分比,这个值越低,表示 CPU 越忙
wa
wait 的缩写,CPU 等待外部 I/O 的时间百分比,这段时间 CPU 不能干其他事,但是也没有执行运算,这个值太高就说明外部设备有问题
hi
hardware interrupt 的缩写,CPU 响应硬件中断请求的时间百分比
si
software interrupt 的缩写,CPU 响应软件中断请求的时间百分比
st
stole time 的缩写,该项指标只对虚拟机有效,表示分配给当前虚拟机的 CPU 时间之中,被同一台物理机上的其他虚拟机偷走的时间百分比
time命令:查看命令运行时间
real:程序从开始运行到结束的全部时间,这是用户能感知到的时间,包括 CPU 切换去执行其他任务的时间。
user:程序在 User space 执行的时间
sys:程序在 Kernel space 执行的时间
进程CPU时间=user+sys
在多cpu情况,可能出现user+sys>real
9.linux体系结构
10.进程运行状态
二、虚拟化
1.虚拟化技术定义
虚拟化技术(Virtualization)是一种资源管理(优化)技术,将计算机的各种物理资源(e.g. CPU、内存以及磁盘空间、网络适配器等 I/O 设备)予以抽象、转换,然后呈现出来的一个可供分割并任意组合为一个或多个(虚拟)计算机的配置环境。
2.虚拟化技术分类
根据对象类型不同
- 平台虚拟化(Platform Virtualization)
针对计算机和操作系统的虚拟化 - 资源虚拟化(Resource Virtualization)
针对特定的系统资源的虚拟化,如内存、存储、网络资源等 - 应用程序虚拟化(Application Virtualization)
包括仿真、模拟、解释技术等,如 Java 虚拟机(JVM)
硬件&软件虚拟化
3.虚拟化技术VMM
Virtual Machine Monitor,虚拟机监视器,又称Hypervisor
虚拟化系统结构的三个基本条件
- 资源控制(Resource Control)。控制程序必须能够管理所有的系统资源。
- 等价性(Equivalence)。在控制程序管理下运行的程序(包括操作系统),除时序和资源可用性之外的行为应该与没有控制程序时的完全一致,且预先编写的特权指令可以自由地执行。
- 效率性(Efficiency)。绝大多数的客户机指令应该由主机硬件直接执行而无需控制程序的参与。
4.虚拟化技术历史发展
4.1 hypervisor两种类型
-
type2
VMM 运行在传统的操作系统上,就像其他计算机程序那样运行。
- 特点
VMM 作为应用程序运行在主操作系统环境内
运行效率一般较类型 I 低 - 实现案例
VMware 5.5 以前版本
Xen 3.0 以前版本
Virtual PC 2004
- 特点
- type1
这些虚拟机管理程序直接运行在宿主机的硬件上来控制硬件和管理客户机操作系统- 特点
需要硬件支持
VMM 作为主操作系统
运行效率高
- 实现案例:
VMware 5.5 及以后版本
workstation
esxi 基于linux操作系统
Xen 3.0 及以后版本
Virtual PC 2005
KVM
- 特点
4.2 Type1和Type2虚拟化
4.3 x86服务器发展
- 带来的问题
基础架构利用率低
基础架构成本高
IT 运维成本高
故障切换和灾难保护不足
最终用户桌面的维护成本高昂
- x86 架构
CPU 为了保证程序代码执行的安全性,多用户的独立性以及保证操作系统的稳定性,提出了 CPU 执行状态的概念。它有效的限制了不同程序之间的数据访问能力,避免了非法的内存数据操作,同时也避免了应用程序错误操作计算机的物理设备。一般的,CPU 都会划分为用户态和内核态,而 x86 CPU 更是细分为了 Ring 0~3 四种执行状态。
- RING0
Ring0 核心态(Kernel Mode):是操作系统内核的执行状态(运行模式),运行在核心态的代码可以无限制的对系统内存、设备驱动程序、网卡接口、显卡接口等外部设备进行访问。
显然,只有操作系统能够无限制的访问内存、磁盘、鼠键等外围硬件设备的数据,因为操作系统就是作为计算机硬件资源管理器而存在的,操作系统就是为了让多个普通应用程序可以更简单、安全的运行在同一台计算机上而存在的 “特殊的应用程序”。
- RING3
Ring3 用户态(User Mode):运行在用户态的程序代码需要受到 CPU 的检查,用户态程序代码只能访问内存页表项中规定能被用户态程序代码访问的页面虚拟地址(受限的内存访问),而且还只能访问 I/O Permission Bitmap 中规定的能被用户态程序代码访问的端口,不能直接访问外围硬件设备、不能抢占 CPU。
显然,所有的应用程序都应该运行在用户态中。当应用程序需要访问外围硬件设备时,CPU 会通过特别的接口去调用核心态的代码,以这种旁路的方式来应用程序对硬件设备的调用。如果用户态的应用程序直接调用硬件设备的话,就会被操作系统捕捉到并触发异常,弹出警告窗口。
- RING0
真奢侈!!!
- x86虚拟化
- x86 架构天然不是一个可虚拟化的架构。x86 架构的 CPU 中有 17 条指令成为了虚拟化最大的障碍,错误执行这些指令会导致操作系统显示警告、终止应用程序甚至完全崩溃。
- 当时 VMware 提出了解决这个问题的思路:在虚拟机生成这些特殊的指令时将它们 “困住”,然后将它们转换成可虚拟化的安全指令,同时保证其他所有的指令不受到干扰地执行。这样就产生了一种与主机硬件匹配并保持软件完全兼容性的高性能虚拟机。
全虚拟化
必须使用纯软件实现的方式构造 VMM。VMware 首创了这项技术,一举稳坐虚拟化龙头老大。
- x86 架构天然不是一个可虚拟化的架构。x86 架构的 CPU 中有 17 条指令成为了虚拟化最大的障碍,错误执行这些指令会导致操作系统显示警告、终止应用程序甚至完全崩溃。