Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20190926_Try_RHEL8_NVMEoF_Beta

447 views

Published on

RHEL8.0でNVME-oFを設定してみました。やってみた系。

Published in: Technology
  • Be the first to comment

20190926_Try_RHEL8_NVMEoF_Beta

  1. 1. Red Hat Enterprise Linux 8.0 で NVME-over-Fabricを設定してみた HeteroDB Chief Architect & CEO KaiGai Kohei <kaigai@heterodb.com> #やってみた系
  2. 2. 何をやってる人ですか? 『@kkaigai』 ⇩ 『固定されたツイート』 ⇩ 9/25(水) DB Tech Showcase Tokyo 2019 【発表資料】 PostgreSQLをどこまで高速化できるか ~ハードウェアの限界に挑むPG-Stromの挑戦~ Red Hat Insights Tech Seminar - LT: RHEL8.0でNVME-oFを設定してみた2
  3. 3. みんな大好き NVME-SSD Red Hat Insights Tech Seminar - LT: RHEL8.0でNVME-oFを設定してみた3
  4. 4. みんな知ってる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
  5. 5. ストレージ容量の上限はシャーシの大きさに規定される…? イマドキの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 システム導入時に、 データサイズの上限を 正確に予想できるか…?
  6. 6. 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
  7. 7. #やってみた Red Hat Insights Tech Seminar - LT: RHEL8.0でNVME-oFを設定してみた7
  8. 8. 実験環境(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
  9. 9. 実験環境(2/2) Red Hat Insights Tech Seminar - LT: RHEL8.0でNVME-oFを設定してみた9
  10. 10. 目標とする構成 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
  11. 11. 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 注意:ホスト単位で許可を出す事もできるようだ。
  12. 12. 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 ではデバイス名を認識してくれなかった。
  13. 13. 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
  14. 14. 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
  15. 15. 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
  16. 16. 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
  17. 17. ストレージ区画の作成 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” を指定しないと、起動時にマウントを失敗し、エラーと判断されてしまう。 ▼ここまで来たら、単なるローカルブロックデバイスと同じ
  18. 18. 参考)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
  19. 19. 動作確認(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
  20. 20. 動作確認(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
  21. 21. ログ収集デーモン: 『一緒にやってみたい!』方、ぜひお気軽にお声がけください 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

×