Published on

AWS Nitro Intro

Authors
  • avatar
    Name
    Guming
    Twitter

定义

  1. 虚拟机管理程序 (Hypervisor):
  • 定义:在物理硬件和虚拟机 (VM) 之间运行的软件层,用于创建和运行 VM。
  • 作用:分配和管理系统资源,如 CPU、内存、存储和网络 I/O,并将它们隔离到各个 VM 中。
  • 类型:
    • 传统软件驱动虚拟机管理程序:如 VMware ESXi 和 KVM,它们使用软件层来虚拟化所有功能。
    • 硬件辅助虚拟化:利用物理组件(如 CPU 特性、专用 I/O 控制器)来促进 VM 操作,以提高效率和隔离性
  1. AWS Nitro 系统:
  • 定义:一种由 AWS 引入的硬件加速虚拟化平台,它用更精简的模型取代了传统的虚拟机管理程序,将关键功能卸载到专用硬件组件。
  • 目的:通过减少软件开销、提高性能、增强安全性和实现大规模可扩展性,来优化 AWS 云环境中的资源分配
  1. 资源分配效率:
  • 定义:衡量虚拟机管理程序分配、管理和优化 CPU 周期、内存、存储和网络 I/O 的能力
  • 关键指标:对性能、可扩展性和成本效益的影响
本地图片1

Nitro 核心组件

本地图片1

Nitro cards

Nitro 卡是专用的硬件设备,负责处理网络、存储和安全功能。通过将这些功能从主机的主 CPU 和内存中分离出来,Nitro 卡减轻了主 CPU 的 I/O 负载,将更多的 CPU 周期和内存留给用户工作负载

这种卸载带来了显著的性能提升,包括更低的延迟、更高的 IOPS(每秒输入/输出操作)和更可预测的性能。例如,Elastic Network Adapter (ENA) 和 NVMe 接口在 Nitro 系统中提供接近原生的 I/O 性能,因为它绕过了main hypervisor

Nitro 管理程序

基于 KVM 的轻量级管理程序,其核心功能仅限于资源隔离。与传统管理程序相比,它的代码库显著更小,从而减少了管理程序本身的开销

与传统的 Type 1 或 Type 2 管理程序不同,Nitro 管理程序不需要privileged domain(如 VMware 的 ESXi 或 Xen 的 Dom0),从而减少了攻击面,并消除了跨虚拟机干扰的风险

Nitro 安全芯片

Nitro 安全芯片是每个基于 Nitro 的服务器中的信任根。它确保安全启动过程、固件的加密验证,并防止物理篡改

该芯片强制执行启动时完整性检查,并阻止对主机级别资源的未经授权访问,从而增强了主机的硬件完整性

Nitro 将安全任务卸载到专用硬件组件,从而在不占用系统 CPU 的情况下实现安全功能,保持了系统性能

本地图片1

AWS Nitro 与传统虚拟机管理程序的对比分析

  1. 架构与设计
  • 传统虚拟机管理程序(VMware ESXi,KVM):

    • 软件层: 位于硬件和 VM 之间,通过软件处理大部分虚拟化任务。
    • 复杂性: 具有更复杂的软件堆栈,包括管理功能、调度算法和 I/O 仿真。
    • 资源管理: ESXi 以其强大的管理功能而闻名(如 DRS、资源池),KVM 使用 Linux 内核和 QEMU
  • AWS Nitro 系统:

    • 硬件加速: 将关键功能卸载到专用硬件组件,从而实现更精简的虚拟机管理程序模型。
    • 核心组件:
      • Nitro 卡: 专用的硬件设备,用于处理网络、存储和安全功能,将 I/O 负载从主 CPU 卸载。
      • Nitro 虚拟机管理程序: 轻量级的、基于 KVM 的虚拟机管理程序,专注于资源隔离,具有最小的代码库。
      • Nitro 安全芯片: 确保安全启动并保护主机硬件的完整性,作为系统的信任根。
      • 无特权域: 与传统虚拟机管理程序不同,Nitro 虚拟机管理程序不需要特权域(如 ESXi 的服务控制台或 Xen 的 Dom0),减少了攻击面。
  1. CPU 和内存分配效率

    • 传统虚拟机管理程序:
      • 软件开销: CPU 周期被虚拟机管理程序本身消耗,上下文切换和内存共享技术会增加延迟。
      • 管理复杂性: 例如,VMware ESXi 允许 CPU 锁定和预留等精细配置,但需要手动监督。
      • 性能下降: 在重负载下,上下文切换和虚拟机管理程序开销会降低原始性能。
    • AWS Nitro 系统:
      • 任务卸载: 将 I/O 和安全等任务卸载到专用硬件,将更多 CPU 时间分配给客户机工作负载。
      • 性能提升: 由于虚拟机管理程序活动造成的 CPU 负载较低,因此在持续工作负载下通常优于传统虚拟机管理程序。
      • 内存管理: 通过固定分配实现更可预测的性能,尽管以牺牲一些灵活性为代价。
  2. I/O 虚拟化效率

    • 传统虚拟机管理程序:
      • 软件仿真: 通过软件仿真或半虚拟化驱动程序虚拟化 I/O,引入延迟和增加 CPU 开销。
      • 瓶颈: 网络和磁盘访问通常由于客户机和主机环境之间的上下文切换而成为瓶颈。
    • AWS Nitro 系统:
      • Nitro 卡处理 I/O: 所有 I/O 操作都由 Nitro 卡在主机 CPU 和内存之外处理。
      • 近乎原生性能: 例如,Elastic Network Adapter (ENA) 和 NVMe 接口提供近乎原生的 I/O 性能,绕过了主虚拟机管理程序。
      • 用例: 在数据库、实时分析和视频流等高性能应用程序中特别有利
  3. 可扩展性与弹性资源管理

    • 传统虚拟机管理程序:

      • 功能: 支持 VM 克隆、实时迁移和快照等功能,但会产生额外的开销和性能下降。
      • 管理复杂性: 实现大规模可扩展性需要复杂的管理层
      • 在 Xen、KVM 这类传统虚拟化架构中:
        • 管理程序 (Hypervisor) 占用 CPU/内存资源来完成虚拟化。
        • Dom0/Host OS 负责设备管理和 I/O 转发。
        • 启动/停止 VM 时需要经过 管理 OS → Hypervisor → VM 的多层交互,这导致虚拟机启动慢、切换慢,而且有 CPU/内存的固定损耗
    • AWS Nitro 系统:

      • 大规模设计: 专为超大规模、程序化预配而设计,具有最小的开销。这就类似于容器中的 namespace + cgroup 重建,但 Nitro 是在 硬件级别完成的,因此更加高效、可预测
      • 隔离管理: 操作(如实例大小调整或快照)对正在运行的工作负载影响微乎其微。
      • 大规模fleet管理: 允许 AWS 在不影响性能或稳定性地管理全球区域的虚拟机舰队。
  4. 安全影响

    • 传统虚拟机管理程序:
      • 软件层: 安全功能(如内存加密、安全启动)依赖于额外的软件层和计算周期。
      • 攻击面: 特权域或管理 VM 可以成为恶意攻击的目标。
    • AWS Nitro 系统:
      • 硬件安全模型: Nitro 安全芯片执行启动时完整性检查,并阻止对主机级资源的未经授权访问,无需对系统 CPU 征税。
      • 减少攻击面: 微虚拟机管理程序架构消除了中央控制点,显著减少了软件攻击面。
      • Nitro Enclaves: 允许用户在 EC2 实例中划分隔离环境,用于处理高度敏感的数据,没有持久存储、外部网络或操作员访问。
  5. 运营和经济效率

    • 传统虚拟机管理程序:
      • 灵活性和可见性: 在本地部署中提供更大的灵活性和可见性,但需要更高的管理工作量、自定义调整和维护。
      • 成本: 更多的软件开销可能导致每美元性能较低。
    • AWS Nitro 系统:
      • 自动化: 自动化大部分任务并在基础设施级别强制执行最佳实践。
      • 成本效益: 计算和 I/O 资源的更有效利用转化为每美元的更好性能。
      • 定价模型: 高效率允许 AWS 提供各种实例类型和定价模型(如 Spot 实例、可突发实例)

结论

AWS Nitro系统通过利用基于硬件的虚拟化来最小化虚拟机监控器开销,从而在资源分配效率方面实现了范式转变。与VMware ESXi和KVM等传统虚拟机监控器相比,Nitro提供了卓越的CPU和I/O效率、更低的延迟和增强的可扩展性。虽然传统解决方案提供了更大的操作控制和功能丰富的环境,适用于私有云,但它们的软件中心模型引入的开销可能会限制大规模性能。

Nitro的架构更适合大规模、性能敏感和注重安全性的工作负载,提供了一个简化的自动化环境,最大限化了硬件利用率。随着云基础设施的不断发展,Nitro模型为公共云环境中的虚拟机监控器效率设定了新的标准。它预示着虚拟化的未来,安全性与性能不仅通过软件抽象,而且通过底层硬件的智能设计来实现