期待のネット新技術

RDMAでパケットを高速転送する「SDP」、これをiSCSIで実現する「iSER」

【InfiniBandの現在】

 「InfiniBandの現在」では、規格としての歴史と現状、今後の動向をまとめて紹介している。大半の読者にとっては「InfiniBandって何?」というところだろうが、僚誌クラウドWatchをご覧になっておられる読者の中には「何で今さら」という方も居られるかもしれない。

 そう、InfiniBandという規格は、1999年に作業が始まり、2000年に最初の規格策定が行われたという「えらく古い」規格なのである。

「InfiniBandの現在」記事一覧

InfiniBand上にTCP/IPを通してRDMAを利用する仕組みとは?

 RDMAを策定したのは、実はRDMA Consortiumという業界標準団体だ。その設立メンバーは、Adaptec、Broadcom、HP、IBM、Intel、Microsoft、Network Applianceの7社で、2002年5月31日に設立された。

 もちろんこれらのベンダーは、当然InfiniBandにRDMAを利用することを目論んだわけだが、RDMAは言ってみれば縁の下の仕組みであって、InfiniBandのソフトウェアスタックから直接には見えない。これについては『InfiniBandの現在』の第3回でも少し触れたが、元々InfiniBandはさまざまなプロトコルをまとめて扱えるようになっていた

 そのときにも掲載した以下の図の例では、クライアント側の接続のためのイーサーネット、ストレージサブシステム接続のためのファイバチャネルまたはSCSI、サーバー同士の接続(ここに何を使うかは構成によって異なるが、例えばHPC向けではMPIなど)の3つを全てInfiniBandで代替するかたちとなっている。

出典はIDF 2001 FallにおけるCA(Computer Assosiates International)のMelvin Estrada氏による"Manageability of Infiniband"というセッション資料

 これは、TCP/IPを止めてInfiniBandのプロトコルでネットワークを再実装する、というものではない。そうではなく、TCP/IPをInfiniBand上に通すというもので、SCSIやMPIに関しても同じだ。以下の図はやや新しく2006年ものだが、Mellanoxの提供する「WinIB」というソフトウェアスタックの内部構造となる。

赤はWindows Server 2003で提供されるコンポーネント、青がWinIBの提供するコンポーネント。TCP/IPを使うアプリケーションは、WinSockや、WSD→TCP/IP→NDISの先に、IPOIB(IP over InfiniBnad)のドライバーを介してInfiniBandで接続されるかたちになるのが分かる。出典はMellanoxの"InfiniBand Software Stack Windows Edition"

 HPCアプリケーションに関しては、OS/ドライバーのレイヤをパスするカーネルバイパスのかたちで直接HCA(Host Channel Adapter)にアクセスしているのが分かるかと思う。これは、前回の図で言えば赤い実線のパスだ。

RDMAを利用してパケットを高速転送できる「SDP」のメカニズム

 さて、RDMAのメカニズムだが、上の図を一見すると、左端のMPI2を利用した場合にのみ実装されているように見えるが、技術的にはほかのプロトコルでも当然利用可能である。というより、RDMA Consortiumはそれを当初から想定していた。

 まず、2002年10月30日に発表された"RDMA over TCP wire protocol specifications"が、最終的に「SDP(Socket Direct Protocol)」となり、InfiniBandのSpecificationの中ではAnnex A4で定義されている。これは、IPv4/IPv6のパケットを、RDMAを利用して高速に転送できるようにするものだ。

 もっとも、何でもかんでもRDMAで送る、というわけではない。主に、SOCK_STREAM(順序性と信頼性を保ち、双方向のByte Streamを転送する。Out-of-Bandの転送メカニズムも提供される)がRDMAの対象であり、それ以外の通信に関しては、RDMAを使わないかたちでの実装が想定されている。

 この目的で、まずULP(Upper Layer Protocol)バッファーを定義する。次に、SPDメッセージ(つまりTCP/IPベースの通信データ)がULPバッファーに格納される。その実装は、以下のように定義されている。

  • SOCK_STREAMに関しては、RDMAを利用したゼロコピーでの転送を行う
  • そのほかについては、プライベートバッファーを用意し、これを利用して転送を行う

 RDMAの場合、細かな処理は全てHCA側で行う必要があるが、TCP/IPはさまざまな動作モードが定義されており、これを全部インプリメントするのは難しい(というか、コストが高く付く)。このため、パフォーマンスにあまり影響しない部分は引き続きホスト(つまりCPU)側で対応し、パフォーマンスに影響する部分だけRDMAを利用する、という仕組みを採ることとなった。

実際には、SDPにもゼロコピーモードとプライベートバッファーモードがあるので、厳密にはこの図は正しくない。出典はIDF Fall 2012におけるVoltaire CTOのYaron Haviv氏による"Infiniband Architecture and Socket Direct Protocol(SDP)"の講演資料

 ちなみに、SDPを使うメリットは、単一マシン間でのレイテンシーを減らすだけではない。マルチティアのバックエンドサーバーにおいて、さまざまなTCP/IPベースのアプライアンスを順につなげてシステムを構成する、といった場合には、トータルで猛烈な処理のTCP/IPのパケットハンドリングが発生する。これがSDPと、次に説明するSRP、それにこの当時は有望視されていたDAFSを組み合わせることで、はるかにオーバーヘッドの小さい環境が構築できるとしていた。

DASFは、IETFによりSpecification 1.0が2001年にリリースされたのだが、IntelやMicrosoftが脱落した結果、InfiniBandストレージそのものが途中で頓挫してしまい、結局これを実装するストレージシステムが存在しなくなったことで消えてしまった。出典は上と同じ

 次がストレージまわりで、まずはSCSIである。こちらも同じようにRDMAを利用することで、当然レイテンシーの削減が可能になる。これは特に大規模なストレージを利用する場合には効果的だ。従来は、こうした目的でファイバチャネルが利用されていたが、その場合はSCSIプロトコルそのものをアプリケーション層で実装し、結果として出てきたSCSIのパケットをファイバチャネル経由で送るという形になっていた。

 だがInfiniBandでは、これを「SRP(SCSI RDMA Protocol)」を利用するかたちにしている。SRPの仕様そのものは、InfiniBandではなく「ANSI INCITS 365-2002」として2002年に策定(のち2007年に改定)されている。それもあってInfiniBandのSpecificationの中では、Annex A5(Booting Annex)の中でSRP経由でのシステムブートを行う際の手順について記されているだけだ。

 ただ、SRPの中身は? というと、SCSIをRDMAプロトコルに対応させたものであり、最初の図にもあるように、一部はカーネルAPIとしてで提供され、その下でRDMAが動くかたちとなる。

SCSIプロトコルをIPに乗せたiSCSIをRDMAに対応させた「iSER」

 これを追いかけるように登場したのが「iSER(iSCSI Extentions for RDMA)」だ。「iSCSI(Internet Small Computer Systems Interface)」はRFC3720~3723として提案された技術で、簡単に言えば、SCSIプロトコルをIPの上に乗せたものだ。これにより、イーサーネットで接続されたNASやSANに、SCSIプロトコルを利用してアクセス可能になったわけだ。

 この背景にあるのは、ファイバチャネルは確かに高性能ながらも、高価で導入の敷居が高かった点だ。その一方でイーサーネットがどんどん高速化され、しかもファイバチャネルに比べて価格がずっと安いため、イーサーネットというかIPプロトコルの上に、SCSIを実装しようということで生まれたわけだ。

 iSCSIは確かに大幅なコスト削減になるが、TCP/IPスタックの上に乗るかたちになるので、当然オーバーヘッドは少なくない。そこで、iSCSIをRDMAに対応させようと考えられたのがiSERとなるわけだ。当然、何でもかんでもRDMAを使うわけではなく、実際のデータ転送にはRDMAを利用し、それ以外は従来のiSCSIのまま、というかたちになる。

iSCSIにおけるデータ転送をRDMAのゼロコピーで実現しよう、というのが「iSER」。これはRDMAに対応したRNIC(RDMA NIC)でのみ可能となる。出典はRDMA Consortiumの"iSER/DA Overview Presentation"

 ちなみに、上の図に出てくる「RDMAP(Remote Direct Memory Access Protocol)」はRFC5040、「DDP(Direct Data Placement over Reliable Transports)」はRFC5041、「MPA(Marker PDU Aligned Framing for TCP Specification)」はRFC5044として、それぞれ定義されてい、この3つの階層をまとめた総称が、「iWARP(Internet Wide Area RDMA Protocol)」という名前で知られている。

 ちなみに、もはやInfiniBandとほとんど関係ない部分で言えば、このiWARPの上にNFSを載せた「NFS over RDMA」や、イーサーネットコントローラーにRDMAの機能を搭載した「RoCE(RDMA over Converged Ethernet)」など、RDMAそのものは、この後広く利用されるようになっていく。

 RDMAはそもそも、InfiniBandと合わせて開発された技術だが、こちらの記事にもある通り、RoCE対応のイーサーネットカードが市場に登場したのは2010年代に入ってからであり、2000年代でRDMAを使うとなると、InfiniBandが唯一の解であった。

「InfiniBandの現在」記事一覧

大原 雄介

フリーのテクニカルライター。CPUやメモリ、チップセットから通信関係、OS、データベース、医療関係まで得意分野は多岐に渡る。ホームページはhttp://www.yusuke-ohara.com/