【HotOS XVIII】CPUのない世界で実現されるシステムの構成
TL;DR
CPUの責務を分離し、ハードウェアに機能を委譲することでCPUレスシステムを実現する思考実験
はじめに
6月1日〜3日にかけてHotOS XVIIIが開催された。今回はブリティッシュコロンビア大学のJoel Nider氏らによる「The Last CPU」を紹介したい。GPUのようなアプリケーション特化の専用ハードウェアが普及した現在、CPUが持つべき責務が小さくなってきており、CPUの機能をすべてハードウェアに移行したシステムを思考実験する内容となっている。 本文
ムーアの法則が鈍化し、CPUの進化はvector extentionsなどパフォーマンス向上に重点を置いたものから、拡張機能に焦点が移ってきた[ Baumann '17 ]。特に特定用途向けのハードウェアによるアプリケーションパフォーマンス向上が継続的なスケーリングの要となっており、画像認識や機械学習用途のハードウェア(GPUやTPUなど)も積極的に開発されている。 このような特定用途に特化したハードウェアは、汎用CPUよりも効率的にタスクを実行でき、自律的な動作も可能なため、操作中の制御をほとんど必要としない。アプリケーション機能が専用ハードウェアにオフロードされると、CPUに残された役割は初期化とエラー処理のみとなる。これらも単純なハードウェアで実現が可能なため、CPUを持たないシステム(以下、CPUレスシステム)を考えることができ、本論文ではCPUのないシステムにおけるOSの役割と構造を調査し、必要なすべての機能を他ハードウェアに移設する思考実験を行っている。
ここでは、OSが提供する主要な機能を仮想化(多重化、アドレス変換を含む)、分離、リソース管理の3つに整理している。これらの機能を、集中型OSカーネルから自己管理型ハードウェアに移行し、CPUへの依存を解消するには、「デバイスによるサービスの提供および内部状態の自己管理」と「デバイス間を接続するシステムバス」が必要だとしている。
デバイスによるサービスの提供および内部状態の自己管理について、まずデバイスは自身が提供するサービス(物理メモリ、GPUコア、ストレージなど)を公開する。デバイスの責務において、アプリケーションごとに個別のコンテキストを用意(多重化)し、それぞれの内部状態を管理することで分離を実現する。この機能はRDMAコントローラーやSR-IOV NICなどが具備しているリソース管理やスマートSSDの組み込みCPUによるソフトウェア技術(タイムシェアリングなど)により実装できる。
CPUレスシステムにおいては、外部エンティティに依存せずに、各デバイスが自身に必要なサービスを自律的に検出してリクエストを送信する必要がある。システムバスは、デバイスが相互に制御できるようにするコントロールプレーンとして機能し、データの送信は行わない。また、グローバルな状態を持つ主体も存在せず、デバイスが自身に必要なリソース(メモリの割り当てやファイルアクセスなど)に関するリクエストをブロードキャストする。対応するサービスが提供できる他のデバイスがこれに応答するアーキテクチャだ。
CPUレスシステムをハードウェアレベルで完成させるには、CPUパッケージとは独立したディスクリートメモリコントローラーと相互接続コントローラーが不足している。そのため、本論文ではエミュレータによる例示として、仮想KVSがCPUのないシステムでどのように機能するかを説明している。仮想KVSの概要は以下のようになっている。
データ(keyとvalue)はスマートSSDに保存
操作(取得、挿入、更新など)はSmartNICで処理
NICは、ソケットまたはRDMA接続をリッスンし、ネットワークを介してKVSインターフェースを他のマシンに公開
SmartNICで実行されているKVSアプリケーションが、SSDに接続してデータファイルにアクセスするときの初期化シーケンス図は以下のとおり。
https://gyazo.com/3fec7190bcc86ab512d0d8811b545433
(論文中より引用)
① SmartNICはシステムバスを介してメッセージ(ファイル名など)をブロードキャスト
② SSDが応答
③ SmartNICはSSD上のファイルにアクセスするための認証リクエストを送信
④ SSDは接続の詳細と必要な共有メモリの量を応答
⑤ SmartNICは、メモリコントローラ(仮想アドレスを含む)に共有メモリの割り当てのリクエストを送信
⑥ メモリからの応答後、システムバスはSmartNICに属するIOMMU経由で、指定された仮想アドレスの共有メモリにアクセス可能な状態へ遷移
⑦ SmartNICは、システムバスにメッセージを送信して、共有メモリへのアクセスをSSDに許可
システムバスは上記の初期化以外にもアドレス変換やメモリ管理の責務も担う。ここではアドレス変換について紹介する。従来、アドレス変換は仮想アドレス空間によって、アプリケーションを一意に識別し、分離を実現するものであるが、デバイス自身にマッピングを委譲してしまうとセキュリティ上の懸念が発生する。具体的には侵害されたデバイスが許可された範囲を超えてリソースにアクセスできてしまう。これに対処するため、仮想から物理へのマッピングを作成するのは、特権システムバスの責任とし、リソースコントローラを利用する。リソースコントローラは、別のデバイスのIOMMUに直接アクセスすることを許可せず、代わりにシステムバスは特定のリソースコントローラーから指示された場合にのみ、デバイスのページテーブルを更新できる仕組みとなっている。
終わりに
本論文では、上記で述べた他にもキャッシュコヒーレンシやデバイス間の通信プロトコルに関する議論なども論じられている。GPUなどの台頭によってCPUレスシステムのようなものを考えられることに驚きを持った一方で、新しいアーキテクチャを探求する過程で既存のCPUがあるシステム構成についての理解も深まった論文であった。(文責・恩田)