

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Graviton 執行個體和容器
<a name="net-graviton"></a>

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

AWS Graviton 執行個體採用 設計的 ARM 處理器 AWS ，可為在 Amazon Elastic Compute Cloud (Amazon EC2) 中執行的雲端工作負載提供最佳價格效能，包括在其中執行的容器 AWS。目前有三代的 Graviton 可用於 Amazon EC2。本指南著重於搭配 .NET 應用程式使用 Graviton 2 和 3，因為使用最新版本的 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_tw/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/graph_graviton_performance.png)


如需用於在上圖中建立結果的基準測試方法的完整明細和說明，請參閱 AWS 運算部落格中的[使用 AWS Graviton2：基準測試為 .NET 5 提供支援](https://aws.amazon.com/blogs/compute/powering-net-5-with-aws-graviton2-benchmark-results/)。

提升效率的其中一個原因是 x86 和 Graviton 之間 vCPU 意義的差異。在 x86 架構中，vCPU 是超執行緒實現的邏輯核心。在 Graviton 中，vCPU 相當於實體核心，可讓 vCPU 完全投入工作負載。

與相當的 x86/x64 執行個體相比，Graviton2 的結果是價格效能提升 40%。Graviton3 透過 Graviton2 提供下列項目：
+ 提升效能設定檔，效能提升 25%
+ 浮點效能高達兩倍
+ 密碼編譯工作負載效能提升高達兩倍
+ 機器學習效能提升高達三倍

此外，Graviton3 是雲端中第一個採用 DDR5 記憶體的執行個體。

下表顯示 Graviton 型執行個體與同等 x86 型執行個體之間節省成本的差異。

此表顯示 Graviton 節省 19.20%。


****  

| 執行個體類型 | Architecture | vCPU | 記憶體 (GB) | 每小時成本 （隨需） | 
| --- | --- | --- | --- | --- | 
| t4g.xlarge | ARM | 4 | 16 | 0.1344 美元 | 
| t3.xlarge | x86 | 4 | 16 | 0.1664 美元 | 

此表顯示 Graviton 節省 14.99%。


****  

| 執行個體類型 | Architecture | 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 是編譯語言，因此您必須遵循建置程序才能讓此運作。如需如何執行此操作的範例，請參閱 GitHub 中 [Graviton 上的 .NET](https://github.com/aws/aws-graviton-getting-started/blob/main/dotnet.md)。

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

針對容器化工作負載，建立多架構容器映像。您可以在 Docker build 命令中指定多個架構來執行此操作。例如：

```
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 架構設為目標。在視覺化工作室中，您可以建立 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 相容的組建。若要觀看示範，請觀看 [YouTube 上的使用 Arm64 on AWS Graviton2 加速 .NET 6 效能](https://www.youtube.com/watch?v=iMlyZI9NhFw)。 YouTube 相依性問題將導致編譯時間錯誤，然後可以個別解決。只要有任何相依性的 ARM 程式庫，轉換應該相對簡單。

## 其他資源
<a name="net-graviton-resources"></a>
+ [如何在 Amazon ECS 上使用 Graviton 和 Spot 執行個體建置 ARM 容器並儲存](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 部落格）
+ [使用 建置並部署 .NET Web 應用程式至 ARM 支援的 AWS Graviton 2 Amazon ECS 叢集 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/) (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 