首先,虚拟化技术有两种类型的实现,方式如下:

    Type-I:

        hypervisor --> vm

    Type-II:

        host --> vmm --> vms

实际上,这和当前主流的两大虚拟化技术也正好匹配,他们就是Xen和KVM,

    Xen:

        hypervisor, Dom0

    KVM:

        Kernel-based Virtual Machine

本篇将从KVM开始,记录KVM的组件、特性以及实现方式。


KVM特性:

        内存管理:        

            将分配给vm的内存交换至swap

            支持使用Huge Page

            支持使用Intel EPT或AMD RVI技术完成内存地址映射:GVA-->GPA-->HPA

            支持KSM(Kernel Same-page Merging)

        硬件支持:

            取决于Linux内核

        存储:

            本地存储

            网络附加存储

            存储区域网络

            分布式存储,例如GlusterFS

        实时迁移:

        支持的GuestOS:

            Linux,Windows,OpenBSD,FreeBSD,OpenSolaris

        设备驱动:

            IO设备的完全虚拟化:模拟硬件

            IO设备的半虚拟化:在GuestOS中安装驱动:virtio

                virtio-blk, virtio-net, virtio-pci, virtio-console, virtio-ballon

KVM局限性:

        一般局限性:

            CPU overcommit:

            时间记录难以精确,依赖于时间同步机制

        MAC地址:

            VM量特别大时,存在冲突的可能性

            实时迁移

            性能局限性


KVM模块载入后的系统的运行模式:

        内核模式:GuestOS执行I/O类操作,或其他的特殊指令操作都有内核来操作。称作“来宾-内核”模式。

        用户模式:代表GuestOS请求I/O类操作。

        来宾模式:GuestOS的非I/O类操作,事实上,它被称作虚拟机的用户模式更贴切。称作“来宾-用户”模式。

KVM的组件:

        两类组件:

            /dev/kvm:工作于hypervisor,在用户空间可通过ioctl()系统调用来完成VM创建、启动等管理功能:它是一个字符设备。

                功能:可以创建vm、为VM分配内存、读写vcpu的寄存器、向vcpu注入中断、运行vcpu等等。

            qemu进程:工作于用户空间,主要用于实现模拟PC机的IO设备。

KVM的工具栈:

        qemu:

            qemu-kvm

            qemu-img

        libvirt:

            GUI: virt-manager, virt-viewer

            CLI: virt-install, vrish


        

 QEMU主要用到以下几个部分:

            处理器模拟器

            仿真IO设备

            关联模拟的设备至真实设备

            调试器

            与模拟器交互的用户接口

KVM在CentOS 6.5上的安装:

1、首先确认CPU是否支持HVM

grep -E --color=auto "(vmx|svm)" /proc/cpuinfo

2、装载模块

modprobe kvm

modprobe kvm-intel

3、验证

ll /dev/kvm

因为从2.6.20版本开始,KVM已经被收入Linux内核,所以安装KVM显得很简单,但是要使用KVM进行虚拟机的管理还需要安装KVM的管理工具。