LoginSignup
4
2

More than 1 year has passed since last update.

10G NICでnfs rdmaを有効にする

Last updated at Posted at 2021-07-16

Broadcomの10Gネットワークカード、NetXtreme-E BCM57416を安価で2枚手に入れたので、NFS over RDMAを有効にしてみた。
まだ、10000base-T対応のスイッチングハブを個人で買うにはちょっと高いので、2つのNICをLANケーブルで直結して試した。

RDMA

RDMAとは、Remote Direct Memory Accessの略で、『ローカルのコンピュータのメモリから、異なるリモートのコンピュータのメモリへデータのDMA転送を行うこと』。OSをすっ飛ばしてデータ転送を行える。元々は、Infiniband上で高速転送を行うために開発されたようだ。

Traditional Data Path vs RDMA

NIC用driver

まずはネットワークカード自体のドライバだが、bnxt_enが該当する。Ubuntu 20.04だと、自動で認識してくれた。

[    1.527556] bnxt_en 0000:01:00.0 eth1: Broadcom BCM57416 NetXtreme-E 10GBase-T Ethernet found at mem e0510000, node addr 9c:dc:71:b6:b5:d0
[    1.528469] bnxt_en 0000:01:00.0: 63.008 Gb/s available PCIe bandwidth (8.0 GT/s PCIe x8 link)
[    1.554613] bnxt_en 0000:01:00.1 eth2: Broadcom BCM57416 NetXtreme-E 10GBase-T Ethernet found at mem e0500000, node addr 9c:dc:71:b6:b5:d8
[    1.555833] bnxt_en 0000:01:00.1: 63.008 Gb/s available PCIe bandwidth (8.0 GT/s PCIe x8 link)

RoCE driver

続いて、RoCE(RDMA over Converged Ethernet、ロッキーと発音するらしい)用のドライバ。bnxt_reが該当する。こちらは、自動では入らないので、手動で行う。

$ sudo modprobe bnxt_re

このように認識される。

[  412.826559] bnxt_re: Broadcom NetXtreme-C/E RoCE Driver
[  412.898572] infiniband bnxt_re0: Device registered successfully
[  412.934539] infiniband bnxt_re1: Device registered successfully

さらに、RPC/RDMA Transportモジュールを突っ込む。

$ sudo modprobe rpcrmda

こちらはこのように認識される。

[   17.281994] RPC: Registered rdma transport module.
[   17.281997] RPC: Registered rdma backchannel transport module.

これら2のドライバは、/etc/modules へ書いておけば、次回起動時に有効にしてくれる。

bnxt_re
rpcrdma

nfs server

nfsサーバー側は、 /export を公開としておく。なお、セキュリティとかは考慮していない。

$ cat /etc/exports
/export	192.168.0.0/255.255.255.0(rw,async,fsid=0,no_subtree_check,no_root_squash,insecure)

ここで、NFSサーバーを(再)起動する。

$ sudo systemctl start nfs-server

そして、RDMA転送用のポート番号を設定。20049がデフォルトのポート番号らしい。

# echo rdma 20049 > /proc/fs/nfsd/portlist
# cat /proc/fs/nfsd/portlist
rdma 20049
rdma 20049
tcp 2049
tcp 2049

なお、この設定を行っても、netstatの結果には20049番ポートは出てこない。

ここまでが、サーバー側の設定。

nfs client

NFSクライアント側は、以下のようにマウントする。

# mount -o rdma,port=20049 192.168.0.1:/ /srv

これで、ファイルをコピーしてみると、1.1GB/sくらい出た。

$ dd if=/srv/100G of=/dev/zero iflag=direct bs=32M
3200+1 レコード入力
3200+1 レコード出力
107374182500 bytes (107 GB, 100 GiB) copied, 95.0471 s, 1.1 GB/s

参考

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2