Nitro System 改变 EC2 的历史 - 从 Xen 到 KVM,将虚拟化开销降至接近零的革命

解析 EC2 从 Xen 虚拟化管理程序迁移到 Nitro System 的技术背景、Nitro 卡·Nitro 虚拟化管理程序·Nitro Enclaves 的三层架构,以及实现裸机级性能的设计理念。

EC2 的前十年是 Xen 的时代

2006 年 EC2 发布时,虚拟化技术采用了 Xen 虚拟化管理程序。Xen 是剑桥大学开发的开源虚拟化管理程序,是当时最成熟的虚拟化技术之一。Xen 的半虚拟化 (Paravirtualization) 模式通过修改客户操作系统内核使其直接与 Xen 通信,实现了比完全虚拟化更高的性能。然而,基于 Xen 的 EC2 存在几个结构性问题。第一,网络和存储的 I/O 由宿主操作系统的 CPU 处理,因此在 I/O 负载高的工作负载中宿主 CPU 成为瓶颈。第二,宿主操作系统 (Dom0) 扩大了安全攻击面。Dom0 作为特权域可以访问所有客户 VM 的内存,一旦 Dom0 被攻破,所有客户 VM 都面临风险。第三,虚拟化管理程序的开销导致物理服务器 CPU 的 10-30% 被虚拟化管理消耗。

Nitro 卡 - 将 I/O 卸载到专用硬件

Nitro System 的核心在于将传统由宿主 CPU 处理的网络、存储和安全功能卸载到专用 ASIC (Application-Specific Integrated Circuit) 芯片。Nitro 卡有三种类型。Nitro Card for VPC 负责网络处理(VPC 封装、安全组过滤、ENA 数据包处理)。Nitro Card for EBS 负责块存储 I/O(EBS 卷的读写、加密/解密)。Nitro Card for Instance Storage 负责本地 NVMe 存储管理。这些处理从宿主 CPU 完全分离后,宿主 CPU 几乎 100% 可分配给客户 VM。Xen 时代物理服务器 CPU 的 10-30% 被虚拟化管理消耗,而 Nitro System 将其降至接近零。这一差异在大规模云基础设施中意味着巨大的成本差异。在数百万台服务器上节省 10% 的 CPU,相当于数十万台服务器的成本。

Nitro 虚拟化管理程序 - 轻量化的极致

Nitro 虚拟化管理程序是基于 KVM (Kernel-based Virtual Machine) 的极其轻量的虚拟化管理程序。与 Xen 的 Dom0 运行通用 Linux 内核不同,Nitro 虚拟化管理程序是仅具备虚拟化所需最小功能的定制内核。网络栈、存储栈、文件系统等传统虚拟化管理程序具备的功能全部卸载到 Nitro 卡,因此虚拟化管理程序本身的代码库极其精简。这种轻量化从安全角度也具有重大意义。代码越少漏洞越少,攻击面缩小。AWS 将 Nitro 虚拟化管理程序的安全模型描述为「虚拟化管理程序没有访问客户 VM 内存的手段」。Xen 的 Dom0 可以自由访问客户 VM 的内存,但 Nitro 虚拟化管理程序根本不具备该功能。这使得即使是 AWS 员工也在技术上无法访问客户 VM 的数据。

裸机实例的实现 - 无虚拟化的 EC2

Nitro System 的副产品是 EC2 裸机实例(如 m5.metal)。由于 Nitro 卡负责网络和存储处理,即使完全去除虚拟化管理程序,EC2 的管理功能(启动/停止、监控、安全组)也能维持。裸机实例将物理服务器的 CPU 和内存直接提供给客户,虚拟化开销字面上为零。需要裸机实例的用例虽然有限,但在重要场景中不可或缺。第一是许可证限制。Oracle Database 和部分 Windows Server 许可证基于物理核心数计费,在虚拟化环境中难以确定物理核心。裸机实例的物理核心数明确。第二是嵌套虚拟化。在客户操作系统中运行 VMware ESXi 或 KVM 时需要裸机实例。AWS 的 Elastic VMware Service (EVS) 就是在裸机实例上运行 VMware vSphere 的服务。第三是性能关键型工作负载。HPC(高性能计算)和金融实时交易中,即使微小的虚拟化开销也不可接受。

Nitro Enclaves - 硬件级机密计算

Nitro Enclaves 是利用 Nitro System 隔离功能的机密计算 (Confidential Computing) 环境。Enclave 是从父实例分离 CPU 和内存的隔离虚拟机,完全没有持久存储、网络访问和外部交互式访问。与父实例的通信仅通过 vsock(虚拟套接字)这一本地通信通道。这种极端隔离使得 Enclave 内处理的数据无论是父实例的操作系统、虚拟化管理程序还是 AWS 员工都无法访问。Enclave 的完整性可通过加密证明 (Attestation) 验证。Enclave 启动时,Nitro System 生成包含 Enclave 代码和数据哈希值的签名证书。外部服务(如 KMS)可在验证此证书后向 Enclave 提供数据。用例包括个人信息处理(PII 令牌化)、加密密钥管理、多方计算(多个组织在不共享数据的情况下共同计算)等。要系统学习 AWS 的虚拟化技术和安全设计,专业书籍 (Amazon)可供参考。