Skip to main content
QUICK REVIEW

[論文レビュー] Dissecting a Small InfiniBand Application Using the Verbs API

Gregory Kerr|arXiv (Cornell University)|May 10, 2011
Distributed and Parallel Computing Systems被引用数 8
ひとこと要約

この論文は、libibverbs API を使用して、OFED が提供する InfiniBand アプリケーション ibv_rc_pingpong を、1行ずつ詳細に解体している。これは、信頼性があり接続指向の RDMA 通信に必要な複雑で poorly documented な低レベルの相互作用を明確にしている。生産環境で使用可能な InfiniBand 環境において、メモリ登録のセットアップ、キュー・ペアの作成、コンプリート・キューのポーリング、フロー制御の方法を説明している。最終的に、エンドツーエンドで約 12.6 マイクロ秒のレイテンシを達成する、動作する高パフォーマンスなピアツーピアデータ転送を実証している。

ABSTRACT

InfiniBand is a switched fabric interconnect. The InfiniBand specification does not define an API. However the OFED package, libibverbs, has become the default API on Linux and Solaris systems. Sparse documentation exists for the verbs API. The simplest InfiniBand program provided by OFED, ibv_rc_pingpong, is about 800 lines long. The semantics of using the verbs API for this program is not obvious to the first time reader. This paper will dissect the ibv_rc_pingpong program in an attempt to make clear to users how to interact with verbs.

研究の動機と目的

  • InfiniBand プログラミングに初めて取り組む開発者にとって、複雑で poorly documented な libibverbs API を解き明かすこと。
  • 800 行を超える長大で、初見では意味がわかりにくい ibv_rc_pingpong サンプル・プログラムの明確で段階的な説明を提供すること。
  • 信頼性のある接続(RC)モードにおける、ユーザー空間 verbs 関数、カーネル・ドライバ、ハードウェア HCA コンponent 間の相互作用を明確にすること。
  • コンプリート・キューのオーバーフローとバッファーエクステンションを防ぐために、コンプリート・キュー、ワーク・リクエストのポスト、フロー制御の正しい使用法を説明すること。
  • 元々この研究の動機であった、DMTCP クラッシュ・チェックポイント・システムへの直接的な InfiniBand 対応の統合を支援すること。

提案手法

  • 論文は、生産環境における信頼性のある接続(RC)モードで使用されるコアな verbs API 関数に焦点を当て、ibv_rc_pingpong のソースコード(バージョン 1.1.4)を独立して分析している。
  • カーネル空間ドライバ(セットアップ用)とユーザー空間 verbs(HCA への直接メモリアクセスによる低レイテンシデータ転送用)の間のソフトウェアスタックの階層を明確にしている。
  • ibv_reg_mr を通じたメモリ領域(MRs)の作成、ibv_alloc_pd を用いた保護ドメイン(PDs)の割り当て、ibv_create_cq および ibv_create_qp を用いたコンプリート・キュー(CQs)とキュー・ペア(QPs)のセットアップを詳細に説明している。
  • ibv_post_send および ibv_post_recv を通じて、送信キュー(SQ)および受信キュー(RQ)にワーク・リクエスト(WRs)をポストし、コンプリートの追跡に固有の wr_id 値を使用している。
  • コンプリート・キューのオーバーフローとレースコンディションを防ぐために、ibv_poll_cq を用いたイベント駆動型のコンプリート処理と、ibv_ack_cq_events を用いたイベントのアックノリッジを説明している。
  • フロー制御メカニズムとして、利用可能なスロット数がしきい値(例:1 つだけ残っている場合)を下回った際に受信バッファを動的に再ポストする方法を説明している。

実験結果

リサーチクエスチョン

  • RQ1libibverbs API は、生産環境におけるユーザー空間 C 呼び出しに、低レベルの InfiniBand ハードウェア操作をどのようにマッピングするか?
  • RQ2RC モードで信頼性があり低レイテンシのデータ転送を達成するために、verbs API 関数(例:ibv_post_send、ibv_poll_cq)の正しい順序と相互作用は何か?
  • RQ3CQ オーバーフローを防ぎ、継続的なデータ転送を保証するために、どのように効果的なフロー制御を実装できるか?
  • RQ4ノード間で QP およびメモリ領域識別子を交換するために、帯域外の TCP ソケットが果たす役割は何か?
  • RQ5コンプリート・イベントはどのように追跡され、アックノリッジされるか?これにより、システムの安定性が保たれ、レースコンディションが回避されるのか?

主な発見

  • ibv_rc_pingpong プログラムは、標準の InfiniBand ファブリック上において、1 回のイテレーションあたり約 12.6 マイクロ秒のラウンドトリップ・レイテンシで、約 5.2 Gbit/sec のデータ転送レートを達成している。
  • プログラムはデフォルトでポーリングベースのコンプリート・モデル(ibv_poll_cq)を使用しており、CQ が継続的にシグナルされない場合に比べ、より予測可能で低レイテンシである。
  • フロー制御は、2 つ未満のバッファが利用可能になった場合に受信バッファを動的に再ポストすることで実装されており、受信側がバッファを失うことはない。
  • 送信ワーク・リクエストに IBV_SEND_SIGNALED フラグを使用することで、CQ が継続的にシグナルされない場合でも、コンプリートのお知らせが高速化され、パフォーマンスが向上する。
  • コンプリート・キューのイベントアックノリッジを ibv_ack_cq_events を用いて正しく行っているため、CQ オーバーフローが防止され、システムの安定性が維持されている。
  • 本論文は、複雑でドキュメントが不足しているものの、正しく使用すれば、verbs API が高パフォーマンスで低レイテンシの RDMA 通信を実現可能であることを確認している。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。