今年もやるよ!AWS Lambda縛り Advent Calendar 2015 の15日目の記事です。
先日、AWS S3+SQS+Lambda で格安でセキュアなジャッジシステムを作ろうとして一ヶ月溶かした という記事を投稿したのですが、そのときついでに調査したことを発表します。
概要
Lambda関数には割り当てメモリ量を設定する項目があります。ドキュメントを読むと、このメモリ量と実行CPUの能力は連動していて、多くのメモリを割り当てるとより性能の良いCPUで走るよ、と書かれています。
メモリ量とCPU性能がどの程度連動しているのか気になったので調べてみました。
実験
実験に使ったコードは次のとおりです。10秒間、数値の和を計算し続け、その和をそのままCPU性能の評価値とします。安直すぎてパフォーマンス試験として妥当かは疑問ですが、今回知りたいのは性能比なのである程度の判断は付くかと。
exports.handler = function(event, context) {
var sum = 0;
var timeout = Date.now() + 10 * 1000;
while (Date.now() < timeout) {
sum++;
}
console.log('sum:' + sum);
context.done(null, 'Process complete!');
};
この関数をメモリ量を変えながら10回走らせ平均を取りました。その結果が以下です。
メモリ量 | sum |
---|---|
128MB | 1,712,545 |
256MB | 3,000,236 |
512MB | 5,677,037 |
1024MB | 12,587,434 |
1536MB | 19,456,206 |
結論
ほぼ、割り当てメモリ量に比例した性能になるようです。ここまできれいな結果になるとは思いませんでした。
Lambda関数でCPUリソースをゴリゴリ使いたいケースはあまり思い浮かびませんが、頭の片隅においておくと役立つかもしれません。
ちなみに
知りたいことが FAQ にそのまま書いてありました。
Q: コンピューティングリソースはどのように AWS Lambda に割り当てられるのですか?
AWS Lambda のリソースモデルでは、お客様が関数に必要なメモリ量を指定するとそれに比例した CPU パワーとその他のリソースが割り当てられます。たとえば、256 MB のメモリを指定すると約 2 倍の CPU パワーが Lambda 関数に割り当てられます。128 MB のメモリを指定した場合と比較すると CPU パワーは倍となり、512 MB のメモリを指定した場合と比較すると半分になります。メモリは 128 MB から 1.5 GB まで、64 MB ごとに増加できます。
無意味な調査でしたね・・・(絶望)