AWS
gcpja
GoogleCloudPlatform

作業マシンとしてのGCEプリエンプティブインスタンスとAWSスポットインスタンスの比較

More than 3 years have passed since last update.

ベンチマークや重いソフトウェアのビルドなど、ノートPCには適していない作業をするマシンとして、いままで AWS のスポットインスタンスを使っていました。

しかし5月に GCE のプリエンプティブインスタンスが出て、試してみたところ予想以上に快適でした。

こういったスポットでの作業環境としてのプリエンプティブインスタンスのメリットを紹介していきます。


起動が早い

スポットインスタンスは、入札してから実際にマシンが起動するまでのタイムラグが5分程度ありました。

プリエンプティブインスタンスは、通常の Compute Engine のインスタンスのオプションという扱いなので、入札という手順が存在せず、1分程度で起動できます。


設定が簡単

AWS だと新しいインスタンスを使おうとすると VPC の設定が必要だったり、セキュリティグループの設定をしないと起動した2台のマシン間での通信すらできなかったりしました。

GCE の場合、デフォルトのネットワークがマシン間の通信をフルオープン、外からのアクセスはSSHとRDPだけという設定になっているので、ネットワークを使うプログラムをベンチマークするために2台のマシンを起動するのが簡単です。

一方で、AWSの「プレースメント・グループ」相当の機能がないので、2台のマシンを起動した時のネットワーク上の距離がプレースメント・グループを使った場合に較べて安定しない可能性はあります。 (プレースメント・グループを使ってても保証されるわけではないので必要ですが) ベンチマークするときはまず ping や iperf の結果を記録しておきましょう。


停止・再開ができる

スポットインスタンスは AMI からしか起動できない、停止がなく終了しかないという欠点がありました。ちゃんと EBS をマウントしたりしたら永続化できるのでしょうが、ズボラなので、作業が一区切りするたびにAMIを作るという使い方をしていました。

この方法では、最後にAMIを作ってからの作業は終了時に消えてしまいます。最近スポット価格が不安定なので、こまめにAMIを作る必要がありました。

一方、プリエンプティブインスタンスは、突然停止される可能性がある、24時間以上連続稼働できないという以外は通常の GCE インスタンスと同じく停止・再開が可能です。

(まだ強制停止を食らったことが無いのですが、)失う作業内容は実行中のプログラムなどメモリ上のものだけになると思います。

また、再開は10秒前後で可能なので、AMIからスポットインスタンス立て直すよりもずっと早くて、その分気軽に停止することができます。


課金が分単位

AWS だと課金が時間単位なので、最初にやりたかったことが早めに終わった時にもったいなくて別のことを始めたり、そしたら今度は1時間をちょっとだけ超えてしまって悔しい思いをしたりすることがありました。

それに比べると、(最低10分から)分単位の課金の GCE なら、起動時間だけでなくお金の面でも気軽に停止できます。


リージョンを超えるのが簡単

コンソールでインスタンスの一覧を見るときに、複数のリージョンのインスタンスがすべて見られます。

asia で作ったスナップショットから us-central にマシンを建てる時も、特にリージョン間の移動を考える必要がありません。

「別のリージョンでマシンが起動しっぱなしだった」なんてこともないですし、 us-central で複数台立ち上げてベンチマークするためのイメージを asia で作るみたいなことも簡単なはずです。


一般的なディストリでネットワーク性能を引き出せる

AWS でネットワーク性能を出すには、できるだけ最新のカーネルを使い、拡張ネットワーキングを使う必要がありました。また、 c3.8xlarge や c4.8xlarge でも NICあたりキューが2つしか無いので、 RPS などの設定も必要でした。 (参考)

そのため、ベンチマークするために一番性能を出しやすい Amazon Linux を利用していたのですが、 bash-completion の導入方法が分からなかったりと作業環境としては不満がありましたし、 RPS の設定等は毎回する必要がありました。

一方 GCE で Debian wheezy with backported kernel を使えば、一般的なディストリビューションである Debian で最新に近いカーネルを利用することができます。 NIC は virtio なのですが、コア数分のキューがあり、デフォルトでちゃんとマルチコアを使えるような状態で起動してくれていました。

Debian 以外のディストリビューションを利用した場合はカーネルは最新版ではないかもしれませんが、 virtio なので ixgbevf のドライバを用意して拡張ネットワーキングを有効にするよりは簡単に性能を出せると思います。