Hot Chips 34初日午後の後半はアカデミア枠になっているが、ここでArmの「Morello Evaluation Platform」が発表された。Morello Programはこちらでもちょっと触れているが、要するにセキュリティに対する新しい実装を設計段階から盛り込んでゆく研究プロジェクトであり、こちらのページにもあるように、英国のISCF(Industrial Strategy Challenge Fund)の中のDigital Security by Design(DSbD) Programを利用して行われているプロジェクトである。ただしArm単体ではなくケンブリッジ大とSRI Internationalとの共同であり、それもあってアカデミア枠での発表になったものと思われる。

MorelloのベースはCHERI(Capability Hardware Enhanced RISC Instructions)というケンブリッジ大の研究をベースとしたもので、今年初頭にArmはこのCHERIを実装したプロトタイプシリコンを出荷している(Photo01)。

  • 出荷といっても別に商用製品ではない

    Photo01:出荷といっても別に商用製品ではないので、あくまで評価用チップである

まずMorelloの動機であるが、そもそもCPUの脆弱性と言われているものの7割ほどがメモリの取り扱いに関わるものであり、しかも以前からこれは指摘されていたものである。これを何とかしたい、という訳だ。

もともとArmでもArm v8.3-AでRCpc(Release Consistent processor consistent)とPointer Authentication、v8.4-AでMPAM(Memory Partitioning and Monitoring)、v8.5-AでBTI(Branch Target Identifier)と(Memory Tagging)、v8.6-AでEnhanced PAC2/FPAC(とPointer Authenticationの強化版)と次々にメモリ管理周りを強化しているが、もう少し根本的に対策が必要、という考え方からかCHERIの仕組みをプロセッサに取り込むことを行ったのが今回の発表になる。

  • 色々と工夫はされてきていた

    Photo02:最初はソフトウェアで何とかするとか、簡単なハードウェア(x86で言うところのNX bit)を搭載するといった形で色々と工夫はされてきていた

さてそのCHERIの仕組みを1ページにまとめたのがこちら(Photo03)。

  • PC(Program Counter)までも、PCCと呼ばれるCapabilityを考慮したものに切り替わる

    Photo03:PC(Program Counter)までも、PCCと呼ばれるCapabilityを考慮したものに切り替わる

要するにCapabilityと呼ばれる新しい機能を付け加える形だ。Capabilityは直訳すれば「能力」だが、ここで言うのは「能力」というよりも「何が許されるか」のAttributeみたいなもの、と考えるのが正しいだろう。Load/Storeとか命令の処理も、このCapabilityに基づく形で処理が行われることになる。なんというか、これだけ見ていると古のiAPX 432の実装を彷彿させる。iAPX 432はアドレスがAddress Descriptorと呼ばれるデータ構造で示され、またデータはオブジェクトとして扱われるが、これを扱うのにCBA(Capability Based Addressing)と呼ばれる仕組みを使う必要があった。直接アドレスやデータを扱わないことで安全性を高める、という意味では近いものがあるのかもしれない。

話を戻すと、そのCHERIを使うためのコツがこちら(Photo04)で、すでにCHERIを利用するためのソフトウェアも色々開発されており、これらを利用する事でオーバーヘッドは最小に抑えられる、としている。

  • アセンブラでゴリゴリ書くような使い方はCHERIにはそぐわない

    Photo04:逆に言うと、アセンブラでゴリゴリ書くような使い方はCHERIにはそぐわないということにもなる

さてArmの今回の発表は、このCHERIを実装したプロトタイプのハードウェアと、これを利用するためのソフトウェア類をまとめて提供する、という点にある(Photo05)。

  • 評価ボードはリクエストベースでの提供になる

    Photo05:この評価ボードはリクエストベースでの提供になる。一応“mid-2022”から提供予定なのだが、もうmid-2022も終盤な気が……

チップそのものはTSMCのN7で製造され、ダイサイズは109.9平方mmとそれなりに大きい(Photo06)。

  • 4コアの構成に見える

    Photo06:4コアの構成に見える。中央がSecurity Domain、左右がコア、上側中央がL2、その両側にメモリコントローラ、上端はMemory PHY、下端はI/F(AXIかPCIeかは不明だが)っぽい

先にPhoto02でCHERIでは128bitのCapabilityフィールドが追加されると説明されていたが、MorelloではこれにTagを付けた129bitに拡張。また転送データにもTagがつけられる構造になっている(Photo07)。

  • エリアサイズはCPUコアで言えば10%程度の増加

    Photo07:これによるエリアサイズの増加だが、CPUコアで言えば10%程度の増加になる(システム全体ではもっと比率は少ない)という話であった

このTagとかCapability Fieldをどう使うかという話だが、MemoryのLoad/Saveが発生する際には自動的にCapabilityを確認し、ここで問題があったらFaultを発生する仕組みである(Photo08)。

  • ちょっとプログラム側が面倒な事になりそう

    Photo08:Faultとしてエラーを出すか、もしくは単にその命令を実行しないかを選べるのは面白いが、ちょっとプログラム側が面倒な事になりそう

もっともソフトウェアの側で命令ごとにいちいち実行できたかどうかを確認なんてしてられないので、何かしらスマートにFaultをハンドリングできる仕組みが求められるところだ。またCapability関連命令はすべてAtomicにするといった工夫もなされるとする。

Bound Checkのメカニズムはこんな感じ(Photo09)。

  • アドレスを生成する仕組み

    Photo09:必要なデータをCapabilityから持ってきて、Bound checkを行ってアドレスを生成する仕組み

ハードウェアの実装はこうなる(Photo10)。

  • 難しい処理ではないので、Latencyが余分に増える事は無いだろう

    Photo10:難しい処理ではないので、Latencyが余分に増える事は無いだろうが、動作周波数をやや上げにくくなるかもしれない

ここのアドレスは、流石に完全に自由な64bitアドレスという訳にはいかず、なので加減算では高速に実行できるが、それ以外の場合には一度アドレスの絶対値を求めて処理する必要がある、というのはまぁ理解できる。

  • 元々3つの64bit Addressを128bitに圧縮して表現している

    Photo11:元々3つの64bit Address(Boundの上限と下限、それとポインタ)を128bitに圧縮して表現しているので、どうしても制約がつくのは否めない。だからといって、Capabilityをもっとデカくすると、今度はオーバーヘッドが馬鹿にならないという訳で、ギリギリのバランスを狙ったものだろう

PCCも129bitの表現になる(Photo12)。

  • 分岐予測情報まで入る

    Photo12:分岐予測情報まで入るのだから、そりゃ大きくなる訳である

これはまぁ仕方がないとは思うが、もう単純にPCをインクリメントとかが出来なくなるわけだ。当然メモリの構造も、MTE(Memory Tagging Extension)と同じようにTagの形で情報を保持する必要がある(Photo13)。

  • 普通に考えてECC領域をTagに転用したら、エラー回避能力が減る

    Photo13:普通に考えてECC領域をTagに転用したら、エラー回避能力が減る訳で、まぁDRAMを余分に積むのが前向きではあるが、現在のDRAMが64bit(ECC無し)ないし72bit(ECCあり)を基本にしてるので、80bit幅とかは実装しにくい部分がある。これは今後の課題だろう

これを例えばECCのエリアを使うといった方法もあるが、このあたりは実装のトレードオフである、とする。

すでにこのMorelloにLLVMやFreeBSD、X11、KDEなどの移植が3か月で完了したとしている(Photo14)。

  • 600万行のうち、変更は0.026%

    Photo14:600万行のうち、変更は0.026%だというから1560行ほど書き換えた事になる

現時点ではこのMorelloはCHERIベースのカスタマイズ版AArch64ということで、既存のAArch64そのものとは互換性はない(一応Morelloは“Legacy” AArch64に基づくプログラムも実行できるが、逆にCHERI AArch64は他のArmコア上では動作しない)し、まだ研究プロジェクトの域を出ないからこれが近未来のArmコアにそのまま乗る訳でもないだろう。多分これが商用製品に乗るときには、Armv10-Aとかになりそうな気がする。ただArmがこれまで社内で独自に開発していた命令セットを、産学共同(ついでに言えばDARPAとかAFRS(Air Force Research Laboratory)の支援も受けているので、産学官共同というべきかもしれない)の形で開発するという方向に踏み切っているのはちょっと面白い。ちょっと地味な発表ではあるが、興味深いものであった。