概念

虚拟化:把一份物理资源(服务器、存储、网络)抽象成多份逻辑资源,让多个"虚拟"的实体共享同一份硬件。

类型

一、服务器虚拟化(最主流)

在一台物理服务器上运行多个虚拟机(VM),每个 VM 有独立的操作系统。

实现方式:

1. 全虚拟化(Full Virtualization)

虚拟机监视器(Hypervisor)模拟完整的硬件,客户操作系统不需要修改就能运行。

2. 半虚拟化(Paravirtualization)

客户操作系统经过修改,知道自己运行在虚拟环境中,通过专门的接口与 Hypervisor 协作。

性能更好,但需要操作系统支持。

3. 硬件辅助虚拟化

现代 CPU 内置虚拟化支持:

  • Intel VT-x;
  • AMD-V。

它们提供了专门的指令和运行模式,让 Hypervisor 能更高效地管理虚拟机(把原本需要软件模拟的操作交给硬件)。

这是现代虚拟化性能的基础——需要在 BIOS 中开启。

二、容器虚拟化

前文提到过:容器共享宿主内核,通过 namespace 和 cgroups 隔离。比虚拟机更轻量,但隔离性较弱。

三、其它

  • 桌面虚拟化(VDI):把桌面环境集中到服务器,用户通过瘦客户端访问;
  • 应用虚拟化;
  • 网络虚拟化(SDN、VPC);
  • 存储虚拟化。

有什么用

一、提高资源利用率

一台物理服务器如果只跑一个应用,CPU 利用率可能只有 10%–20%。

虚拟化为多个 VM 后,利用率可以提升到 60%–80%。

这是云计算的经济基础——云厂商正是靠把一台物理机切成多个虚拟机来降低成本。

二、隔离

不同应用运行在不同的 VM 中,互不干扰。一个 VM 崩溃或被攻击,不影响其它 VM。

三、灵活性与快速交付

创建一台虚拟机只需几分钟(而采购、上架、配置一台物理服务器需要数天到数周)。

四、便于迁移和备份

虚拟机本质上是文件(磁盘镜像 + 配置文件)——可以整体复制、快照、迁移。

五、资源调度与弹性

云平台可以根据负载自动创建或销毁 VM,实现弹性伸缩。

代价

一、性能开销

虚拟化会引入一定的性能损失。

  • CPU:有了硬件辅助虚拟化后,开销很小(通常 1%–5%);
  • 内存:地址转换(虚拟地址 → 物理地址 → 机器地址)的开销,通过 EPT/NPT 等硬件特性大幅优化;
  • I/O:开销相对明显,通过 SR-IOV、设备直通(Passthrough)等技术优化。

二、复杂度

需要管理 Hypervisor、镜像、网络、存储——运维复杂度增加。

三、"吵闹的邻居"问题(Noisy Neighbor)

共享同一台物理机的多个 VM 之间会相互竞争资源。如果某个 VM 占用大量 CPU 或 I/O,可能影响其它 VM 的性能。

云厂商通过资源配额和调度策略来缓解,但无法完全消除。

常见工具

  • 企业级:VMware vSphere、Microsoft Hyper-V、Citrix XenServer;
  • 开源:KVM(Linux 内核内置,是多数云厂商的基础)、Xen、Proxmox VE;
  • 桌面:VirtualBox、VMware Workstation、Parallels Desktop;
  • 容器:Docker、containerd、Podman。

一个延伸

嵌套虚拟化:在虚拟机里再跑虚拟机。用于开发测试、云计算教学等场景。

现代 CPU 已支持,但性能开销较大。

说明:本文为虚拟化技术的知识整理。