7 ファイバ・チャネル経由のNVMeストレージの操作

Oracle Linuxでは、Non-volatile Memory Express over Fibre Channel (NVMe/FC)プロトコルを使用して、ファイバ・チャネル・ネットワーク経由でホストおよびNVMeソリッド・ステート・ストレージ・デバイスを管理します。NVMe/FCが有効なホスト・バス・アダプタ(HBA)を持つマシンで実行されているOracle Linuxは、ファイバ・ネットワークに接続されたNVMe SSDデバイスを検出して接続できます。nvme-cliパッケージの一部である様々なnvmeコマンドを使用して、これらのアダプタを介してホストからこれらのSSDデバイスへの接続を確立できます。nvme-cliは、Oracle Linuxで使用可能なNVMeストレージCLIユーティリティです。

この章では、ファイバ・チャネル・ネットワーク経由でリモートNVMe SSDデバイスに接続するための特定のBroadcom EmulexやMarvell Qlogicファイバ・チャネル・アダプタなどのHBAデバイスの構成に関する手順について説明します。

NVMe/FCデバイスについて

NVMe/FCは、ファイバ・チャネル・ネットワーク上のNVMeホストおよびNVMe SSDストレージ・デバイスを管理するためのプロトコルです。NVMe/FCには、光ファイバ・ケーブル配線、NVMe/FC対応のインタフェース・アダプタ、NVMe/FC対応のネットワーク・スイッチなどのインフラストラクチャが必要です。ファイバ・チャネル・ネットワークは、通常、iSCSIと比べてスループットが向上し、レイテンシが短縮され、パフォーマンスが向上します。

ホスト(NVMeイニシエータと呼ばれることが多い)は、ファイバ・チャネル・ネットワーク経由でストレージ・ターゲットにアクセスします。ホストは、サーバー、VM、またはリモートNVMe/FCストレージへのアクセス・リクエストを開始できるNVMe/FCアダプタまたはソフトウェア・スタックが装備されている任意のデバイスです。NVMeイニシエータには、ストレージがローカルにアタッチされているように見えます。

NVMeイニシエータおよびターゲットは、NVMeアダプタである専用のNVMe HBAを、ファイバ・チャネル・ネットワークに接続するポートとともに使用します。

イニシエータとターゲットを表すnvme connectコマンドのパラメータには、次のものがあります:

  • host-traddr: このパラメータは、ホスト・トランスポート・アドレスを指定し、イニシエータのアドレスを参照します。アドレスまたは識別子は、ファイバ・チャネル・ファブリックへの接続に使用するホストのファイバ・チャネルHBAポートです。このポートは通常、ローカル・ポートと呼ばれます。
  • traddr: このパラメータは、トランスポート・アドレスを指定し、1つ以上のNVMe SSDストレージ・デバイスをホストするターゲット・サーバーまたはコントローラのアドレスを参照します。このポートは通常、リモート・ポートと呼ばれます。
ローカル・ポート・アドレスとリモート・ポート・アドレスは、次の要素を組み合せたものです:
  • World Wide Namespace Name (WWNN): これは、NVMeサブシステム内の各ネームスペースに割り当てられたグローバル一意識別子です。NVMeプロトコルは、コマンドを正しいネームスペースにルーティングするときにWWNNを使用します。
  • World Wide Namespace Port (WWNP): これは、ネームスペースへのアクセスに使用するポートを指定するグローバル一意識別子です。NVMeプロトコルは、WWNPを使用して、コマンドを適切なネームスペース・デバイスにルーティングします。

ローカル・ポート・アドレスとリモート・ポート・アドレスの組合せを問い合せると、NVMeストレージ・デバイスを表す使用可能なターゲット・ネームスペースを検出できます。ストレージ・デバイスのネームスペースを特定したら、ローカル・ポート・アドレスとリモート・ポート・アドレスをデバイスのネームスペースと組み合せて、ホストをターゲットNVMeストレージ・デバイスに接続できます。

NVMe仕様の詳細は、https://nvmexpress.org/specifications/を参照してください。

NVMe/FCストレージ・アダプタの互換性

NVMe/FC検出および切断機能は、次のドキュメントに記載されているファイバ・チャネル・ストレージ・アダプタと互換性があります: https://linux.oracle.com/Component_Compatibility_Guide.pdf

NVMe-CLIのインストールおよびホスト・ネームスペースの識別

次の手順では、nvme-cli NVMe CLIユーティリティをインストールし、ホスト・ネームスペースを識別する方法について説明します。

  1. ホストで、nvme-cliコマンドライン・ユーティリティを開きます:

    sudo dnf install nvme-cli
  2. ホストにネームスペースが存在することを確認します:
    nvme show-hostnqn

    ノート:

    または、nvme-cliのインストール時に作成された/etc/nvme/hostnqnファイルにネームスペースがあります。

Broadcomホストからのターゲットの検出および接続

次の手順では、Broadcom Emulexファイバ・チャネル・アダプタを使用して、Oracle LinuxホストからNVMe/FCターゲットを検出して接続する方法について説明します。

  1. /sys/class/scsi_host/host*/nvme_infoディレクトリのローカル・ポートおよびリモート・ポートのWWNNおよびWWPNを特定します。たとえば、1つのローカル・ポートと2つのリモート・ポートを持つホストを次に示します:

    cat /sys/class/scsi_host/host*/nvme_info
    
    NVME Initiator Enabled
    XRI Dist lpfc1 Total 6144 IO 5894 ELS 250
    NVME LPORT lpfc1 WWPN x100000109adcbefh WWNN x200000109adcbefh DID x000000 UNKNOWN
    
    NVME Statistics
    LS: Xmt 0000000000 Cmpl 0000000000 Abort 00000000
    LS XMIT: Err 00000000  CMPL: xb 00000000 Err 00000000
    Total FCP Cmpl 0000000000000000 Issue 0000000000000000 OutIO 0000000000000000
            abort 00000000 noxri 00000000 nondlp 00000000 qdepth 00000000 wqerr 00000000 err 00000000
    FCP CMPL: xb 00000000 Err 00000000
    
    NVME Initiator Enabled
    XRI Dist lpfc0 Total 6144 IO 5894 ELS 250
    NVME LPORT lpfc0 WWPN x100000109acfgcad WWNN x200000109acfgcad DID x011700 ONLINE
    NVME RPORT       WWPN x2015c146dc13a14b WWNN x2014c146dc13a14b DID x011307 TARGET DISCSRVC ONLINE
    NVME RPORT       WWPN x2016c146dc13a14b WWNN x2014c146dc13a14b DID x011105 TARGET DISCSRVC ONLINE
    
    NVME Statistics
    LS: Xmt 0000000028 Cmpl 0000000028 Abort 00000000
    LS XMIT: Err 00000000  CMPL: xb 00000000 Err 00000000
    Total FCP Cmpl 00000000000019fa Issue 00000000000019fa OutIO 0000000000000000
            abort 00000005 noxri 00000000 nondlp 00000000 qdepth 00000000 wqerr 00000000 err 00000000
    FCP CMPL: xb 00000005 Err 00000005
  2. ローカル・ポートとリモート・ポートの1つからWWPNとWWNNの組合せに、次の形式の変更を適用します。
    • すべてのWWPNについて、アドレスの先頭にnp-0を追加します。
    • すべてのWWNNについて、アドレスの先頭にnn-0を追加します。
    たとえば、次のようにします。
    LPORT WWNN nn-0x200000109acfgcad WWPN pn-0x100000109acfgcad
    RPORT WWNN nn-0x2014c146dc13a14b WWPN pn-0x2015c146dc13a14b
  3. 検出コマンドを実行して、リモート・ポートで使用可能なNVMe SSDデバイスを特定します。次のコマンド形式を使用します:
    nvme discover --transport fc --traddr <rportwwnn>:<rportwwnp> --host-traddr <lportwwnn>:<lportwwnp>

    前述の<rportwwnn>および<rportwwnp>はリモート・ポートのworld wide namespace nameとportで、<rportwwnn>および<rportwwnp>はローカルのworld wide namespace nameとportです。

    たとえば、次のコマンド
    # nvme discover --transport fc --traddr nn-0x2014c146dc13a14b:pn-0x2015c146dc13a14b --host-traddr nn-0x200000109acfgcad:pn-0x100000109acfgcad
    
    Discovery Log Number of Records 1, Generation counter 2
    =====Discovery Log Entry 0======
    trtype:  fc
    adrfam:  fibre-channel
    subtype: nvme subsystem
    treq:    not specified
    portid:  0
    trsvcid: none
    subnqn:  nqn.1432-01.com.netapp:sn.c44dd3bsce4245edc1adc021cb11a0f6:test_broadcom
    traddr:  nn-0x2014c146dc13a14b:pn-0x2015c146dc13a14b
  4. 検出の応答にリストされているsubnqnによって表されるデバイスへの接続を確立します。次のコマンド形式を使用します:
    nvme connect --transport fc --traddr <rportwwnn>:<rportwwnp> --host-traddr <lportwwnn>:<lportwwnp> -n <subnqn> -k <s>
    前述のコマンドでは、
    • <rportwwnn>および<rportwwnp>は、リモート・ポートのworld wide namespace nameとportです。
    • <rportwwnn>および<rportwwnp>は、ローカルのworld wide namespace nameとportです。
    • <subnqn>は、検出コマンドによって生成されたsubnqnパラメータの値です。
    • <s>は、コマンドがタイムアウト・メッセージを生成する前に、リモートのNVMeデバイスからの応答を待機するキープアライブ時間(秒)です。
    たとえば、次のコマンドは、5秒のタイマーを持つリモート・ポートへの接続を確立します。
    nvme connect --transport fc --traddr nn-0x2014c146dc13a14b:pn-0x2015c146dc13a14b --host-traddr nn-0x200000109acfgcad:pn-0x100000109acfgcad -n nqn.1432-01.com.netapp:sn.c44dd3bsce4245edc1adc021cb11a0f6:test_broadcom -k 5 
  5. ホストがストレージを使用できるようになったことを確認します。次に例を示します。
    nvme list -v
    Subsystem        Subsystem-NQN                                                                                    Controllers
    ---------------- ------------------------------------------------------------------------------------------------ ----------------
    nvme-subsys1     nqn.1432-01.com.netapp:sn.c44dd3bsce4245edc1adc021cb11a0f6:test_broadcom                             nvme1
    
    Device   SN                   MN                                       FR       TxPort Asdress        Slot   Subsystem    Namespaces
    -------- -------------------- ---------------------------------------- -------- ------ -------------- ------ ------------ ----------------
    nvme1    81EYIJSh2VMMAAAAAAAB NetApp ONTAP Controller                  FFFFFFFF fc     traddr nn-0x2014c146dc13a14b:pn-0x2015c146dc13a14b,host-traddr nn-0x200000109acfgcad:pn-0x100000109acfgcad    nvme-subsys1 nvme1n1
    
    Device       Generic      NSID       Usage                      Format           Controllers
    ------------ ------------ ---------- -------------------------- ---------------- ----------------
    /dev/nvme1n1 /dev/ng1n1   0x1        107.37  GB / 107.37  GB      4 KiB +  0 B   nvme1

Qlogicホストからのターゲットの検出および接続

次の手順では、Marvell Qlogicファイバ・チャネル・アダプタを使用して、Oracle LinuxホストからNVMe/FCターゲットを検出して接続する方法について説明します。

  1. qla2xxx Qlogicモジュールがインストールされ、ロードされていることを確認します。
    modprobe -r qla2xxx
    modprobe qla2xxx
  2. ローカルおよびリモート・ポートのWWNNおよびWWPNを特定します。次のコマンドを使用します。
    dmesg | grep traddr
    たとえば、1つのローカル・ポートと1つのリモート・ポートを持つホストを次に示します:
    dmesg | grep traddr
    
    [    6.139862] qla2xxx [0000:04:00.0]-ffff:0: register_localport: host-traddr=nn-0x200000109acfgcad:pn-0x100000109acfgcad on portID:10700
    [    6.241762] qla2xxx [0000:04:00.0]-2102:0: qla_nvme_register_remote: traddr=nn-0x2014c146dc13a14b:pn-0x2015c146dc13a14b PortID:01050d
  3. 検出コマンドを実行して、リモート・ポートで使用可能なNVMe SSDデバイスを特定します。次のコマンド形式を使用します:
    nvme discover --transport fc --traddr <rportwwnn>:<rportwwnp> --host-traddr <lportwwnn>:<lportwwnp>

    前述の<rportwwnn>および<rportwwnp>はリモート・ポートのworld wide namespace nameとportで、<rportwwnn>および<rportwwnp>はローカルのworld wide namespace nameとportです。

    たとえば、次のコマンド
    # nvme discover --transport fc --traddr nn-0x2014c146dc13a14b:pn-0x2015c146dc13a14b --host-traddr nn-0x200000109acfgcad:pn-0x100000109acfgcad
    
    Discovery Log Number of Records 1, Generation counter 2
    =====Discovery Log Entry 0======
    trtype:  fc
    adrfam:  fibre-channel
    subtype: nvme subsystem
    treq:    not specified
    portid:  0
    trsvcid: none
    subnqn:  nqn.1432-01.com.netapp:sn.c44dd3bsce4245edc1adc021cb11a0f6:test_qlogic
    traddr:  nn-0x2014c146dc13a14b:pn-0x2015c146dc13a14b
  4. 検出の応答にリストされているsubnqnによって表されるデバイスへの接続を確立します。次のコマンド形式を使用します:
    nvme connect --transport fc --traddr <rportwwnn>:<rportwwnp> --host-traddr <lportwwnn>:<lportwwnp> -n <subnqn> -k <s>
    前述のコマンドでは、
    • <rportwwnn>および<rportwwnp>は、リモート・ポートのworld wide namespace nameとportです。
    • <rportwwnn>および<rportwwnp>は、ローカルのworld wide namespace nameとportです。
    • <subnqn>は、検出コマンドによって生成されたsubnqnパラメータの値です。
    • <s>は、コマンドがタイムアウト・メッセージを生成する前に、リモートのNVMeデバイスからの応答を待機するキープアライブ時間(秒)です。
    たとえば、次のコマンドは、5秒のタイマーを持つリモート・ポートへの接続を確立します。
    nvme connect --transport fc --traddr nn-0x2014c146dc13a14b:pn-0x2015c146dc13a14b --host-traddr nn-0x200000109acfgcad:pn-0x100000109acfgcad -n nn-0x2014c146dc13a14b:pn-0x2015c146dc13a14b:test_qlogic -k 5 
  5. ホストがストレージを使用できるようになったことを確認します。次に例を示します。
    nvme list -v
    Subsystem        Subsystem-NQN                                                                                    Controllers
    ---------------- ------------------------------------------------------------------------------------------------ ----------------
    nvme-subsys1     nqn.1432-01.com.netapp:sn.c44dd3bsce4245edc1adc021cb11a0f6:test_qlogic                             nvme1
    
    Device   SN                   MN                                       FR       TxPort Asdress        Slot   Subsystem    Namespaces
    -------- -------------------- ---------------------------------------- -------- ------ -------------- ------ ------------ ----------------
    nvme1    81EYIJSh2VMMAAAAAAAB NetApp ONTAP Controller                  FFFFFFFF fc     traddr nn-0x2014c146dc13a14b:pn-0x2015c146dc13a14b,host-traddr nn-0x200000109acfgcad:pn-0x100000109acfgcad    nvme-subsys1 nvme1n1
    
    Device       Generic      NSID       Usage                      Format           Controllers
    ------------ ------------ ---------- -------------------------- ---------------- ----------------
    /dev/nvme1n1 /dev/ng1n1   0x1        107.37  GB / 107.37  GB      4 KiB +  0 B   nvme1