0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【訂正と再検証】AWS LambdaのARM64とx86_64を2年後に測り直した

0
Posted at

はじめに

2年前に AWS LambdaにおけるARM64とx86_64の性能比較 を書きました。「ARM64のほうが速い」という結論自体は今回測り直しても変わりませんでしたが、倍率が実態より大きく出ていたので訂正させてください。

あわせて、2026年9月時点で測り直して分かった新しい話も載せます。

測定は東京リージョン / Python 3.13.15 / 2026-09-28、各セル18サンプル(総計約860、失敗0件)。


訂正1: 「I/Oバウンド処理」がCPUテストその2になっていた

前回のI/Oテストは f.write(f"{i}\n") を10^6回。ディスクI/Oではなく、Pythonの文字列生成が支配的でした。**前回の表は実質「CPUテスト×3本」**で、I/O性能には到達していません。

根拠(前回の表からそのまま読み取れます)

Lambdaはメモリに比例してCPUを割り当てるので、CPU律速なら「メモリ2倍で時間半分」になります。前回のARM64のI/O列は 3.999 → 1.973 → 0.997 → 0.479 で、きれいに反比例している。ストレージ律速ならこうはなりません。

訂正2: 測定条件にいくつか誤りがあった

  • 並列処理のテストが並列になっていなかった
  • 本文と表が食い違っていた
  • 「34%」の内訳の理解が逆だった
  • 試行回数がn=1、リージョンとランタイムバージョンが未記載だった
それぞれの中身
  • Lambdaは 1,769MBで1 vCPU相当。前回測った128〜1024MBは全て1 vCPU未満なので、原理的に並列実行できません(加えてGILがあります)。
  • 「いずれにおいてもARM64が優れた」と書きましたが、並列処理の512MB/1024MBはx86_64が勝っています(0.099 vs 0.112、0.053 vs 0.056)。
  • AWS公称の「最大34%の料金パフォーマンス」は 性能+19% × 価格−20%。性能向上は最初から織り込まれています。前回「実行効率は落ちる前提」と書いたのは誤りでした。
  • 試行回数は n=1 でした。今回は各セル18サンプルの中央値を取っています。

訂正後の表

設計を直して測り直しました。1実行1ワークロード、I/Oはペイロードを事前生成して write + fsync + 読み戻しのみを計測、CPUは libm依存(sqrt/sin)と非依存(整数演算)に分離、並列は同じ総仕事量を直列 / threading / multiprocessing の3通りで実行しています。

各セルは ARM64 / x86_64(実行時間の中央値・秒)と、ARM64が何倍速いか。1.33x ならARM64が1.33倍速い、という読み方です。

workload 128MB 512MB 1769MB (1 vCPU)
I/O (32MB write+fsync+read) 0.282 / 0.375 (1.33x) 0.078 / 0.099 (1.28x) 0.035 / 0.042 (1.20x)
CPU float (libm依存) 0.943 / 1.256 (1.33x) 0.223 / 0.302 (1.36x) 0.061 / 0.090 (1.47x)
CPU int (libm非依存) 1.379 / 1.720 (1.25x) 0.346 / 0.430 (1.24x) 0.101 / 0.124 (1.23x)
並列ベースライン(直列) 1.089 / 1.199 (1.10x) 0.268 / 0.300 (1.12x) 0.076 / 0.088 (1.15x)
並列 threading 1.154 / 1.223 (1.06x) 0.281 / 0.299 (1.07x) 0.062 / 0.089 (1.44x)
並列 multiprocessing 1.313 / 1.380 (1.05x) 0.314 / 0.340 (1.08x) 0.077 / 0.093 (1.21x)

全18セルでARM64が勝ちます。ただし倍率は1.05〜1.47倍で、前回の1.5〜1.7倍ではありません。

なお cpu_float の比が cpu_int より一貫して大きい。ARMの優位の一部はコアの速さではなく sqrt/sin の実装差に由来します。前回「浮動小数点演算が多いためARM64が効率的」と書きましたが、分離しないとそこまでは言えませんでした。


新情報: 「arm64」は実は3種類?

毎回 /proc/cpuinfo を記録したところ、arm64の15実行環境にGraviton2/3/4が混在していました。同じ関数を再デプロイするだけで乗る世代が変わり、世代は選べません。
全部置き換わるんじゃないんですね。

CPU 実行環境数 x86_64より何倍速いか
Graviton2 (Neoverse-N1 / 0xd0c) 8 1.01〜1.35x
Graviton3 (Neoverse-V1 / 0xd40) 6 1.23〜1.69x
Graviton4 (Neoverse-V2 / 0xd4f) 1 —(1環境のみ)

Graviton2はAWS公称の「最大19%」とほぼ整合。Graviton3はそれを大きく超えます。


まとめ

  • ARM64を選ぶ、という結論は変わりません。速度1.05〜1.47倍、コスト22.3〜42.4%減(中央値30.7%)。
  • ただし前回の1.5〜1.7倍は出ません。あれは「I/OテストがCPUテストだった」「並列テストが並列でなかった」ことによる数字です。
  • 効いているのは主に価格。GB秒単価がちょうど20%安いので実行時間が同じでも2割弱は減り、そこに速度差が4〜24ポイント上乗せされます。
  • arm64フリートはGraviton2/3/4混在。ベンチマークするなら /proc/cpuinfo を記録すること。

ARMで動かない依存があるかだけ確認して、動くなら切り替える。そこは2年前と同じ結論です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?