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クライアント間は一対一で接続しました。
設定
- OFEDをNFSサーバとNFSクライアントへインストール
- NFSサーバの設定
- NFSサーバ側RDMAモジュールの動作開始
- NFSクライアント側RDMAモジュールの動作開始とマウント
# 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) ~ |
# modprobe svcrdma # service nfs start # echo rdma 20049 > /proc/fs/nfsd/portlist |
# 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設定ファイルは初期設定のままでしたので、チューニングすることにより、結果が変わるかもしれません。