1.什么是系统虚拟化
系统虚拟化是将底层物理设备与上层操作系统、软件分离的一种去耦合技术,
在一台物理机器上逻辑的划分出多台机器
虚拟化的目标是实现IT资源 利用效率和灵活性 的最大化
1.1.系统虚拟化的好处
1、资源利用率高(多个系统融合在一台服务器上)
2、系统维护灵活(应用系统不在依赖特定的硬件)
2.为什么需要系统虚拟化
1、服务器资源利用率低
- 公司服务器越来越多,如何充分管理?
- 如何统一运维管理?
2、系统维护不灵活
3、浪费时间
4、操作繁琐
5、机器闲置时间较多
3.虚拟化基础架构
在一台物理主机上虚拟出多个虚拟计算机(虚拟机,VirtualMachine,VM),
其上能同时运行多个独立的操作系统,这些客户操作系统(Guest OS),
通过虚拟机管理器(Virtual Machine Monitor,VMM,也称作Hypervisor),
访问实际的物理资源
4.系统虚拟化的产生
1、计算系统利用率不高!
2、"多数用户承认,计算系统平均利用率只有25%~30%"
3、性能测试报告,来自权威性能测试机构Metron's Athene
4、对一个计算系统进行两天监测的数据
5.大多数公司选择服务器虚拟化的原因
1、提高硬件资源利用率
- 打破"一台服务器对应一套应用"的模式,将物理服务器进行整合,
提升利用率
2、减少数据中心的建设成本
- 服务器和相关IT硬件更少,节省了机房空间,也减少了散热和电力需求
3、提升业务连续性
- 具备灵活数据备份和应用迁移机制,保障服务永不中断
4、实现数据中心灵活运营
- 资源动态调配和模板化部署,应用系统快速上线,及时响应业务变化
6.虚拟化发展历史
7.什么是桌面虚拟化?
桌面虚拟化(MS:Remote Desktop、Citrix:XenDesktop、Vmware:View)
− 将原本在本地电脑安装的桌面系统统一在后端数据中心进行部署和管理;
− 用户可以通过任何设备,在任何地点,任何时间访问属于自己的桌面系统环境。
8.服务器虚拟化
9.KVM介绍
其中,KVM全称是基于内核的虚拟机(Kernel-based Virtual Machine),
它是一个 Linux的一个内核模块,该内核模块使得Linux变成了一个 Hypervisor:
• 它由 Quramnet 开发,该公司于 2008年被 Red Hat 收购。
• 它支持 x86 (32 and 64 位), s390, Powerpc 等 CPU。
• 它从 Linux 2.6.20 起就作为一模块被包含在 Linux 内核中。
• 它需要支持虚拟化扩展的 CPU。
• 它是完全开源的
10.KVM特性
嵌入到Linux正式Kernel(提高兼容性)
• 代码级资源调用(提高性能)
• 虚拟机就是一个进程(内存易于管理)
• ---------- RedHat收购KVM -----------
• 保持开源发展模式
• 更好的商业支持及服务保障
11.CPU
无虚拟化
– CPU一般设为四个Ring
– Kernel Mode一般跑在Ring 0上
– User Mode一般跑在Ring 3上
– 对于一个普通的传统的Linux系统没有问题
虚拟化
– 在Guest机器和Host机器中间加一层Hypervisor
– Host机器看它像跑在自己上面的程序
– Guest机器看它像自己所运行的硬件
– 如果Host机器和Guest机器都跑相同的Linux,它们的Kernel都想运行在Ring 0,可怎么办?
12.虚拟机分类
Linux有7个工作级别,Linux一般的工作级别在init 3,操作系统控制则是在init 5
1.基于二进制翻译的全虚拟化(Full Virtualization with Binary Translation)
2.超虚拟化(或者半虚拟化/操作系统辅助虚拟化Paravirtualization)
3.硬件辅助的全虚拟化
那么,虚拟化在这里就遇到了一个难题,因为宿主操作系统是工作在 ring0 的,
客户操作系统就不能也在 ring0 了,但是它不知道这一点,以前执行什么指令,现在还是执行什么指令,
但是没有执行权限是会出错的。所以这时候虚拟机管理程序(VMM)需要避免这件事情发生。
虚机怎么通过 VMM 实现 Guest CPU 对硬件的访问,根据其原理不同有三种实现技术:
• 1. 全虚拟化
• 2. 半虚拟化
• 3. 硬件辅助的虚拟化
13.为什么需要CPU虚拟化
14.传统CPU工作模式
X86 操作系统是设计在直接运行在裸硬件设备上的,因此它们自动认为它们完全占
有计算机硬件。x86 架构提供四个特权级别给操作系统和应用程序来访问硬件
。 Ring 是指 CPU 的运行级别,Ring 0是最高级别,Ring1次之,Ring2更次之
…… 就 Linux+x86 来说,
• 操作系统(内核)需要直接访问硬件和内存,因此它的代码需要运行在最高运行级
别 Ring0上,这样它可以使用特权指令,控制中断、修改页表、访问设备等等。
• 应用程序的代码运行在最低运行级别上ring3上,不能做受控操作。如果要做,比
如要访问磁盘,写文件,那就要通过执行系统调用(函数),执行系统调用的时候
,CPU的运行级别会发生从ring3到ring0的切换,并跳转到系统调用对应的内核代
码位置执行,这样内核就为你完成了设备访问,完成之后再从ring0返回ring3。这
个过程也称作用户态和内核态的切换
15.CPU检测
支持vt技术
egrep -c '(vmx|svm)' /proc/cpuinfo
命令结果大于0表示cpu支持虚拟化
16.基于二进制翻译的全虚拟化(Full Virtualization with Binary Translation)
客户操作系统运行在 Ring 1,它在执行特权指令时,会触发
异常(CPU的机制,没权限的指令会触发异常),然后 VMM
捕获这个异常,在异常里面做翻译,模拟,最后返回到客户操
作系统内,客户操作系统认为自己的特权指令工作正常,继续
运行。但是这个性能损耗,就非常的大, 简单的一条指令,
执行完,了事,现在却要通过复杂的异常处理过程
17.异常”捕获(trap)-翻译(handle)-模拟(emulate)”
18.半虚拟化
半虚拟化的思想就是,修改操作系统内核,替换掉不能虚拟化
的指令,通过超级调用(hypercall)直接和底层的虚拟化层
hypervisor来通讯,hypervisor 同时也提供了超级调用接口
来满足其他关键内核操作,比如内存管理、中断和时间保持。
• 这种做法省去了全虚拟化中的捕获和模拟,大大提高了效率
。所以像XEN这种半虚拟化技术,客户机操作系统都是有一个
专门的定制内核版本,和x86、mips、arm这些内核版本等价
。这样以来,就不会有捕获异常、翻译、模拟的过程了,性能
损耗非常低。这就是XEN这种半虚拟化架构的优势。这也是为
什么XEN只支持虚拟化Linux,无法虚拟化windows原因,微
软不改代码啊
19.硬件辅助的全虚拟化
2005年后,CPU厂商Intel 和 AMD 开始支持虚拟化了。
Intel 引入了 Intel-VT (Virtualization Technology)技术。
这种 CPU,有 VMX root operation 和 VMX non-rootoperation两种模式,两种模式都支持Ring 0 ~ Ring 3 共 4个运行级别。
这样,VMM 可以运行在 VMX root operation模式下,客户 OS 运行在VMX non-root operation模式下
也就说,硬件这层就做了些区分,这样全虚拟化下,那些靠“
捕获异常-翻译-模拟”的实现就不需要了。
而且CPU厂商,支持虚拟化的力度越来越大,靠硬件辅助的全虚拟化技术的性能逐渐逼近半虚拟化,
再加上全虚拟化不需要修改客户操作系统
这一优势,全虚拟化技术应该是未来的发展趋势
20.全虚拟化.VS.半虚拟化
21.KVM虚拟化图
22.Xen架构图
23.Xen包含三大部分
Xen Hypervisor:直接运行于硬件之上是Xen客户操作系统
与硬件资源之间的访问接口(如:)。
通过将客户操作系统与硬件进行分类,Xen管理系统可以允许客户操作系统安全,
独立的运行在相同硬件环境之上。
• Domain 0:运行在Xen管理程序之上,具有直接访问硬件和
管理其他客户操作系统的特权的客户操作系统。
• DomainU:运行在Xen管理程序之上的普通客户操作系统或
业务操作系统,不能直接访问硬件资源(如:内存,硬盘等)
,但可以独立并行的存在多个。
• Xen 半虚拟化
– 可以运行特权指令直接在硬件上运行
– Vm系统内核xen对齐进行了修改
24.服务器虚拟化方法
全虚拟化(Full-Virtulization):
无需修改操作系统,VM ESXi、Linux KVM
• 半虚拟化(Para-Virtulization):
集成半虚拟化代码,直接运行特权指令,性能接近物理机,需要修改操作
系统,
MS Hyper-V、 Ctrix Xen、IBM PowerVM
• 操作系统层虚拟化
开发、测试环境,VM Workstation、VM Server