Linux環境におけるNVMe-oF(RDMA / RoCEv2)イニシエータとターゲット構築――低遅延共有ストレージ検証実務
要旨:AIモデルのチェックポイント保存や分散学習用キャッシュ、超大規模RDBMSにおいて、従来のiSCSIやNFSではTCPスタックの処理遅延が深刻なボトルネックとなる。本稿では、RoCEv2(RDMA over Converged Ethernet)を活用し、イーサネット上でローカルNVMeと同等のレイテンシ(10マイクロ秒未満)を実現するNVMe over Fabrics(NVMe-oF)のターゲット・イニシエータ構築手順と、PFC(優先度ベースのフロー制御)設定の要点を解説する。
1. NVMe-oF(NVMe over Fabrics)の優位性とRoCEv2
NVMe-oFは、PCIeバス直結のNVMeコマンドセットをInfiniBandやRDMA対応イーサネット(RoCEv2)経由でリモートサーバ間へ延伸するプロトコルである。CPUを介在させずにネットワークカード同士がホストメモリへ直接読み書きを行う(Zero-Copy DMA)ため、数十万IOPSの負荷下でもホストCPU使用率をほぼゼロに維持しつつ、物理NVMeドライブ単体と遜色ない極低遅延アクセスを享受できる。
2. ターゲット(ストレージサーバ)側の構成手順
Linuxカーネルに組み込まれている nvmet(NVMe Target)モジュールおよび nvmet-rdma モジュールを用いてターゲットを公開する。設定の永続化には nvmetcli ツールを使用する。
# カーネルモジュールのロード modprobe nvmet modprobe nvmet-rdma # nvmetcli を用いたサブシステムとポートの作成 nvmetcli > cd /subsystems > create sidc.nvme.storage01 > cd sidc.nvme.storage01 > set attr allow_any_host=1 > cd namespaces > create 1 > set device path /dev/nvme0n1 > enable > cd /ports > create 1 > cd 1 > set addr trtype=rdma adrfam=ipv4 traddr=192.168.100.11 trsvcid=4420 > cd subsystems > add sidc.nvme.storage01
3. イニシエータ(クライアントサーバ)側の接続とベンチマーク
クライアントマシン側では nvme-cli ツールを使用してファブリック上のターゲットをディスカバリし、ローカルブロックデバイスとしてアタッチする。
# ターゲットの探索(Discovery) nvme discover -t rdma -a 192.168.100.11 -s 4420 # ターゲットへの接続(Connect) nvme connect -t rdma -n sidc.nvme.storage01 -a 192.168.100.11 -s 4420 # 認識されたブロックデバイスの確認 lsblk | grep nvme # 出力例: nvme1n1 259:1 0 3.5T 0 disk
接続後、FIO(Flexible I/O Tester)を用いて4KBランダムリード/ライト測定を実施し、レイテンシが8〜12マイクロ秒台に安定していることを確認して実務検証を完了する。