2020年12月01日以降、
Lambdaで以下のアップデートが行われたことが発表されました。
・メモリ上限を10240MB(10GB)に拡大(従来は3008MB)
・vCPU数を上限6に拡大
・コンテナイメージのサポート
AWS Lambda now supports up to 10 GB of memory and 6 vCPU cores for Lambda Functions
AWS Lambda の新機能 – コンテナイメージのサポート
上記アップデートのうち、Lambdaで取り扱われるvCPUについて
Lambda内でCPU情報を取得し、どのようになっているか確認しました。
確認方法
コードはたったの5行です。
egrepで/proc/cpuinfo 内を検索してます。
import subprocess
def lambda_handler(event, context):
output = subprocess.run(['egrep','"|model name|processor|cpu family|model|physical id|core id|cpu cores|^$"','/proc/cpuinfo'], check=True, stdout=subprocess.PIPE).stdout
stdout=subprocess.PIPE).stdout
res = output.decode('utf8')
print(res)
【解説】
model name : CPUの名称
processor : プロセッサ番号
cup family : CPUファミリー番号
model : CPUのモデル番号
physical id : 物理番号(CPUソケットの数)
core id : CPUコアの番号
cpu cores : CPUコア数の合計
##CPU取得の取得結果
CPU情報を取得した結果の一部を掲載。
※色分けは単に見やすくするため
赤枠で囲った部分(Lambdaのメモリが0.5GB)に注目 ####
-
processorとcore idが同一になっている
-
physical id が0だから、ソケット数は1コ
-
以上で1コアに対して1プロセス、つまり1コア1スレッド(1C1T)と判定可能
※core id が2行とも0だった場合は、1コアに対して2プロセス、つまり1コア2スレッド(1C2T) になる -
さらにcpu coresが2であるため、メモリ0.5GB時のCPUは2C2Tと判断できる。
-
メモリ3GB(背景緑色部分)では、3C3Tになっていることがわかる。
上記の内容を、メモリ10GBまで確認しました。
Xeonのうち、どのCPUか?
赤枠部分では、CPUの型番などがわかる。
Lambdaでは、下記CPUが動作している模様。※10GBまで同じ結果でした
・ブランドはXeon
・ベースクロックは2.50GHz
・モデル番号(model)は63
・CPU族(cpu family)は6
ちなみに、下記サイトでcpu family 6 と model 63 で 検索したところ、
XeonのE、EPシリーズがヒット。
WikiChip
さらにググったところ、これっぽいことが判明。
Intel® Xeon® Processor E5-2680 v3
Haswell世代なので、Coreシリーズ(i3,i5,i7)の4000番台。2014年とかそのあたり。
AWSが使っているサーバをAMDのEPYCに更新して、余ったサーバが割り当てられているのかな???
##結論
最低2C2Tから始まり、最高で6C6Tになっていることがわかった。
確かにvCPU数が6まで拡大している。
##所感
確かにvCPUは6まで増加しているが、Lambdaはコンテナ内で動いているため、
実際の物理CPUがどう割り当てられているかは不明です。
仮にハイパースレッディングが有効であるなら
物理1コア = 2スレッドのため、次のようになります
2C2T = 物理CPU1コア
6C6T = 物理CPU3コア
AVX2もサポートされたとはいえ、以下の2点
・MAXでも物理3コア
・ベースクロックが2.5GHz(MAX 3.3GHz)と小さい
を考慮すると、
そこまでCPUパワーに依存しない処理に使うことが適切と思われます。
##参考
以下の記事を参考にさせていただきました。
試験運用中なLinux備忘録・旧記事
AWS LambdaのCPUを見てみる