2年半近く前に書いた AWS ECS Fargate のCPU性能と特徴 | 外道父の匠 の続編になります。
そんなに楽しくはないけど、知っておいて損はない、くらいの調査と考察になります:-)
前口上
ちょうど1年前に FARGATE のリソース天井が上がりました。今回は、ほぼそれを区切りにした結果になっていると思います。vCPU 条件と Availability Zone を変え、3タスクずつ起動し、出現したCPUモデルをメモっていきました。ついでに軽量ベンチマークとして前回同様 OpenSSL speed をカマしておきました。
関係ないけどコンテナイメージは amazonlinux:2 です。では結果をどうぞ。
出現CPUモデル
CPUアーキテクチャを選べるので、それぞれについて。ECS Fargate X86_64
今回はスプレッドシートにまとめました。【CPU Check】シートには単純な出現メモを、
【CPU Model】シートには、PassMark Software – CPU Benchmark Charts から拝借したCPUデータと、自分で採取した openssl speed の結果があります。ついでに、最近の EC2 CPU の結果も置いておきました。
ECS Fargate ARM64
これは全条件において、Graviton 2 と同等のCPUモデルが出現します。/proc/cpuinfo にモデル名は記載されませんが、その他の記載内容は一致していますし、そもそも前回調査の半年後にリリースされています。なので特に記録はしませんでしたが、上記【CPU Model】シートに oepnssl speed の値は載せておいたので、AWS CPU C6i/C6a の性能検証 | 外道父の匠 と合わせて参考にしてください。
現在の特徴
そこまでバカみたいにCPUガチャを回したわけではないので、得た結果からのみの考察となることをご承知。世代差
X86_64 において、vCPU 4096 までだった時代を第1世代、vCPU 16384 まで使えるようになった今を第2世代とすると、選択されるCPUモデルには十分な違いが認められます。まず第1世代は、前回検証と変わらない内容をほぼ含みつつ、かなり古いモデルが出現しないようになったと思われます。プラス、現状で新しめとされるだろうモデルも稀気味に出現するので、良くなっているけどオススメできる感じではありません。
第2世代 vCPU 8192 以上では、古いモデルは一切出現せず、中堅以降のモデル確定ガチャになります。その中でも、半分くらいの確率で EC2 c6i 相当のモデルが出現するので、それかそうじゃないかで性能的には 20% 以上の差が出ると思われ、特にレア演出はありません。
条件差
同世代内においては、vCPU や AZ を変えると特定のモデルが出現しやすくなる印象を持ったりしかけますが、複数タスクを同時起動したり、時間をおいて再試行すると、わりと傾向が変わったりするので、おそらく条件は関係ないと思われます。単にその時、いっぱい空いてるインスタンスに割り振られるとか、逆に詰め込むように入れられるとか、そういう感じでしょう。
スポット
X86_64 のスポットは、最近だけかもですが(多分昔から変わらん)、なかなかの高確率で希望のタスク数が起動しないことがあります。別に大きなリソースでなくてもそうなので、よくわかりません。ARM64 は相変わらずスポット非対応です。
比較整理
要点を絞りやすくするために、いったん整理します。特徴
まずは軽くそれぞれの特徴をまとめてみると……X86第1世代 | X86第2世代 | ARM64 | |
CPU強さ | ☓~△ | △~◯ | ◯ |
費用 | △ | △ | ◯ |
スポット費用 | 70%割引 | 70%割引 | 未対応 |
スポット安定度 | △ | △ | 未対応 |
費用
費用 については 1vCPU 2GB を基準とすると、ap-northeast-1 では以下のように算出できます。X86 | X86(spot50%) | X86(spot100%) | ARM64 | |
Ondemand | $0.0616/h | $0.0401/h | $0.0187/h | $0.0492/h |
SavingsPlans | $0.0523/h | $0.0355/h | $0.0187/h | $0.0388/h |
CPUモデル
新しめの現行モデルという意味でも、使いたいのは c6i と c6g 相当の部分です。この2つは性能的にはかなり近いものがあり、処理内容次第のところはありますが、c6i の方が若干値段が高い分、総合力も若干 c6i の方が上回る印象です。それ以外の X86 下位モデルは使いたくありません;-(
運用の選択肢
ここまでのまとめで、もうどういう外道的結論を出すかは予想できると思いますが、一応書いておきます。まず、X86 第1世代の範囲は開発・テスト用途にしかなり得ません。
X86 第2世代は、CPUモデルが複数混ざることによる性能差という不利益、それによる ECS Service やその Autoscaling 内で起きる CPU 使用率 min/max の差による不安定さの拡大(通常はAZ間の差だけ)、そしてスポット起動の不安定さ、あたりが気に食いません。要は安定度が足りていません。
ARM64 は CPU が Graviton 2 確定で、そもそも X86 より 25%程安く、SavingsPlans の割引率も高い。
とくれば、現時点では ARM64 一択だと思います。
ただ、時期によってこの優位性は変わるものであり、AWSコスト削減とリソース管理 | 外道父の匠 でも触れましたが、X86 と ARM64 どちらでも動かせられるように準備しておくのが文句なしです。
on EC2 でエェやんと割り切るのもアリですが、Fargate というインスタンス無しのメリットも大きいため、なかなか全方面対応の判断というのも難しいままです。
いつかはX86第3世代、Graviton 3 と変わっていくのでしょうが、このノリのままなら ARM64 を選ぶだけなので、それはそれで AWS 専用の選択肢を効果的に愛用していくという意味で正しい気はします:-)