RDMA
Wikipedia RDMA:リモートホストのメモリにCPUを介さず直接値を書きこむ。CPUへの負荷が非常に小さく、かつ極めて小さい遅延で通信できることが期待できる。
速いのは良いことであるのはもちろんだが、ネットワーク通信の遅延は非常に大きいという前提が崩れることで、従来では考えられなかった分散プログラミングモデルが現実的になってくるかもしれない。
元々はHPC向けで物理層にはInfiniBandを使うことを想定していたようだが、探してみるとTCP/IPでRDMAをサポートしたNICが思わず買ってしまいそうなお値段で手に入る。
- NTT-X Store NetXtreme II 1000 Express デュアルポート Ethernet アダプター
- ぷらっとオンライン IBM NetXtreme II 1000 Express イーサネットアダプタ (39Y6066)
Broadcom NetExtreme II BCM5706はTCP 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の実験をしてみるのはどうだろう…
そのほかのリンク:
- Microsoft Winsock Direct テクノロジ
- Linux環境におけるRDMAの現状 2006年11月1日
- Solaris のシステム管理 (ネットワークサービス) RDMA 経由の NFS
- Wikipedia Sockets Direct Protocol
- LIBSDP - A User Level Socket Switch for Seemless Migration to SDP (LD_PRELOADして既存のアプリケーションを再コンパイルなしでSockets Direct Protocolに対応させる)
*1:iWarpとiWARPは別物らしいので注意