Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

シングルルート I/O 仮想化(SR-IOV)の設定

概要:SR-IOV の設定

Contrail Networkingは、UbuntuシステムとRed Hat Enterprise Linux(RHEL)オペレーティングシステムでもシングルルートI/O仮想化(SR-IOV)をサポートしています。

SR-IOV は、PCI Express(PCIe)仕様のインターフェイス拡張です。SR-IOV を使用すると、ネットワーク アダプターなどのデバイスは、さまざまなハードウェア機能間でそのリソースに個別にアクセスできます。

たとえば、データ プレーン開発キット (DPDK) ライブラリには、複数のネットワーク インターフェイス カード (NIC) のユーザー空間で実行されるドライバーが含まれています。ただし、アプリケーションが仮想マシン (VM) 内で実行されている場合は、NIC で SR-IOV が有効になっていない限り、物理 NIC は表示されません。

このトピックでは、Contrail NetworkingシステムでSR-IOVを設定する方法について説明します。

BIOS での ASPM の有効化

SR-IOV を使用するには、PCI Express (PCIe) デバイスに対してアクティブ状態電源管理 (ASPM) が有効になっている必要があります。システム BIOS で ASPM を有効にします。

メモ:

システムの BIOS を、ASPM を有効にできるバージョンにアップグレードする必要がある場合があります。

Ansible導入機能を使用したSR-IOVの設定

システムで SR-IOV を使用可能にするには、以下のタスクを実行する必要があります。

  1. Linux でインテル入力/出力メモリー管理ユニット (IOMMU) を有効にします。

  2. 選択した NIC で必要な数の仮想関数 (VF) を有効にします。

  3. VM が VF とインターフェイスできる物理ネットワークの名前を構成します。

  4. Nova コンピューティングを再起動します。

  5. 次の例のように、新しい PCI 設定に基づいて Nova スケジューラフィルターを設定します。

  6. Nova スケジューラを再起動します。

上記のタスクは、Ansible Deployer プレイブックによって処理されます。クラスター・メンバーとその構成パラメーターは、ansibleデプロイヤー・リポジトリー内の構成ディレクトリーにある instances.yaml ファイルで指定されます。

SR-IOV モードにするコンピューティング インスタンスには、SR-IOV 構成が必要です。次の instance.yaml スニペットは、インスタンス定義のサンプルを示しています。

Helm を使用した SR-IOV の設定

システムで SR-IOV を使用可能にするには、以下のタスクを実行する必要があります。

  1. Linux でインテル入力/出力メモリー管理ユニット (IOMMU) を有効にします。

  2. 選択した NIC で必要な数の仮想関数 (VF) を有効にします。

  3. VM が VF とインターフェイスできる物理ネットワークの名前を構成します。

  4. Nova コンピューティングを再起動します。

  5. 次の例のように、新しい PCI 設定に基づいて Nova スケジューラフィルターを設定します。

  6. Nova スケジューラを再起動します。

上記のタスクは、Helm チャートによって処理されます。クラスターメンバーとその設定パラメータは、openstack-helm-infra リポジトリ内の設定ディレクトリにある マルチノードインベントリ ファイルで指定されます。

Helm の場合、構成および SR-IOV 環境固有のパラメーターは、次の 3 つの異なる場所で更新する必要があります。

  • コンピューティング インスタンスは、contrail-vrouter-sriov として設定する必要があります。

    例えば、以下は openstack-helm-infra リポジトリにある tools/gate/devel/multinode-inventory.yaml ファイルの抜粋です。

  • Contrail-vrouter-sriovには、適切なラベルを付ける必要があります。

    例えば、以下は openstack-helm-infra リポジトリにある tools/gate/devel/multinode-vars.yaml からの抜粋です。

  • SR-IOV の設定パラメーターは、 contrail-vrouter/values.yaml ファイルで更新する必要があります。

    たとえば、以下は contrail-helm-deployer リポジトリにある contrail-vrouter/values.yaml ファイルの抜粋です。

SR-IOV 仮想マシンの起動

システムで SR-IOV 機能が有効になっていることを確認したら、次のいずれかの手順を使用して、Contrail Web UI または CLI を使用して、SR-IOV VM を起動する仮想ネットワークを作成します。両方のメソッドが含まれています。

Contrail Web UI を使用した SR-IOV 仮想マシンの有効化と起動

Contrail Web UI を使用して SR-IOV VM を有効にして起動するには、次の手順に従います。

  1. [ > ネットワーク > ネットワークの構成] で、SR-IOV を有効にして仮想ネットワークを作成します。仮想ネットワークがサブネットがアタッチされて作成されていることを確認します。[詳細設定] セクションで、[ プロバイダー ネットワーク] チェック ボックスをオンにし、SR-IOV に対して既に有効になっている物理ネットワーク (または testbed.py nova.conf) とその VLAN ID を指定します。 図1を参照してください。

    図1:ネットワーク Edit Networkの編集
  2. 仮想ネットワークで、Neutron ポート (> ネットワーク > ポートの構成) を作成し、[ポート バインド] セクションで、SR-IOV の [キー] 値と [直接] の値を定義します。図2を参照してください。

    図 2: ポート Create Portの作成
  3. 作成した Neutron ポートの UUID を使用して、 nova boot そのポートから VM を起動します。

    nova boot --flavor m1.large --image <image name> --nic port-id=<uuid of above port> <vm name>

CLI を使用した SR-IOV 仮想マシンの有効化および起動

CLI を使用して SR-IOV VM を有効にして起動するには、次の手順に従います。

  1. SR-IOV を有効にして仮想ネットワークを作成します。SR-IOV に対して既に有効になっている物理ネットワーク(in testbed.py nova.confまたは)とその VLAN ID を指定します。

    次の例では、VLAN ID が 100 で、 vn1 の一部となっています physnet1

    neutron net-create --provider:physical_network=physnet1 --provider:segmentation_id=100 vn1

  2. vn1 でサブネットを作成します。

    neutron subnet-create vn1 a.b.c.0/24

  3. 仮想ネットワークで、バインドの種類が direct のサブネット上に Neutron ポートを作成します。

    neutron port-create --fixed-ip subnet_id=<subnet uuid>,ip_address=<IP address from above subnet> --name <name of port> <vn uuid> --binding:vnic_type direct

  4. 作成した Neutron ポートの UUID を使用して、 nova boot そのポートから VM を起動します。

    nova boot --flavor m1.large --image <image name> --nic port-id=<uuid of above port> <vm name>

  5. VM にログインし、コマンドを使用して PCI バスを一覧表示し、イーサネット コントローラーが VF lspci であることを確認します。

    VLANで構成されるVFは、コマンドを使用して ip link 監視できます。