1 虚拟化技术基础原理

  1. CPU运行特权
    RANG 0 :执行特权指令(内核)
    RANG 3:普通指令模式(用户进程)

  2. Guest客户机
    (1)模拟CPU个数可以大于实际物理机的核数,但性能会有影响
    (2)VMware中的BT技术

1.1 CPU虚拟化(VT-X)

(1)底层宿主机的cpu架构和Guest客户机模拟出来的CPU一样(模拟)
(2)底层宿主机的cpu架构和Guest客户机模拟出来的CPU不一样(虚拟化)(VMware中的BT技术)

完全虚拟化:Guest感觉自己是直接运行在物理机上的
硬件虚拟化(HVM):CPU拥有五个指令环,RANG -1(host主机运行特权指令) RANG 0-3
硬件虚拟化直接使用硬件进行特权指令转换
半虚拟化:Guest能意识到自己是运行在虚拟化上,需要修改Guest内核,内核调用主机上的hyper call
半虚拟化在主机上运行了一个 层

推荐文章:https://www.cnblogs.com/bakari/p/7966671.html

1.2 内存虚拟化

1、Guest访问物理内存需要进行两次转换(引入影子页表)

引入硬件虚拟化(MMU虚拟化)

2、MMU的虚拟化(Intel:EPT(Extended Page Table);AMD:NTP(Nested Page Table))

MMU硬件虚拟化实现从Guest中的虚拟地址直接转换成物理机的物理地址。

3、每次进行Guest切换,都需要清空CPU的TLB,所以进行了TLB的虚拟化,TLB中保存了虚拟机标签,指定TLB中保存的某段内容属于哪个虚拟机

(Intel VT 包括 VT-x (支持 CPU 虚拟化)、EPT(支持内存虚拟化)和 VT-d(支持 I/O 虚拟化))

推荐文章: http://www.cnblogs.com/bakari/p/7966707.html

1.3 I/O虚拟化

外存:硬盘、光盘、U盘
网络设备:网卡
显示设备:VGA(frame buffer机制)
键盘鼠标:ps/2,usb

I/O虚拟化方式:
(1)模拟:在Guest中完全使用软件来模拟真实的硬件
(2)半虚拟化:Guest中有一个驱动(IO前端驱动),主机驱动(IO后端驱动)
(3)IO-through:IO透传(Intel:VT-d)使用IOMMU(在DMA中)进行各Guest的隔离

I/O虚拟化的三种方式:

1.4 虚拟化模型的两种实现方式

(1)分为:物理机层、宿主机操作系统、客户机层 (代表类型:kvm、vmware workstation、virtualbox)
(2)分为:物理机层、Hypervisor(虚拟机管理器)、客户机层(代表类型:xen、vmware、ESX/ESXI)

虚拟化技术总结:

  • CPU:vt-x, EPT, tagged-TLB
  • IO:VT-d, IOV, VMDq
  • 第一类:跟处理器相关:VT-x
  • 第二类:跟芯片相关:VT-d
  • 第三类:跟IO相关:VMDq 和 SR-IOV

2 虚拟化网络模型

桥接模式:不能使用network-manager服务
是让主机的物理网卡做为交换机使用,然后创建一个桥设备接收物理机的网络数据,所有建立的虚拟机都用物理网卡这个交换机做网络数据传输。

使用brctl命令进行创建桥和绑定接口到某个桥上(在修改时网络会断开,可以直接修改配置文件,然后重启网络)
(1) brctl add br0
(2) ifconfig eth0 0 up
(3) brctl addif br0 eth0
(4) ifconfig br0 IP/NETMASK up
(5) route add default gw GW
(6) brctl stp br0 on (启动STP(防止生成环路))

HOST模型和NAT模型:

TUN与TAP
在计算机网络中,TUN与TAP 是操作系统内核中的虚拟网络设备。不同于普通靠硬件网路板卡实现的设备,这些虚拟的网络设备全部用软件实现,并向运行于操作系统上的软件提供与硬件的网络设备完全相同的功能。
TAP等同于一个以太网设备,它操作第二层数据包如以太网数据帧。TUN模拟了网络层设备,操作第三层数据包比如IP数据封包。
操作系统通过TUN/TAP设备向绑定该设备的用户空间的程序发送数据,反之,用户空间的程序也可以像操作硬件网络设备那样,通过TUN/TAP设备发送数据。在后种情况下,TUN/TAP设备向操作系统的网络栈投递(或“注入”)数据包,从而模拟从外部接受数据的过程。

推荐文章:http://www.cnblogs.com/bakari/p/8037105.html

网络虚拟化的补充:
网络虚拟化中使用Linux + bridge实现各虚拟机之间的网络管理。还有一种技术Open vSwitch(OVS),虚拟化网络管理,分数据面和控制面,可以更好的管理网络。

3 KVM虚拟化技术

KVM:Kernel-based Virtual Machine, Qumranet公司, 以来于HVM:Intel VT-x, AMD ADM-v
KVM模块载入后的系统的运行模式:
内核模式:GuestOS执行I/0类操作,或其它的特殊指令的操作:称作“来宾-内核”模式
用户模式:代表GuestOS请求I/0类操作
来宾模式:GuestOS的非I/0类操作;事实上,它被称作“来宾-用户”模式
kvm hypervisor:

虚拟机中的应用程序执行过程:

KVM的组件:

kVM的特性:

KVM工具栈:

qemu:

  1. qemu-kvm
  2. qemu-img

libvirt:

  1. GUI:virt-manager,virt-viewer
  2. CLI:virt-install,virsh

QEMU主要提供了以下几部分:

  1. 处理器模拟器
  2. 仿真IO设备
  3. 关联模拟的设备至真实设备
  4. 调试器
  5. 与模拟器交互的用户接口

确认主机CPU是否支持硬件虚拟化:

1
2
3
4
grep -E --color=auto "(vmx|svm)" /proc/cpuinfo
modprobe kvm
modprobe kvm-intel
lsmod

验证生成kvm设备文件:/dev/kvm。

VMware中需要开启CPU硬件虚拟化,才能加载kvm_intel内核模块。

管理KVM虚拟机的方案:

  1. qemu:/usr/libexec
  2. libvirt:
    1. virt-install
    2. virt-manager
    3. virsh
    4. virt-viewer

4 virtio

  1. virtio-blk
  2. virtio-net
  3. virtio-pci

DPDK vhost支持vhost-cuse(用户态字符设备)和vhost-user(用户态socket服务)两种消息机制,它负责为客户机中的virtio-net创建、管理和销毁vhost设备。

推荐资料:Vhost-user详解

virtio 针对外设,vhost 适配不同的操作系统

5 Open vSwitch

dnsmasq 实现为虚拟机动态分配地址(dhcp)