はじめに
本記事は、ラスベガスで行われているre:Invent 2025の参加レポートです。
現地の12/02(火)に行われた、EC2インスタンスのパフォーマンスに関する講義形式のセッションに参加したレポートです。
セッションについて
タイトル
[CMP405-R1]Everything you've wanted to know about performance on EC2 instances [REPEAT]
概要(日本語訳)
最高のコンピューティングパフォーマンスを得ることはある種のアートであり、低レベルの詳細を知ることが大いに役立ちます。
このコードトークでは、メモリトポロジー、ハードウェアカウンターへのアクセス方法、ハイパースレッディングの副作用を考慮する方法、パフォーマンステストを適切に実行してレイテンシを最適化する方法など、知りたい詳細をすべてカバーします。
セッションタグ
- セッションタイプ: Chalk talk
- レベル: 400 – Expert
- 形式: Interactive
- トピック: Compute
- 関心領域: Cost Optimization
- 対象ロール: Data Engineer, Developer / Engineer, DevOps Engineer
- 対象サービス: Amazon Elastic Compute Cloud (Amazon EC2), Amazon Q, Amazon EC2 - Graviton
スピーカー
- Seth Fox, Head of Solutions Architecture Amazon EC2, Amazon Web Services
- Arthur Petitpierre, WW Graviton & Perf Specialist SA, Amazon Web Services
スケジュール
- 日時: 12月2日(火)
- 時間: 16:30 - 17:30 (PST)
- 場所: Mandalay Bay | Level 3 South | Jasmine H
ポイント
このセッションのポイントです。
- EC2インスタンスの命名規則と、世代によるハードウェア構成の統一化
- Nitro Systemによる仮想化オーバーヘッドの排除とセキュリティ
- CPUアーキテクチャ(x86 vs Graviton)とSMT(Hyperthreading)の影響
- メモリトポロジー(NUMA)がパフォーマンスに与える影響
EC2の名前と意味
セッションでは、c8gn.2xlarge を例に、EC2インスタンスの命名規則が解説されました。
- C: インスタンスファミリー(Compute Optimized)。メモリ対vCPU比率は1:2。
- 8: 世代(Generation)。数字が大きいほど新しい。
-
g: プロセッサ属性。
gはGravitonベースであることを示す。 -
n: 追加機能。
nは高速なネットワーク帯域や機能を持つことを示す。 - 2xlarge: サイズ。vCPU数とメモリ量を決定する(例: 2xlargeは8 vCPU)。
インスタンスファミリーとハードウェアの統一
以前(第5世代まで)は、C系、M系、R系でクロック周波数やコア数が異なる場合があり、パフォーマンスプロファイルが異なっていました。
しかし、現在の世代(第6世代以降のx86、および全世代のGraviton)では、これらが統一されています。
C、M、Rの違いは、メモリ搭載量(RAM)のみとなっています。プロセッサ自体は同じものが使用されています。
- Compute Optimized (C): メモリ対vCPU比率 1:2
- General Purpose (M): メモリ対vCPU比率 1:4
- Memory Optimized (R): メモリ対vCPU比率 1:8
これにより、インスタンスタイプの選択がよりシンプルになり、メモリ要件に合わせてファミリーを選択しやすくなりました。
プロセッサと同時マルチスレッディング (SMT)
AWSはIntel, AMD, Graviton, Apple Siliconといった多様なプロセッサを提供しています。
最近のトレンドとして、ソケットあたりのコア数が増加し、vCPUあたりの価格性能比が向上しています。
SMT (Simultaneous Multi-Threading) vs No SMT
x86系(Intel/AMD)とGravitonでは、スレッディングのアプローチが異なります。
-
x86 (Intel/AMD): SMT(Hyperthreading)が有効。2 vCPU = 1物理コア。
- 低負荷時はレイテンシが良いが、高負荷時にスケーリングが鈍化する傾向がある。
-
Graviton: SMTなし。1 vCPU = 1物理コア。
- 物理コアを占有するため、パフォーマンスがリニアにスケールしやすい(使用率80%以上でも性能が伸びる)。
AMDの第7世代以降もSMTが無効化されており、物理コアに直接マップされる設計になっているとの言及がありました。
仮想化スタックとNitro System
AWS Nitro Systemの導入により、ハイパーバイザーの機能が専用ハードウェア(Nitro Cards)にオフロードされました。
- パフォーマンス: ベアメタルインスタンスと仮想インスタンスの性能差がほぼなくなりました。マイクロ秒単位のレイテンシを追求する場合以外は、管理の容易な仮想インスタンスでも十分な性能が得られます。
- ノイジーネイバー: ハイパーバイザーレベルのノイズが排除され、CPUリソースも静的に割り当てられるため、他テナントの影響を受けにくくなっています。
- セキュリティ: ハイパーバイザーからインスタンスのメモリにアクセスできない設計になっており、セキュリティが向上しています(Downfallなどの脆弱性に対しても耐性があるとのこと)。
メモリトポロジーとNUMA
「地球は平らではない(Earth is not flat)」という比喩で、メモリトポロジーの重要性が語られました。
最近のプロセッサ(例: AMD Genoaベースのc7a)は、複数のCCX(Core Complex)で構成されており、それぞれがL3キャッシュを持っています。
- 同一CCX内のキャッシュアクセスは高速。
- 異なるCCXや、異なるソケット(NUMAノード)へのメモリアクセスはレイテンシが増加する。
特に、マルチソケットの大きなインスタンスサイズ(例: 48xlargeなど)を使用する場合、
リモートソケットへのメモリアクセスが発生すると、ローカルアクセスに比べてレイテンシが最大2倍程度になる可能性があります。
lstopo コマンドなどでトポロジーを確認し、プロセスの配置(Affinity)を意識することが、極限のパフォーマンスを引き出す鍵となります。
Q&A / Discussion
セッション中の質疑応答で取り上げられた主なトピックです。
Q: インスタンス名の「n」は何を意味しますか?
A: より高速な帯域幅(最大200Gbpsなど)や、新しいNitroカードによる低レイテンシ機能などを意味します。
Q: HPCインスタンスとMインスタンスの違いは?
A: プロセッサ自体は同じですが、HPCインスタンスは特定の用途(密結合アプリなど)向けに「リングフェンス」されています。EBS帯域や外部NW帯域が制限される代わりに、VPC内の通信に最適化されています。また、コアを間引いて(Depopulate)メモリ帯域を確保したモデルもあります。
Q: Gravitonのコストメリットは?
A: 同世代のx86インスタンスと比較して約20%安価で、価格性能比は最大40%優れています。ただし、AVX命令を多用する特定のワークロードではAMDの方が有利な場合もあります。
Q: メモリトポロジーの確認方法は?
A: Linuxであれば lstopo や lscpu コマンドで確認可能です。Macインスタンスはベアメタルですが、メモリはフラットな構造です。
まとめ
EC2のパフォーマンスを最適化するには、単にインスタンスサイズを大きくするだけでなく、以下の要素を理解することが重要です。
- 適切なインスタンスファミリーの選択(C, M, Rはメモリ比率の違い)
- プロセッサの特性(SMTの有無)
- Nitro Systemによる恩恵(ベアメタルに近い性能)
- メモリトポロジー(NUMA、CCX)の影響
これらを理解することで、「走るコード」を「飛ぶコード」に進化させることができます。
[re:Invent 2025] 参加レポート一覧はこちら (随時更新)
参考URL
AWS blog post on bar-metal performance: https://a.co/ibc7Wgm