🧪

OCI (Oracle Cloud Infrastructure)でArmインスタンスを試してみた

2021/06/01に公開

はじめに

この1,2年はAWS謹製のArm CPUであるGravition2の躍進が凄いですよね。そんなサーバサイドで注目のArmですがついにAmazon以外でも利用できるようになりました。AzureやGCPではなくOracleですけど。。。去年の9月に発表はされていましたけどつい先日利用できるようになりました。

https://blogs.oracle.com/cloud-infrastructure/arm-based-cloud-computing-is-the-next-big-thing-introducing-arm-on-oci

Alwasy Freeの対象らしく4コアまでは無料っぽかったのでとりあえず動かすだけ動かしてみました。ちなみに無料枠を超えると1 core / 1 cent / hourなので80コア使っても1時間あたり100円しないです。

OCIでArmインスタンスを作成

とりあえず以下からログインします。Oracle Accountを持ってない方はSign Up for Free Cloud Tierでアカウントを作ればOKです。Oracle Accountを持ってる方はSign Up for Free Cloud Tierが選べませんが適用されますので普通にログインしてアカウント作ってください。このUIはとても分かりづらいと思う。。。
https://www.oracle.com/cloud/

Create Compute Instance からインスタンスの作成を選ぶと下記のような画面になります。

注意点としてここでAD2を選択してください。これは所謂Availability Zoneと同じようなものですがAD2を選ばないと何故かArmインスタンスを作れません。現在特定ゾーンでだけ実験してるのかもですね。
またOSもOracle Linux 8がおすすめです。Oracle Autonomous Linuxは残念ながらまだ対応してないっぽいのとOracle Linux 7.9だとrpmリポジトリのArm対応が不十分なので8が無難かな、と。Debina/Ubuntu系は試してないので分からんです。

続いて、インスタンスにあたるShapeを選択します。Arm ChipであるAmpere Altraが選択できますね。最大で80 Cores / 512 GB まで選べます。ベアメタルを選べば最大160 coresとなります。とりあえず無料枠の4 Cores / 24 GBを選んでおきます。

単なる動作テストなのでいったんそれ以外はデフォルトでOKです。出来たら登録しておいた公開鍵でSSHログインします。
Azureもそうだけど、GCPみたく起動時点でIAMと連携してSSH周りを隠蔽してほしいと切実に思いますね。。。めんどう。

ssh opc@129.xxx.xxx.xxx -i ~/.ssh/oci-compute.key
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Mon May 31 17:14:06 2021 from xxx.xxx.xxx.xxx 
[opc@instance-20210531-0956 ~]$

ユーザはデフォルトでopcというアカウントが作られています。lscpuをしてみるとArmチップなのが分かりますね。注目のポイントとしては Thread(s) per coreが1であることです。Core per socketも4ですね。HTを利用しないためvCoreと物理Core数が一致するのがGravtion2と同じくN1の特徴です。

[opc@instance-20210531-0956 ~]$ lscpu
Architecture:        aarch64
Byte Order:          Little Endian
CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  1
Core(s) per socket:  4
Socket(s):           1
NUMA node(s):        1
Vendor ID:           ARM
Model:               1
Stepping:            r3p1
BogoMIPS:            50.00
NUMA node0 CPU(s):   0-3
Flags:               fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp ssbs

sysbenchのインストール

特に動かしたいアプリがあるわけではないのでsysbenchあたりで軽くベンチマークでも取ってみます。sysbenchはEPELに入ってるのでフラグを有効にしてインストールします。

[opc@instance-20210531-0956 ~]$ sudo sed -i 's/enabled=0/enabled=1/g' /etc/yum.repos.d/oracle-epel-ol8.repo
[opc@instance-20210531-0956 ~]$ cat /etc/yum.repos.d/oracle-epel-ol8.repo
[ol8_developer_EPEL]
name=Oracle Linux $releasever EPEL Packages for Development ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL8/developer/EPEL/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1
[opc@instance-20210531-0956 ~]$ sudo dnf update
[opc@instance-20210531-0956 ~]$ sudo yum install sysbench

軽くベンチマークを取ってみる

とりあえず実行してみます。

[opc@instance-20210531-0956 ~]$ sysbench --test=cpu run --events=100000 --threads=1
CPU speed:
    events per second:  3479.18
General statistics:
    total time:                          10.0003s
    total number of events:              34796
Latency (ms):
         min:                                    0.28
         avg:                                    0.29
         max:                                    0.46
         95th percentile:                        0.29
         sum:                                 9994.13
Threads fairness:
    events (avg/stddev):           34796.0000/0.00
    execution time (avg/stddev):   9.9941/0.00

とりあえず100,000リクエストで1スレッドだと10秒くらいですね。1スレッドから8スレッドまで同じく流してみたところ以下のような結果になりました。

Number of threads events per second total time total number of events Latency min Latency avg Latency max Latency 95th percentile events (avg/stddev) execution time (avg/stddev)
1 3492.05 10.0003 34925 0.28 0.29 4.42 0.29 34925.0000/0.00 9.9944/0.00
2 6967.75 10.0006 69688 0.28 0.29 10.31 0.29 34844.0000/83.00 9.9868/0.00
3 10389.03 9.6246 100000 0.28 0.29 16.83 0.29 33333.3333/218.80 9.6079/0.00
4 13551.1 7.3785 100000 0.28 0.29 16.32 0.29 25000.0000/651.09 7.3647/0.01
5 13960.43 7.1621 100000 0.28 0.36 20.29 0.29 20000.0000/709.02 7.1495/0.00
6 13932.18 7.1767 100000 0.28 0.43 40.29 0.29 16666.6667/904.91 7.1599/0.01
7 13978.42 7.1529 100000 0.28 0.5 32.29 0.29 14285.7143/622.20 7.1352/0.01
8 13975.48 7.1544 100000 0.28 0.57 20.29 0.29 12500.0000/77.88 7.1372/0.01

一応4スレッドまで徐々に性能が伸びているので期待した動作ですね。x86のチップと比較してみましょう。OCIのAMDインスタンスであるVM.Standard.E4.Flex(OCPU2コア(HT:2)/EPYC 7J13)とGCPのAMDインスタンスであるN2D(vCPU:4コア/EPYC 7B12)でリクエストあたりの実行時間を比較してみました。バーが小さい方が性能が良いです。

青色がArm (Ampere)でオレンジがOCIのEPYC、緑がGCPのEPYCです。EPYCがOCI/GCPともにほぼ同じでかつスレッドを増やしても性能が上がらないですね。。。2コアまでは少なくとも性能が上がると踏んでたんですけど良く分からないですね。なんかパラメータが良くないのかも?

これをもってAmpereが速いとか遅いとかスケールするとかしないとかが言えない結果ですが、まあ極端に遅いわけじゃなし今回のように速い事もあると分かったので今回はOKとしましょう。真面目に見るなら4 Coreとかではなく64 Cores以上のメニーコアで比較しないと意味ないですしね。誰か必要な人がしてくれるでしょう。。。

Ampere Altra

今回、Oracleが採用しているAmpere Altraは以前よりサーバ向けArmを作っているスタートアップであるAmpere社によるものです。元Intel社長であるレネイ・ジェームズ氏が代表取締役兼CEOです。
https://amperecomputing.com/

Oracleとしては独自チップを作るより単純に他社との協業が効率的と判断したようです。まあ、同じNeoverseアーキテクチャを採用するならばIntelとAMDくらいにしか違わないでしょうしそれも選択ですよね。

今回採用しているAltraは以下のようなスペックになっています。

アーキテクチャ Armv8.2+/Neoverse N1
Cores 80
クロック 最大3.30 GHz
L1キャッシュ 64 KB per cores
L2キャッシュ 1 MB per core
L3/System Level Cache (SLC) 32 MB
その他 128bit SIMD x 2, PCIe Gen4 x 128
プロセス TSMC 7 nm FinFET
TDP 45 W ~ 250 W

より詳細なスペックはカタログシートを見るのが良いと思います。詳しすぎるくらい詳しく書いてあるw

性能に関しては、安さに定評のあるOCIだけあってx86インスタンスはもちろんAWSのGravtion2と比べても大きなコストパフォーマンスがあるとOracle的には言っています。以下が SPECrate2017 の結果ですが2.5倍から6倍近いスコアを出しています。ただこれ絶対的な性能比較ではなくあくまでprice per perfomrnaceなのでグラフの見方には要注意。


NGINXなどのより実用なワークロードでの比較もあります。

まあ、コスパ比である以前にこの手のベンチマークはチャンピオンデータなので傾向や特性をつかむにとどめ、実際の自分のワークロードで試すのが大事ですね。

【オマケ】Apple M1や富岳のA64FXみたく爆速なの!?

Armというとスマホだけではなく最近はApple MA64FXも話題なので、Xeon/Ryzenに比べてシングルスレッド性能も速いの? って思うかもしれませんが基本的にはそんなことはありません
ArmはあくまでCPUアーキテクチャなのとIPをライセンシング販売してる関係上x86以上に実装(マイクロアーキテクチャ)による特性の違いが大きいためです。
OCIで使われているAmpere AltraはGravtion 2と同じくNeoverse N1をベースとしているので、サーバ用途としてシングル性能ではなくマルチコアでの安定した伸びを期待した設計です。そのためアプリによっては性能がイマイチだったり、十分な性能だったりとケースバイケースが大きい事が良そうされます。以下は同じくN1のGravtion2のベンチマークです。なんとなく大量に軽い処理をするWebサーバとかには向いてそう?

ref: Impact of Intel vs. ARM CPU Performance for Object Storage

ちなみにArmに関しては以前まとめた動画もあるので 「N1とかなに? そもそもArmって良く分からん」 って人は良ければ見てみてください。

まとめ

OCIで無料でArmが試せるらしいぞ! という事だったのでとりあえず触るだけ触ってみようと久方ぶりにOCIに触ってみました。そんな理由なので特に動かしたいものがあるわけでもないから雑にSysbenchだけ流しておきましたが無難に動いてそうで良かったです。

これによりAWS以外にもArmの選択肢が出来たことでアーキテクチャとして採用しやすくなりましたね。今後のAzureやGCPの動きが気になるところです。独自チップもAmpereとの提携もどちらもありえそうですしね。そしてIntelやAMDが何か手を打ってくるのかあるいは路傍の石と静観を決め込むのかもウォッチャー的には興味深い所です。

また今回はOCIでのサポートという事もあってJavaやGraalVMのArm対応がより進みそうなのもちょっと嬉しいですね。

それではHappy Hacking!

Discussion