虚拟化:
虚拟化需要满足的条件:
等价执行
性能良好
安全隔离
内核必须运行在环0上(不管虚拟机还是物理机)
用户空间运行在环3上
cpu虚拟化: 按时间切割
完全虚拟化:
软件模拟cpu:
需要模拟环0123
虚拟:
底层架构要和上层架构一致
Host虚拟出一套完全的环境(上层机器不知道自己在虚拟化中)
只需要模拟环0
性能很差,可以借助BT(二进制翻译)技术和HVM技术提高性能
硬件辅助虚拟化:
cpu多增加一个指令环
Host运行在环-1 上,让虚拟机运行在环0上(但是此时虚拟机实际是没有特权指令的)
Host能够捕获虚拟机的指令在环-1上执行特权指令
半虚拟化:
需要修改虚拟机内核
虚拟机内核知道自己运行在虚拟化环境中
虚拟机需要执行特权指令时,直接去调用Host主机的内核(由hyper call去调用)(底层host由hyperivor管理)
Memory虚拟化:按空间切割
进程:
线性地址空间
cpu:
物理地址空间
内核调用内存:
线性地址空间----cpu:nmu---》虚拟物理地址空间------》由Hyperivor映射到Host内存地址空间
MMU虚拟化:
线性地址空间----虚拟的MMU--->Host的内存地址空间
I/O虚拟化:
外存:
硬盘、光盘
网络设备:
网卡
显示设备:
VGA
键盘鼠标:
ps/2 , usb
IO虚拟化方式:
模拟:
完全适应软件模拟真实硬件
发送---用户空间---内核--驱动--模拟网卡---hyperivor中的虚拟网卡(很多)---IO stack---真实网卡
半虚拟化:
发送---用户空间---内核--IO前端驱动(让用户能看到,而本地直接转发到hyperivor)
通常只适用于硬盘和网卡等(显卡不行)
IO透传:
本地有多硬盘、网卡
直接分配资源(硬盘、网卡)给虚拟机适用
Inter:VT-d:
基于北桥的硬件辅助虚拟化技术
主要实现IO虚拟化的灵活性可靠性
-----------------------------------
I型:xen、vmware exsi
虚拟机
Hyperivor
物理机
II型:kvm、vmware workstation、virtualbox
虚拟机
虚拟化软件
物理机
----------------------------------------
虚拟化技术:
cpu相关: vt-x , EPT , tagged-TLB
IO/cpu相关: vt-d ,IOV ,VMDq
处理器相关的:vt-x
芯片相关:vt-d
IO相关:VMDq 、SR-IOV
----------------------------------------
xen、kvm 不具备IO模拟功能
用QEMU,virtio 来实现IO模拟
----------------------------------------
qemu:
工作于用户空间的进程
使用来qemu模拟IO设备
kqemu相当于vmware的BT技术(bug多不稳定)
kvm 取代了kqemu (kvm实际上就是qemu的加速工具)
kvm :
linux内核的一个模块
内核装载了kvm后内核成为了Hyperivor(物理机内核运行移到ram -1)
硬件的Hyperivor要驱动IO设备:
自我驱动、dom 0 驱动
kvm可以虚拟cpu、内存
kvm架构:
内核模式、用户模式、来宾模式
vcpu有线程模拟实现
kvm架构:
---------------------------
guest Men
---------------------------
vcpu
---------------------------
thread | thread
---------------------------
kvm | linux Kernel
---------------------------
cpu cpu cpu