ARMベースのCPUをバースト利用できる「T4g」インスタンスの性能をOpenSSLで測定してみた

Graviton2 ARMベースのCPUを搭載した「T4g」ファミリーのCPU性能をOpenSSLで測定してみました。
2020.09.18

AWSチームのすずきです。

ARMベースのCPU、Graviton2 を搭載する 新しいEC2インスタンスt4g。 OpenSSL の暗号化アルゴリズム速度の測定を実施して、CPU性能の傾向について確認する機会がありましたので、紹介させていただきます。

検証内容

実行環境

  • リージョン: 東京(ap-northeast-1)
  • インスタンスタイプ : t4g.nano, t4g.micro, t4g.small, t4g.medium, t4g.large, t4g.xlarge, t4g.2xlarge,
  • AMI: ami-06b258aac2ae736c2 (64 ビット Arm)
  • OS: Ubuntu Server 20.04 LTS (HVM)

  • CPU情報

sh-4.2$ cat /proc/cpuinfo
processor       : 0
BogoMIPS        : 243.75
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp ssbs
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x3
CPU part        : 0xd0c
CPU revision    : 1
  • OSカーネル情報
uname -a
Linux ip-172-31-13-11 5.4.0-1024-aws #24-Ubuntu SMP Sat Sep 5 06:17:48 UTC 2020 aarch64 aarch64 aarch64 GNU/Linux
  • openssl情報
sh-4.2$ openssl version
OpenSSL 1.1.1f  31 Mar 2020

検証手順

「openssl」の速度測定を以下の条件で実施、「8192 bytes」の結果を取得しました。

  • 認証暗号アルゴリズム (aes-128-gcm、aes-128-ctr、chacha20)
  • 並列度 (1,2,4,8)

実行コマンド

    openssl speed -elapsed -evp aes-128-gcm -multi 1
    openssl speed -elapsed -evp aes-128-gcm -multi 2
    openssl speed -elapsed -evp aes-128-gcm -multi 4
    openssl speed -elapsed -evp aes-128-gcm -multi 8
    openssl speed -elapsed -evp aes-128-ctr -multi 1
    openssl speed -elapsed -evp aes-128-ctr -multi 2
    openssl speed -elapsed -evp aes-128-ctr -multi 4
    openssl speed -elapsed -evp aes-128-ctr -multi 8
    openssl speed -elapsed -evp chacha20 -multi 1
    openssl speed -elapsed -evp chacha20 -multi 2
    openssl speed -elapsed -evp chacha20 -multi 4
    openssl speed -elapsed -evp chacha20 -multi 8

結果サンプル

sh-4.2$ openssl speed -evp aes-128-ctr
Doing aes-128-ctr for 3s on 16 size blocks: 118012811 aes-128-ctr's in 3.00s
Doing aes-128-ctr for 3s on 64 size blocks: 77677032 aes-128-ctr's in 3.00s
Doing aes-128-ctr for 3s on 256 size blocks: 32788807 aes-128-ctr's in 3.00s
Doing aes-128-ctr for 3s on 1024 size blocks: 9874089 aes-128-ctr's in 3.00s
Doing aes-128-ctr for 3s on 8192 size blocks: 1316195 aes-128-ctr's in 3.00s
OpenSSL 1.0.2k-fips  26 Jan 2017
built on: reproducible build, date unspecified
options:bn(64,64) md2(int) rc4(ptr,char) des(idx,cisc,16,int) aes(partial) idea(int) blowfish(ptr)
compiler: gcc -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -DL_ENDIAN -Wall -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches   -Wa,--noexecstack -DPURIFY -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-128-ctr     629401.66k  1657110.02k  2797978.20k  3370355.71k  3594089.81k

「8192 bytes」の値 (3594089.81) を取得しています。

結果

t4gファミリー

「t4g」インスタンス間で「aes-128-gcm」の結果を比較しました。

インスタンス 1並列 2並列 4並列 8並列 vCPU ベース性能(%)
t4g.nano 965971 1931971 1931816 1929758 2 5
t4g.micro 966104 1930423 1933271 1924093 2 10
t4g.small 966154 1931575 1933077 1926692 2 20
t4g.medium 965717 1930745 1930906 1929431 2 20
t4g.large 965932 1932094 1934366 1927871 2 30
t4g.xlarge 966427 1932714 3864325 3861378 4 40
t4g.2xlarge 966156 1932504 3864379 7728068 8 40
  • 1コアあたりの性能は同等でした。
  • 並列処理によりvCPU数の性能向上が期待できる事が確認できました。

TOP情報

t4g.2xlargeの8並列処理中、8つのCPUが均等に利用されている事が確認できました。

top - 14:20:06 up 3 min,  0 users,  load average: 3.63, 1.56, 0.61
Tasks: 207 total,   9 running, 198 sleeping,   0 stopped,   0 zombie
%Cpu0  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu4  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu5  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu6  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu7  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :  15454.1 total,  14618.5 free,    246.8 used,    588.8 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.  14985.1 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
   2554 root      20   0    6236   1692   1120 R 100.0   0.0   0:07.07 openssl
   2556 root      20   0    6236   1692   1120 R 100.0   0.0   0:07.07 openssl
   2558 root      20   0    6236   1692   1120 R 100.0   0.0   0:07.00 openssl
   2555 root      20   0    6236   1692   1120 R 100.0   0.0   0:07.06 openssl
   2557 root      20   0    6236   1692   1120 R 100.0   0.0   0:07.06 openssl
   2559 root      20   0    6236   1692   1120 R 100.0   0.0   0:07.06 openssl
   2553 root      20   0    6236   1692   1120 R  99.7   0.0   0:07.03 openssl
   2552 root      20   0    6236   1692   1120 R  99.3   0.0   0:07.04 openssl

mediumインスタンス

ARM(t4g, a1, m6g) と、x86 (t3, t3a, m3) の「medium」インスタンス間での比較を試みました。

並列度1

暗号 t4g.medium a1.medium m6g.medium t3.medium t3a.medium m3.medium
aes-128-gcm 2119609 1331926 2119311 4818485 2964685 1109994
aes-128-ctr 3568990 2414491 3570336 4986550 6754299 3675073
  • 「T4g」は、1並列では Intelの旧世代のインスタンス(m3)と同程度の性能でした。

並列度2

暗号 t4g.medium a1.medium m6g.medium t3.medium t3a.medium m3.medium
aes-128-gcm 4237984 1353503 2116202 4890296 3049103 1320119
aes-128-ctr 7136242 2432579 3563132 5073155 7875819 3577201
  • 2並列であれば、 「T4g」は AES-NIをサポートする最新世代の Intel、AMD に匹敵する性能でした。
  • 「a1.medium」「a1.medium」のvCPU数は 1 、並列処理による性能向上がありませんでした。
  • 「t3.medium」「t3a.medium」のvCPU数は2、ハイパースレッドによる効果は高くなかった模様です。

chacha20

AES-NI をサポートしない ARM系のCPUで有効とされる chacha20 で比較を試みてみました。

暗号 t4g.medium a1.medium m6g.medium t3.medium t3a.medium m3.medium
並列1 965717 506845 965971 3951840 1207924 1197203
並列2 1930745 502060 964661 4462674 1434092 1391534

IntelのCPUを搭載する「T3」が高い性能を示す結果となりましたが、2並列の「T4g」は AMD (T3a)や、Intelの旧世代(M3)と同等以上の性能で利用できる事が確認できました。

オンデマンド料金

オンデマンド1時間料金 の比較を試みました。

  • 東京リージョン Unix 1時間
インスタンス 1時間料金(USD) 単価比較(対m3.medium)
t4g.medium $0.043 45%
a1.medium $0.032 33%
m6g.medium $0.050 52%
t3.medium $0.054 57%
t3a.medium $0.049 51%
m3.medium $0.096 -

「t4g.medium」のオンデマンド料金は「t3.medium」 と比較して20% 廉価に設定されており、 「t4g」と「t3」が同等の性能で利用できる場合には、費用対効果の改善が期待できます。

large インスタンス

ARM(t4g, a1, m6g) と、x86 (t3, t3a) の比較を試みました。

並列度2

暗号 t4g.large a1.large m6g.large t3.large t3a.large
aes-128-gcm 4238795 2729809 4237787 4754440 3050690
aes-128-ctr 7140633 4889354 7137548 4933102 7879762

t4g.large と m6g.large は 同等の値となりました。

インスタンス 1時間料金(USD) ベースラインパフォーマンス/vCPU
t4g.large $0.086 30%
a1.large $0.064 -
m6g.large $0.099 -
t3.large $0.109 30%
t3a.large $0.098 30%

vCPU数が一致する 「T4g」と「M6g」は同等のCPU性能が期待できますが、 ベースラインを超える負荷が終日継続、 CPUクレジット課金が発生する場合には、 t4g.large より、m6g.large の利用が望ましい場合もあると思われます。

まとめ

Graviton2世代の ARMベースのCPU搭載するEC2インスタンス、 マルチコアが活きるワークロードでは費用対効果に優れた利用が期待できます。

新しくリリースされた「T4g」インスタンス、開発、検証環境だけでなく、 短時間の負荷をバースト性能で処理する用途にも有効と思われます。 お手持ちのワークロードでその性能をお試しください。