コスパ最高?GCPでAMDのインスタンスをベンチマークしてみた
みなさんこんにちは
システムソリューション部の神原です。
ビヨンドには新卒で入社しましたが、ずっとブログを書かずに気づけば3年目になっていました。
今回が初めてのブログ投稿です。
突然ですが、ここ数年、AMDのCPUが個人的にアツいです。
2017年に最初のZenアーキテクチャのCPUが発売され、高いマルチスレッド性能が話題となりました。
その後もZen+, Zen2...と改良したアーキテクチャのCPUが順次投入され、特に昨年の10月に発表されたZen3アーキテクチャのCPUは、マルチスレッド性能は言うに及ばずシングルスレッド性能も大幅に向上し多方面で非常に強力な仕上がりでした。
神原も「次の自作PCはAMDのCPUで!」と意気込んでいたのですが、色々あってまだ作れていません。5800X欲しいです。
さて、そんなAMDのZen系マイクロアーキテクチャを採用したCPUはサーバ向けにも展開されています。
サーバ向けの製品はAMD EPYCというブランドで展開されており、EPYCの特徴については弊社の大原がブログ記事にまとめていますので、よろしければ御覧ください。
CPUにEPYCを採用したサーバ/インスタンスはAWSを始めとする各クラウドプラットフォームでも利用可能です。
今回はGCPでEPYCを採用したCompute Engineインスタンスを立ち上げ、IntelのXeonを採用したインスタンスとベンチマークをとって比較してみたいと思います。
GCP Compute EngineにおけるAMD EPYC
Google Compute Engineでは、複数のマシンタイプでEPYCを利用可能です。
- E2 VM
- N2D VM
- Tau T2D VM
ベンチマークではN2D VMを使用します。N2DはIntel Xeonが採用されているN2 VMのAMD EPYC版という立ち位置で、CPUの差による比較が容易であることが選定理由です。
インスタンスの選定
まずはベンチマーク用のインスタンスを選びます。
EPYCインスタンスのマシンタイプはN2D VMで、以下のスペック、構成にしました。EPYCにも世代があり、公式ドキュメントによるとN2D VMで利用可能なのは第二世代EPYCのRomeのようです。ちなみに最新のEPYCは第三世代Milanです。
CPU Brand | AMD EPYC Rome |
vCPU | 2 |
Memory | 8GB |
Disk | バランス永続ディスク 20GB |
OS Image | centos-7-v20211105 |
対抗のIntel XeonインスタンスはN2 VMで、以下のスペック、構成にしました。といってもスペックに不均衡があると比較にならないので、CPUのブランド以外はEPYCインスタンスと全く同じにしています。Xeonの世代はIce Lake or Cascade Lakeのどちらかのようですが、どちらにせよかなり新し目の世代です。
CPU Brand | Intel Xeon (Ice Lake or Cascade Lake) |
vCPU | 2 |
Memory | 8GB |
Disk | バランス永続ディスク 20GB |
OS Image | centos-7-v20211105 |
今回はこの構成でベンチマークを取って比較していきます。
CPUの確認
インスタンスを立ち上げたら、とりあえずSSHでログインします。
GCPはコンソールにSSHが統合されているので、ブラウザから簡単にサーバにログイン出来て便利ですね。今回のように使い捨ての用途であれば、鍵の用意などを考慮しなくて済むので楽です。
SSHでログインしたら、おもむろにlscpuを打ってみます。まずはEPYCインスタンスです。
# lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 2 On-line CPU(s) list: 0,1 Thread(s) per core: 2 Core(s) per socket: 1 Socket(s): 1 NUMA node(s): 1 Vendor ID: AuthenticAMD CPU family: 23 Model: 49 Model name: AMD EPYC 7B12 Stepping: 0 CPU MHz: 2249.998 BogoMIPS: 4499.99 Hypervisor vendor: KVM Virtualization type: full L1d cache: 32K L1i cache: 32K L2 cache: 512K L3 cache: 16384K NUMA node0 CPU(s): 0,1 Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc art rep_good nopl nonstop_tsc extd_apicid eagerfpu pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext retpoline_amd ssbd ibrs ibpb stibp vmmcall fsgsbase tsc_adjust bmi1 avx2 smep bmi2 rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 clzero xsaveerptr arat npt nrip_save umip
Model nameはAMD EPYC 7B12となっています。他にもキャッシュの構成が見えますね。
アーキテクチャは当然x86_64となっており、Intel Xeonと命令セットに互換性があります。
SIMD命令はAVX2までの対応です。ただ、SIMD命令自体が一般的なサーバ用途では利用機会が限られるものなので、これで必要十分とも考えられます。
次にXeonインスタンスで実行した結果です。
# lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 2 On-line CPU(s) list: 0,1 Thread(s) per core: 2 Core(s) per socket: 1 Socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 85 Model name: Intel(R) Xeon(R) CPU @ 2.80GHz Stepping: 7 CPU MHz: 2800.252 BogoMIPS: 5600.50 Hypervisor vendor: KVM Virtualization type: full L1d cache: 32K L1i cache: 32K L2 cache: 1024K L3 cache: 33792K NUMA node0 CPU(s): 0,1 Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 arat avx512_vnni md_clear spec_ctrl intel_stibp arch_capabilities
Model nameがIntel(R) Xeon(R) CPU @ 2.80GHzとなっていて、具体的な型番はマスクされているようです。
また、Flagsにavx512系のフラグが追加されており、CPUがAVX512(512bit幅のSIMD命令)に対応していることがわかります。
EPYCインスタンスではAVX2(256bit幅のSIMD命令)までの対応だったので、動画のエンコードや画像変換といったSIMD命令を利用できる処理(及び対応したプログラム)では高い性能を発揮しそうです。
ベンチマークの準備
今回はベンチマークソフトとしてUnixBenchを使用します。
UnixBenchの解説、導入手順についてはIDCF様が非常にわかりやすい記事を公開されているので、参考にさせていただきました。
EPYCインスタンス、Xeonインスタンスともに同じイメージ(centos-7-v20211105)から起動しており、ベンチマーク実施前に yum -y update を一度掛けておきます。
実行環境のカーネルやGCC、UnixBenchのバージョンは以下のとおりです。
Linux Kernel | 3.10.0-1160.49.1.el7.x86_64 |
GCC | 4.8.5 20150623 (Red Hat 4.8.5-44) |
UnixBench | Version 5.1.3 |
UnixBenchは引数無しで実行すると、並列数1でベンチマークを行ったあとにそのまま続けて論理CPU数の並列数でベンチマークを行います(計2回)
今回はインスタンスのスペックとして2vCPUを指定しているので論理CPU数は2となるので、並列数も2となります。
次項の結果では、並列数1の結果と並列数2の結果を両方載せます。
ベンチマークの結果
まず、並列数1の結果です。
青棒がXeonインスタンス、赤棒がEPYCインスタンスの結果になり、値は大きい方が良い結果を意味します。
一番下の System Benchmarks Index Score(Overall) がベンチマークのトータルスコアで、それ以外の項目が個別のテストの結果です。
結果を見ると、全体としてAMDインスタンスが良い結果を出しています。トータルスコアもXeonインスタンスが1096.6に対してAMDインスタンスは1288.2となっており、有意な差が生じています。個別の項目を見ると、System Call OverheadやFile Copyといった項目で特に高い性能を示しているようです。
システムコール呼び出しやファイルコピーはサーバ用途でも重要な指標なので、こういった項目の性能が高いのは素晴らしいですね。
次に、並列数2の結果です。
並列数1と同様に青棒がXeonインスタンス、赤棒がEPYCインスタンスです。
こちらもEPYCインスタンスが優勢です。全体的にXeonインスタンスに対してEPYCインスタンスの方が良い結果を出しています。
また、ここで注目したいのがトータルスコアで、Xeonインスタンスが1545.4に留まるのに対してEPYCインスタンスは2253.1までスコアを伸ばしています。
並列数2のXeonインスタンスは並列数1のときの約1.4倍のスコアですが、並列数2のEPYCインスタンスは並列数1のときの約1.75倍になっています。
あくまでUnixBenchという単一のベンチマークソフトを実行した結果ですが、EPYCインスタンスはXeonインスタンスに比べて並列化の効率が良い傾向があるようです。
料金
ベンチマークとは直接関係ありませんが、EPYCインスタンスはXeonインスタンスよりも低価格になっています。
今回ベンチマークで使用した構成、スペックだとXeonインスタンスは月額 約$74ですが、EPYCインスタンスは月額 約$64で利用可能です。
まとめ
GCPのCompute EngineでAMD EPYCを採用したインスタンスとIntel Xeonを採用したインスタンスを立ち上げ、UnixBenchでベンチマークを行い比較してみました。
今回のベンチマークではEPYCを採用したインスタンスが優れた性能を持つことがわかりました。コストパフォーマンスにも優れており、GCPでサーバを構築する際には是非検討いただければと思います。
また、今回のベンチマークではIntel Xeonを採用したインスタンスは結果が奮いませんでしたが、他のベンチマークでは違う結果になる可能性もあり、また、ベンチマークの試行回数も一回のみなので今回は偶々という可能性もあります。Intel XeonにはAVX512というEPYCにはない特徴もあるので、ケースバイケースでワークロードにあったインスタンスを選べればよいですね。
以上になります。ありがとうございました。