一文带你了解AWS Nitro System

2021-07-27 09:45:30 浏览数 (1)

本文转载自:软硬件融合,作者:James Hamilton

编者按:

网络上关于AWS Nitro技术细节的内容不多,本文是AWS VP兼杰出工程师James Hamilton的Nitro介绍性文章,差不多是Nitro介绍最详细的文章了。并且末尾,有读者提问,Hamilton仔细进行了回答,帮助大家揭开了很多“谜团”。

关于作者James Hamilton:

Amazon Web Services副总裁兼杰出工程师,专注于基础设施效率、可靠性和可扩展性。在加入AWS之前,James在多个大规模产品和服务方面担任领导职务,包括Windows Live、Exchange Hosted Services、Microsoft SQL Server和IBM DB2。作者喜欢与服务相关的所有事物,并有兴趣优化从数据中心电源和冷却基础设施到服务器设计、网络系统以及它们托管的分布式软件系统的所有组件。

参考链接:

https://perspectives.mvdirona.com/2019/02/aws-nitro-system/

AWS Nitro System介绍

Nitro系统用于为AWS弹性计算集群(EC2)实例类型提供以下特性:

  1. 高速网络与硬件卸载
  2. 高速EBS存储与硬件卸载
  3. NVMe本地存储
  4. 用于MPI和Libfabric的远程直接内存访问(RDMA)
  5. 裸金属实例的硬件保护/固件验证
  6. 控制EC2实例所需的所有业务逻辑

AWS每年Nitro ASIC的消耗数高达数百万片,因此即使它只被AWS使用,也仍然是一个相当大规模的服务器组件。Nitro系统在过去几年中为所有EC2实例类型提供动力。主要有三部分:

  1. Nitro I/O加速卡
  2. Nitro安全芯片
  3. Nitro Hypervisor

不同的EC2服务器实例类型包括不同的Nitro系统特性,一些服务器类型有许多Nitro系统卡,实现AWS Nitro系统的五个主要特性:

  1. Nitro VPC(虚拟私有云)卡
  2. Nitro EBS(弹性块存储)卡
  3. Nitro本地存储卡
  4. Nitro控制器卡
  5. Nitro安全芯片

1 Nitro VPC卡

Nitro VPC卡本质上是一个PCIe连接的网卡(Network Interface card, NIC),通常被称为网络适配器,或者在行业的某些地方称为网络控制器。这是实现EC2服务器和网络连接的接口卡,或在该服务器类型上实现接口连接的硬件接口卡。而且,像所有NIC一样,主机与它的接口需要加载特定的设备驱动程序以支持与网络适配器通信。对于AWS网卡,弹性网卡(ENA)是我们的网卡的设备驱动程序。这个驱动程序现在包含在所有主流的操作系统发行版中。

Nitro VPC卡支持网络报文的封装/解封装,实现EC2安全组,强制限制,负责路由。在服务器硬件之中,而不是在Hypervisor中,实现这些特性,可以让客户充分使用底层服务器硬件,而不会影响网络性能和其他用户,而且我们不必让客户使用服务器Core来处理这些网络任务。而且,它还允许完全安全的网络支持,而不需要为AWS保留服务器资源。最大的实例类型可以使用所有服务器Core。

Nitro VPC卡也支持一些网络加速特性。Elastic Fabric Adapter (EFA)使用Nitro Card网络加速特性来提供类似于许多超级计算机上的用户空间网络功能。希望利用EFA的客户可以使用OpenFabrics Alliance Libfabric包或使用更高级的编程接口,如流行的消息传递接口(MPI)或NVIDIA集体通信库(NCCL)。无论使用Libfabric、MPI还是NCCL,应用程序在与EFA通信时都会绕过操作系统,并且能够以更低的CPU使用率实现更一致的性能。MPI和NCCL是科学、工程和机器学习应用中常用的软件包,有的时候也用于分布式数据库。

2 Nitro EBS卡

Nitro EBS卡支持EBS的存储加速。所有实例的本地存储都实现为NVMe设备,用于EBS的Nitro Card支持透明加密,限制保护其他用户的系统性能特征,驱动器监控程序负责监控SSD磨损,它还支持裸金属实例类型。

远程存储以NVMe设备呈现,但是通过Fabric实现的NVMe,再次支持对EBS卷的访问,同时进行加密,并且不会影响其他EC2用户,即使在裸金属环境中也具有安全性。

Nitro EBS卡最初是在EC2 C4实例家族中推出的。

3 Nitro本地存储卡

用于本地存储的Nitro Card还实现了用于本地EC2实例存储的NVMe (Non-Volatile Memory for PCIe)。

4 Nitro控制器卡

Nitro控制器卡协调所有其他Nitro卡、服务器Hypervisor和Nitro安全芯片。利用Nitro安全芯片实现了信任的硬件根,并支持实例监控功能。它还为EBS的一个或多个Nitro卡实现了NVMe控制器功能。

5 Nitro安全芯片

Nitro安全芯片将所有I/O捕获到非易失性存储,包括BIOS和所有I/O设备固件以及服务器上的任何其他控制器固件。这是一种简单的安全方法,通用处理器根本无法更改任何固件或设备配置。不允许任何访问,而不是接受容易出错且复杂的确保访问正确并且被批准的任务。EC2服务器无法更新其固件。从安全的角度来看,这很好,但明显的问题是固件如何更新。AWS只通过Nitro系统对其进行更新。

Nitro安全芯片还实现了硬件信任根。该系统取代了统一可扩展固件接口(UEFI)的数千万行代码,并支持安全引导。在不受信任的情况下启动服务器,然后测量服务器上的每个固件系统,以确保没有任何被修改或以任何未经授权的方式更改。每个校验和(设备度量)都根据存储在Nitro安全芯片中的验证正确的校验和进行检查。

6 总结

Nitro系统支持关键网络、服务器、安全、固件补丁和监控功能,释放整个底层服务器供客户使用。这使得EC2实例可以访问所有的Core—不需要为存储或网络I/O保留任何一个Core。这两种方法都为我们最大的实例类型提供了更多的资源供客户使用——我们不需要为内务管理、监控、安全、网络I/O或存储预留资源。Nitro System还可以使用一个非常简单、轻量级的Hypervisor,它几乎总是处于静止状态,它允许我们安全地支持裸金属实例类型。

7 相关的评论(时间倒序)


@HC:

Hi, 詹姆斯。Nitro系统中的加密是否使用FIPS验证过的模块?谢谢,

Hamilton回复:

AWS FIPS 140-2的描述如下:https://aws.amazon.com/compliance/fips/。

@HC

谢谢James!该列表将EC2作为一个整体列出。我想应该包括Nitro系统吧。


@Lic

你好,James,我想知道Nitro控制器如何与ENA、EBS卡通信?

Hamilton回复

它在外部是不可见的,我们通常只发布帮助客户的数据。着重点不在这里。


@Antoine

你好,James,随着AWS Outpost的发布,我对Nitro系统进行了一些研究,发现它与IBM“大型机”内部架构有“一些”相似之处。AWS似乎是在以分布式的视角重新发明“大型机”。但我可能错了。

Hamilton回复

我们不是这么看的,但是,是的,你是对的,有一些相似之处。长期以来,将控制处理器与客户工作负载分离开来进行监视、配置和控制一直是IBM大型机的关键组件,除了其他独特的Nitro功能外,Nitro还完成了这些功能。

@Antoine

例如,在z14 IBM企业系统(不是最后一个)上,客户可以订购多达170个处理器用于应用程序处理,但z14的设计可以包含多达332个用于IO和协处理器的Power核心,以及多达322个RAS核心。IBM也一直在使用SmartNIC进行网络连接。IBM现在甚至使用它的“大型机”系统进行分布式。供你参考,我曾经是IBM的一员,但我很久以前就离开了,为了一个更分布式的IT世界。我继续调查和研究IT趋势和产品,包括现在变得非常富有的AWS。我最后关注的是为一个大客户提供的数据库产品和技术,正如你可能猜到的,我确实从Jim GRAY先生那里学到了一些见解。也感谢您的宝贵见解。

Hamilton回复

是的,如果您不关注价格/性能,IBM大型机从工程的角度来看是令人印象深刻的。我也是EMC DMX-3000存储阵列的忠实粉丝。在完全配置的情况下,该存储系统有100台Power-PC。而不是取样,100%的系统板是在高振动和电压水平变化很大的环境室中进行测试。通过的板卡集成到客户订购的机架配置,然后最后多达3个机架系统在装入卡车之前在一个环境室中进行测试。

如果您必须使用单一的硬件组件,并且它必须尽可能可靠,那么这些大型机类系统是令人印象深刻的。具有讽刺意味的是,在云中跨三个不同但相邻的数据中心冗余运行不太可靠的服务器,比在单个数据中心的大型机更可靠。更可靠,更便宜,对我们大多数人来说,更容易编程。


@ Igor

你好詹姆斯,当VM直接分配I/O设备时,Nitro Hypervisor是否能够实现内存复用? 谢谢

Hamilton回复

很难在不影响延迟的情况下超额订阅内存。它不会对平均延迟造成太大的伤害,但它会增加抖动,损害客户体验。所以,对于领先的AWS实例类型,如C, M, R等,我们不会过度订阅内存。但是,是的,你当然可以这样做。任何注册为接收缓冲区的内存都必须被固定,处理程序必须保持内存驻留。但是,当然,你说的方案是可以做到的。


@Yanqing Ma

是否有一个带有Nitro Hypervisor的主机操作系统?或者只是一个用户空间很小但没有内核的Nitro系统管理程序?

Hamilton回复

Nitro Hypervisor构建在一个最小化和修改过的Linux内核上,包括负责为处理器的硬件虚拟化特性编程的KVM子系统。在我们的体系结构中,它不是通用的操作系统内核。Nitro Hypervisor的Linux内核部分不支持任何类型的网络,支持Nitro Hypervisor的Linux内核不需要任何其他功能,唯一目的:分区CPU和内存、将Nitro卡虚拟函数分配给实例、监控、度量和硬件错误处理。

@Jli

你好,詹姆斯。Nitro管理程序是一个简化的内核,它只完成分区和板卡分配。你认为将这些功能合并到固件(如Linuxboot或UEFI)中是否可行且有意义?

众所周知,一些关键任务服务器提供“逻辑分区固件”,如PowerVM和KunLun 9008v5。

Hamilton回复

固件这个词通常适用于直接安装在持久内存中的设备上的软件,它通常“接近硬件”,相当小,没有操作系统。但是,它仍然是软件。您要问的是,使用硬件辅助来支持虚拟机是否有意义。是的,当然。现代处理器中充满了它,我们的Nitro程序就是使用广泛硬件支持的一个很好的例子。好的软件可以很好地获得低延迟,但需要硬件才能将开销降到最低,更重要的是,减少抖动。硬件支持是获得较小且一致的虚拟化开销的最简单方法。


@NR

Nitro卡可以在硬件级别帮助加密和解密? 另外,发送和接收IPSEC

Hamilton回复

Nitro为网络和存储加密提供硬件加速,但是在实例上终止的IPSEC加密/解密,不需要Nitro实例的支持。

@EG

嗨,詹姆斯,一如既往的伟大博客。是否可以讨论一下您能够从计算和网络(或从缓解网络/计算瓶颈的存储)中提取的一些效率吗?在软件、人工智能或机器学习方面,你做了哪些与同行不同的具体工作,从而显著提高了上述方面的资本支出强度?在数据中心的流量保持强劲增长的情况下,这些措施是否有助于让事情变得更热或更有效率?有关于计算(CPU利用率,类似Annapurna的CPU)和网络(数据中心交换/路由)的具体例子吗?我们将一如既往地感谢您的投入。

Hamilton回复

1)在过去的10年里,我们的网络总成本大幅下降,因此我们可以提供更多的网络资源。我们现在提供了几种具有100Gbps网络的实例类型,并计划继续扩展这一系列产品。Annapurna和Nitro使之成为可能。

2)使用Nitro硬件卸载,我们可以运行非常高的网络和存储带宽(和每秒高请求),而无需预留CPU内核用于内部处理或运行超额订阅。在网络和存储繁忙的时候,客户依然可以获得资源。硬件卸载使所有Core归客户使用,它不必与基础设施争夺资源。它们不会遭遇TLB资源争用,或者只有在网络或存储不繁忙时才有可用的资源。

3)存储没有负载。用于存储的硬件协助减轻了客户通用处理器的负担,允许加密而不受影响,并减少了存储请求时间的高可变性。

@ Andrew

嗨,詹姆斯!如果网络的总体成本在过去十年大幅下降,为什么AWS的网络费用仍然如此之高?

Hamilton回复

是的,关于你的问题,在过去的十年里,网络发生了很多事情。我们已经把带宽提高了几个数量级,这还不错。抖动的改善幅度甚至更大。这十年来,可用性急剧上升。通过直连、VPC、负载均衡、裸金属支持、O/S旁路和其他一系列改进,网络支持的丰富程度大大提高。但是,我确实听到你说的,我们主要关注的是提供“更多”和“更好”的网络,而不是降低成本。其理由是,网络只是大多数客户账单的一小部分,大多数客户希望摆脱网络的复杂细节约束,希望拥有更多的网络能力,而不是让我们把它当作一种商品,把所有注意力都放在降低成本上。但我知道,有些工作负载的网络成本很高,甚至占主导地位,成本确实很重要。

我们通常都有一个很好的记录,能够发现成本的降低并将其传递出去。在过去的十年里,我们在S3的价格下降方面取得了不错的成绩,在数据库总体成本方面取得了惊人的成绩,在计算方面也取得了不错的成绩,我对我们在网络方面所做的一些工作感到自豪,但我听到你要求我们在网络方面的更多投资显示出成本的降低。


@ Alex Crisara

是否计划通过Nitro支持NVME /网络设备之间的对等DMA ?

https://nvmexpress.org/wp-content/uploads/Session-2-Enabling-the-NVMe-CMB-and-PMR-Ecosystem-Eideticom-and-Mell...pdf

Hamilton回复

在短期内没有什么,但是谢谢你的建议。


@Yan Zhao

詹姆斯, 您提到过,Nitro卡控制器还为一个或多个用于EBS的Nitro卡实现NVMe控制器功能。我很好奇为什么不为EBS本身制作Nitro Card作为NVMe控制器,而不是通过Nitro Card控制器。或者我猜Nitro卡控制器只是在控制平面上,但所有的NVMe流量仍然通过Nitro卡进行EBS。非常感谢。

Hamilton回复

我很确定你是对的,就是控制平面。


@Haider Rizvi

嗨,吉姆, 很高兴看到Nitro发挥作用。问题:对EBS的影响,是否有任何文档/演示可以说明新Nitro卡/Hypervisor序对EBS性能的预期。

Hamilton回复

没有,据我所知目前还没有。


@ Jie Tang

嗨,詹姆斯。对于Nitro网卡,无论是VPC还是EBS,网络流量都是25Gb, PCIE Gen3X8 /16可以处理任何问题。但是对于本地即时存储,单个NVMe SSD将是Gen3X4,所以一个Nitro只能支持最多4个NVMe SSD,标准服务器可以支持超过4个NVMe SSD, Nitro如何处理这个问题?为另一个4 NVMe SSD添加一个Nitro芯片?

Hamilton回复

如果需要更多的资源,可以使用额外的Nitro卡,多个AWS实例类型使用多个卡。


@Mz

嗨! 在Re: invent HPC Track上的的另一个演讲中提到,在SRD中使用的是Nitro for VPC: EFA,传输协议硬件也加速了吗?接下来的Nitro不仅在EC2和网络基础设施加速,我想知道应用程序层加速的具体事情(像多媒体的CDN,图像和视频,不仅延迟和吞吐量,编码更加重要,甚至深度数据包检测和DDoS防护)?

可以链接到你博客上关于NW的硬件加速的文章:

https://perspectives.mvdirona.com/2009/12/networking-the-last-bastion-of-mainframe-computing/

Hamilton回复

是的,你是对的。VPC中的Nitro也支持SRD协议。谢谢你的建议。


@Jerry Harvrove

这是我去年在“re:Invent”上最喜欢的演讲之一,这里是我对安东尼CMP303会议的视觉笔记的链接:https://www.awsgeek.com/posts/AWS-reInvent-2018-CMP303-Powering-Next-Gen-EC2-Instances-Deep-Dive-into-the-Nitro-System/

Hamilton回复

我完全同意。这是我们在去年的会议上提供的一些最详细和最有趣的材料。谢谢你的提示。

(正文完)

0 人点赞