[AWS vs GCP] EC2 vs GCE 〜CPU性能〜

EC2とGCEの性能比較を行います。

今回比較するのは**CPU性能**です。
使用するインスタンスのマシンタイプは性能が低い`t2.micro`等ではなく、実際のサービスで使用しているコンピューティング最適化インスタンスの`c3.large`と、それに近い性能を持つGCEの`n1-highcpu-2`となります。

他のマシンタイプの測定結果も追加する可能性はありますが、まずはこれらのマシンタイプでベンチマークします。

#比較するインスタンス
|項目|AWS EC2|GCE|
|:--:|:--:|:--:|
|マシンタイプ|c3.large<br>（vCPU x 2 + メモリ 3.75 GB）<br>オンデマンドインスタンス|n1-highcpu-2<br>（vCPU x 2、メモリ 1.8 GB）|
|料金(1ヶ月連続使用)|＄93.70 <br> リザーブドインスタンスを適用した場合(<font color="blue"> ※1</font>)：＄70.81|＄46.50|

*1：リザーブドインスタンスにも数種類の適用があります。(公式ドキュメントは[こちら](https://aws.amazon.com/jp/ec2/pricing/reserved-instances/pricing/))
スタンダードとコンバーティブル、そして1年ないし3年の予約期間、前払い有無によって料金が異なります。
上記はスタンダード1年間前払いなしの料金となります。
(2017年10月時点)

**共通設定**

|項目|内容|
|:--:|:--:|
|ストレージ|SSD 10GB|
|OS|Ubuntu16.04|

#ベンチマーク設定手順
ベンチマークツールはUnixBenchを使用します。
設定手順は以下を参考にさせて頂きました。
https://blog.apar.jp/web/7042/

上記の[比較するインスタンス](#比較するインスタンス)を基に、EC2とGCEそれぞれインスタンスを作成・起動後、お約束でインストール済みのパッケージを最新版にアップデートします。

```
sudo apt-get update
```

UnixBenchを実行するには、makeとgccが必要なのでパッケージをインストールします。

```
sudo apt-get install make gcc
```

ベンチマーク結果ログの保存先を作成します。

```
mkdir /var/log/bench
```

UnixBenchをインストールします。

```
cd /usr/local/bin/
wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/byte-unixbench/UnixBench5.1.3.tgz
tar zxvf UnixBench5.1.3.tgz
cd UnixBench
```

試しにUnixBenchを実行してみましょう。
ここでは実行できるかが確認出来れば良いので、途中で終了して構いません。

```
./Run

   #    #  #    #  #  #    #          #####   ######  #    #   ####   #    #
   #    #  ##   #  #   #  #           #    #  #       ##   #  #    #  #    #
   #    #  # #  #  #    ##            #####   #####   # #  #  #       ######
   #    #  #  # #  #    ##            #    #  #       #  # #  #       #    #
   #    #  #   ##  #   #  #           #    #  #       #   ##  #    #  #    #
    ####   #    #  #  #    #          #####   ######  #    #   ####   #    #
   Version 5.1.3                      Based on the Byte Magazine Unix Benchmark
   Multi-CPU version                  Version 5 revisions by Ian Smith,
                                      Sunnyvale, CA, USA
   January 13, 2011                   johantheghost at yahoo period com
```

ベンチマーク実行スクリプトの作成
実行時間ごとに一応ログファイルを分けときます。

```
vi /usr/local/bin/unixbench.sh
```

```bash
#!/bin/sh -
now=$(date "+%Y%m%d%H%M")
log="/var/log/bench/unixbench_${now}.log"

cd /usr/local/bin/UnixBench
echo '==================== START ' `date` '====================' >> $log
./Run >> $LOG 2>&1
echo '==================== END ' `date` '====================' >> $log
echo '' >> $log

exit 0
```

実行権限を設定

```
chmod 700 /usr/local/bin/unixbench.sh
```

cronに登録

```
crontab -e
```

```
00 * * * * /usr/local/bin/unixbench.sh
```

手順は以上です。


#ベンチマーク結果
1時間毎に計10回測定を行った結果がこちらです。
※計測は2017年10月時点

（System Benchmarks Index Score）

|No|AWS EC2|GCE|
|:--:|:--:|:--:|
|1|2227.8|2209.6|
|2|2224.6|2168.3|
|3|2228.1|2182.7|
|4|2222.8|2160.7|
|5|2230.5|2098.3|
|6|2219.6|2139.8|
|7|2228.5|2168.3|
|8|2209.9|2159.1|
|9|2222.3|2166.7|
|10|2209.6|2150.3|


||AWS EC2|GCE|
|:--:|:--:|:--:|
|平均値|2222.37|2160.38|
|最大値|2230.5|2209.5|
|最小値|2209.6|2098.3|

結果を見るとEC2の方がインデックススコアが平均的に高いことが分かりました。

#最後に
CPU性能はEC2の方がわずかに高くはありますが、あくまで`c3.large`と`n1-highcpu-2`の比較なので、他のマシンタイプで比較したらまた違う結果が出るかもしれません。
ただ現場で使用しているサービスの基盤をAWSからGCPに移行検討している段階なので、この調査結果は検討材料の一つとします。
コストも含めて考慮すると個人的にはGCEに軍配が上がりますが、コストの話はまたの機会ということで。