

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Graviton 实例和容器
<a name="net-graviton"></a>

## 概述
<a name="net-graviton-overview"></a>

AWS Graviton 实例由 ARM 处理器提供支持，旨在为在亚马逊弹性计算云 (Amazon EC2) 中运行的云工作负载（包括在其中运行的容器）提供最佳的性价比。 AWS AWS目前，Amazon EC2 上有三代 Graviton 可供使用。本指南重点介绍如何将 Graviton 2 和 3 与 .NET 应用程序配合使用，因为使用 Graviton 的最新版本能够显著节省成本。请记住，Graviton 实例仅运行 Linux 操作系统。因此，Graviton 实例对于在 Linux 上运行的 .NET 应用程序来说是一个非常出色的服务，但对于 Windows 操作系统或遗留的 .NET Framework 应用程序来说则并非可行之选。

Graviton 3 的效率比同类的 EC2 实例高出 60%，性能则提升了最多 40%。本指南重点介绍了使用 Graviton 所带来的成本效益，但需要指出的是，Graviton 还具有提升性能和增强环境可持续性等额外优势。

## 成本影响
<a name="net-graviton-cost"></a>

当您切换为使用 Graviton 时，最多可以节省 45% 的成本。在将任何遗留的 .NET Framework 应用程序重构到现代的 .NET 版本之后，您便能够使解锁使用 Graviton 实例的能力。迁移到 Graviton 是一种适用于 .NET 开发者的高效成本优化手段。

下表中的示例展示了通过迁移到 Graviton 实例所能实现的性能改进潜力。



![\[Graviton 性能图\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/graph_graviton_performance.png)


有关上图中用于创建结果的基准测试方法的完整细分和解释，请参阅 Compute 博客中的 “使用 [AWS Graviton2 为.NET 5 提供支持：基准](https://aws.amazon.com/blogs/compute/powering-net-5-with-aws-graviton2-benchmark-results/)”。 AWS 

效率提升的原因之一在于 x86 和 Graviton 中的 vCPU 意义存在差异。在 x86 架构中，vCPU 是通过超线程技术实现的一个逻辑内核。在 Graviton 中，vCPU 等同于一个物理内核，这使得 vCPU 能够完全投入到工作负载中。

使用 Graviton2 的结果是，其性价比比同类的 x86/x64 实例高出 40%。Graviton3 相较于 Graviton2 具有以下优势：
+ 性能得到提升，提高达 25% 以上
+ 最高比浮点性能提高两倍
+ 最高比加密工作负载性能快两倍
+ 最高比机器学习性能提高三倍

此外，Graviton3是云中第一个以内存为特色的实例。 DDR5

下表显示了基于 Graviton 的实例与同等的基于 x86 的实例在成本节省方面的差异。

此表显示 Graviton 节省了 19.20% 的成本。


****  

| 实例类型 | 架构 | vCPU | 内存（GB） | 每小时成本（按需） | 
| --- | --- | --- | --- | --- | 
| t4g.xlarge | ARM | 4 | 16 | 0.1344 美元 | 
| t3.xlarge | x86 | 4 | 16 | 0.1664 美元 | 

此表显示 Graviton 节省了 14.99% 的成本。


****  

| 实例类型 | 架构 | vCPU | 内存（GB） | 每小时成本（按需） | 
| --- | --- | --- | --- | --- | 
| c7g.4xlarge | ARM | 16 | 32 | 0.5781 美元 | 
| c6i.4xlarge | x86 | 16 | 32 | 0.6800 美元 | 

在考虑 Graviton 时，测试您的应用程序的性能表现非常重要。Graviton 不能取代扎实的软件开发流程。您可以通过测试来验证是否充分利用了底层计算资源。

## 成本优化建议
<a name="net-graviton-rec"></a>

有几种方法可以利用 Graviton 处理器/实例。本部分将指导您了解从使用 x86 架构的计算机转换到 Graviton（ARM）实例所需的各项更改。

### 更改 Lambda 中的运行时设置
<a name="net-graviton-rec-runtime-lambda"></a>

我们建议您在中切换运行时设置 AWS Lambda。有关更多信息，请参阅 Lambda 文档中的[修改运行时环境](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-modify.html)。由于 .NET 是一种编译语言，因此您必须遵循一套构建流程才能使其正常运行。有关如何执行此操作的示例，请参阅。 [NET 在 Graviton 上线](https://github.com/aws/aws-graviton-getting-started/blob/main/dotnet.md) GitHub

### 容器
<a name="net-graviton-rec-containers"></a>

对于容器化工作负载，请创建多架构容器映像。您可以通过在 Docker 构建命令中指定多个架构来实现这一点。例如：

```
docker buildx build -t "myImageName:latest" --platform linux/amd64,linux/arm64 --push .
```

您也可以使用诸如之类的工具 AWS Cloud Development Kit (AWS CDK) 来帮助[编排构建](https://aws.amazon.com/blogs/devops/build-and-deploy-net-web-applications-to-arm-powered-aws-graviton-2-amazon-ecs-clusters-using-aws-cdk/)。有关 Docker 的示例，请参阅 Docker 文档中的[使用 Docker 桌面为 Arm 和 x86 构建多架构映像](https://www.docker.com/blog/multi-arch-images/)。

### Amazon EC2
<a name="net-graviton-rec-ec2"></a>

要从 x86/x64 迁移到 ARM，请在编译步骤中以 ARM 架构为目标。在 Visual Studio 中，你可以创建一个 ARM64 CPU。有关说明，请参阅 Microsoft 文档中的[将项目配置为以 Arm64 和其他平台为目标](https://learn.microsoft.com/en-us/visualstudio/ide/how-to-configure-projects-to-target-platforms?view=vs-2022)。

如果您使用的是 .NET CLI，那么在 ARM 计算机上运行该版本会生成与 Graviton 兼容的版本。要观看演示，请在 Gr [AWS aviton2 上开启 Arm64 的情况下观看 “加速.NET 6 性能](https://www.youtube.com/watch?v=iMlyZI9NhFw)”。 YouTube依赖项问题会导致编译时间错误，而这些错误可以逐一进行解决。只要存在适用于任何依赖项的 ARM 库，那么转换过程应该会相对简单顺利。

## 其他资源
<a name="net-graviton-resources"></a>
+ [如何在 Amazon ECS 上为 ARM 构建容器并使用 Graviton 和 Spot 实例进行保存（博客](https://aws.amazon.com/blogs/containers/how-to-build-your-containers-for-arm-and-save-with-graviton-and-spot-instances-on-amazon-ecs/)）AWS 
+ [AWS Lambda 由 AWS Graviton2 处理器提供支持的功能 — 在 Arm 上运行您的功能，性价比最高可提高 34%](https://aws.amazon.com/blogs/aws/aws-lambda-functions-powered-by-aws-graviton2-processor-run-your-functions-on-arm-and-get-up-to-34-better-price-performance/)（博客）AWS 
+ [将 AWS Lambda 函数迁移到基于 ARM 的 AWS Graviton2](https://aws.amazon.com/blogs/compute/migrating-aws-lambda-functions-to-arm-based-aws-graviton2-processors/) 处理器（博客）AWS 
+ 使用（博客）在 [ARM 支持的 AWS Graviton 2 Amazon ECS 集群 AWS CDK上构建和部署.NET Web 应用程序](https://aws.amazon.com/blogs/devops/build-and-deploy-net-web-applications-to-arm-powered-aws-graviton-2-amazon-ecs-clusters-using-aws-cdk/)AWS 
+ [Graviton Fast Start — 一项帮助将工作负载转移到 AWS Graviton 的新计划](https://aws.amazon.com/blogs/aws/graviton-fast-start-a-new-program-to-help-move-your-workloads-to-aws-graviton/)（博客）AWS 
+ [使用 AWS Graviton2 为.NET 5 提供动力：基准测试](https://aws.amazon.com/blogs/compute/powering-net-5-with-aws-graviton2-benchmark-results/)（博客）AWS 