17.2. ネイティブ NVMe マルチパスの実現
nvme_core.multipath オプションのデフォルトのカーネル設定は N に設定されています。これは、ネイティブ Non-volatile Memory Express™ (NVMe™) マルチパスが無効であることを意味します。ネイティブ NVMe マルチパスソリューションを使用して、ネイティブ NVMe マルチパスを有効にすることができます。
前提条件
- NVMe デバイスがシステムに接続されていることを確認します。詳細は、NVMe over fabric デバイスの概要 を参照してください。
手順
カーネルでネイティブ NVMe マルチパスが有効になっているかどうかを確認します。
cat /sys/module/nvme_core/parameters/multipath
# cat /sys/module/nvme_core/parameters/multipathCopy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドは以下のいずれかを表示します。
N- ネイティブ NVMe マルチパスは無効です。
Y- ネイティブ NVMe マルチパスは有効です。
ネイティブ NVMe マルチパスが無効になっている場合は、次のいずれかの方法を使用して有効にします。
カーネルオプションの使用
nvme_core.multipath=Yオプションをコマンドラインに追加します。grubby --update-kernel=ALL --args="nvme_core.multipath=Y"
# grubby --update-kernel=ALL --args="nvme_core.multipath=Y"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 64 ビットの IBM Z アーキテクチャーでは、ブートメニューを更新します。
zipl
# ziplCopy to Clipboard Copied! Toggle word wrap Toggle overflow - システムを再起動します。
カーネルモジュール設定ファイルの使用
以下の内容で
/etc/modprobe.d/nvme_core.conf設定ファイルを作成します。options nvme_core multipath=Y
options nvme_core multipath=YCopy to Clipboard Copied! Toggle word wrap Toggle overflow initramfsファイルをバックアップします。cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).bak.$(date +%m-%d-%H%M%S).img
# cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).bak.$(date +%m-%d-%H%M%S).imgCopy to Clipboard Copied! Toggle word wrap Toggle overflow initramfsを再構築します。dracut --force --verbose
# dracut --force --verboseCopy to Clipboard Copied! Toggle word wrap Toggle overflow - システムを再起動します。
オプション: 実行中のシステムで、NVMe デバイスの I/O ポリシーを変更して、利用可能なすべてのパスに I/O を分散させます。
echo "round-robin" > /sys/class/nvme-subsystem/nvme-subsys0/iopolicy
# echo "round-robin" > /sys/class/nvme-subsystem/nvme-subsys0/iopolicyCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
udevルールを使用して I/O ポリシーを永続的に設定します。以下の内容で/etc/udev/rules.d/71-nvme-io-policy.rulesファイルを作成します。ACTION=="add|change", SUBSYSTEM=="nvme-subsystem", ATTR{iopolicy}="round-robin"ACTION=="add|change", SUBSYSTEM=="nvme-subsystem", ATTR{iopolicy}="round-robin"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
システムが NVMe デバイスを認識しているかどうかを確認します。次の例は、2 つの NVMe 名前空間を持つ NVMe over fabrics ストレージサブシステムが接続されていることを想定しています:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接続されているすべての NVMe サブシステムをリストアップします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow アクティブトランスポートタイプを確認します。例えば、
nvme0 fcはファイバーチャネルトランスポートで接続されていることを示し、nvme tcpは TCP で接続されていることを示しています。カーネルオプションを編集した場合は、カーネルコマンドラインでネイティブ NVMe マルチパスが有効になっているかどうかを確認します。
cat /proc/cmdline BOOT_IMAGE=[...] nvme_core.multipath=Y
# cat /proc/cmdline BOOT_IMAGE=[...] nvme_core.multipath=YCopy to Clipboard Copied! Toggle word wrap Toggle overflow I/O ポリシーを変更した場合は、NVMe デバイス上で
round-robinがアクティブな I/O ポリシーであるかどうかを確認します。cat /sys/class/nvme-subsystem/nvme-subsys0/iopolicy round-robin
# cat /sys/class/nvme-subsystem/nvme-subsys0/iopolicy round-robinCopy to Clipboard Copied! Toggle word wrap Toggle overflow