ARMベースのCPUをバースト利用できる「T4g」インスタンスの性能をOpenSSLで測定してみた
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」インスタンス、開発、検証環境だけでなく、 短時間の負荷をバースト性能で処理する用途にも有効と思われます。 お手持ちのワークロードでその性能をお試しください。