Virtualization基础
官方文档学习
CPU虚拟化
模拟 emulation
对于CPU来说,需要模拟ring 0、1、2、3
虚拟机内核运行在ring 1上
虚拟 virtualization
完全虚拟化 full-virtualization
对于CPU来说,需要虚拟ring 0
虚拟机内核运行在ring -1 上
Guest认为自己直接运行在物理主机上,没有意识到自己是虚拟机
BT 二进制翻译,基于软件的方式
HVM 硬件辅助的虚拟化,基于底层硬件支持虚拟化指令集
半虚拟化 para-virtualization
Guest清楚的知道自己是虚拟机
如果虚拟机要运行特权指令,但这条特权指令不会影响到其它的虚拟机和物理机,则由虚拟机的内核直接调用硬件资源,减少了中间的指令转换层
如果虚拟机要运行的特权指令,会影响虚拟机和物理机,则发出hyper call,交由hypervisor调用硬件资源
Memory虚拟化
在虚拟机中
Shadow Page Table 实现虚拟机中逻辑地址到虚拟机物理地址的转换
MMU 将虚拟机的物理地址转换为物理主机的物理地址
GVA ---> GPA ---> HPA
MMU Virtualization 硬件实现,能使得虚拟机中的逻辑地址直接转换成为物理主机的物理地址
Intel EPT Extended Page Table
AMD NTP Nested Page Table
GVA ---> HPA
TLB Virtualization
Translation Lookaside Buffer 转换检测缓冲区是一个内存管理单元
tagged TLB
存储虚拟机中逻辑地址到物理机的物理地址的转化
I/O虚拟化
存储设备
硬盘、光盘、U盘、软盘
网络设备
网卡
显示设备
VGA
frame buffer机制
给每个驱动一个缓冲窗口,一般使用完全虚拟化
字符设备
键盘
ps/2、usb
鼠标
ps/2、usb
使用焦点捕获方式,将字符设备和虚拟机建立临时关联,一般使用完全虚拟化
I/O虚拟化方式
完全虚拟化
完全使用软件来模拟真实硬件
适用于所有的设备
半虚拟化
移除了虚拟机中不必要的模拟驱动使用,而是调用I/O前端驱动,I/O前端驱动和物理主机上的I/O后端驱动交互,从而直接调用物理驱动
通常仅适用于
磁盘、网卡
IO-through IO透传
让虚拟机直接使用物理设备,仍然需要hypervisor协调
需要硬件支持透传技术
Intel VT-d
在IO MMU层隔离各虚拟机的IO数据,避免因为集中的DMA设备管理,导致多虚拟机的IO数据混淆
并且还能完成中断映射的对应关系,明确各IO中断对应的处理虚拟机
基于北桥的硬件辅助的虚拟化技术,主要提升I/O设备可靠性、灵活性以及性能
虚拟化技术两种实现
Type-I
hypervisor ---> vm
Xen、RHEV、ESXi
Type-II
host vmm ---> vms
KVM、VMware Workstation、Virtual Box
依赖底层操作系统
KVM、Xen缺陷
它们都不能完整意义上的实现IO,必须通过qemu、virtio实现IO传输
虚拟化技术分类
模拟
PearPC
Bochs
QEMU
(模拟器)
完全虚拟化
native virtualization
底层硬件架构必须和虚拟机架构一致
VMware Workstation、VMware Server、Parallels Desktop、KVM、Xen(HVM)
半虚拟化
para-virtualization
底层硬件架构必须和虚拟机架构一致
xen、uml(user-mode linux)
OS级别虚拟化
OpenVZ
lxc
Solaris Containers
FreeBSD jails
(性能好)
库虚拟化
wine
在Linux上模拟Windows库,可以玩Windows上的游戏、软件
应用程序虚拟化
jvm
TUN与TAP
在计算机网络中,TUN与TAP是操作系统内核中的虚拟网络设备。不同于普通靠硬件网卡实现的设备,这些虚拟的网络全部用软件实现,并向运行于操作系统上的软件提供与硬件网络设备相同的功能
TAP等同于一个以太网设备,它操作第二层数据包如以太网数据帧
TUN模拟了网络层设备,操作第三层数据包比如IP数据包
操作系统通过TUN/TAP设备向绑定该设备的用户空间的程序发送数据。反之,用户空间的程序也可以像操作硬件网络设备那样,通过TUN/TAP设备发送数据,数据包投递至操作系统的网络栈,从而模拟外部接受数据的过程
虚拟化网络
nat
bridge
route
isolation
网桥设备管理
NetworkManager不支持桥设备管理
1 chkconfig NetworkManager off 2 chkconfig networ on
桥设备管理软件包安装
1 yum install -y bridge-utils
编辑桥配置文件
cp ifcfg-eth0 ifcfg-br0 vim ifcfg-br0 DEVICE=br0 NM_CONTROLLED=no TYPE=Bridge # 下面IP、掩码、DNS直接使用原网卡的 # 如果有mac地址最好删除掉 vim ifcfg-eth0 # 将 IP、掩码、DNS等删除 BRIDGE=br0 service network restart
使用brctl配置桥设备(不持久)
brctl addbr br0 brctl stp br0 on ifconfig eth0 0 up brctl addif br0 eth0 ifconfig br0 IP/NETMASK up route add default gw GW_IP