8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

東京/大阪リージョンにAMD TurinのShapeが来た!前世代とUnixBenchでサクッと比較だけしようと思ったけど、そうはならなかった話

8
Last updated at Posted at 2025-12-10

はじめに

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を比較してみます。
⬇️
image.png

なんと約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

結果はこちら。
⬇️
image.png
1.2倍弱なのでこちらはCPU 1世代差としては妥当と言えます。

E5 vs E6で3倍というのは嬉しい結果ではありますが、やはり違和感があるので少し詳細を調べる必要があります。

考察する

先ほどはIndex Scoreを見ましたがUnixBenchは12個のベンチマークで構成されているので、個別の値を比較してみます。
image.png

これをみると2つの傾向に分かれます。

  • ① 1.x倍の結果
    • Dhrystone 2 using register variables
    • Double-Precision Whetstone
  • ② 2倍以上の結果
    • その他全て

①のDhrystone 2 using register variablesDouble-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より

以下より確認していきましょう。

ブランチに関する記述
image.png

L1 Dataに関する記述
image.png

フロントエンド/実行幅に関する記述
image.png

簡単な記述ではありますが、それぞれ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はコア単価とメモリ単価は同じなので、お得ですよ。

参考

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?