ダイレクト・メモリー・アクセスの先へ: インテル® データ・ストリーミング・アクセラレーターによるデータセンター・コストの削減

その他

この記事は、The Parallel Universe Magazine 53 号に掲載されている「Beyond Direct Memory Access: Reducing the Data Center Tax with Intel Data Streaming Accelerator」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。


parallel_v53_01

最新のデータセンターでは、memcpy()、memmove()、ハッシュ、圧縮などの負荷の高いメモリー操作と変換を含む多くのアプリケーションが利用されるようになっています。アプリケーションには、データベース、画像処理、ビデオ転送、グラフ処理などが含まれますが、これらに限定されるものではありません。このようなメモリー操作と変換はデータセンターのインフラストラクチャー・ソフトウェアでも一般的であり、大量の CPU サイクルを消費します。これらのサイクルはアプリケーションの実行に使用される可能性があるため、「データセンター・タックス」 (英語) と呼ばれることもあります。理想的には、このような操作は最適化されたハードウェア・エンジンにオフロードするべきです。

インテル® データ・ストリーミング・アクセラレーター

インテル® データ・ストリーミング・アクセラレーター (インテル® DSA) は、最新の第 4 世代インテル® Xeon® スケーラブル・プロセッサーに統合された、ハイパフォーマンスなデータコピーと変換のアクセラレーターであり、処理効率と実用性だけでなく、汎用性も提供します。インテル® DSA には、1 人以上のユーザーから送信されたワーク記述子を効率良く処理するハードウェア・コンポーネントが搭載されています。共有仮想メモリー (SVM) のサポートにより、これらのワーク記述子はユーザー・アプリケーションからメモリーマップ I/O (MMIO) レジスター経由でインテル® DSA に直接送信でき、ターゲットメモリー領域をオペレーティング・システムでピニングする必要はありません。ユーザーは、専用ドライバーで提供されるユーザー・インターフェイスを利用して、ニーズに基づいて計算リソースを直接構成することもできます。インテル® DSA は、新しくサポートされた操作により、さまざまな優れた機能を提供します (表 1)。多くのユーザー/カーネルのプロセスで、インテル® DSA が提供する機能を活用できることが期待されます。


表 1. インテル® DSA でサポートされているデータ・ストリーミング操作

インテル® Data Accelerator Driver (IDXD) は、デバイスの初期化と管理を行うカーネル・モード・ドライバーであり、インテル® DSA の検出、初期化、構成の機能を提供します。アプリケーションは、これらの制御に、ユーザー空間 libaccel-config API ライブラリーを利用できます。データパスについては、アプリケーションのインテル® DSA インスタンスに低レイテンシー・アクセスを提供するため、IDXD は mmap() を介して MMIO ポータルを char デバイスとして利用できるようにします。これらの新機能と改良により、さまざまな分野 (表 2)、特に中規模から大規模のデータサイズの操作 (図 1) でインテル® DSA のパフォーマンスが同等のソフトウェアよりも大幅に向上していることが分かります。


表 2. さまざまな分野におけるインテル® DSA の活用例


図 1. さまざまな転送サイズ (バッチサイズ: 1) における、対応するソフトウェアと比較したデータ・ストリーミング操作のスループットの向上。メモリーフィルと NT-メモリーフィルは、割り当て書き込みと非割り当て書き込みを指します (通常の store と nt-store に似ています)。

インテル® DSA の操作

ほかのアクセラレーターと同様に、インテル® DSA は記述子とワークキュー(WQ)を使用して CPU ソフトウェアと対話します (図 2)。


図 2. 記述子の処理手順

データの移動はインテル® DSA の最も一般的なユースケースです。データコピーを例に使用法を示します。キーと値ペアのサイズが大きなキー値格納アプリケーションでは、特定のキーの値を取得または更新するたびにメモリーコピーが発生し、大量の CPU サイクルが発生します。これらの操作をインテル® DSA にオフロードします。インテル® DSA インスタンスが accel-config などのツールにより列挙および構成されている場合、プログラマーはまず記述子のデータ構造を割り当ててフィルする必要があります (図 3)。記述子には、操作のタイプ、ソースアドレスとデスティネーション・アドレス、データ長など、目的の操作に関する情報が含まれています。

タイトルとURLをコピーしました