ALH84001

私的コラム&雑記(&メモ)

NanoPi R4S (2) パフォーマンス測定編

2021-02-13 | ガジェット / PC DIY

Back Issue

NanoPi R4S (1) 導入編
NanoPi R4S (2) パフォーマンス測定編(本稿)

テスト環境セットアップ

 前回の投稿ではNanoPi R4SというSingle-Board Computer(SBC)がどういうマシンかということについて、ハードウェアの側面とソフトウェアの側面から実機を使わない主にカタログスペック的な観点から説明した。今回はArmbian 21.02.1のリリースを受けて実際のパフォーマンスを測定してみたい。前バージョンArmbian 20.11.1は筆者の環境では起動すらしなかったが、今回のArmbian 21.02.1については問題なく起動することができた。LAN側のEthernetを接続すると本体上面のWAN側LEDが点灯するという軽微な問題はあるが実用上の支障は無い。

 今回のベンチマークでは2種類のハードウェアと2種類のOSイメージとで計3種類の環境を作成し測定している。これらの環境で測定できるのは主に以下の2点である。

  1. 同一ハードウェア=NanoPi R4Sにおける異なるLinux Kernelでの性能の違い
  2. Cortex-A72ベースシステムとCortex-A53ベースシステムでの性能の違い

今回の測定ではNanoPi R4Sと比較のためのNanoPi Neo2の2種類のSBCを用いている。これらのSBCを所有している人は多くないと思われるが、類似の環境は存在し概ね同じ傾向の結果を得られるだろうと予想できる。具体的にはRaspberry Pi 3とRaspberry Pi 4にはNanoPi Neo2・NanoPi R4Sと同様にCortex-A53ベース・Cortex-A72ベースという違いがある。

  NanoPi R4S NanoPi Neo2
       
SoC Rockchip RK3399 Allwinner H5
OS Image FriendlyCore 20201226
Ubuntu Core 20.04 LTS
Armbian 21.02.1
Ubuntu 20.04 LTS
Linux Kernel 4.19.111 (BSP) 5.10.12 (Mainline)
CPU big core Cortex-A72
1.8 GHz x 2
Cortex-A53
816 MHz x 4
little core Cortex A53
1.4 GHz x 4
GPU Mali-T860MP4
81.6 GFLOPS @ 600 MHz
Mali-450MP4
Memory LPDDR4 x32
4 GB
DDR3 x16
512 MB

 NanoPi R4SではArmbian 21.02.1とFriendlyELEC純正FriendlyCoreで測定している。いずれもUbuntu 20.04 LTSをベースにしているため機能的な差異はほぼ無いがLinux Kernelの違いが性能に影響を与える可能性がある。
 FriendlyCore OSイメージはUbuntu 20.04ベースのUbuntu CoreユーザースペースにRockchipのBoard Support Package(BSP)Kernelという組み合わせとなっている。RockchipのBSP Kernelは2018年のLTS KernelであるLinux Kernel 4.19.111である。対するArmbian 21.02は通常のUbuntu 20.04のユーザースペースに2020年のLTS KernelであるLinux Kernel 5.10という組み合わせとなっている。

 ちなみに、FriendlyCoreはUbuntu Coreベースなので構成が通常のUbuntuとは微妙に異なり、例えば起動後に/bootの中身や設定ファイルなどの配置が通常のUbuntuとは異なる。ただし、パッケージのリポジトリ-=バイナリーは同じなので性能的な差異は無いと考えられる。この辺りは用途の違いにもよるし本稿の趣旨と異なるため割愛する。
 対するArmbianはコミュニティー自体が謳う通りDebian/Ubuntuベースの汎用のOSであるが、デバイスに応じてLinuxカーネルのコンパイル時のコンフィグがSoCに合わせてカスタマイズされているほか、Swapが省略されていたりAPTもRecommendsやSuggestsが除外されているなど、SBC/組込への一定の配慮がなされている。

 上述の通り、今回はNanoPi R4Sの比較用としてNanoPi Neo2を用意した。ただし、結論から言えばあまり比較対象として有効に用いることができなかった。
 比較用にNanoPi Neo2 を用いた主な理由は以下の通りである(これらに加えて筆者が既に所持していたから、という理由もある)。

  • SoCベンダーの公式情報によるとNanoPi Neo2のAllwinner H5はCortex-A53 1.5 GHz 4-core、対するNanoPi R4SのRockchip RK3399はCortex-A72 2.0 GHz 2-core + Cortex-A53 1.5 GHz 4-coreとなっている。言い換えるとH5はRK3399のLITTLE側の構成に似ている。スマートフォンのようなワークロードでは大して意識することではないが、仮想化などで複数OSを動かしたり、アプリケーションを特定CPUコアに割り当てるような場合には、どの程度の性能が期待できるか役立つ場合がある

  • ドキュメントを参考にする限りAllwinnerの暗号エンジンはRockchipのものより強力そうである。つまりNanoPi R4SとNanoPi Neo2の比較は、高速CPU+低速アクセラレーターと低速CPU+高速アクセラレーターの違いとして見ることができ、特定用途でNanoPi Neo2の方が優れた結果を得られることを期待できた

しかし、詳細は後述するが、今回の測定では上記のような検証はできなかった。今後、検証が行えた場合は追加でレポートしたいと思う。

 ところで、NanoPi Neo2について御存知であれば公式のスペックと上記のスペックとの違いに違和感を持たれたのではないかと思う。
 FriendlyELECサイトによるとCortex-A53 1.5 GHz Quad-coreのはずだが、Armbianでは816 MHz・FriendlyELEC純正イメージでも1008 MHzでしかでない。もし1.5 GHzで動作していればNanoPi R4Sのbig.LITTLEのLittle側Cortex-A53 1.5 GHz Quad-coreと同等のスペックとなり比較が容易だったのだが、実際はその約1/2の816 MHzなので比較のしようがなかった。
 実は、これほど極端な例は珍しいにしても中国ベンダー製SoCではカタログに記載の機能・性能が達成できない例が珍しくない。例えば2年ほど前にSBC市場を席巻したAmlogic S905も当初は公称2.0 GHzだったが実際は最大1.5 GHzまでだったし(2.0 GHzを設定可能だが、2.0 GHzで設定しても実際には1.5 GHzで動作する)、RK3399もメーカーのカタログスペックではCortex-A72 2.0 GHz + Cortex-A53 1.5 GHzのはずだが、実際にはCortex-A72 1.8 GHz + Cortex-A53 1.4 GHzとなっている。

Unix Bench

$ wget https://github.com/kdlucas/byte-unixbench/archive/v5.1.3.tar.gz
$ tar -zxvf v5.1.3.tar.gz
$ ./Run -c 1 -c 6
  NanoPi R4S NanoPi Neo2
SoC Rockchip RK3399 Allwinner H5
OS Image FriendlyCore 20201226
Ubuntu Core 20.04 LTS
Armbian 21.02.1
Ubuntu 20.04 LTS
Linux Kernel 4.19.111 (BSP) 5.10.12 (Mainline)
Benchmark Results
Unix Bench Single-core Index score 400.8 (-c 1) 550.6 (-c 1) 247.3 (-c 1)
Unix Bench Multi-cores Index scores 710.0 (-c 2)  +77.1 % 1042.1 (-c 2) +89.3 % 702.8 (-c 4) +184.2 %
855.2 (-c 4) +113.4 % 1325.4 (-c 4) +140.7 %
1007.3 (-c 6) +151.3 % 1565.6 (-c 6) +184.3 %

 Unix Benchは定番のDhrystone(Integer)・Whetstone(Floating Point)・ファイルコピーなど多岐に渡る様々なベンチマークを総合したものでSBCの性能の測定にはよく使用される。いずれも古いベンチマークなのでハードウェアの特徴を見るには有益だが現代のワークロードには必ずしも合わないうえ、命令セットが異なると結果の比較が不可能なので注意が必要である。恐らく組込でよく使われる理由としては、現代の組込プロセッサーで実行可能なほど軽量なうえ、IPCの目安が一言で分かるからだろう。
 Unix Benchではベンチマークの実行に使用するコア数をオプションで指定することができ、NanoPi Neo2ではCortex-A53 x4の対称なコアのため4コアでのマルチコア性能がシングルコア性能 x コア数に近い結果となっているが、RK3399はCortex-A72 x2 + Cortex-A53 x4の非対称なコア構成のためマルチコア性能がシングルコア性能 x コア数に近い数字にはならない。そのためRK3399の場合1-coreと2-coreとでは+77~89%も性能が向上しているにも関わらず、1-coreと4-coreとでは+113~140%(2-core比で+20~27%)しか向上していない。

 総合成績を一見するとNanoPi R4S + Armbianの組み合わせがNanoPi R4S + FriendlyCoreの組み合わせを大幅(+50%弱ほど)に上回っており、NanoPi Neo2 + Armbianの組み合わせが善戦しているように見えるが、詳細を見ると実際はそうでもないことが分かる。
 以下はシングルコアの成績の詳細を表にまとめたもので、NanoPi R4S+ FriendlyCoreの結果=100%として何%違いがあるかを示している。多くの項目でNanoPi R4S + Armbianの組み合わせとNanoPi R4S + FriendlyCoreの組み合わせは同等の成績を出しており、ファイルコピー・プロセス生成・システムコールのみ大差がついている。また、NanoPi Neo2 + Armbianの組み合わせは同じくファイルコピー・プロセス生成・システムコールで善戦しているものの、素のCPU性能による部分が大きい整数演算(Dhrystone)と浮動小数点演算(Whetstone)などではやはり大差がついている。確かにLinux Kernelの差で多少の性能改善はするものの、(当たり前だが)ハードウェア的な優位性を覆すほどの改善が見られるわけではないことが分かる。

  NanoPi R4S NanoPi Neo2
SoC Rockchip RK3399 Allwinner H5
OS Image FriendlyCore 20201226
Ubuntu Core 20.04 LTS
Armbian 21.02.1
Ubuntu 20.04 LTS
Dhrystone 2 using register variables 15689169.2 15457666.6 (-1.47 %) 4049177.8 (-74.19 %)
Double-Precision Whetstone 3159.3 3164 (+ 0.15 %) 1031.8 (-67.34 %)
Execl Throughput 1235.9 1775.6 (+ 43.69 %) 635.2 (-48.60 %)
File Copy 1024 bufsize 2000 maxblocks 136595 353712.9 (+158.95 %) 129941.4 (-4.87 %)
File Copy 256 bufsize 500 maxblocks 42122 125397.8 (+197.70 %) 41873.2 (-0.59 %)
File Copy 4096 bufsize 8000 maxblocks 358439.2 848741.5 (+136.79 %) 284041.3 (-20.76 %)
Pipe Throughput 376939.1 501045.7 (+32.92 %) 209519 (-44.42 %)
Pipe-based Context Switching 78081.8 41778.6 (-46.49 %) 37026.3 (-52.58 %)
Process Creation 1613.1 2276.8 (+41.14 %) 1799.3 (+ 11.54 %)
Shell Scripts (1 concurrent) 2664 2260.8 (-15.14 %) 1498.3 (-43.76 %)
Shell Scripts (8 concurrent) 725.7 1066 (+46.89 %) 431.2 (-40.58 %)
System Call Overhead 371994.6 519052.7 (+39.53 %) 354650.5 (-4.66 %)

 筆者は今回のNanoPi R4S + Armbianの組み合わせとNanoPi R4S + FriendlyCoreの組み合わせとの差異は実用上は違いが無いないと考える。同じRockchip RK3399を搭載したハードウェアでもKobol Helios64のようなNASではファイルコピー性能の向上は恩恵がありそうだが、NanoPi R4Sのハードウェア構成はNASよりも、ルーター・VPNゲートウェイ・ファイヤーウォール等のネットワークアプライアンスとしての利用の方が主眼に思える。これらのネットワークアプライアンスではストレージにアクセスするのはシステムやサービス起動時がほとんどで稼働中はほとんどディスクにアクセスしないため(もちろんログなどは記録するので皆無ではないが…)、Linux Kernelによる改善点で実用性が大きく向上するとは考え難い。

OpenSSL speed (AES-128-CBC, AES-256-CBC)

openssl speed -elapsed aes-128-cbc
openssl speed -elapsed -evp aes-128-cbc
openssl speed -elapsed aes-256-cbc
openssl speed -elapsed -evp aes-256-cbc
  NanoPi R4S NanoPi Neo2
SoC Rockchip RK3399 Allwinner H5
OS Image FriendlyCore 20201226
Ubuntu Core 20.04 LTS
Armbian 21.02.1
Ubuntu 20.04 LTS
Linux Kernel 4.19.111 (BSP) 5.10.12 (Mainline)
Benchmark Results
OpenSSL w/o '-evp' AES-128-CBC 1KB 92054.87k 92261.03k 25189.72 KB/s
OpenSSL w '-evp' AES-128-CBC 1KB 1282523.14k 1282453.50k 547143.68 KB/s
OpenSSL w/o '-evp' AES-256-CBC 1KB 68269.74k 68371.80k 25242.28 KB/s
OpenSSL w '-evp' AES-256-CBC 1KB 981640.87k 981023.06k 379278.68 KB/s

 OpenSSLベンチマークではOpenSSL 1.0.xなど古いバージョンでは8KBまで、OpenSSL 1.1.xなど新しいバージョンでは16KBまで測定されるため、一般的には8KB/16KBの結果で比較を行う場合が多いように思われるが、ここでは用途を鑑み1024 Byteでの値を示している。

 例えばWebサーバーなどを想定している場合、HTTPSで通信するのでアプリケーション層/Layer-5のSSLトンネルに入る前に暗号化/出た後に復号化され、データはLayer-4で分割/結合される。このため8/16KBを超えるようなデータ(例えば10 MB)であってもそのままアプリケーション層で暗号化/復号化され、その下のLayer-4で分割される。つまり、HTTPSのワークロードでは8KBや16KBでの測定は目的と用途が合致している。
 しかしNanoPi R4SやNanoPi Neo2などはハードウェアの特性上、IPsecやOpenVPNを用いたVPNゲートウェイとしての用途が考えられる。IPsecでは分割後のLayer-3でペイロードが暗号化/復号化されるし、OpenVPNのSSL-VPNではLayer-2仮想NIC経由で再度Layer-5からSSLトンネルを通るためやはり分割後に暗号化/復号化される。つまり、IPsecやOpenVPNのようなワークロードでは最大で1500 Byte前後で暗号化/復号化されるため1024 Byteの測定値が現実に近い数字になると考えられる。
 ちなみに、IPsecのようにLayer-3でペイロードが暗号化/復号化されるということはLinux Kernel内のカーネルモジュールで暗号化されるはずで、ユーザースペースで動作するOpenSSLのベンチマークは必ずしも実態に即していないので注意が必要である。

 コマンドのオプションの'-evp'フラグはEVPインターフェースでのハードウェア暗号エンジン使用の有無を示している。
 ただし、'-evp'フラグで有効化されている暗号エンジンはプロセッサーベンダープロプライエタリーのハードウェア暗号エンジンではなくArmv8 Crypto Extension命令である(Intel CPUの場合では'-evp'の指定によりAES-NI命令が有効化される)。これはArmv8-A Advanced SIMDのオプション命令でプロセッサーベンダーがArmからライセンスを購入することで有効化している(ちなみにRaspberry Pi 3/4では使用できない)。
 プロセッサーベンダープロプライエタリーのハードウェア暗号エンジンが使用されていないことはLinux KernelモジュールをLoad/Unloadして結果を比較することで確認できる。

 Rockchip RK3399もAllwinner H5プロセッサーベンダープロプライエタリーのハードウェア暗号エンジンを搭載しており、メインラインLinux Kernelで(カーネルスペースでは)使用できる。しかし、OpenSSLからは使用できなかった。
 これはどうやらUbuntu 20.04標準のOpenSSLバイナリーがAF_ALG暗号エンジンが有効化されてビルドされていないようだ。このことは残念ではある。CryptodevやAF_ALGのアーキテクチャーや設定方法などについては組込SBCベンダーのGateworksのWikiやDIY NASメーカーのKobolのWikiに詳しい。使用している他社製SoCの部分を読み替えればRockchipやAllwinnerのSoCにも応用できる。
 AF_ALGインターフェースを用いた暗号エンジンの利用については別の記事で比較検討する予定である。

 NanoPi Neo2の場合AES-128-CBCで暗号エンジン使用で547143680KB/s(4.07 Gbps)の速度がでている。VPNということは双方向通信だし通信以外の処理も発生するから多少は劣化するだろうが暗号化/復号化の性能だけを見れば1 Gbpsの双方向通信ぐらいは可能そうに思える。NanoPi R4Sではさらに高速である。
 ただし、上述の通り暗号化/復号化にCPUの暗号エンジンを使用している点に注意が必要である。例えばVPNゲートウェイを構築する場合、暗号化/復号化に加えて異なるネットワーク間でパケットを転送するフォワーディング処理が必要となるが、フォワーディングはCPUを食うため両方の処理を合わせて1 Gbps出るかについては怪しい。暗号化/復号化をハードウェアアクセラレーターにオフロードすることを検討したいところである。

 同一ハードウェアでのLinux Kernelバージョンの違いによる性能の違いであるが、カーネルバージョンの違いによる性能の差異はハードウェアやソフトウェア次第では大きな差が生じることもあるが(参考)、今回の測定では有意な差は見られなかった。

まとめ

 冒頭でも述べた通り、今回のテストでは以下の2点の検証を行った。

  1. 同一ハードウェア=NanoPi R4Sにおける異なるLinux Kernelでの性能の違い
  2. Cortex-A72ベースシステムとCortex-A53ベースシステムでの性能の違い

 まず1点目のLinux Kernelバージョンについてであるが、上述の通りLinux Kernelバージョンの違いについては差は限定的であった。そのため性能を目的として新しいLinux Kernelをインストールする意味は薄いかもしれない。
 本稿では性能に注目したためこのような結果となったが、しかし、Linux Kernelには様々な機能が追加されているため、必要な機能が目的で新しいLinux Kernelを導入することは考えられる。例えばNanoPi R4Sの用途としてVPNゲートウェイが考えられるが、VPNプロトコルにWireGuardを使用するのであればLinux Kernel 5.6以降が必要となるためFriendlyCore(Linux Kernel 4.19)よりもArmbian 21.02.1(Linux Kernel 5.10)の方が適していると考えられる。

 次に2点目のCPUコアの違いについてであるが、NanoPi R4SとNanoPi Neo2との違いが小さかったことは意外であったが順当な結果と言える。その意味でも暗号エンジンを有効化できなかったことは残念だった。

 スマートフォンなどに使用されるArm系組込SoCはコモディティ化して本来の使われ方が忘れられがちだが、もともと組込SoCではアクセラレーターを使う前提でCPUは非力な仕様の製品が少なくない。例えば10年以上前は主流のネットワークプロセッサーだった旧Motorola/旧Freescale(現NXP)のPowerQUICC/QorIQなどもCPUはPCより数段劣るものだったが専用のパケットエンジンと暗号エンジンでルーターやVPNゲートウェイなどに広く使われた。
 上述の通り、NanoPi R4S(RK3399)とNanoPi Neo2(H5)とではCPU性能はRK3399に分があるが暗号エンジンではH5の方が優位に見えるため、アクセラレーターを用いるケースではCPUで劣るはずのH5が優位な場合があることを検証することができると考えたが、Armbian/Ubuntu標準の構成では暗号エンジンをOpenSSLから使用することができず、意図したような結果は得られなかった。この点については今後レポートできればと思う。
 UbuntuのOpenSSLパッケージでAF_ALGが有効化されていない理由は不明だが推測は可能である。そもそも (1) Ubuntuが主に使用されているx86-64プロセッサーには暗号エンジンが搭載されていない (2) 組込プロセッサーの一部でAF_ALGインターフェース対応の暗号エンジンを搭載したデバイスがあるが効果は限定的だからである。そもそも、暗号エンジンに限らないがアクセラレーターを有効化することが常に有効とは限らない。アクセラレーターが有効なのは (1) CPU-アクセラレーター間のオーバーヘッドを加味してもその方が速い場合(例:GPGPU) (2) CPUのワークロードをアクセラレーターにオフロードすることでCPUの空き時間を増やせる場合に限られる。先にも挙げたKobolのWikiではMarvellのSoCでMarvell CECA暗号エンジンをCryptodev・AF_ALGから利用した場合をベンチマークで測定しているが、一部の条件を除いてCPU時間がカーネルスペースでもユーザースペースでも増えるうえにスループットも大きくは向上していないケースが多く、このような場合ではアクセラレーターを用いることは逆効果となりかねない。PC/スマートフォンのCPUでは128-bit/256-bit SIMD演算を2 GHz~(INT32/FP32・128-bit 4-way SIMD・2 GHzで8 GFLOPS)とか超高速に演算できるわけで、よほど高性能なアクセラレーターでなければ逆効果となるのは想像に難くない。GPUなどを除く多くのアクセラレーターでは500 MHzとかがざらであることを考えれば想像に難くないだろう。

Comment

最近の気になった話題(2021年第05週)

2021-02-06 | 興味深かった話題

AMD APU "Cezanne" と "Lucienne"

CezanneはRenoirをZen 3に置き換えただけでなくあちこち再設計されている - ASCII.jp

 ASCII大原氏がAMDのRyzen 5000 APUシリーズ"Cezanne"と"Lucienne"について解説されている。興味深いのは"Lucienne"が"Renoir"のリネームではなくZen2版"Cezanne"ということで、CPUコア以外も再設計されているという点だろう。"Lucienne"は"Zen2" CPUコアと"Vega" 8CU GPUコアの組み合わせということで"Renoir"のリネームあるいは"Renoir Refresh"と考えられてきたが、そうでなかったことになる。

  Ryzen 5000
Cezanne
Ryzen 5000
Lucienne
Ryzen 4000
Renoir
CPU Zen3
8-core (1 CCX)
16 MB L3$
Zen2
8-core (2 CCX)
4+4 MB L3$
Zen2
8-core (2 CCX)
4+4 MB L3$
GPU Vega
8CU
Vega
8CU
Vega
8CU

 このことは普通に考えればエンジニアリングリソースの無駄遣いである。"Renoir"はRyzen APU=デスクトップ版Gシリーズ・モバイル版U/H/HSシリーズだけでなくRyzen Embeddedでも投入されており10年間ほどの供給義務が発生するため、恐らくはRyzen 5000シリーズをリリース後も"Renoir"を製造中止にするわけにはいかないだろう。ならばRyzen 5000シリーズは"Cezanne"のみとし"Renoir"を継続するかリブランドした"Renoir Refresh"を投入する方が自然に思える。"Lucienne"では電源管理が"Renoir"から大きく改善されているそうでAnandTechが詳しく報じているが、それで改善できるのは消費電力≒バッテリー寿命とかCPUやGPUのピーク動作周波数とかで、"Renoir"から設計を大幅変更までするのは不可解としか言いようがない。
 同様に不可解なのがVega GPUである。2017年発表の"Raven Ridge" APU・2019年発表の"Picasso" APUで"Zen" CPU(2017年発表)や"Zen+" CPU(2018年発表)に"Vega" GPU(2017年発表)が採用され"Navi" GPU(2018年発表)が採用されないというのは理解できるし、2020年発表"Renoir"で"Zen2" CPU(2019年発表)と"Vega" GPUを採用というのも解らないではない。しかし、2021年発表の"Cezanne"/"Lucienne"で"Zen3" CPU(2020年発表)に組み合わせるのが"Navi2" GPU(2020年発表)でも"Navi" GPU(2018年発表)すでもなく"Vega" GPUというのは合理的でない。ましてや、同じ論理設計・物理設計を使い回したならばともかく"Picasso"→"Renoir"→"Cezzanne"/"Lucienne"と論理設計も物理設計も変更されているにも拘らずである。

 ところで、筆者は先日投稿した記事中でAMDがAPUでGCN系GPUを続ける理由としてAPU/SoCでのROCmのためではないかと推測したが、筆者の推測が合っているか否かはともかく、そういった本来のAPUの用途(デスクトップ/ラップトップ クライアントPC用)以外を想定した何らかの目的でRDNAではなくGCNが選択されたと考えなければ合理的でないように思う。

 例えば、以前"Raven Ridge"/"Picasso"→"Renoir"ではCPUコアが2倍に増えた代わりにGPUを"Vega" 10CU→"Vega" 8CUとGPU CU数が20%削減されており、動作周波数を25%向上させることで性能向上を果たした。これは"Renoir"が製造コスト/実装コストに制約のあるラップトップ/ローエンドデスクトップ向けAPUの立ち位置を考えれば合理的に思えた。しかし、"Renoir"→"Cezzanne"/"Lucienne"では同じVega 8CUながら35%も実装コストは増えており辻褄が合わない(大原氏の試算を引用すれば「Renoirがおよそ11.2mm2、対するCezanneは15.1mm2ほど」らしい)。それならば例えば"Cezanne"/"Lucienne"では"Vega" 8CU→"Vega" 10CUに戻すといった判断があってもよかったはずである。
 また、そもそも論理設計や物理設計に手を入れるのであれば"Vega"ではなく"Navi"でもよかったはずである。PCWatch後藤氏の記事に詳しいが、RDNAはGCNから制御回りや演算ユニットがグラフィックスに最適化しており、実装コストあたりの演算性能は向上している。GCNでは1CUあたり4基の制御ユニットが4基の512-bit幅SIMDエンジンを制御してWavefront=2048-bitを処理していたが、RDNAでは1基の制御ユニットが1基の1024-bit幅SIMDエンジンを制御してWave1024=1024-bitを処理する形に改められ、さらにSIMDエンジンもゲーミング/グラフィックスではほとんど使用されないFP64演算のリソースが削減されている。つまり同じ実装コストならば"Vega"より"Navi"の方が性能的に優位で、"Renoir"/"Cezanne"/"Lucienne"(ラップトップ/ローエンドデスクトップ向けAPU)への搭載を考えれば"Navi"の方が適しているように思える。

 言い換えれば"Raven Ridge"→"Renoir"→"Cezzanne"/"Lucienne"として見た場合にはGPUの選択は非合理的で辻褄が合わない。財政的に好調なAMDが将来製品のためにラップトップ/ローエンドデスクトップ向けAPU以外の用途を考えており、APU/SoCで今後もGCN/CDNA系GPUを使い続ける意思があるためと考えるのが自然なように思われる。

 そこで筆者が先日述べた予想に戻すと、AMDはXilinxとの統合でNVIDIA Tegra/Xavier/"Orin" SoCに対抗する車載SoCに参入すると見ている。いかんせん未発表のためAMD+Xilinxのアプローチは不明だが、もしNVIDIA Tegra/Xavier/"Orin"と同様の路線をAMD+Xilinxの保有するIPの組み合わせで実現するとすれば、Xilinx VersalにCDNA系GPUを統合して実現するというのが最も簡単で理に適っている。AMD+XilinxはAMDのROCmとXilinxのXRTを統合した拡張版ROCmを計画しているとされ、ROCmからXilinxのIPを利用できるようになる。自動車にはカメラや赤外線レーダーなど様々なセンサーがあるからXilinx DSPを活かさない手は無いし、加工済のデータを機械学習で処理するにはDSPよりもAMD CDNAやXilinx AI Engineを使うのが理に適っている。

3D XPoint

「Intelじゃない3D XPoint」がメモリ市場を席巻か? - TechTarget Japan

 TechTarget記事中の説明は合理的にも見えるが、実際の市況を見ていると現実は異なるように思う。3D XPointを擁するIntel/Micronが既に製品を投入して市場を開拓していて、その競合他社が市場に参入することは考えられるが、その時期や普及する規格については疑問がある。
 IntelとMicronは3D XPointを2015年に発表・デモを行っており、Intelは2017年にSSD・2019年にNVDIMMを発表している。つまりPRを開始してから実際に本命の製品を出す準備に4年間もの歳月を費やしている。もちろんSamsung/SK HynixなどがIntelと同様の行動をするとは限らないとはいえ、もし例えば再来年に製品を出すならそろそろ概要だけでも発表していなければおかしいだろう。

 ここで興味深いのはIntelよりもMicronの動きである。
 MicronはIntelと共同で3D XPointを開発したので、理屈上はIntelと同様に2017/2019年から製品を投入可能だっただろうが実際は2020年まで製品を市場に投入しなかった。その理由を推測してみると、まず (1) プラットフォームのチップセットやメモリーコントローラがコントロール下にあったIntelに対し、Micronはチップセット等を持っていないためNVMeキャッシュやNVDIMMといったプラットフォームが普及するまで製品を投入できなかったと考えられるし、また、 (2) Intelが勝手に膨大なコストを費やして市場を開拓してくれ、3D XPointの研究開発コストはIM Flashを通じてはIntelの売上の一部から回収できるので、Micronがリスクを冒して製品の市場投入を急ぐ理由はなかったからだろう。

 ところで、アナリストがNVDIMMの方がSSDより市場が大きいと見ているのは、個人的にはあまり納得できない。理由は、現在のデータセンターで最大級のプレイヤーがAWSやAzureのようなクラウドハイパースケーラーで、筆者の知る限りではAWSのアーキテクチャーでNVDIMMがマッチするインスタンスタイプは多くないからだ。

 筆者の知る限り、AWSは新技術をゼロから開発することはないが、他社が開発した新技術の導入と展開は早い。SR-IOVしかり・DPDKしかり・NVMe-oFしかりである。
 そのAWSはインスタンスにストレージの柔軟性を確保するためにNVMe-oFを使用することでブロックストレージ(EBS)をソフトウェア的にアタッチ/デタッチを行っているためNVMe接続でSSDを使用している。AWSのNVMe-oFのバックエンドの詳細は公開されていないが、AWS Nitroのプレゼンテーションスライドを参考にするなら、Annapurna Labs製SmartNICに直接NVMeでSSDが接続されているようだ(元プレゼンテーションスライド)。
 思うに、NVDIMMは速度と遅延では優位だがインターフェースと容量に制限があり、現時点ではクラウドの柔軟性に合わない。例えばXeon Silver "Cooper Lake"を考えてみると1ソケットあたりDDR4 6ch(最大12モジュール)とPCIe 64 lane(PCIe x4接続の場合NVMe SSD 16基)を搭載している。もしすべてOptaneで埋めるとすればNVDIMMは512GB x 12=6TBに対しPCIe/NVMeは1.5TB x 16=24TBを搭載できる。実際にはDIMMもPCIeもすべてOptaneで埋めるというケースは無いだろうが、PCIe/NVMeはインターフェースの柔軟さ・搭載容量の自由度で利点がある。また、NVMe-oFで使うのであればファブリックがボトルネックになりNVDIMMのPCIe/NVMeに対する利点は発揮されないため、NVDIMMを使うのはローカルで搭載する場合に限られるだろう。
 これらを総合的に考えると、仮に現在のAWSインスタンスタイプに当て嵌めるならばMemory OptimizedやStorage Optimizedのような一部のインスタンスではNVDIMMが使われるかもしれないが、それ以外のCompute OptimizedやGeneral Purposeなどでは今後もNVMe-oF経由でNVMe SSDを使う方が理に適っているように思われるし、NVMe SSDの方が今後も主流に残るのではないかと思う。

Comment