AWS Lambda ランタイム別 Cold/Warm 起動時間の比較 2021/09
(medium.com/@filia-aleks)-
API-Gateway → AWS Lambda → DynamoDB フローで POST メソッドをテスト
-
メモリ 128/256/512/1024/10240MB をそれぞれテスト
-
Cold Start
→ 全体的に Rust が最速。128Mb では Python が1位
→ Java と .NET を除けば、ほとんどが高速
→ Java は 128Mb では起動すらできないが、GraalVM は可能
- Warm Start
→ Golang と Rust が勝者
→ .Net も Go/Rust とほぼ同等の性能を示すが、1k 回の繰り返し実行後でないと出ない(JIT 後)
→ GraalVM も .Net と似た安定した性能を示し、Rust/Go よりはやや遅い。最小セットアップではうまく動作しない
→ Java は GraalVM のすぐ後ろ。Java も .Net と同様に 1〜3k 回の繰り返し後でないと性能が出ない
→ Python は安定して良好な性能を示すが、128MB では遅すぎる
→ Ruby は Python と似た性能を示すが、20分ほど(15k 回の繰り返し)後には duration がやや増加する
→ Node.js が最も遅いランタイム。duration も最長
-
Cold + Warm で見ると Golang と Rust が勝者。常に速く安定した結果を示す
-
比較ランタイム : NodeJs(14.x), Python(3.9), Go(1.x), Ruby(2.7), .Net(3.1), Java (11), Rust(1.54.0), GraalVM(21.2)
5件のコメント
ざっと見ただけですが、
Rust、Golang ~~ Python、Ruby という構図は、一般的な期待と大きくは違わないように思えますし…
Java が VM の起動コストがなく、JIT が適用されても遅いのは少し意外ですね。
Node.js も JIT 後は速いと思っていましたが、遅い結果が出ましたね。
Lambda が動作するアーキテクチャや仮想化スタックなどが違うからなのでしょうか…
パフォーマンステストには影響を与えうる要素があまりにも多いので、結果をあまり深刻に受け止めなくてもよさそうな気もしますが……(笑)
golangが勝者ではないでしょうか?(笑)
はい、そのような結果のようですね。
クラウド環境で golang を使ったことはありませんが、クラウド環境にぴったり合っている気がします。
Rust、すごく魅力的ですね。買っておいたのに読んでいなかった本ですが、好奇心に一気に火がつきますね(笑)