17 NVMe over Fabric #
この章では、NVMe over Fabricホストおよびターゲットの設定方法について説明します。
17.1 概要 #
NVM Express (NVMe)は、不揮発性ストレージ(通常はSSDディスク)にアクセスするためのインタフェース規格です。NVMeはSATAをはるかに上回る処理速度をサポートし、レイテンシも低くなります。
NVMe over Fabricは、RDMA、TCP、NVMe over Fibre Channel (FC-NVMe)などの異なるネットワーキングファブリックを介してNVMeストレージにアクセスするためのアーキテクチャです。NVMe over Fabricの機能はiSCSIと同様です。耐障害性を向上させるため、NVMe over Fabricにはマルチパスのサポートが組み込まれています。NVMe over Fabricマルチパスは、従来のデバイスマッパーマルチパスに基づいていません。
NVMeホストは、NVMeターゲットに接続するマシンです。NVMeターゲットは、そのNVMeブロックデバイスを共有するマシンです。
NVMeはSUSE Linux Enterprise Server 15 SP4でサポートされています。NVMeブロックストレージおよびNVMe over Fabricターゲットとホストには、専用のカーネルモジュールが用意されています。
ご使用のハードウェアに関する特別な考慮事項があるかどうかを確認するには、17.4項 「特定のハードウェアの設定」を参照してください。
17.2 NVMe over Fabricホストの設定 #
NVMe over Fabricを使用するには、サポートされているネットワーキング方法のいずれかでターゲットを使用可能にする必要があります。NVMe over Fibre Channel、TCP、およびRDMAがサポートされています。以降のセクションでは、NVMe over FabricホストをNVMeターゲットに接続する方法について説明します。
17.2.1 コマンドラインクライアントのインストール #
NVMe over Fabricを使用するには、nvme
コマンドラインツールが必要です。インストールするには、zypper
を実行します。
>
sudo
zypper in nvme-cli
すべての使用可能なサブコマンドを一覧にするには、nvme --help
を使用します。nvme
サブコマンド用のマニュアルページが提供されています。man nvme-SUBCOMMAND
を実行すると、このページを参照できます。たとえば、discover
サブコマンドのマニュアルページを参照するには、man nvme-discover
を実行します。
17.2.2 NVMe over Fabricターゲットの検出 #
NVMe over Fabricターゲットで使用可能なNVMeサブシステムを一覧にするには、検出コントローラのアドレスとサービスIDが必要です。
>
sudo
nvme discover -t TRANSPORT -a DISCOVERY_CONTROLLER_ADDRESS -s SERVICE_ID
TRANSPORTは、基盤となる転送メディア(loop
、rdma
、tcp
、またはfc
)で置き換えます。DISCOVERY_CONTROLLER_ADDRESSは、検出コントローラのアドレスで置き換えます。RDMAおよびTCPの場合、これはIPv4アドレスである必要があります。SERVICE_IDは、転送サービスIDで置き換えます。RDMAまたはTCPのように、サービスがIPベースの場合、サービスIDはポート番号を指定します。ファイバチャネルの場合、サービスIDは必要ありません。
NVMeホストは、接続が許可されているサブシステムのみを参照します。
例:
>
sudo
nvme discover -t tcp -a 10.0.0.3 -s 4420
詳細については、man nvme-discover
を参照してください。
17.2.3 NVMe over Fabricターゲットへの接続 #
NVMeサブシステムを特定した後で、nvme connect
コマンドを使用して接続できます。
>
sudo
nvme connect -t transport -a DISCOVERY_CONTROLLER_ADDRESS -s SERVICE_ID -n SUBSYSTEM_NQN
TRANSPORTは、基盤となる転送メディア(loop
、rdma
、tcp
、またはfc
)で置き換えます。DISCOVERY_CONTROLLER_ADDRESSは、検出コントローラのアドレスで置き換えます。RDMAおよびTCPの場合、これはIPv4アドレスである必要があります。SERVICE_IDは、転送サービスIDで置き換えます。RDMAまたはTCPのように、サービスがIPベースの場合、これはポート番号を指定します。SUBSYSTEM_NQNは、検出コマンドによって検出された、目的のサブシステムのNVMe修飾名で置き換えます。NQNは、NVMe修飾名(NVMe Qualified Name)の略語です。NQNは固有である必要があります。
例:
>
sudo
nvme connect -t tcp -a 10.0.0.3 -s 4420 -n nqn.2014-08.com.example:nvme:nvm-subsystem-sn-d78432
または、nvme connect-all
を使用して、すべての検出されたネームスペースに接続します。高度な使用法については、man nvme-connect
およびman nvme-connect-all
を参照してください。
パスが失われると、NVMeサブシステムでは、nvme connect
コマンドのctrl-loss-tmo
オプションで定義された時間、再接続しようとします。この時間(デフォルト値は600秒)が経過した後、パスは削除され、ブロックレイヤ(ファイルシステム)の上位レイヤ(ファイルシステム)に通知されます。デフォルトでは、ファイルシステムは、読み取り専用にマウントされます。これは通常望ましい動作ではありません。したがって、NVMeサブシステムが制限なしで再接続を試行し続けるようにctrl-loss-tmo
オプションを設定することをお勧めします。そのためには、次のコマンドを実行します。
>
sudo
nvme connect --ctrl-loss-tmo=-1
NVMe over Fabricsサブシステムを起動時に使用できるようにするには、ホストに/etc/nvme/discovery.conf
ファイルを作成し、パラメータをdiscover
コマンドに渡します(17.2.2項 「NVMe over Fabricターゲットの検出」を参照)。たとえば、次のようにdiscover
コマンドを使用します。
>
sudo
nvme discover -t tcp -a 10.0.0.3 -s 4420
discover
コマンドのパラメータを/etc/nvme/discovery.conf
ファイルに追加します。
echo "-t tcp -a 10.0.0.3 -s 4420" | sudo tee -a /etc/nvme/discovery.conf
次に、
サービスを有効にします。>
sudo
systemctl enable nvmf-autoconnect.service
17.2.4 マルチパス処理 #
NVMeネイティブマルチパス処理はデフォルトで有効になっています。コントローラID設定のCMIC
オプションが設定されている場合、NVMeスタックはNVMEドライブをデフォルトでマルチパスデバイスとして認識します。
マルチパスを管理するには、以下を使用できます。
nvme list-subsys
マルチパスデバイスのレイアウトを印刷します。
multipath -ll
コマンドには互換性モードがあり、NVMeマルチパスデバイスを表示します。
nvme-core.multipath=N
オプションがブートパラメータとして追加されると、NVMeネイティブマルチパスが無効になります。
iostat
を使用する
iostat
コマンドを実行しても、nvme list-subsys
でリストされるすべてのコントローラが表示されない場合があります。デフォルトでは、iostat
は、I/Oのないブロックデバイスのすべてをフィルタして排除します。iostat
ですべてのデバイスを表示するには、次のコマンドを使用します。
iostat -p ALL
17.3 NVMe over Fabricターゲットの設定 #
17.3.1 コマンドラインクライアントのインストール #
NVMe over Fabricターゲットを設定するには、nvmetcli
コマンドラインツールが必要です。インストールするには、zypper
を実行します。
>
sudo
zypper in nvmetcli
nvmetcli
の現在のドキュメントはhttp://git.infradead.org/users/hch/nvmetcli.git/blob_plain/HEAD:/Documentation/nvmetcli.txtから入手できます。
17.3.2 設定手順 #
次の手順に、NVMe over Fabricターゲットの設定方法の例を示します。
設定はツリー構造で格納されます。移動するには、cd
コマンドを使用します。オブジェクトを一覧にするには、ls
を使用します。create
を使用して新しいオブジェクトを作成できます。
nvmetcli
インタラクティブシェルを起動します。>
sudo
nvmetcli
新しいポートを作成します。
(nvmetcli)>
cd ports
(nvmetcli)>
create 1
(nvmetcli)>
ls 1/
o- 1 o- referrals o- subsystemsNVMeサブシステムを作成します。
(nvmetcli)>
cd /subsystems
(nvmetcli)>
create nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82
(nvmetcli)>
cd nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82/
(nvmetcli)>
ls
o- nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82 o- allowed_hosts o- namespaces新しいネームスペースを作成し、そのネームスペースにNVMeデバイスを設定します。
(nvmetcli)>
cd namespaces
(nvmetcli)>
create 1
(nvmetcli)>
cd 1
(nvmetcli)>
set device path=/dev/nvme0n1
Parameter path is now '/dev/nvme0n1'.以前に作成したネームスペースを有効にします。
(nvmetcli)>
cd ..
(nvmetcli)>
enable
The Namespace has been enabled.作成したネームスペースを表示します。
(nvmetcli)>
cd ..
(nvmetcli)>
ls
o- nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82 o- allowed_hosts o- namespaces o- 1すべてのホストがサブシステムを使用できるようにします。この操作は、セキュリティ保護された環境でのみ実行します。
(nvmetcli)>
set attr allow_any_host=1
Parameter allow_any_host is now '1'.または、特定のホストのみが接続できるようにします。
(nvmetcli)>
cd nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82/allowed_hosts/
(nvmetcli)>
create hostnqn
すべての作成されたオブジェクトを一覧にします。
(nvmetcli)>
cd /
(nvmetcli)>
ls
o- / o- hosts o- ports | o- 1 | o- referrals | o- subsystems o- subsystems o- nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82 o- allowed_hosts o- namespaces o- 1TCPを介してターゲットを使用できるようにします。RDMAには
trtype=rdma
を使用します。(nvmetcli)>
cd ports/1/
(nvmetcli)>
set addr adrfam=ipv4 trtype=tcp traddr=10.0.0.3 trsvcid=4420
Parameter trtype is now 'tcp'. Parameter adrfam is now 'ipv4'. Parameter trsvcid is now '4420'. Parameter traddr is now '10.0.0.3'.または、ファイバチャネルを介して使用可能にすることができます。
(nvmetcli)>
cd ports/1/
(nvmetcli)>
set addr adrfam=fc trtype=fc traddr=nn-0x1000000044001123:pn-0x2000000055001123 trsvcid=none
サブシステムをポートにリンクします。
(nvmetcli)>
cd /ports/1/subsystems
(nvmetcli)>
create nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82
dmesg
を使用してポートが有効になっていることを確認できるようになりました。#
dmesg ... [ 257.872084] nvmet_tcp: enabling port 1 (10.0.0.3:4420)
17.3.3 ターゲット設定のバックアップと復元 #
次のコマンドを使用してJSONファイルにターゲット設定を保存できます。
>
sudo
nvmetcli
(nvmetcli)>
saveconfig nvme-target-backup.json
設定を復元するには、次のコマンドを使用します。
(nvmetcli)>
restore nvme-target-backup.json
現在の設定を消去することもできます。
(nvmetcli)>
clear
17.4 特定のハードウェアの設定 #
17.4.1 概要 #
一部のハードウェアでは、正しく動作させるために特殊な設定が必要です。次の各セクションの見出しを参照し、記載されているデバイスまたはベンダのいずれかに該当しないか確認してください。
17.4.2 Broadcom #
Broadcom Emulex LightPulse Fibre Channel SCSIドライバを使用している場合は、lpfc
モジュールのターゲットおよびホスト上にカーネル設定パラメータを追加します。
>
sudo
echo "options lpfc lpfc_enable_fc4_type=3" > /etc/modprobe.d/lpfc.conf
Broadcomアダプタファームウェアのバージョンが11.4.204.33以降であることを確認します。現在のバージョンのnvmetcli、nvme-cli、およびカーネルがインストールされていることも確認してください。
ファイバチャネルポートをNVMeターゲットとして有効にするには、追加のモジュールパラメータを設定する必要があります。たとえば、lpfc_enable_nvmet= COMMA_SEPARATED_WWPNS
と指定します。先行する0x
とともにWWPNを入力します。たとえば、lpfc_enable_nvmet=0x2000000055001122,0x2000000055003344
と指定します。一覧表示されているWWPNのみがターゲットモードに設定されます。ファイバチャネルポートは、ターゲットまたはイニシエータとして設定できます。
17.4.3 Marvell #
FC-NVMeは、QLE269xおよびQLE27xxアダプタでサポートされています。FC-NVMeのサポートは、Marvell® QLogic® QLA2xxxファイバチャネルドライバでデフォルトで有効になっています。
NVMeが有効になっていることを確認するには、次のコマンドを実行します。
>
cat /sys/module/qla2xxx/parameters/ql2xnvmeenable
結果の1
は、NVMeが有効になっていることを示し、0
は無効になっていることを示します。
次に、Marvellアダプタファームウェアが少なくともバージョン8.08.204であることを次のコマンドの出力をチェックして確認します。
>
cat /sys/class/scsi_host/host0/fw_version
最後に、SUSE Linux Enterprise Serverに対して使用可能なQConvergeConsoleCLI、nvme-cli、およびカーネルの最新バージョンがインストールされていることを確認します。たとえば、次を実行して
#
zypper lu && zypper pchk
更新とパッチを確認します。
インストールに関する詳細については、次のMarvellユーザガイドのFC-NVMeのセクションを参照してください。
17.5 詳細情報 #
nvme
コマンドの機能の詳細については、nvme nvme-help
を参照してください。
次のリンクには、NVMeおよびNVMe over Fabricの概要があります。