InfiniBandによるNFS/RDMAの速度検証

NFS/RDMAは、Infinibandの高速ネットワーク上で、NFSサーバ-NFSクライアント間において、メモリデータの遠隔転送(RDMA = Remote Direct Memory Access)を行う技術です。

InfiniBandアダプタ/スイッチを利用すると、高速ネットワークを構築することが出来ます。
さらに、RDMA (Remote Direct Memory Access) も利用することで、高速ネットワーク上のコンピュータ間でデータのメモリー間転送を行うことが出来ます。RDMAではCPU の介入がほとんどなく、コンピュータ間でメモリデータの遠隔転送が出来るそうです。これらをNFSで利用すると、データ転送速度アップを期待出来ます。

NFS/RDMAを利用する場合/利用しない場合で、どの程度違いがあるのか検証を行いました。

NFS/RDMA動作には、カーネルモジュールが必要で、モジュールsvcrdmaとxprtrdmaは、Kernel 2.6.25以降から共にマージされています。Infinibandドライバをインストールして、必要な設定を行えば、NFS/RDMAを利用できます。今回、OFEDのホットスタック(バージョン3.12-1)を使用しました。

検証環境

  • HCA:Mellanox MHQ19B-XTR (QDR)
  • CPU:Xeon E5-2630V2 1つ搭載
  • マザーボード:Supermicro X9DRi-F
  • OS:CentOS6.4 x86_64
  • Infinibandドライバ:
    OFED-3.12-1
  • NFSサーバのシステムメモリ:64GB(64GBメモリ内1GBをシステムで利用し、残りはtmpfsで使用。tmpfsを/nfsへマウント。)
  • NFSクライアントのシステムメモリ:1GB
  • HCAポートにIPアドレスを設定
    NFSサーバIPアドレス 192.168.1.1
    NFSクライアン IPアドレス 192.168.1.2
  • NFSサーバ-NFSクライアント間は一対一で接続しました。

設定

  1. OFEDをNFSサーバとNFSクライアントへインストール
  2. NFSサーバの設定
  3. # mount -t tmpfs -o size=63g tmpfs /nfs
    # vi /etc/fstab

    /nfs 192.168.1.0/24(rw,sync,no_root_squash,fsid=0,insecure)
  4. NFSサーバ側RDMAモジュールの動作開始
  5. # modprobe svcrdma
    # service nfs start
    # echo rdma 20049 > /proc/fs/nfsd/portlist
  6. NFSクライアント側RDMAモジュールの動作開始とマウント
  7. # modprobe xportrdma
    # mount -o rdma,port=20049 192.168.1.1:/nfs /mnt

テスト方法

  • iozoneを利用し、2GBファイル(システムメモリの2倍サイズファイル)の書き出し/読み出し速度を計測。
  • # iozone -Ac -s 2g -f /mnt/file

    なお、NFSサーバで、/nfsへマウントしたtmpfsに対して、iozoneにより同じファイルサイズで速度を計測するとWrite 3GB/sec程度、Read 6GB/sec程度でした。

結果

レコードサイズ4k〜16MBまでの結果の平均値をグラフ化しました。(標準偏差はNFS/RDMA使用時、未使用時ともにWriteで90くらい、Readで25くらい。)

Writeにはあまり違いがありませんが、Readでは倍以上の差を得られました。
Writeでも、差がもっと出て欲しいのですが、NFS設定ファイルは初期設定のままでしたので、チューニングすることにより、結果が変わるかもしれません。