VMware, Microsoft, Red Hat和Citrix都已经在各自的虚拟化层中实现了对CPU和内存的虚拟化。VMware则更进一步,提出了软件定义数据中心的理念,旨在将虚拟化技术延伸到网络和存储。虚拟化这些资源的意义何在呢?对用户而言有什么益处?相对于虚拟化CPU和内存而言,虚拟化网络和存储又有什么特殊的价值?这绝对值得我们认真思考。
CPU虚拟化
我们回过头看一下,如果把CPU虚拟化定义为抽象物理CPU以方便工作负载使用计算资源,则VMware并不是***个实现CPU虚拟化的厂商,现代操作系统早就做到了。负载包括线程和进程,操作系统负责将这些线程和进程调度到CPU中运行。
VMware通过CPU虚拟化技术解决难题的是如何在一个操作系统实例中运行多个应用。实现这一任务的困难之处在于每一个应用都与操作系统之间有着密切的依赖关系。一个应用通常只能运行于特定版本的操作系统和中间件之上。这就是Windows用户常常提到的“DLL地狱”。因此,大多数用户只能在一个Windows操作系统实例上运行一种应用,操作系统实例独占一台物理服务器。这种状况会导致物理服务器的CPU资源被极大地浪费。能够使多个操作系统实例同时运行在一台物理服务器之上,是VMware所提供的CPU虚拟化技术的价值所在。通过整合服务器充分利用CPU资源,可以给用户带来极大的收益。
服务器整合的益处能够得以实现的前提是工作负载并不需要知晓它们正在共享CPU,虚拟化层必须具备这种能力。这是CPU虚拟化与其它虚拟化形式所不同的地方。
内存虚拟化
VMware的CPU虚拟化通过时间片的方式实现CPU的共享。而通过虚拟化技术来共享内存就没这么简单了。假设一个应用程序需要2GB物理内存,即使分配2GB虚拟内存给它,后面对应的物理内存也必须存在。否则应用程序的性能将变得很差(使用磁盘交换内存页)。VMware通过透明页共享技术可以实现一定程度上的内存共享。虚拟化层能够识别出各操作系统只读内存区域(代码页)中的相同部分,这些页面在内存中只保留一个副本。Windows操作系统自身所使用的内存大多为代码页,因此在运行有N个Windows实例的物理服务器上vSphere只保留一个Windows操作系统副本。这就是为什么在VDI的环境中你只需要为VDI映像分配比物理桌面少得多的内存。
需要强调的是,CPU时间分片是虚拟化层能够实现的,内存却不能按时间分片。多个应用可以共用一个CPU,但多个应用却不能同时使用一段内存区域。CPU的速度在持续增长,虚拟机的密度主要受限于服务器上物理内存的数量。