アクセラレーターとホスト・プロセッサーとの間のスケーラブルな I/O

ID 721793
更新 2/16/2022
バージョン Latest
公開

データ処理を最適化するためにユーザーモード・アプリケーションとアクセラレーターの連携を効率化する秘訣。

はじめに

データ中心のコンピューティングが台頭する中、データセンターにおけるワークロードのアクセラレーションと COGS (売上原価) の削減がますます求められています。こうしたアクセラレーションのためのハードウェア的手法には、CPU コアにおける特殊なインストラクション・セット・アーキテクチャー (ISA) 拡張、プログラマブル・ヘテロジニアス・エレメント (GPU や FPGA など)、データの移動と変換処理機能向けのオフロード・アクセラレーション・エンジンがあります。ISA に基づくアクセラレーションはホスト CPU のインストラクション・セット・アーキテクチャー内で明確に定義されている一方、オフロードに基づくアクセラレーションは、一貫した構造や機能なしで、従来型の I/O コントローラーやデバイスドライバーのモデルから自然に発達したものです。このホワイトペーパーは、近く発売されるインテル® Xeon® プロセッサー・ファミリーに導入されたさまざまなアクセラレーター・インターフェイス・テクノロジーの概要を説明します。これらのテクノロジーは、オフロードのオーバーヘッド削減、エンドツーエンドのレイテンシーの最小化、メモリーモデルの簡素化、そして仮想マシンやコンテナを介したワークロード導入に適したスケーラブルな仮想化機能をターゲットとしています。

現在の状況

従来型の I/O コントローラー設計から発展したオフロード・アクセラレーションのハードウェアおよびソフトウェアは、多くの課題を抱えています。こうした課題には、ワーク送信のオーバーヘッド、メモリー管理の複雑さ、ワーク完了同期のオーバーヘッド、アプリケーションやテナント間でのアクセラレーター共有などがあります。

ワーク送信のオーバーヘッド

従来、アプリケーションがアクセラレーターにワークを送信すると、そのリクエストは、基盤となるアクセラレーター・デバイスのソフトウェアとハードウェアとのインターフェイスを抽象化する、カーネルモードのデバイスドライバーにルーティングされていました。カーネル I/O スタックに関連するレイテンシーとオーバーヘッドは、高性能なストリーミング・アクセラレーターにとってボトルネックとなる可能性があります。 

メモリー管理の複雑さによるオーバーヘッド

従来型のアクセラレーター設計において、アプリケーションとハードウェア・アクセラレーターとの間でデータを共有するには、固定メモリーが必要です。また、アクセラレーターから見たメモリー (ダイレクト・メモリー・アクセスによるアクセス) は、アプリケーションから見たメモリーと大きく異なるため、基盤となるソフトウェア・スタックが、コストのかかるメモリーの固定と固定解除、DMA のマッピングとマッピング解除操作を通じて、2 つのビューの橋渡しをする必要がしばしば生じます。

ワーク完了同期のオーバーヘッド

アクセラレーター向けの既存のソフトウェア・スタックは、割り込み駆動型の処理、完了ステータスレジスターのビジーポーリング、メモリー内の記述子のいずれかに依存しています。オペレーティング・システムのカーネルにおける割り込み処理アーキテクチャーは、コンテキスト切り替えと、システムのパフォーマンスを低下させる繰延処理により、オーバーヘッドが避けられません。一方で、ビジーポーリングは、より多くの電力を消費し、他のアプリケーションが利用できる CPU のサイクル数を減らし、スケーリングに悪影響を及ぼす可能性があります。

アクセラレーターの共有性

複数の同時実行されるアプリケーション、コンテナ、仮想マシン間でアクセラレーターを効率的かつ安全に共有することは、データセンターを導入するための基本的な要件です。SR-IOV などのハードウェア支援型による I/O 仮想化は、ゲスト・ソフトウェアの指示により、アクセラレーターにアクセスするプロセスからハイパーバイザーを排除することで、I/O 仮想化を加速します。

しかし、こうしたアーキテクチャーはハードウェアに負荷をかける傾向があり、以下に挙げる 2 種類の設計にはあまり適していません。

  • リソースに制約のあるシステム・オン・チップ (SoC) インテグレーテッド・アクセラレーター・デザイン
  • 仮想マシンベースの用途で現在利用可能なものよりもスケーラビリティーを必要とするユースケース (例えば、同時実行される数千のコンテナでアクセラレーターを共有する用途)

要約すると、アクセラレーターのシステム・アーキテクチャーは、以下の要件に対応する必要があります。

  • オフロードの効率化 — 低オーバーヘッド、ユーザーモード、機能オフロード (スケーラブルで低レイテンシーのワーク・ディスパッチ、低負荷の同期、イベント・シグナリングなど)
  • メモリーモデル — アプリケーションから見たメモリーと、アクセラレーターにオフロードされた機能から見たメモリーのビューの統一
  • 仮想化 — アプリケーション、コンテナ、仮想マシン間でのアクセラレーターの効率的な共有
  • 一貫性 — すべての IP にわたる一貫したハードウェアとソフトウェアのインターフェイスおよび SoC インターフェイス・アーキテクチャー

アクセラレーター・インターフェイス・テクノロジー

このセクションでは、近く発売されるインテル® Xeon® プロセッサー・ファミリーに搭載されるアクセラレーター・インターフェイス・テクノロジーの機能をまとめます。 

この機能は、上記の要件に対応するもので、以下に挙げるものが含まれます。

  • オフロード最適化のためのワーク・ディスパッチ・インストラクション (MOVDIRI、MOVDIR64B、ENQCMD/S)
  • 効率的な同期のためのユーザーモード待機インストラクション (UMONITOR、UMWAIT、TPAUSE)
  • 低レイテンシーのユーザー割り込み
  • 共有仮想メモリー
  • スケーラブルな I/O 仮想化

オフロードの効率性とスケーラビリティーの改善

MOVDIRI
ダイレクトストア・セマンティクスを使用して、高スループット (4B または 8B) のドアベル書き込みを実現し、小規模なワークユニットがアクセラレーターに高速でストリーミングされるストリーミング・オフロード・モデルにメリットを提供します。

MOVDIR64B
アクセラレーターのワークキューに 64 バイトのアトミック書き込みをできるようにし、アクセラレーターのデバイスがリクエストされた操作を最小限のレイテンシーで完了できるよう高度に最適化されている低レイテンシーのオフロード・モデルにメリットをもたらします。64 バイトのペイロードにより、ワーク記述子や、ときには実際のデータを取得するための DMA 読み取りレイテンシーをアクセラレーターが回避できます (これにより、エンドツーエンドのレイテンシーを低減)。

ENQCMD/S
以下の図に示すように、複数の連携していないソフトウェア・エンティティー (アプリケーション、コンテナ、VM 内のアプリケーション/コンテナなど) から、アクセラレーターのワークキュー (共有ワークキュー、SWQ) に同時かつ直接的なワーク送信を実現します。コマンドをキューに追加するインストラクションの ENQCMD (enqueue command) と ENQCMDS (enqueue command as supervisor) には、2 つの独自機能があります。 

  • ワーク記述子には、プロセスアドレス空間 ID (PASID) が含まれており、これによりアクセラレーターが送信するソフトウェア・エージェントを記述子に基づいて識別できます
  • これらのコマンドは、PCIe* Deferrable Memory Write (DMWr) リクエストを使用して、アクセラレーターが受信した DMWr リクエストを実行または延期できるようにします

ENQCMD/S インストラクションは、「成功」または「再試行」(延期) をソフトウェアに返します。成功は、ワークが SWQ に受け入れられたことを示し、再試行は、SWQ の容量、QoS などの理由で受け入れられなかったことを示します。再試行のステータスを受信すると、ワーク送信者は後で再試行できます。

UMONITOR / UMWAIT / TPAUSE
ユーザーモードのソフトウェアとオフロードされたタスクの間で、低レイテンシーの同期を実現します。また、アクセラレーターがディスパッチされたワークを完了するのを待っている間に、プロセッサーが実装に依存する、最適化された状態に移行できるようにします。最適化された状態とは、省電力の状態、パフォーマンスが最適化された状態、または強化された電力/パフォーマンス最適化の状態のいずれかです。UMWAIT と TPAUSE のインストラクションでは、ソフトウェアが 2 つの最適化された状態から選択できます。また、オプションでタイムアウト値を指定できるメカニズムを提供します。TPAUSE インストラクションは、複数のイベントを待機するため、トランザクション同期拡張機能と一緒に使用できます。これらのインストラクションにより、1 つの兄弟スレッドがイベントを効率的に待っている場合に、ハイパースレッド (HT) がコンピューティング・リソースを使用できるようになります。

ユーザー割り込み
ユーザーモードのソフトウェアに直接信号を送る軽量なメカニズムを実現します。ユーザー割り込みは、カーネルの介入なしでユーザー空間のアプリケーションにイベントを配信できるようにし、カーネルのエージェントが、ユーザー空間のアプリケーションに通知を送信するため、オペレーティング・システムのシグナリング機能の代わりに使用できます。ユーザー割り込みにより、高性能なアプリケーションにおけるエンドツーエンドのレイテンシー、全体的なジッター、およびコンテキスト切り替えのオーバーヘッドが低減されます。

共有仮想メモリー (SVM)

SVM アーキテクチャーは、CPU とアクセラレーターの両方から見たメモリーのビューを、以下の方法により統一します。 

  • アクセラレーターが CPU と同じ仮想アドレスを使用できるようにする
  • アクセラレーターが固定されていないメモリーにアクセスし、I/O ページフォールトから回復できるようにする

近く発売されるインテル® Xeon® プロセッサー・ファミリーは、プロセスアドレス空間 ID (PASID)、アドレス変換サービス (ATS)、ページ要求サービス (PRS) などの SVM 機能をサポートしています。システム・ソフトウェアは、ワークを送信する各クライアントのアドレス空間を識別するために PASID を割り当て、ダイレクト I/O 向けインテル® バーチャライゼーション・テクノロジー (インテル® VT-d) 拡張により、クライアントの CPU ページテーブルがインテル® VT-d に共有され、PASID 単位で DMA の再マッピングを行い、アクセラレーターが I/O ページフォールトから回復できるよう支援します。

アクセラレーターは、SVM 機能を使用して、アプリケーションのアドレス空間からデータを直接処理します。ワーク記述子を受信すると、アクセラレーターは DMA アドレス変換用のトランスレーション・ルックアサイド・バッファー (DevTLB) を探します。アドレス変換がすでにキャッシュされている場合(DevTLB ヒットのシナリオ)、DMA リクエストは、DevTLB から取得した、変換されたホストの物理アドレス (HPA) とともに発行されます。DevTLB が失敗すると、アクセラレーターは IOMMU に ATS アドレス変換リクエストを発行します。IOMMU は、アドレス変換表を参照して変換されたアドレスを取得します。変換が成功すると、返されたアドレス変換情報は DevTLB にキャッシュされ、DMA リクエストが発行されます。変換が失敗した場合 (すなわち I/O ページフォールト)、フォールトしたページの「ページイン」をリクエストするため、アクセラレーターはシステム・ソフトウェアに PRS ページリクエストを発行できます (CPU のページフォールト処理と同様)。ページ応答が成功すると、アクセラレーターはアドレス変換リクエストを再発行し、ホストでフォールトが正常に処理された後に変換を取得します。

システム・ソフトウェアは、プロセスのワーキングセットのトリミング、VMM メモリーへのオーバーコミットの引き渡し、アプリケーションや VM の分解などにより、アプリケーションや VM のページテーブルを変更できます。こうしたことが発生した場合、システム・ソフトウェアは、この変更に関連した DevTLB エントリーを無効にするようアクセラレーターに指示し、レスポンスを同期します。

インテル® Scalable I/O Virtualization (インテル® Scalable IOV)

インテル® Scalable IOV は、ハードウェア支援型の I/O 仮想化に対する斬新なアプローチです。これにより、孤立したドメイン (アプリケーション、VM、コンテナなど) 間で、I/O デバイスをきめ細かく、柔軟、かつ高性能な共有を実現するとともに、エンドポイントのハードウェア・デバイスのために、このような共有の複雑さを軽減します。また、きめ細かく、プロビジョニングされたデバイスリソース (ワークキュー、キューペア、コンテキストなど) をクライアントのドメインに個別に割り当てられるようにします。アクセラレーターへのソフトウェアのアクセスは、「直接パス」と「インターセプトされたパス」のいずれかに分類されます。直接パスのアクセス (ワーク送信やワーク完了処理など) は、パフォーマンスのためにアクセラレーター・リソースに直接マッピングされます。コンフィグレーション操作などのインターセプトされたパスのアクセスは、柔軟性を高めるため、仮想デバイス構成モジュール (VDCM) によってエミュレートされます。また、インテル® Scalable IOV は、インテル® VT-d を拡張して、さまざまなドメインに割り当てられたデバイスリソース間できめ細かくアイソレーションを行うため、PSAID 単位の DMA 再マッピングをサポートします。

インテル® Scalable IOV は、アプリケーション・プロセスのシステムコールや、VM の仮想デバイス・インターフェイスなど、アドレスのドメインが異なり、別々の抽象化を使用するデバイスリソースを柔軟に共有できるようにします。また、デバイスリソースへの VDEV の動的マッピングを可能にし、VMM がデバイスリソースをオーバープロビジョニングできるようにします。さらに広い範囲で言えば、インテル® Scalable IOV は、VDCM を使用して VDEV の機能と現在互換性のある VDEV 機能を仮想化することで、物理的な I/O デバイスの世代間の違いにかかわらず、VMM がデータセンターにおける世代間の互換性を維持できるようにします。これにより、VDEV ドライバーを搭載する既存のゲスト・オペレーティング・システムのイメージを、どの物理的マシンにも導入や移行できることが保証されます。

インテル® データ・ストリーミング・アクセラレーターによるアクセラレーター・インターフェイス・テクノロジー

データのコピーと変換のための高性能なアクセラレーターであるインテル® データ・ストリーミング・アクセラレーター (インテル® DSA) は、近く発売されるインテル® Xeon® プロセッサー・ファミリーに統合されています。 インテル® DSA の目的は、ストリーミングするデータの移動と変換を最適化することです。これは、高性能なストレージ、ネットワーキング、パーシステント・メモリー、さまざまなデータ処理用途向けに設計されたアプリケーションで一般的な処理です。 

インテル® DSA は、前述のアクセラレーター・インターフェイス・テクノロジーを活用して、このようなスケーラブルなアクセラレーター・ハードウェアの構築に伴うコストと複雑さを低減しながら、効率的でスケーラブルなアクセラレーターのオフロードを実現します。

インテル® DSA は、デバイスにホストされた専用ワークキュー (DWQ) をサポートします。これは、個々のクライアントがワークキューを所有したり、そのフローや占有率を制御したりするようにできるものです。また、デバイスにホストされた共有ワークキュー (SWQ) をサポートします。これは、スケーラブルな共有を可能にします。以下の図に示すように、ソフトウェアは、個々のクライアントに DWQ を割り当て、SWQ を 1 つ以上のクライアントにマッピングできます。ソフトウェアは MOVDIR64B インストラクションを使用して 64 バイトのワーク記述子を DWQ に、また ENQCMD/S インストラクションを使用して 64 バイトのワーク記述子を SWQ に送信します。ワーク記述子は、完了割り込み、完了書き込み、あるいはその両方をリクエストすることもできます。そうすることで、UMONITOR/UMWAIT インストラクションによる効率的な同期が可能です。

インテル® DSA は、SVM と回復可能な I/O ページフォールトをサポートすることで、簡素化されたプログラミング・モデルを実現し、その採用をアプリケーション、オペレーティング・システム、ハイパーバイザー・ソフトウェアでシームレスに行えるようにします。スケーラブルな I/O 仮想化機能のサポートにより、仮想マシンやコンテナベースの導入においてインテル® DSA のオフロードが可能となり、VM やコンテナに割り当てられたインテル® DSA 仮想デバイスを保持しつつライブ・マイグレーションを実現できます。