Skip to main content
Red Hat Enterprise Linux 8.0 で
NVME-over-Fabricを設定してみた
HeteroDB
Chief Architect & CEO
KaiGai Kohei <kaigai@heterodb.com>
#やってみた系
何をやってる人ですか?
『@kkaigai』
⇩
『固定されたツイート』
⇩
9/25(水) DB Tech Showcase Tokyo 2019
【発表資料】
PostgreSQLをどこまで高速化できるか
~ハードウェアの限界に挑むPG-Stromの挑戦~
Red Hat Insights Tech Seminar - LT: RHEL8.0でNVME-oFを設定してみた2
みんな大好き NVME-SSD
Red Hat Insights Tech Seminar - LT: RHEL8.0でNVME-oFを設定してみた3
みんな知ってるNVME-SSD
 低レイテンシ
✓ PCIeバス直結、プロトコル変換を省略
 高スループット
✓ PCIeレーン数に応じたデータ転送レート
 スケーラビリティ
✓ 多数のI/Oキューによる多重I/Oの実装
 オープン
✓ 制御コマンドを共通規格化
CPURAM
SSD SSD
PCIe
HBA
HDD HDD HDD
Red Hat Insights Tech Seminar - LT: RHEL8.0でNVME-oFを設定してみた4
ストレージ容量の上限はシャーシの大きさに規定される…?
イマドキの2Uサーバなら、オールフラッシュで200TB近く積めるが…。
model Supermicro 2029U-TN24R4T Qty
CPU Intel Xeon Gold 6226 (12C, 2.7GHz) 2
RAM 32GB RDIMM (DDR4-2933, ECC) 12
GPU NVIDIA Tesla P40 (3840C, 24GB) 2
HDD Seagate 1.0TB SATA (7.2krpm) 1
NVME Intel DC P4510 (8.0TB, U.2) 24
N/W built-in 10GBase-T 4
8.0TB x 24 = 192TB
Red Hat Insights Tech Seminar - LT: RHEL8.0でNVME-oFを設定してみた5
システム導入時に、
データサイズの上限を
正確に予想できるか…?
NVME-over-Fabric
リモートのNVME-SSDをあたかもローカル同様に使う技術
CPURAM
SSD
NIC
PCIe
SSD
NIC SSD
CPURAM
PCIe
NVME-oF Host NVME-oF Target
高速ネットワーク
(RoCE, FC, TCP)
Red Hat Insights Tech Seminar - LT: RHEL8.0でNVME-oFを設定してみた6
#やってみた
Red Hat Insights Tech Seminar - LT: RHEL8.0でNVME-oFを設定してみた7
実験環境(1/2)
NVME-Host
Supermicro
SYS-1019GP-TT
magro.heterodb.com
(192.168.77.100)
NVME-Host
Supermicro
SYS-5018GR-T
saba.heterodb.com
(192.168.77.104)
CPU: Xeon
Gold 6126T
CPU: Xeon
E5-2650v4
GPU: NVIDIA TESLA V100
SSD: Intel DC P4600
SSD: Intel DC P4600
NIC: Mellanox ConnextX-5
NIC: Mellanox ConnextX-5
GPU: NVIDIA TESLA P40
x16
x8
x8
x16
SSD: Samsung PRO960
SSD: Samsung PRO960
SSD: Samsung PRO960
SSD: Samsung PRO960
RiserBoard
x16
x16
x8
192.168.80.100
192.168.80.104
100Gb
RoCE
Red Hat Insights Tech Seminar - LT: RHEL8.0でNVME-oFを設定してみた8
実験環境(2/2)
Red Hat Insights Tech Seminar - LT: RHEL8.0でNVME-oFを設定してみた9
目標とする構成
CPU: Xeon
Gold 6126T
CPU: Xeon
E5-2650v4
GPU: NVIDIA TESLA V100
SSD: Intel DC P4600
SSD: Intel DC P4600
NIC: Mellanox ConnextX-5
NIC: Mellanox ConnextX-5
GPU: NVIDIA TESLA P40
x16
x8
x8
x16
SSD: Samsung PRO960
SSD: Samsung PRO960
SSD: Samsung PRO960
SSD: Samsung PRO960
RiserBoard
x16
x16
x8
192.168.80.100
192.168.80.104
/dev/nvme0 … ローカル
/dev/nvme1 … ローカル
/dev/nvme2 … NVME-oF区画
/dev/nvme2n1
/dev/nvme2n2
/dev/nvme2n3
/dev/nvme2n4
Red Hat Insights Tech Seminar - LT: RHEL8.0でNVME-oFを設定してみた10
NVMEoFターゲットの設定(1/2)
■ 必要なカーネルモジュールをロードする
# modprobe nvmet-rdma
# modprobe mlx5_ib
■ NVMEoFの設定単位 “subsystem” を作成する
# cd /sys/kernel/config/nvmet/subsystems
# mkdir -p capybara
# ls -lF capybara
total 0
drwxr-xr-x. 2 root root 0 Sep 26 15:06 allowed_hosts/
-rw-r--r--. 1 root root 4096 Sep 26 15:06 attr_allow_any_host
-rw-r--r--. 1 root root 4096 Sep 27 07:30 attr_serial
-rw-r--r--. 1 root root 4096 Sep 27 07:30 attr_version
drwxr-xr-x. 6 root root 0 Sep 26 15:07 namespaces/
# echo 1 > capybara/attr_allow_any_host
Red Hat Insights Tech Seminar - LT: RHEL8.0でNVME-oFを設定してみた11
注意:ホスト単位で許可を出す事もできるようだ。
NVMEoFターゲットの設定(1/2)
■ “subsystem”配下に”namespace”を作成し、それぞれ物理 NVME-SSD を関連付ける
# cd capybara/namespaces
# mkdir -p 1 2 3 4
# echo -n /dev/nvme0n1 > 1/device_path
# echo 1 > 1/enable
# echo -n /dev/nvme1n1 > 2/device_path
# echo 1 > 2/enable
# echo -n /dev/nvme2n1 > 3/device_path
# echo 1 > 3/enable
# echo -n /dev/nvme3n1 > 4/device_path
# echo 1 > 4/enable
Red Hat Insights Tech Seminar - LT: RHEL8.0でNVME-oFを設定してみた12
注意:echo -n ではなく echo ではデバイス名を認識してくれなかった。
NVMEoFターゲットの設定(2/2)
■ NVMEoF ネットワークポートの設定
# mkdir -p /sys/kernel/config/nvmet/ports/1
# cd /sys/kernel/config/nvmet/ports/1
# echo 192.168.80.100 > addr_traddr
# echo rdma > addr_trtype
# echo 4420 > addr_trsvcid
# echo ipv4 > addr_adrfam
■ NVMEoF ネットワークポートと “namespace” を関連付ける
# cd subsystems
# ln -sf ../../../subsystems/capybara ./
Red Hat Insights Tech Seminar - LT: RHEL8.0でNVME-oFを設定してみた13
NVMEoFホストの設定(0/2)
■ SSD-to-GPU Direct用のドライバソフトウェアをインストール
# yum install nvme_strom-2.2-1.el8.x86_64.rpm
# modinfo nvme-rdma
filename: /lib/modules/4.18.0-80.7.2.el8_0.x86_64/extra/nvme-rdma.ko.xz
version: 2.2
description: Enhanced nvme-rdma for SSD-to-GPU Direct SQL
license: GPL v2
rhelversion: 8.0
srcversion: 7F097CBE75277A94667B5C9
depends: nvme-fabrics,ib_core,nvme-core,rdma_cm
name: nvme_rdma
vermagic: 4.18.0-80.7.2.el8_0.x86_64 SMP mod_unload modversions
parm: register_always:Use memory registration even for contiguous memory...
解説)nvme-rdmaモジュールの filename: に注意
RHEL/CentOS 7.x/8.x系列では、nvme-rdmaドライバによって制御されるNVMEoF区画からSSD-to-GPUダイレクト
データ転送を行うには、パッチを適用したnvme-rdmaドライバを適用する必要があります。
このドライバは nvme_strom パッケージでインストールされますが、同名のINBOXドライバとは異なり、
/lib/modules/<kernel version>/extra 以下に格納されます。
INBOXドライバは /lib/modules/<kernel version>/kernel/drivers/nvme/host/nvme-rdma.ko.xz に
保存されますが、modprobeコマンドは /extra 以下を優先するため、こちらは利用されません。
Red Hat Insights Tech Seminar - LT: RHEL8.0でNVME-oFを設定してみた14
NVMEoFホストの設定(1/2)
■ カーネルモジュールのロード
# modprobe nvme-rdma
# modprobe mlx5_ib
■ NVMEoF ターゲットへの接続①
# nvme discover -t rdma -a 192.168.80.100 -s 4420
Discovery Log Number of Records 1, Generation counter 1
=====Discovery Log Entry 0======
trtype: rdma
adrfam: ipv4
subtype: nvme subsystem
treq: not specified
portid: 1
trsvcid: 4420
subnqn: capybara
traddr: 192.168.80.100
rdma_prtype: not specified
rdma_qptype: connected
rdma_cms: rdma-cm
rdma_pkey: 0x0000
Red Hat Insights Tech Seminar - LT: RHEL8.0でNVME-oFを設定してみた15
NVMEoFホストの設定(2/2)
■ ローカルのNVMEデバイスを確認
# ls -l /dev/nvme?n?
brw-rw----. 1 root disk 259, 0 Sep 27 13:26 /dev/nvme0n1
brw-rw----. 1 root disk 259, 1 Sep 27 13:26 /dev/nvme1n1
■ NVMEoF ターゲットへの接続②
# nvme connect -t rdma -n capybara -a 192.168.80.100 -s 4420
■ リモートデバイスが認識されている事を確認
# ls -l /dev/nvme?n?
brw-rw----. 1 root disk 259, 0 Sep 27 13:26 /dev/nvme0n1
brw-rw----. 1 root disk 259, 1 Sep 27 13:26 /dev/nvme1n1
brw-rw----. 1 root disk 259, 5 Sep 27 14:00 /dev/nvme2n1
brw-rw----. 1 root disk 259, 7 Sep 27 14:00 /dev/nvme2n2
brw-rw----. 1 root disk 259, 9 Sep 27 14:00 /dev/nvme2n3
brw-rw----. 1 root disk 259, 11 Sep 27 14:00 /dev/nvme2n4
Red Hat Insights Tech Seminar - LT: RHEL8.0でNVME-oFを設定してみた16
ストレージ区画の作成
Red Hat Insights Tech Seminar - LT: RHEL8.0でNVME-oFを設定してみた17
■ 各NVMEoFストレージにパーティションを作成する
# fdisk /dev/nvme2n1
:
以下、各ディスクに対して繰り返し
■ md-raid0ボリュームの作成
# mdadm -C /dev/md0 -c 128 -l 0 -n 4 /dev/nvme2n?p1
# mdadm --detail --scan > /etc/mdadm.conf
■ md-raid0ボリューム上にパーティションを作成しExt4ファイルシステムで初期化
# fdisk /dev/md0
# mkfs.ext4 -L NVMEOF_DISK /dev/md0p1
■ /etc/fstabへエントリを追加
# vi /etc/fstab
:
LABEL=NVMEOF_DISK /nvme ext4 nofail 0 0
※ “nofail” を指定しないと、起動時にマウントを失敗し、エラーと判断されてしまう。
▼ここまで来たら、単なるローカルブロックデバイスと同じ
参考)NVMEoFボリュームの切り離し手順
▌NVMEoFクライアント側
# umount /nvme
# mdadm --misc --stop /dev/md0
# nvme disconnect -d /dev/nvme0
# nvme disconnect -d /dev/nvme1
▌NVMEoFターゲット側
# rm -f /sys/kernel/config/nvmet/ports/*/subsystems/*
# rmdir /sys/kernel/config/nvmet/ports/*
# rmdir /sys/kernel/config/nvmet/subsystems/*/namespaces/*
# rmdir /sys/kernel/config/nvmet/subsystems/*
Red Hat Insights Tech Seminar - LT: RHEL8.0でNVME-oFを設定してみた18
動作確認(1/2)
CPU: Xeon
Gold 6126T
CPU: Xeon
E5-2650v4
GPU: NVIDIA TESLA V100
SSD: Intel DC P4600
SSD: Intel DC P4600
NIC: Mellanox ConnextX-5
NIC: Mellanox ConnextX-5
GPU: NVIDIA TESLA P40
x16
x8
x8
x16
SSD: Samsung PRO960
SSD: Samsung PRO960
SSD: Samsung PRO960
SSD: Samsung PRO960
RiserBoard
x16
x16
x8
192.168.80.100
192.168.80.104
/dev/md1
/dev/nvme2n1
/dev/nvme2n2
/dev/nvme2n3
/dev/nvme2n4
どうせPCIe x8スロットで
詰まるので、性能測定と
しては無意味な事に留意
Red Hat Insights Tech Seminar - LT: RHEL8.0でNVME-oFを設定してみた19
動作確認(2/2)
▌リモートNVME-SSD ➔ 100G-NIC ➔ 100G-NIC ➔ ローカルGPU
# ssd2gpu_test /mnt/90GB
GPU[0] Tesla P40 - file: /mnt/90GB, i/o size: 86.02GB, buffer 32MB x 6
read: 86.02GB, time: 13.91sec, throughput: 6.18GB/s
nr_ram2gpu: 0, nr_ssd2gpu: 22548480, average DMA size: 128.0KB
▌iostat -m 2
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 2.72 0.00 0.00 97.28
Device tps MB_read/s MB_wrtn/s MB_read MB_wrtn
nvme0n1 0.00 0.00 0.00 0 0
nvme1n1 0.00 0.00 0.00 0 0
nvme2n1 12679.50 1584.94 0.00 3169 0
nvme2n2 12679.50 1584.88 0.00 3169 0
nvme2n3 12682.00 1584.94 0.00 3169 0
md126 50719.50 6339.56 0.00 12679 0
nvme2n4 12681.00 1585.12 0.00 3170 0
Red Hat Insights Tech Seminar - LT: RHEL8.0でNVME-oFを設定してみた20
ログ収集デーモン:
『一緒にやってみたい!』方、ぜひお気軽にお声がけください
Red Hat Insights Tech Seminar - LT: RHEL8.0でNVME-oFを設定してみた21
NVME-oFやGPUDirectなど最新技術をブチ込んで、IoT/M2Mログ処理向けに
処理能力100GB/s級のデータ処理基盤を作ろうとしています。
Manufacturing Logistics Mobile Home electronics
JBoF: Just Bunch of Flash
NVME-over-Fabric
(RDMA)
DB管理者
BIツール(可視化)
機械学習アプリケーション
(E.g, 異常検知など)
共通データ
フレーム PG-Strom
20190926_Try_RHEL8_NVMEoF_Beta