RDMA

Wikipedia RDMAリモートホストのメモリにCPUを介さず直接値を書きこむ。CPUへの負荷が非常に小さく、かつ極めて小さい遅延で通信できることが期待できる。
速いのは良いことであるのはもちろんだが、ネットワーク通信の遅延は非常に大きいという前提が崩れることで、従来では考えられなかった分散プログラミングモデルが現実的になってくるかもしれない。


元々はHPC向けで物理層にはInfiniBandを使うことを想定していたようだが、探してみるとTCP/IPでRDMAをサポートしたNICが思わず買ってしまいそうなお値段で手に入る。


Broadcom NetExtreme II BCM5706TCP Offload Engineを搭載していて、TCP/IPはハードウェアで処理される。
BCM5706 Prouct Briefを読んでみると、RDMA controller (RNIC) RDMA over TCP (iWARP)―RDMAC 1.0 compliantと書いてある。iWARPというのはTCP/IPでRDMAするための標準規格/プロトコルらしい。WikiPedia iWARP*1


RDMAとその周辺技術の仕様書はRDMA Consortiumからダウンロードできる。
RDMAの実装はOpenFabrics Allianceで情報が手に入る。Linuxではlibrdmacmというライブラリを使ってRDMA対応ハードウェアを利用することができるらしい。
またLinuxソースコードlinux/include/rdma/以下にそれらしいヘッダが置いてある。FreeBSDはcurrentにRDMAサポートが入っているらしい。
rdmacm-utilsパッケージの中にはサンプルプログラムがいくつか入っている。コメントが充実していて読みやすい。


BCM5706にはハードウェアでiSCSIを処理する機能もある。TOE + iSCSIにOCFS2やGFS(RedHatのほう)などのクラスタファイルシステムを組み合わせれば、NFSと比べてずっと高速でスケーラビリティの高いファイルサーバーを構築できる。
表向きはiSCSIクラスタファイルシステムの評価と言うことでRDMA対応NICを入手し、RDMAの実験をしてみるのはどうだろう…


そのほかのリンク:

*1:iWarpとiWARPは別物らしいので注意