12 ポイント 投稿者 xguru 2021-10-14 | 5件のコメント | WhatsAppで共有
  • 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件のコメント

 
ehlegeth 2021-10-14

ざっと見ただけですが、

Rust、Golang ~~ Python、Ruby という構図は、一般的な期待と大きくは違わないように思えますし…

Java が VM の起動コストがなく、JIT が適用されても遅いのは少し意外ですね。

Node.js も JIT 後は速いと思っていましたが、遅い結果が出ましたね。

Lambda が動作するアーキテクチャや仮想化スタックなどが違うからなのでしょうか…

 
ehlegeth 2021-10-14

パフォーマンステストには影響を与えうる要素があまりにも多いので、結果をあまり深刻に受け止めなくてもよさそうな気もしますが……(笑)

 
eajrezz 2021-10-14

golangが勝者ではないでしょうか?(笑)

 
ehlegeth 2021-10-14

はい、そのような結果のようですね。

クラウド環境で golang を使ったことはありませんが、クラウド環境にぴったり合っている気がします。

 
codufdl 2021-10-14

Rust、すごく魅力的ですね。買っておいたのに読んでいなかった本ですが、好奇心に一気に火がつきますね(笑)