英Armは日本時間の3月30日、Arm Vision Dayと題したオンライン説明会を開催。ここで10年ぶりの発表となる最新アーキテクチャ「Armv9」について説明を行った。

Armv9の存在そのものは実は以前から知られていた。富岳に使われている富士通の「A64FX」はArm v8.2-Aであるが、実は「スケジュールがもう少し後ろにずれればArmv9が使えたのだが、間に合わなかった」という話が関係者からの声として聞いていたし、2018年のArm TechConのNeoverseのセッションでは、Poseidon Platformの世代がArmv9になる事を示唆していた(Photo01)。少なくともこの時点では、Armv9は2019年中に発表、2020~2021年にIPの提供といったスケジュールだったらしい。

  • Armv9

    Photo01:Poseidonは、この当時は2021年に投入予定のプラットフォームであったが、その後2022年以降に後退した

ところがその後、Armv9は(理由は不明ながら)スケジュールが後退。その代わりにArmv8.4-A~Armv8.6-Aが投入されることになった(Armv8.3-Aは、恐らく2018年の段階で想定されていたと思うのだが自信はない)。2019年あたりから、Ian Smythe氏にArmv9について尋ねた途端に「聞こえない」ふりをし始めたあたり、この辺で若干後ろにずらす決断がなされたのだと思う。

そんなArmv9であるが、やっと準備が整ったようで、今回「次の10年を支えるアーキテクチャ」として発表されることになった(Photo02)。

  • Armv9

    Photo02:キーワードはMachine Learning、DSP、Securityである。「次世代の3000億個のチップの基礎」がなかなかのパワーワードである

このうち、Machine Learning(ML)とDigital Signal Processing(DSP)についてはまとめてSVE2という形で実装される模様だが、これについては後述するとして、先にセキュリティについて説明したい。

元々Armv8の中でも特にArmv8-Aに関しては、段階的にセキュリティの強化が行われていた。そもそもArmv8-A世代の変遷を簡単にまとめると

  • v8.0-A:Arm V8世代のベース。64bitのサポート
  • v8.1-A:Atomics命令/VHE(Virtualization Host Extensions)を追加
  • v8.2-A:半精度(FP16)のサポート、Stat Profiling、RAS機能、SVEを追加
  • v8.3-A:ネストされた仮想化(Nested Virtualization)、RCpc(Release Consistent processor consistent)、ポインタ認証(Pointer Authentification)の追加
  • v8.4-A:Crypto命令の強化とSHA512/SHA3対応命令の追加、Secure EL2、MPAM(Memory Partitioning and Monitoring)の追加
  • v8.5-A:RNG(乱数発生命令)、BTI(Branch Target Identifier)、メモリタギング(Memory Tagging)の追加
  • v8.6-A:MatMul命令の実装、bfloat16サポート、仮想化強化、ポインタ認証強化(Enhanced PAC2およびFPAC実装)、高精度タイマー搭載
  • v8.7-A:PCIe Hot plugのサポート、Atomic 64Bytes load/storeのサポート、WFI(Wait for Instruction)/WFE(Wait For Event)(どちらもTimeout付)のサポート

となるが、このうちセキュリティに関係するのが、

  • v8.3-A:ポインタ認証(Pointer Authentification)の追加
  • v8.4-A:Crypto命令の強化とSHA512/SHA3対応命令の追加、Secure EL2、MPAM(Memory Partitioning and Monitoring)の追加
  • v8.5-A:RNG(乱数発生命令)、BTI(Branch Target Identifier)、メモリタギング(Memory Tagging)、Cache Clean to Point of Deep Persistenceの追加
  • v8.6-A:ポインタ認証強化(Enhanced PAC2およびFPAC実装)

といった具合だ。

Armv8.3-AのPointer AuthentificationはROP(Return-Orientated-Programming)やJOP(Jump-Orientated-Programming)に対応したもので、要はStackのアドレスなどを書き換える事で不正なプログラムが実行されるという仕組みを防止するために、飛び先アドレスの一部は別の場所に格納し、Stackにはその別の場所のIndexを格納する、という形で「不正に書き換えるとプロセスが飛び先アドレス不正でクラッシュする」仕組みを入れたものだ。

ただこれはROP/JOPを利用した脆弱性にとりあえず対応したもので、本格的なセキュリティの実装は次のArmv8.4-Aで行われた(Photo03)。

  • Armv9

    Photo03:Secure EL2とMPAMにより、Secure環境でのPartitioningが可能になった

これにさらにセキュア関連命令をv8.5以降で追加していった形になるのだが、最新のドキュメントによれば、

  • Armv8.5-AとArmv9.0-A:RNG/BTI/Memory Tagging/Cache Clean to Pointer
  • Armv8.6-AとArmv9.1-A:MatMul命令/bfloat16/仮想化強化/ポインタ認証強化/高精度タイマー
  • Armv8.7-AとArmv9.2-A:PCIe Hot plug/Atomic 64Bytes/WFI&WFE/Branch-Record recording(v9.2-Aのみ)

という形で命令がサポートされてゆくことが明らかになっている。つまりArmv9のうち、A Profileに関して言えばArmv8.5-Aをベースに、新機能を追加したという形の実装が行われることになる(Photo04)。

  • Armv9

    Photo04:まだArm v8.6-A/8.7-Aで追加予定の機能は詳細が良く判らない。このあたりはいずれ公開されるのだろう

さて、ではArmv9にしかない新機能は? というと、これはおそらくA Profileだけだと思うが、新たにRealms(レルム)という概念が導入された(Photo05)。

  • Armv9

    Photo05:イメージ的にはWebブラウザのPrivateモードとか、仮想マシンのSandBoxみたいなイメージに思える

通常の領域とは別の動作環境を用意し、こことNon-Secure環境の間で自由にContextを移動させることが出来る様になるというものだ。単純なケース(Photo06)では、Non-Secureな領域で動くアプリケーションを、そのままRealmで動かすことで、Secureかつ他の影響がない形で実行できる様になるという話だが、別にNon-Secureな環境だけでなくSecureな環境のContextもRealmで動かせるようになるとする(Photo07)。

  • Armv9

    Photo06:このイメージは、先のPhoto03にある、現在のTrustZoneベースのPartitioningを一歩先に進めたような感じだろうか

  • Armv9

    Photo07:このあたりになってくると、単にSecurityだけの話ではなくなっている気がする

このPhoto07の環境は、なんというかVMwareのLive Migrationを彷彿とさせるイメージである。まだRealmsの詳細が判っていないので断言は避けるが、単にSecurity云々だけではないように思える。

もちろん、Secure/Non-Secureを問わず独立した実行環境で動かすことで、それこそSpectreのように侵入されてもその影響はRealmsの自分の領域に留まるから、これをFlushしてしまえば他に影響しないというSecurity上のメリットは明白ではある。

なお、Memory Tagging(Photo08)や、Morello Program(Photo09)なども将来取り込みを行ってゆく(Memory TaggingはArmv8.5-A/v9.0-Aで実装される)といった形で、よりセキュリティに注力するというのがArmv9の大きな特徴の1つとされる。

  • Armv9

    Photo08:メモリアクセス時に、当該エリアにアクセスするためのキーを持たないとそこにアクセスできないという技法

  • Armv9

    Photo09:この概念図はIntel Hardware Shieldに似ている気がする

ちなみに先のRealmsに関する詳細は夏ごろに公開される予定との事であった。

これに比べると、SVE2の方はまだ正体が明らかではない。Armv9世代の基礎、というこのスライド(Photo10)にあるうち、MLとかDSPに関係しそうなところがSVE2という形で実装される、という意味であろうかと思う。

  • Armv9

    Photo10:キーワード一覧。中にはHeliumとかEthos-Uとかも入っているので、全部が全部Armv9-A向けではないと思うが

セキュリティ機能の充実とは別に、Armv9世代ではさらなる性能向上を目指す必要があり、その中にはML向けに8bit未満のデータ型のサポート(INT 1/2/4あたりだろうか)とか、より柔軟なデータアクセス(Gather-Scatter DMAのサポートとかPredicationの実装など)を含むという話で、こうしたものがDSPあるいはAIとして表現されている模様だ。こちらも詳細はもう少し時間が経たないと明らかにならないだろう。

現状はまだArmv9世代の存在をアナウンスしたという段階で、まだArmv9.0-Aが公開された訳ではない(少なくとも現時点ではまだデータシートは公開されていない)が、すでにOEMの一社とは話し合いをしているという話であり、もうちょっとすると色々情報が出てくるかもしれない。今年のDevSummitではこのArmv9が焦点になりそうだ。

  • Armv9

    Photo11:Matrix mathsはMatterhornで実装されると2019年に発表があったので、これはSVE2には含まれないと思われる