6/1 から 6/3 の ISCA 2020 本会議に参加しました。先日の ASPLOS 2020 と同様にオンラインで、Whova というプラットフォームを用いて開催されました1。大分記憶も薄れてきてしまいましたが、動画を視聴したセッションの中から面白かった論文を紹介します。前回の ASPLOS の論文紹介と比較して一本あたりの紹介を手短にして2本数を多めにしてみました。ちなみにプログラムは こちら で各論文の pdf へのリンクもあります。
タイトル通りですが、IBM のメインフレーム用の最新プロセッサ z15(動作周波数 5.2GHz!)の分岐予測器に関する論文です。大きな L2 BTB があるのが個人的には面白かったです。他に TAGE3 とパーセプトロン予測器も小さいですが入っていて、何が何やらという気がしないでもないです。論文自体も少し読むのに手こずるかもしれません。
オースティンにある Samsung の研究開発所で 2011 年から作られていた Exynos M シリーズのアーキテクチャおよび性能の変遷を記録した論文です。M6 を最後にチームは解散して、著者の所属が凄いことになっています4。Samsung は自分たちを最後までとても良く扱ってくれた、と発表では言っていました。性能評価がしっかりしていて資料的価値の高い論文だと思います。へーと思った機構は、キャッシュミスすると予想されるメモリアクセスに関しては投機的にメモリアクセスを開始するというものです。
Intel による論文です。タイトルの通り狙いを絞って少量の命令にだけ値予測を適用するというものです。ストレージオーバーヘッドが 1.2KB だそうで、実用的ですね。クリティカルパスにあるディペンデンスチェーンをどうにかすることで性能を上げるのが目的で、短くすることと実行を早めることを狙います。つまり値予測のターゲットはクリティカルパスのルートにある、長いことストールする命令(例えばメインメモリにアクセスするようなもの)と、その入力を生成する命令です。クリティカルな命令を記録するテーブルと値予測の機構が主な追加ハードウェアです。
もう一本 Intel による論文です。今回の ISCA で個人的にとても面白いと思った論文の一つです。論文のアイデアは、分岐予測が当たりづらい、クリティカルパス上にある分岐命令をハードウェアのみ (しかもストレージオーバーヘッドは 384B!)で predicate5 するというものです。ポイントは reconverge する分岐命令をちゃんとターゲットにすることと、predicate のオンオフの動的な制御をすることでしょうか。性能は結構上がるし電力効率も上がります(分岐予測ミスによるフラッシュが減る効果もあり)。
L2 以下で複雑なプリフェッチャを用意する既存のプリフェッチ研究とは違ってシンプルな L1 プリフェッチャ(と L2 プリフェッチャ)を提案している論文です。色んな小さい空間的プリフェッチャを組み合わせています。ストレージオーバーヘッドの大きい時間的プリフェッチャは捨てています。L1 プリフェッチに焦点を当てたのは、L1 では全てのメモリアクセスが見られるためです(L2 だと L1 にフィルタされてしまう)。驚異的だなと思うのはストレージオーバーヘッドがたったの 895B なのに数 10KB とかの既存プリフェッチャと同等以上の性能を達成している点です。優れたエンジニアリングということかなと思います。
キャッシュサイドチャネル攻撃を用いるクロスドメインの Spectre 攻撃に対する防御手法を提案している論文です。アイデアは L0 レベルに投機的データを保持するフィルタキャッシュを用意するというもので、コンテキストスイッチなど攻撃が起こり得るシナリオではこのフィルタキャッシュをクリアすることで Spectre 攻撃を防ぎます。クロスドメインの Spectre 攻撃を防ぐのは本質的に簡単だと思っていましたが、MuonTrap を用いると性能オーバーヘッドがかなり軽減されますね。
RowHammer の脆弱性は新しい DRAM ほどより深刻であるということを解析した論文です。これまでに提案されている防御手法は将来の DRAM に対してスケールしないまたは性能オーバーヘッドが大きすぎるということで、より良い対策の必要性を訴えています。重要な論文だと思いますし、発表もとても分かりやすかったです6。
メモリ安全性を提供する capability-based addressing を、プログラムの再コンパイルなしに実現する論文です。ポインタ操作を行なう命令実行時に capability を伝搬するルールをオフラインで作成し、マイクロコードによる instrumentation でメモリアクセスの実行時に capability のチェックを行ない、capability の情報は shadow structure に保持しておく、あたりが主要なコンポーネントかと思います。
アドレス変換のコスト(TLB ミスによるページテーブルウォーク)はとても大きなものになっています。システムがたくさん物理メモリを積むようになってアプリケーションが大量のメモリを使うと 4KB のページでは TLB リーチが全く足りません。現在のシステムでは 4KB、2MB、1GB と 3 種類のページサイズがサポートされていますが粒度が粗すぎるという問題があります。そこで 4KB から 1GB の間の 2 のべき乗の大きさのページを全てサポートするハードウェアを提案して、L1 TLB ミスをほとんどなくすことに成功しました。OS のバディアロケータとの相性も良いとのことです。
もう一本アドレス変換にまつわるオーバーヘッドを削減する論文です。2MB のラージページは効果的ですが、連続した 2MB の物理アドレス領域が必要(フラグメンテーションがあってはいけない)などの理由によりアロケートできないことがよくあるという問題があります。そこで Perforated Pages では 2MB のページに(例えばすでに異なる仮想アドレスにマップされている)4KB の穴(パンチカードのイメージ)が複数開いていることを許容する仕組みを提案しています。既存のページングではラージページがなかなか使えない状況でも効果的にラージページを使うことで性能向上を達成しています。
上記二本の論文と同様に仮想メモリに関する論文ですが、まったく異なるアプローチを取っています。個人的には今回の ISCA で一番面白かったです。この論文では新しい仮想メモリフレームワークを提案しています。全てのプロセスは単一のメモリ空間を共有しており様々なサイズの Virtual Block(VB)という単位でメモリを割り当てます(つまりそれぞれのプロセスはグローバルな ID の振られた VB を複数持つ)。また既存のページングとは異なり、アクセス保護をメモリ変換から切り離します。さらにメモリ割り当てとアドレス変換を OS でなくハードウェア(メモリコントローラ)によって実現します。非常に thought provoking な論文だと思うのでおすすめです7。
さらにもう一本仮想メモリに関する論文ですが、こちらは少し毛色が違います。この論文の目的はページフォルトのオーバーヘッドを減らすことです。近年の高性能なレイテンシの短い SSD などを補助記憶として使用すると、ページフォルトによるコンテキストスイッチや(そのために生じる分岐予測器やキャッシュの汚染や)カーネルコードのオーバーヘッドが無視できなくなります。そこでページフォルトが起きたときに例外を投げて OS にまかせるのではなく、ハードウェアが直接 I/O コマンドを発行してストレージからページを取ってくるハードウェアと OS サポートを提案しています。
ISCA に関しては色々とツイートしましたが このツリー が大体網羅している感じです。個人的にはこの下に埋め込んである Luiz André Barroso 博士による Eckert-Mauchly Award のレクチャーが最高だったので、是非多くの方々に見てもらいたいです。