前回の記事の補足となります。
前回の記事ではAmazon EC2に使われているCPUの種類とシングルスレッド性能についてまとめましたね。
今回は前回の内容にプラスして、簡単なループプログラムを実行したときの処理時間も測定しました。
本当に処理能力が高いインスタンスはどれなのか参考にしていただけると幸いです。
ベンチマークの条件
・2vCPUでのプログラム実行速度を測定
・AmazonLinux2で実行
・ストレージはgb3
・us-east-dまたはus-east-cで実行
・以下のコマンドを10回実行してそのうち最速の時間を測定
$ time for i in {1..10000} ; do echo $i; done
Intel製CPU
g系インスタンスだけコア数がどうしても条件を満たせないので省略しました。
表を見ると一番早いのはコンピューティング最適化インスタンスであるc系統…であって欲しいのですが、なぜか世代の1つ古い汎用(バースト)型であるt2系インスタンスの方が処理速度が早く終わりました。
ちなみにt2.mediumとc5.largeの比較だったのですが、AZを変えたり何度かインスタンスを立て直してみてもこの結果になりました。
納得のいく結果ではなかったのでAutoScalingからそれぞれ10台ずつ複数のAZでインスタンスを立てて実行してみたのですが、常にt2が勝つ結果になりました。
この理由については不明なのですが、使っているハイパーバイザがt2系のものの方がコアをうまく処理できている〜とか、もしくは人気のc5系は多数のVMが予約されがちで常にハイパーバイザが忙しくてパフォーマンスが発揮できないけど、古い世代であるt2系はそこまで使われてないからハイパーバイザがハードウェアと連携するのに余裕があるとかその辺の理由でも妄想しておきます。
AMD製CPU
t系、m系、r系は同じCPUが採用されていますが、基礎動作クロックが若干低く設定されているt系はやや遅めの処理速度に。
とはいえ、プログラム実行中はちゃんとクロック数も上昇していましたし、この3つはほぼ同性能を発揮できていたと思って良いでしょう。
c系で採用されているAMD EPYC 7R32は他のファミリーと比較してシングルスレッド性能が劣る評価でしたが、クロック数が高いからか良い結果を出してくれました。
ARMアーキテクチャ
ARMアーキテクチャのインスタンスですが、ファミリーに関わらず処理速度は変わりませんでした。
シングルスレッド性能は控えめですが、並列処理の得意なアーキテクチャだからか今回のベンチマークでの処理速度は非常に早いです。とはいえ公式でもシングルスレッド処理が苦手であることには触れられているので、条件次第ではx86_64系CPUに抜かれてしまうかもしれませんね。
価格は安いのできちんと検証した上で、用途を見極めて採用できると良さそうです。
おわりに
今回はEC2で採用されるCPUについての情報と、2vCPUで実行している場合でのループ実行速度を測定しました。
t2系の結果にはいまいち納得がいきませんでしたが、それ以外は順当な結果になったと思います。
しかし思ったよりもパフォーマンスに差が出なかったことは意外でしたし、c系もそこまで極端に強いというわけではなさそうだなという印象です。
(ベンチマークの手法を変えたら結果は変わるかもしれませんが…)
単純なWebサービスの運営だったら、使いたいvCPUとメモリの組み合わせでインスタンスタイプを選んでしまっても良いかもしれませんね。
では、続いてはOracle Cloud Infrastructureのコンピュートサービスのベンチマークもまとめておきますので、是非比較してみてくださいね!
> t2系インスタンスの方が処理速度が早く終わりました。
t2の方が早いのはスレッドではなくコアが
vCPUとして割り当てられているからと思いました
参考:
https://aws.amazon.com/jp/ec2/instance-types/
> 非 Graviton ベースの Amazon EC2 インスタンスの各 vCPU は、
> T2 インスタンスと m3.medium を除き、x86 ベースのプロセッサのスレッドとなります。