Debian 12でconfigfs を使い NVMe over RDMA ターゲット(ConnectX-3 VPI)を設定し、同じくDebian 12の イニシエータ(ConnectX-3 Pro, RoCE v1に設定)から接続してみました。今回は PCIe 4.0 の NVMe ドライブを PCIe 3.0 で接続して試してみたのですが、fioを使ったベンチマークでローカルとほぼ同じ速度で接続できましたので備忘録として挙げてみました。
早速ですが、以下設定です。
続いてイニシエータ側から接続してみます。
試しに FDR(56Gbps)で計測を行ってみました。最高同程度の速度で読取・書込できているようです。
これも参考ですが、同じHCAの別ポートのIPoIB(Connected mode)にQDRで接続した場合、以下のようになりました。最高ローカル接続と同程度の速度で読取書込できているようです。
ついでに ConnectX-2 なIPoIBのイニシエータから接続して計測した場合は、以下のようになりました。
今回は以上です。それでは。
早速ですが、以下設定です。
#### target side modprobe nvmet-rdma NQN=nqn.1868-01.com.example:nvme:i50.500gb01 mkdir /sys/kernel/config/nvmet/subsystems/$NQN cd /sys/kernel/config/nvmet/subsystems/$NQN echo 1 > attr_allow_any_host mkdir namespaces/10 cd namespaces/10 echo -n /dev/nvme0n1 > device_path echo 1 > enable mkdir /sys/kernel/config/nvmet/ports/1 cd /sys/kernel/config/nvmet/ports/1 # 全てのインターフェースでリスンする場合は 0.0.0.0 を指定 echo -n 0.0.0.0 > addr_traddr echo rdma > addr_trtype echo 4420 > addr_trsvcid echo ipv4 > addr_adrfam ln -s /sys/kernel/config/nvmet/subsystems/$NQN /sys/kernel/config/nvmet/ports/1/subsystems/$NQN # 確認 dmesg | grep "enabling port" [ 1342.115704] nvmet_rdma: enabling port 1 (0.0.0.0:4420) # fdisk /dev/nvme0n # n # p # (enter) # (enter) # w # mkfs.xfs -f /dev/nvme0n1p1ターゲット側は以上です。
続いてイニシエータ側から接続してみます。
#### initiator side apt-get install nvme-cli # discovering nvme discover -t rdma -a 10.1.56.50 -s 4420 # connecting NQN=nqn.1868-01.com.example:nvme:i50.500gb01 nvme connect -t rdma -n $NQN -a 10.1.56.50 -s 4420 # 接続確認 nvme list --snip dmesg | tail [48682.981375] nvme nvme0: creating 24 I/O queues. [48683.215350] nvme nvme0: mapped 24/0/0 default/read/poll queues. [48683.224510] nvme nvme0: new ctrl: NQN "nqn.1868-01.com.example:nvme:i50.500gb01", addr 10.1.56.50:4420, hostnqn: nqn.2014-08.org.nvmexpress:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx接続は以上です。
試しに FDR(56Gbps)で計測を行ってみました。
# fio sequential read on initiator cd /mnt && rm -rf /mnt/* && fio --filename=fiotest --size=1024M --rw=read --bs=1024K --ioengine=io_uring --direct=1 --iodepth=8 --runtime=10 --numjobs=1 --time_based --group_reporting --name=read-throughput-test-job --snip Run status group 0 (all jobs): READ: bw=3371MiB/s (3535MB/s), 3371MiB/s-3371MiB/s (3535MB/s-3535MB/s), io=32.9GiB (35.4GB), run=10002-10002msec Disk stats (read/write): nvme0n1: ios=33371/0, merge=0/0, ticks=76756/0, in_queue=76756, util=99.06% # fio sequential write on initiator cd /mnt && rm -rf /mnt/* && fio --filename=fiotest --size=1024M --rw=write --bs=1024K --ioengine=io_uring --direct=1 --iodepth=8 --runtime=10 --numjobs=1 --time_based --group_reporting --name=write-throughput-test-job --snip Run status group 0 (all jobs): WRITE: bw=3107MiB/s (3258MB/s), 3107MiB/s-3107MiB/s (3258MB/s-3258MB/s), io=30.4GiB (32.6GB), run=10003-10003msec Disk stats (read/write): nvme0n1: ios=0/30718, merge=0/0, ticks=0/74976, in_queue=74976, util=98.95% ## 接続解除 nvme disconnect -n $NQN # 参考: fio sequential read on target mount /dev/nvme0n1p1 /mnt cd /mnt && rm -rf /mnt/* && fio --filename=fiotest --size=1024M --rw=read --bs=1024K --ioengine=io_uring --direct=1 --iodepth=8 --runtime=10 --numjobs=1 --time_based --group_reporting --name=read-throughput-test-job --snip Run status group 0 (all jobs): READ: bw=3395MiB/s (3560MB/s), 3395MiB/s-3395MiB/s (3560MB/s-3560MB/s), io=33.2GiB (35.6GB), run=10002-10002msec Disk stats (read/write): nvme0n1: ios=67490/2, merge=0/0, ticks=145947/2, in_queue=145950, util=73.20% # 参考: fio sequential wirte on target cd /mnt && rm -rf /mnt/* && fio --filename=fiotest --size=1024M --rw=write --bs=1024K --ioengine=io_uring --direct=1 --iodepth=8 --runtime=10 --numjobs=1 --time_based --group_reporting --name=write-throughput-test-job --snip Run status group 0 (all jobs): WRITE: bw=3179MiB/s (3333MB/s), 3179MiB/s-3179MiB/s (3333MB/s-3333MB/s), io=31.1GiB (33.3GB), run=10003-10003msec Disk stats (read/write): nvme0n1: ios=0/62859, merge=0/0, ticks=0/143521, in_queue=143521, util=86.18%多少のオーバーヘッドはあるかとは思いますが、PCIe x3 接続の NVMe ドライブとして見た場合、FDR接続ではローカル接続・リモート接続共にほぼ
これも参考ですが、同じHCAの別ポートのIPoIB(Connected mode)にQDRで接続した場合、以下のようになりました。
# sequential read Run status group 0 (all jobs): READ: bw=3319MiB/s (3480MB/s), 3319MiB/s-3319MiB/s (3480MB/s-3480MB/s), io=32.4GiB (34.8GB), run=10003-10003msec Disk stats (read/write): nvme0n1: ios=33081/6, merge=0/0, ticks=77772/4, in_queue=77776, util=99.07% # sequential write Run status group 0 (all jobs): WRITE: bw=3174MiB/s (3329MB/s), 3174MiB/s-3174MiB/s (3329MB/s-3329MB/s), io=31.0GiB (33.3GB), run=10003-10003msec Disk stats (read/write): nvme0n1: ios=0/31389, merge=0/0, ticks=0/75232, in_queue=75232, util=98.97%こちらも QDR 接続で、ほぼ
ついでに ConnectX-2 なIPoIBのイニシエータから接続して計測した場合は、以下のようになりました。
# sequential read Run status group 0 (all jobs): READ: bw=3132MiB/s (3284MB/s), 3132MiB/s-3132MiB/s (3284MB/s-3284MB/s), io=30.6GiB (32.8GB), run=10003-10003msec # sequential write Run status group 0 (all jobs): WRITE: bw=2829MiB/s (2966MB/s), 2829MiB/s-2829MiB/s (2966MB/s-2966MB/s), io=27.6GiB (29.7GB), run=10002-10002msec書込が後少しですが、ターゲットが PCIe 3.0 x4 で 単一の NVMeドライブへの接続環境では ConnectX-2のイニシエータでもそこそこのスピードで接続できるようです。
今回は以上です。それでは。
コメント
コメントを投稿