AWS Lambdaは1秒間にいくつまで数えられるか調べてみました。
前提として、メモリと処理性能と料金は比例しています。
メモリを倍にすれば、CPUの処理性能と料金は倍になるということです。
本記事では、上記の前提が本当なの?を、AWS Lambdaは1秒間にいくつまで数えられるか確認するプログラムを作成して、メモリ量を変更してLambda実行して検証していきます。
まずは、前提としている「メモリと処理性能と料金は比例しています」についてどこからきているか記載していきます。
前提知識
まずは、前提知識です。以下の点についてみていきます。
- 料金に関する前提知識
- 設定・性能に関する前提知識
料金に関する前提知識
メモリ (MB) 1 ミリ秒あたりの料金 128 0.0000000021USD 512 0.0000000083USD 1,024 0.0000000167USD
メモリと料金は比例している
→メモリを倍にすれば、1 ミリ秒あたりの料金も倍になる。
設定・性能に関する前提知識
シンプルな Lambda 関数の場合にのみ 128 MB を選択するのがベストプラクティスです。
メモリの量によって、関数で使用できる仮想 CPU の量も決まります。メモリを追加すると、それに比例して CPU の量が増え、それによって使用可能な計算能力も増加します。
シンプルな Lambda 関数の場合はメモリを128 MBに設定することがベストプラクティス
メモリの量に応じて、CPUの計算能力も増える
では検証していきます。
検証条件
まずは検証条件から記載していきます。
CPU
CPUアーキテクチャは「x86_64」で検証しました。
言語と検証用プログラム
次に言語と検証用プログラムについてです。
言語
言語は「Python 3.11」を使用しました。
検証用プログラム
検証用に使用したプログラムは以下のものとなります。
import os
def lambda_handler(event, context):
os.system('cat /proc/cpuinfo') # CPUの確認
cnt = 0
while True: # タイムアウトするまで、ひたすらカウントアップ
if cnt % 1000 == 0:
print(cnt)
cnt += 1
タイムアウト設定
タイムアウトは1秒に設定
検証結果
検証結果は以下の通りです。
- CPUは全ての結果において「Intel(R) Xeon(R) Processor @ 2.50GHz」が使用されている
- 多少ばらつきはあるが、メモリを増やすと、処理できる件数(CPU性能)もアップする
- メモリを倍にすれば、処理速度も上がるので、料金が倍になることはなさそう
- プログラム自体の作りによっても結果は変わってくると思うので断言できず…
- メモリを倍にすれば、処理速度も上がるので、料金が倍になることはなさそう
メモリ | カウントアップできた数 | CPU | 128MBをベースとして、メモリは何倍か | 128MBをベースとして、何倍処理できたか |
128MB | 638000 | Intel(R) Xeon(R) Processor @ 2.50GHz | – | – |
512MB | 2625000 | Intel(R) Xeon(R) Processor @ 2.50GHz | 4.00倍 | 4.15倍 |
1GB | 4192000 | Intel(R) Xeon(R) Processor @ 2.50GHz | 7.81倍 | 6.57倍 |
1.5GB | 5738000 | Intel(R) Xeon(R) Processor @ 2.50GHz | 11.71倍 | 8.99倍 |
2GB | 7612000 | Intel(R) Xeon(R) Processor @ 2.50GHz | 15.63倍 | 11.93倍 |
2.5GB | 10157000 | Intel(R) Xeon(R) Processor @ 2.50GHz | 19.53倍 | 15.92倍 |
まとめ
「メモリと処理性能と料金は比例しています」が本当?を調べました。
結果は、本当でした。
多少ばらつきはあるが、メモリを増やすと、処理できる件数(CPU性能)もアップする(メモリを倍にすれば、処理速度も上がるので、料金が倍になることはなさそう)
→プログラム自体の作りによっても結果は変わってくると思うので断言できず…
CPUはメモリ量に関係なく「Intel(R) Xeon(R) Processor @ 2.50GHz」が使用されている