EC2のx86 CPUを使い分けてみよう
こんにちは。ゲームソリューション部の出村です。
みなさん、サーバー運用してますか? サーバー運用では、サーバーレスで運用される事が多いでしょうが、EC2も何かと利用する機会は多いことでしょう。
このエントリーではEC2のCPUについて少し深く解説していきます。Graviton、Intel、AMDといったCPUについて解説し、その後に64ビット(x86)CPUであるIntelとAMDの違い、得意不得意について触れていきます。
EC2で利用可能なCPUの種類
EC2は、LinuxサーバーやWindowsサーバーが構築できるサービスです。EC2では複数のCPUアーキテクチャに対応していますので、最初に種類や違いについて解説します。ご存じの方は読み飛ばしてください。
EC2で指定できるCPUは3種類あります(Graviton、Intel、AMD)。動作するソフトウェアで分類すると、GravtionはArm向けソフトウェアが動作し、Intel、AMDは64ビット(x86)向けソフトウェアが動作します。
EC2インスタンスを構築する際にアーキテクチャを選択しますが、「64ビット(Arm)」はGraviton、「64ビット(x86)」は、IntelもしくはAMDのCPUを搭載したインスタンスを選択することを指しています。IntelとAMDのCPUの選択は、インスタンスタイプで選択できます。原則として、c7iなどiがつくものはIntel、c7aなどaがつくものはAMDのCPUを搭載しています。
「64ビット(Arm)」と「64ビット(x86)」の特徴的な違い
最初に断っておきますが、Webサーバー、DBサーバーなど一般的な利用方法であれば「64ビット(Arm)」と「64ビット(x86)」のいずれを選択しても違いを感じる事はあまりないでしょう。というのも、どちらも同じソフトウェアが動作するためです。
「64ビット(Arm)」と「64ビット(x86)」の特徴的な違いとしては、処理速度とインスタンス料金となります。大まかには「64ビット(x86)」は性能がよいがインスタンス料金が高価、「64ビット(Arm)」は、64ビット(x86)よりも演算性能が低くなるもののインスタンス料金が安価となります。
この違いは、自動車で例えるならば普通乗用車と軽自動車のようなものです。利用目的やコストなどを考慮して「64ビット(Arm)」と「64ビット(x86)」を使い分けるのが望ましいです。
IntelとAMDの違いについて
64ビット(x86)のEC2には、CPUとしてIntelとAMDが提供されてます。これらはどの点で異なるのかを解説します。
ソフトウェアの実行環境としてみると、同じソフトウェアが動作します。同じソフトウエアが動作するとはいえ、IntelとAMDではCPUを設計している企業が異なるため、さまざまな違いがります。違いとは、処理性能、消費電力といったハードウェア的な面です。そして、インスタンスタイプも異なるためインスタンス料金も異なります。
IntelとAMDの違いを調べる
同じソフトウェアが動作しますが、IntelとAMDでは、同一のソフトウェアを動作させた場合、どのような傾向が見られるのかc7a.largeとc7i.largeを比較してみます。ここではベンチマークソフトとしてUnixBenchを利用します。なお、m7a, m7iといった同世代の他インスタンスでもCPUは同じです。
(注意)ベンチマークの結果は、性能の優劣ではなくCPU性能の傾向を捉えるための根拠として記載しています。
以下の環境で計測を行いました。
- UnixBench 5.1.3
- Amazon Linux 2
- 東京リージョン
数値が大きい方が優れている事を指しています。
c7a.large(シングルコア) | c7a.large(マルチコア) | c7i.large(シングルコア) | c7i.large(マルチコア) | |
---|---|---|---|---|
Dhrystone 2 using register variables (整数演算) | 55770353.6 | 112257255.5 | 58161712.2 | 77587670.6 |
Double-Precision Whetstone(浮動小数点演算) | 8915.3 | 17834.4 | 8573.9 | 15668.6 |
傾向と対策
一般的にIntelとAMDのCPUは、シングルスレッドで動作するソフトウェアはIntelが有利、マルチスレッド、マルチコアで動作するソフトウェアはAMDが有利と言われています。
その傾向は、EC2でも見て取れます。シングルコアでの整数演算はc7i.large(Intel CPU)がよい結果となっています。一方、マルチコアでの整数演算ではc7a.large(AMD CPU)がよい結果になっています。
浮動小数点の観点からみると、シングルコア、マルチコアともにc7a.large(AMD CPUを搭載)がわずかによい結果といえます。
そのため、Pythonなどで作成したスクリプトのようなシングルスレッドで実行するソフトウェアを頻繁に実行する場合はc7iインスタンスを選択し、逆にマルチコアで動作するソフトウェアの実行、もしくは浮動小数点演算を多用したソフトウェアは、c7aインスタンスを選択すると処理性能が改善されることがあります。
まとめ
このように、CPUによって実行するソフトウェアの得意不得意があることがベンチマークからも分かりました。ソフトウェアを変更せず、EC2のインスタンスタイプをc7iからc7aへ、もしくはその逆へと変更することで、手軽に処理性能アップすることもできるでしょう。
ソフトウェアの処理性能改善を検討している場合は、まずこの点から試してみるのもよいでしょう。