AWS EC2でarm64の向き不向きについて

はじめに

時々
「AWSのEC2でLinuxサーバを使いたいのだけれど、
t4g、m6g、r6g 等のarm64系CPUインスタンスと、
t3、m6i、r6i 等のx86_64系CPUインスタンス、
どっちがいいの??」
という質問をいただくため、blog記事として情報を記載します

目次

事前注意

arm64系で作成したインスタンスは、arm64系でのインスタンスタイプ変更は可能ですが
x86_64系へのインスタンス変更は不可能になります。また同様にx86_64からarm系への変更も同様に不可能です。

参考 : https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resize-limitations.html

If the current instance type has a processor based on the Arm architecture, you are limited to the instance types that support a processor based on the Arm architecture, such as C6g and M6g.

これはAWS側の問題ではなく、CPU命令セットが異なるため避けられない問題になります。

そのため、サーバの起動前に自分がEC2上で 利用/提供 するものがarm64系とx86_64系どちらが良いか
考える必要があります。

それぞれの長所短所

arm64系とx86_64系、どちらも長所短所があります。

※2023/07/01 の m6g.xlargeとm6i.xlarge での比較になります。

項目 arm64系 x86_64系 解説
AWS料金(同コア数/メモリなら) 安価 高価 AWS自社設計CPUのため調達価格が安く、結果利用者価格としても安くなっていると個人的に予想しています。
CPU処理速度 高速 浮動小数点演算ではm6iのほうが高速との結果がでています。ただ整数演算ではm6gでも変わらない処理速度が出ています。
メモリ転送速度 高速 メモリ転送速度ではm6gのほうが高速との結果がでています。ただm6iでも必要十分な速度になります。
ディスク転送速度 インスタンスタイプによる有意差は確認できませんでした。EBSの帯域幅およびIOPSに依る部分のほうが大きいようです。
CPU命令セット拡張 - - 命令セット拡張については利用するサービスにより異なります。たとえばm6iではIntel AVX-512が利用できるので、opensslでAESの処理はm6iのほうが圧倒的に早くなっています。

参考
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html

また、歴史の面から「arm64系では標準提供されていないがx86_64系で提供されるソフトウェアやミドルウェア」があります。
たとえば「一部phpモジュールがARM版のOSでは提供されていないので、困った」など困った例としてございます。
例:remiリポジトリを利用する想定であったが、remiリポジトリでarm64系のアーキテクチャは提供されていない

arm64系が向いている利用例

  • 踏み台サーバ
    「webサーバはすべてELB配下に置く。EC2もRDSもEIPは付与させずパブリックから直接ログインはさせない。諸事情からSSMでのログインはできない。踏み台サーバ経由で各サーバにはつなぐ」
    「windowsサーバに対して踏み台サーバからSSH転送でRDPする」
    などの場合の、踏み台サーバでは最小構成のSSHができるLinuxが居ればよいので、コスト面から安く抑えることができます

  • node+vue等、js利用の環境
    npmライブラリは依存がないものが多いため、問題なく利用できる可能性が高いです。
    ※node.js自体にはOSのアーキテクチャ依存がありますが、node上で動くjsにはjavascriptというプログラム言語で動くため、問題ないことが多いです。

arm64系が向いていない利用例

  • メールサーバ
    (EC2でメールサーバは迷惑メールになりやすい為推奨しませんが・・)
    postfix + dovecot + postfixadmin + roundcube (+ AmazonSES)
    等で組まれることが多いと思います。
    postfix , dovecot いずれもLinuxディストリで提供されているため、構築は可能だと思います。
    しかし、RHEL系ディストリではphp-imapがないため、そのままではwebメールなどが利用できません。
    どうしても・・であればPLESK等統合ツールや、ubuntuの利用検討したほうがよいでしょう
    "メール送信するだけ" 程度であればarm64で良いですが、その程度の利用であればAmazonSESを選択したほうが安価であり安定したものになります。

  • smartyやcomposerを利用したphpサイト
    arm64系の場合、OS提供のphpモジュールでは提供されていないモジュールが出てくることがあります。
    x86の場合であれば、remiや外部rpmなど入手手段が豊富にありますがarm64系の場合提供されておらず、
    最悪ソースからmoduleをbuiildすることになる事もあります。

  • コアあたりの処理速度が求められる作業
    たとえばOpenVPNやSoftEtherVPNのVPNサーバのような、
    コアあたりの処理性能とCPU命令セット拡張が求められる場合は、
    コアあたりの処理速度とCPU命令セット拡張がx86系よりも劣るため不向きになります。

  • Windows Server
    AWS EC2 では arm64系のWindows Serverは提供されていません。
    ※Microsoft社からarm64版のWindowsServerは2023/07/01現在、提供されていません。
     最新のWindowsServer2022でもx86_64系のみとなります。

まとめ

「よくわからない場合」「とりあえず触ってみよう」「将来的にどう広がるサービスか曖昧」「将来的にAWS外でも同じサービス提供するかもしれない」などの場合
x86_64系を選んだほうが無難です。

投稿者プロフィール

kenji
2013年入社の平成生まれです。

初めて触ったコンピュータはPC9821でダイヤルアップでした。
その時に鯖落ちや人大杉の対応をしてくださる鯖缶になりたいと憧れ、
みなさんのお役に立てればと思っております!
#今では個人所有のパソコン・サーバだけで20台ほどあります…。

サーバー大好き!

ABOUTこの記事をかいた人

2013年入社の平成生まれです。 初めて触ったコンピュータはPC9821でダイヤルアップでした。 その時に鯖落ちや人大杉の対応をしてくださる鯖缶になりたいと憧れ、 みなさんのお役に立てればと思っております! #今では個人所有のパソコン・サーバだけで20台ほどあります…。 サーバー大好き!