Red Hat Training

A Red Hat training course is available for RHEL 8

14.2. ネイティブ NVMe マルチパスの有効化

この手順では、ネイティブの NVMe マルチパスソリューションを使用して、接続された NVMe デバイスでマルチパスを有効にします。

前提条件

  • NVMe デバイスがシステムに接続されている。

    NVMe over fabric transports の接続の詳細は、「NVMe over fabric device の概要 」を参照してください。

手順

  1. カーネルでネイティブの NVMe マルチパスが有効になっているかどうかを確認します。

    # cat /sys/module/nvme_core/parameters/multipath

    このコマンドは、以下のいずれかを表示します。

    N
    ネイティブの NVMe マルチパスが無効になっている。
    Y
    ネイティブの NVMe マルチパスが有効になっている。
  2. ネイティブ NVMe マルチパスが無効になっている場合は、以下のいずれかの方法で有効にします。

    • カーネルオプションの使用

      1. カーネルコマンドラインに nvme_core.multipath=Y オプションを追加します。

        # grubby --update-kernel=ALL --args="nvme_core.multipath=Y"
      2. 64 ビット IBM Z アーキテクチャーで、起動メニューを更新します。

        # zipl
      3. システムを再起動します。
    • カーネルモジュール設定ファイルの使用:

      1. 以下の内容で /etc/modprobe.d/nvme_core.conf 設定ファイルを作成します。

        options nvme_core multipath=Y
      2. initramfs ファイルシステムをバックアップします。

        # cp /boot/initramfs-$(uname -r).img \
             /boot/initramfs-$(uname -r).bak.$(date +%m-%d-%H%M%S).img
      3. initramfs ファイルシステムを再構築 します。

        # dracut --force --verbose
      4. システムを再起動します。
  3. 必要に応じて、稼働中のシステムで NVMe デバイスの I/O ポリシーを変更して、利用可能なすべてのパスに I/O を配布します。

    # echo "round-robin" > /sys/class/nvme-subsystem/nvme-subsys0/iopolicy
  4. 必要に応じて、udev ルールを使用して、I/O ポリシーを永続的に設定します。以下の内容で /etc/udev/rules.d/71-nvme-io-policy.rules ファイルを作成します。

    ACTION=="add|change", SUBSYSTEM=="nvme-subsystem", ATTR{iopolicy}="round-robin"

検証

  1. システムが NVMe デバイスを認識していることを確認します。

    # nvme list
    
    Node             SN                   Model                                    Namespace Usage                      Format           FW Rev
    ---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
    /dev/nvme0n1     a34c4f3a0d6f5cec     Linux                                    1         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme0n2     a34c4f3a0d6f5cec     Linux                                    2         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
  2. 接続されたすべての NVMe サブシステムを一覧表示します。

    # nvme list-subsys
    
    nvme-subsys0 - NQN=testnqn
    \
     +- nvme0 fc traddr=nn-0x20000090fadd597a:pn-0x10000090fadd597a host_traddr=nn-0x20000090fac7e1dd:pn-0x10000090fac7e1dd live
     +- nvme1 fc traddr=nn-0x20000090fadd5979:pn-0x10000090fadd5979 host_traddr=nn-0x20000090fac7e1dd:pn-0x10000090fac7e1dd live
     +- nvme2 fc traddr=nn-0x20000090fadd5979:pn-0x10000090fadd5979 host_traddr=nn-0x20000090fac7e1de:pn-0x10000090fac7e1de live
     +- nvme3 fc traddr=nn-0x20000090fadd597a:pn-0x10000090fadd597a host_traddr=nn-0x20000090fac7e1de:pn-0x10000090fac7e1de live

    アクティブなトランスポートタイプを確認します。たとえば、nvme0 fc は、デバイスが Fibre Channel トランスポートで接続され、nvme tcp はデバイスが TCP 経由で接続されていることを示しています。

  3. カーネルオプションを編集した場合は、カーネルコマンドラインでネイティブの NVMe マルチパスが有効になっていることを確認します。

    # cat /proc/cmdline
    
    BOOT_IMAGE=[...] nvme_core.multipath=Y
  4. DM Multipath が、nvme0c3n1 を介して nvme0c0n1 を介して NVMe 名前空間を報告し、nvme 3n1 ではなく、nvme 0c 0n1 を報告する ことを確認します

    # multipath -ll | grep -i nvme
    
    uuid.8ef20f70-f7d3-4f67-8d84-1bb16b2bfe03 [nvme]:nvme0n1 NVMe,Linux,4.18.0-2
    | `- 0:0:1    nvme0c0n1 0:0     n/a   optimized live
    | `- 0:1:1    nvme0c1n1 0:0     n/a   optimized live
    | `- 0:2:1    nvme0c2n1 0:0     n/a   optimized live
      `- 0:3:1    nvme0c3n1 0:0     n/a   optimized live
    
    uuid.44c782b4-4e72-4d9e-bc39-c7be0a409f22 [nvme]:nvme0n2 NVMe,Linux,4.18.0-2
    | `- 0:0:1    nvme0c0n1 0:0     n/a   optimized live
    | `- 0:1:1    nvme0c1n1 0:0     n/a   optimized live
    | `- 0:2:1    nvme0c2n1 0:0     n/a   optimized live
      `- 0:3:1    nvme0c3n1 0:0     n/a   optimized live
  5. I/O ポリシーを変更した場合は、NVMe デバイスのアクティブな I/O ポリシーが ラウンドロビン であることを確認します。

    # cat /sys/class/nvme-subsystem/nvme-subsys0/iopolicy
    
    round-robin

関連資料