はじめに
2025年3月にOCI ComputeでAMD Turin世代のCPUを搭載したE6シェイプがリリースされました。当初は海外リージョンだけでしたが、直近、日本の東京・大阪リージョンでも利用できるようになりました。
詳細は以下リリース時のブログを参照ください。
UnixBenchサクッと計測・比較
前世代と比較してどのくらいの性能向上があるかサクッとみんな大好きUnixBenchで取得しました。
UnixBenchは歴史のあるベンチマークであり、現代的なワークロードとの乖離はある内容になっています。
なので、この結果が全てにおいて有効ではないことをご理解の上、あくまで各環境間の相対的な比較指標の一つとしてお読みいただければと思います。
両Shapeのスペックは以下のように同条件としました。
| Shape | CPU | vCPU | Mem(GB) | Network帯域(Gbps) |
|---|---|---|---|---|
| VM.Standard.E5.Flex | EPYC 9J14 (Genoa) | 2 | 16 | 1 |
| VM.Standard.E6.Flex | EPYC 9J45 (Turin) | 2 | 16 | 1 |
その他の条件も合わせるため、ImageやBoot Volなども合わせています。
- Kernel: 6.12.0-104.43.4.2.el9uek.x86_64
- Boot Volume: 50GB, 10 VPU
- UnixBench ver: 5.1.3
上記のBlogにも別ワークロードで同じような比較がありますが、同条件でCPU1世代差なので1.2〜1.3倍の性能向上が得られれば良いでしょう。
早速、UnixBench(コードの修正は行わずRunを実行)を実行してSystem Benchmarks Index Scoreを比較してみます。
⬇️

なんと約3倍の向上です!
「えっ⁉️3倍❓なんで❓なんで❓」っと、想定を遥かに超えた結果で戸惑います。。。
ここで念の為、E5とさらに前のE4を同様に比較してみることにします。スペックは以下です。
| Shape | CPU | vCPU | Mem(GB) | Network帯域(Gbps) |
|---|---|---|---|---|
| VM.Standard.E4.Flex | EPYC 7J13 (Milan) | 2 | 16 | 1 |
| VM.Standard.E5.Flex | EPYC 9J14 (Genoa) | 2 | 16 | 1 |
結果はこちら。
⬇️

1.2倍弱なのでこちらはCPU 1世代差としては妥当と言えます。
E5 vs E6で3倍というのは嬉しい結果ではありますが、やはり違和感があるので少し詳細を調べる必要があります。
考察する
先ほどはIndex Scoreを見ましたがUnixBenchは12個のベンチマークで構成されているので、個別の値を比較してみます。

これをみると2つの傾向に分かれます。
- ① 1.x倍の結果
- Dhrystone 2 using register variables
- Double-Precision Whetstone
- ② 2倍以上の結果
- その他全て
①のDhrystone 2 using register variablesとDouble-Precision Whetstoneについては整数演算と浮動小数点演算で純粋な演算性能の計測といえます。こちらは想定の範囲の結果と言えます。
注目すべきは②でFile I/Oなど複合的な計測になっています。
②の計測での挙動を調べてみましょう。
🔬詳細調査
調査は標準インストールされているperfコマンドを利用します。個別ベンチマークのシステムコールやカウンタなどをE5とE6で比較してみます。
☑️File Copy 1024 bufsize 2000 maxblocksの比較
本ワークロードは、1024バイトのバッファを使って、ファイルコピーを行います。
perf statからは以下が顕著な違いと言えそうです。
| 比較値 | 比較結果 |
|---|---|
| instructions | 1サイクルあたりの平均命令数が0.71から2.7に改善 |
| branch-misses | 分岐予測ミス率が10.97%から0.46%に改善 |
| L1-dcache-load-misses | L1データキャッシュミス率が12.96%から1.34%に改善 |
⬇️VM.E5での実行結果
[opc@e5-ol9-unixbench ~]$ sudo perf stat -d "$BINDIR/fstime" -c -t 30 -d "$TMPDIR" -b 1024 -m 2000
Write done: 5344000 in 2.0022, score 667259
COUNT|667259|0|KBps
TIME|2.0
Read done: 8757164 in 2.0000, score 1094631
COUNT|1094631|0|KBps
TIME|2.0
Copy done: 47659580 in 30.0000, score 397163
COUNT|397163|0|KBps
TIME|30.0
Performance counter stats for '/home/opc/UnixBench/pgms/fstime -c -t 30 -d /home/opc/UnixBench/tmp -b 1024 -m 2000':
34,021.81 msec task-clock # 0.746 CPUs utilized
591 context-switches # 17.371 /sec
47 cpu-migrations # 1.381 /sec
66 page-faults # 1.940 /sec
97,062,243,821 cycles # 2.853 GHz (85.70%)
56,777,056,732 stalled-cycles-frontend # 58.50% frontend cycles idle (85.71%)
68,912,885,650 instructions # 0.71 insn per cycle
# 0.82 stalled cycles per insn (85.67%)
15,035,010,502 branches # 441.923 M/sec (85.72%)
1,649,850,885 branch-misses # 10.97% of all branches (85.74%)
26,596,574,472 L1-dcache-loads # 781.751 M/sec (85.75%)
3,447,196,065 L1-dcache-load-misses # 12.96% of all L1-dcache accesses (85.72%)
<not supported> LLC-loads
<not supported> LLC-load-misses
45.582058193 seconds time elapsed
7.321303000 seconds user
24.381246000 seconds sys
⬇️VM.E6での実行結果
[opc@e6-ol9-unixbench UnixBench]$ sudo perf stat -d "$BINDIR/fstime" -c -t 30 -d "$TMPDIR" -b 1024 -m 2000
Write done: 25496000 in 2.0004, score 3186410
COUNT|3186410|0|KBps
TIME|2.0
Read done: 46229804 in 2.0000, score 5778687
COUNT|5778687|0|KBps
TIME|2.0
Copy done: 221924940 in 30.0000, score 1849374
COUNT|1849374|0|KBps
TIME|30.0
Performance counter stats for '/home/opc/UnixBench/pgms/fstime -c -t 30 -d /home/opc/UnixBench/tmp -b 1024 -m 2000':
34,068.08 msec task-clock # 0.755 CPUs utilized
497 context-switches # 14.588 /sec
52 cpu-migrations # 1.526 /sec
65 page-faults # 1.908 /sec
111,042,895,781 cycles # 3.259 GHz (85.68%)
27,956,355,726 stalled-cycles-frontend # 25.18% frontend cycles idle (85.59%)
299,866,801,007 instructions # 2.70 insn per cycle
# 0.09 stalled cycles per insn (85.75%)
55,455,789,419 branches # 1.628 G/sec (85.75%)
252,884,979 branch-misses # 0.46% of all branches (85.75%)
142,101,676,726 L1-dcache-loads # 4.171 G/sec (85.75%)
1,910,846,777 L1-dcache-load-misses # 1.34% of all L1-dcache accesses (85.73%)
<not supported> LLC-loads
<not supported> LLC-load-misses
45.112821074 seconds time elapsed
3.634252000 seconds user
28.678496000 seconds sys
☑️Pipe Throughputの比較
本ワークロードは、UNIXのパイプを使って1秒間に何回データをやりとりできるか?を計測します。
perf statからは以下が顕著な違いと言えそうです。
| 比較値 | 比較結果 |
|---|---|
| instructions | 1サイクルあたりの平均命令数が0.64から3.11に改善 |
| branch-misses | 分岐予測ミス率が11.29%から0.71%に改善 |
| L1-dcache-load-misses | L1データキャッシュミス率が14.08%から0.01%に改善 |
⬇️VM.E5での実行結果
[opc@e5-ol9-unixbench ~]$ sudo perf stat -d "$BINDIR/pipe" 10
COUNT|6313116|1|lps
Performance counter stats for '/home/opc/UnixBench/pgms/pipe 10':
10,014.18 msec task-clock # 0.999 CPUs utilized
71 context-switches # 7.090 /sec
9 cpu-migrations # 0.899 /sec
57 page-faults # 5.692 /sec
28,744,929,999 cycles # 2.870 GHz (85.73%)
15,761,877,670 stalled-cycles-frontend # 54.83% frontend cycles idle (85.74%)
18,494,230,458 instructions # 0.64 insn per cycle
# 0.85 stalled cycles per insn (85.73%)
3,837,900,569 branches # 383.247 M/sec (85.75%)
433,346,139 branch-misses # 11.29% of all branches (85.75%)
7,140,155,097 L1-dcache-loads # 713.005 M/sec (85.73%)
1,005,573,540 L1-dcache-load-misses # 14.08% of all L1-dcache accesses (85.57%)
<not supported> LLC-loads
<not supported> LLC-load-misses
10.019953355 seconds time elapsed
3.098232000 seconds user
6.285903000 seconds sys
⬇️VM.E6での実行結果
[opc@e6-ol9-unixbench UnixBench]$ sudo perf stat -d "$BINDIR/pipe" 10
COUNT|37450480|1|lps
Performance counter stats for '/home/opc/UnixBench/pgms/pipe 10':
10,005.12 msec task-clock # 1.000 CPUs utilized
90 context-switches # 8.995 /sec
8 cpu-migrations # 0.800 /sec
57 page-faults # 5.697 /sec
32,766,486,964 cycles # 3.275 GHz (85.72%)
8,825,768,039 stalled-cycles-frontend # 26.94% frontend cycles idle (85.72%)
102,059,696,109 instructions # 3.11 insn per cycle
# 0.09 stalled cycles per insn (85.72%)
17,831,783,076 branches # 1.782 G/sec (85.72%)
127,420,307 branch-misses # 0.71% of all branches (85.73%)
48,225,676,900 L1-dcache-loads # 4.820 G/sec (85.73%)
3,166,560 L1-dcache-load-misses # 0.01% of all L1-dcache accesses (85.66%)
<not supported> LLC-loads
<not supported> LLC-load-misses
10.008767801 seconds time elapsed
2.127528000 seconds user
7.382743000 seconds sys
☑️System Call Overheadの比較
本ワークロードは、システムコールを1秒間に何回呼べるかを計測しています。
perf statからは以下が顕著な違いと言えそうです。
| 比較値 | 比較結果 |
|---|---|
| instructions | 1サイクルあたりの平均命令数が0.36から2.19に改善 |
| branch-misses | 分岐予測ミス率が12.03%から1.72%に改善 |
| L1-dcache-load-misses | L1データキャッシュミス率が14.12%から0.01%に改善 |
⬇️VM.E5での実行結果
[opc@e5-ol9-unixbench ~]$ sudo perf stat -d "$BINDIR/syscall" 10
COUNT|3852715|1|lps
Performance counter stats for '/home/opc/UnixBench/pgms/syscall 10':
10,020.09 msec task-clock # 1.000 CPUs utilized
64 context-switches # 6.387 /sec
8 cpu-migrations # 0.798 /sec
58 page-faults # 5.788 /sec
28,750,587,562 cycles # 2.869 GHz (85.75%)
14,679,008,759 stalled-cycles-frontend # 51.06% frontend cycles idle (85.74%)
10,481,179,170 instructions # 0.36 insn per cycle
# 1.40 stalled cycles per insn (85.75%)
2,390,846,254 branches # 238.605 M/sec (85.73%)
287,542,033 branch-misses # 12.03% of all branches (85.75%)
3,854,341,506 L1-dcache-loads # 384.661 M/sec (85.75%)
544,247,746 L1-dcache-load-misses # 14.12% of all L1-dcache accesses (85.52%)
<not supported> LLC-loads
<not supported> LLC-load-misses
10.024598790 seconds time elapsed
4.786845000 seconds user
4.603775000 seconds sys
⬇️VM.E6での実行結果
[opc@e6-ol9-unixbench UnixBench]$ sudo perf stat -d "$BINDIR/syscall" 10
COUNT|28475738|1|lps
Performance counter stats for '/home/opc/UnixBench/pgms/syscall 10':
9,973.65 msec task-clock # 0.996 CPUs utilized
323 context-switches # 32.385 /sec
27 cpu-migrations # 2.707 /sec
57 page-faults # 5.715 /sec
32,611,420,579 cycles # 3.270 GHz (85.71%)
13,813,495,676 stalled-cycles-frontend # 42.36% frontend cycles idle (85.75%)
71,365,484,531 instructions # 2.19 insn per cycle
# 0.19 stalled cycles per insn (85.74%)
13,837,497,958 branches # 1.387 G/sec (85.73%)
238,146,711 branch-misses # 1.72% of all branches (85.73%)
35,074,028,179 L1-dcache-loads # 3.517 G/sec (85.75%)
2,569,582 L1-dcache-load-misses # 0.01% of all L1-dcache accesses (85.58%)
<not supported> LLC-loads
<not supported> LLC-load-misses
10.015654649 seconds time elapsed
3.915883000 seconds user
5.560370000 seconds sys
📝perf stat結果からの考察
perf statで確認した結果から、共通していることは以下の3つが大きく改善している点です。
- instructions
- branch-misses
- L1-dcache-load-misses
上記についてAMD Turinアーキテクチャがどのような改善をされたのかを調べてみます。
📃white paperより
以下より確認していきましょう。
簡単な記述ではありますが、それぞれperf statで改善されていたところと整合はしています。
改めてUnixBenchで改善されていたところとTurinのアーキテクチャを照らし合わせると以下のように言えるのではないでしょうか。
- branch-misses ➡️ ブランチ予測の精度・レイテンシの改善
- L1-dcache-load-misses ➡️ キャッシュの改善
- instructions ➡️ 上記の改善+フロントエンド/実行幅の総合的な強化の結果
まとめ
東京/大阪リージョンで利用可能になったE6 Shape(AMD Turin)とその前世代をUnixBenchで比較してみました。
安易な想定でいきなり計測をしてしまったので良い結果に戸惑いました。事前にWhite Paperなどを確認していればよかったのですが、、ただ結果としては楽しみながら比較をすることができたのでAdvent calendarのネタ的には満足です。
これを見ていただいた皆さんも身の回りのワークロードで比較してみてはいかがでしょうか?
最後に、VM.Standard.E5.FlexとVM.Standard.E6.Flexはコア単価とメモリ単価は同じなので、お得ですよ。
参考


