AWS Lambdaのコア数を確認


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を見てみる