虚拟化和虚拟机基本概念
虚拟化主要指的是特殊的技术,通过隐藏特定计算平台的实际物理特性,为用户提供抽象的、统一的、模拟的计算环境(称为虚拟机)(IBM定义)。虚拟化为有效利用大型机的资源提供了技术支持。虚拟机技术也是多种多样,而可以虚拟的层次或者可虚拟的方面也是遍布从硬件到应用层整个计算机系统。因此应该注意到虚拟化和虚拟机指的并不是同一个概念,虚拟化是一个为了简化管理,优化资源的解决方案,而虚拟机简单的可以认为使这个解决方案的具体实现。
虚拟化分类
虚拟化可以分为对硬件的虚拟和对操作系统或者对软件的虚拟。
硬件层面的虚拟化
从这个层面来讲,有三种不同的技术:
- Full Virtualization(全虚拟化),几乎是完整地模拟一套真实的硬件设备。大部分操作系统无须进行任何修改即可直接运行在全虚拟化环境中。像kvm等技术是全虚拟化。
- Partial Virtualization(部分虚拟化),仅仅提供了对关键性计算组件或者指令集的模拟。操作系统可能需要做某些修改才能够运行在部分虚拟化环境中。
- Paravirtualization(半虚拟化),不对硬件设备进行模拟,虚拟机拥有独立的运行环境,通过虚拟机管理程序共享底层的硬件资源。大部分操作系统需要进行修改才能够运行在半虚拟化环境中。它的性能要稍微高于全虚拟化。像Xen。因为需要改动托管系统的内核,所以xen是不支持win虚拟机的。
另外还有像硬件辅助虚拟化,就是宿主机的硬件架构在一定程度上提供对虚拟化的支持。像Intel-VT(Intel Virtualization Technology)与AMD-V(AMD Virtualization)都提供了这等架构支持。
软件层面的虚拟化
往往是指在同一个操作系统实例的基础上提供多个隔离的虚拟运行环境,也常常被称为容器技术。LXC(Linux Container)采用了这种技术,它主要是采用了linux本身提供的技术,在一定程度上模拟虚拟化。
软件虚拟化也可以理解成进程级虚拟机,其他虚拟化成为系统级虚拟机。在进程级虚拟机中负责虚拟化的软件成为运行时软件,而系统级虚拟机中负责虚拟化的软件成为VMM(Virtual Machine Monitor )
不同虚拟化的优缺点对比
对于硬件与软件虚拟化两种技术,都是存在优点和缺点。
对于硬件虚拟化,我们讨论全虚拟化和部分虚拟化
因为现在大部分的虚拟化技术Xen、kvm都支持这两种。硬件虚拟化基本上就是在一台宿主机上虚拟了整个系统,各台虚拟机之间相互不可见。这会很明显导致很多重复的线程和重复的内存页出现,性能上肯定会有影响。所以采用这种技术,一台宿主机上虚拟机的个数肯定会有一定限制。
对于软件虚拟化,我们讨论LXC
LXC( Linux Containers)是一种基于容器的、操作系统层级(内核)的、轻量级的虚拟化技术。LXC 可以在操作系统层次上提供虚拟环境(即容器)以隔离进程和资源,每个虚拟环境拥有自己的进程和独立的网络空间。还可以为容器绑定特定的 CPU 和 Memory 节点,分配特定比例的 CPU 时间、IO 时间,限制可以使用的内存大小(包括内存和 SWAP 空间),提供 Device 访问控制,提供独立的 namespace(网络、pid、ipc、mnt、uts)。
是通过cgroup对线程进行隔离,对资源进行限制;通过Namespace对调用系统提供的系统调用来进行资源隔离。LXC介绍。通过此也可以看出,它所有虚拟化出来的虚拟机都是运行在宿主机本身上的,它的线程和资源对宿主机都是可见的。这就不存在很多重复的线程和内存也的问题,所以一台宿主机上可以通过此技术虚拟出更多的虚拟机。
最近非常流行的Docker也是软件虚拟化的一种,它的原理也是使用了linux提供的namespace对资源进行隔离,不过它提供了比LXC更强大的功能实现。