検索

12.8. Mellanox Virtual Function が割り当てられた仮想マシンのライブマイグレーション

download PDF

テクノロジープレビューとして、Mellanox ネットワークデバイスの Virtual Function (VF) が割り当てられた仮想マシン (VM) のライブマイグレーションを利用できます。現在、これは Mellanox CX-7 ネットワークデバイスを使用している場合にのみ可能です。Mellanox CX-7 ネットワークデバイス上の VF は、ライブマイグレーションに必要な機能を追加する新しい mlx5_vfio_pci ドライバーを使用します。この新しいドライバーは、libvirt によって VF に自動的にバインドされます。

制限事項

現在、Mellanox Virtual Function が割り当てられた仮想マシンをライブマイグレーションする場合、以下の仮想化機能を使用できません。

  • 仮想マシンのダーティーメモリーページレート生成の計算
  • コピー後のライブマイグレーションの使用
  • 仮想マシンでの仮想 I/O Memory Management Unit (vIOMMU) デバイスの使用
重要

この機能は RHEL 9 に テクノロジープレビュー のみの機能として組み込まれているため、サポート対象外です。

前提条件

  • ファームウェアバージョンが 28.36.1010 以上の Mellanox CX-7 ネットワークデバイスを使用している。

    ファームウェアバージョンの詳細は、Mellanox のドキュメント を参照してください。

  • mstflint パッケージが、ソースホストと宛先ホストの両方にインストールされている。

    # dnf install mstflint
  • Mellanox CX-7 ネットワークデバイスで、VF_MIGRATION_MODEMIGRATION_ENABLED に設定されている。

    # mstconfig -d <device_pci_address> query | grep -i VF_migration
    
    VF_MIGRATION_MODE                           MIGRATION_ENABLED(2)
    • 次のコマンドを使用して、VF_MIGRATION_MODEMIGRATION_ENABLED に設定できます。

      # mstconfig -d <device_pci_address> set VF_MIGRATION_MODE=2
  • openvswitch パッケージが、ソースホストと宛先ホストの両方にインストールされている。

    # dnf install openvswitch
  • ホストの CPU およびファームウェアは、IOMMU (I/O Memory Management Unit) に対応している。

    • Intel CPU を使用している場合は、Intel VT-d (Virtualization Technology for Directed I/O) に対応する必要があります。
    • AMD CPU を使用している場合は、AMD-Vi 機能に対応している必要があります。
  • ホストシステムが、アクセス制御サービス (ACS) を使用して PCIe トポロジーの DMA (Direct Memory Access) 分離を提供している。この点をシステムベンダーに確認してください。

    詳細は、SR-IOV 実装に関するハードウェアの考慮事項 を参照してください。

  • VF の作成に使用するホストのネットワークインターフェイスが実行中である。たとえば、eth1 インターフェイスをアクティブにして実行中であることを確認するには、次のコマンドを使用します。

    # ip link set eth1 up
    # ip link show eth1
    8: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000
       link/ether a0:36:9f:8f:3f:b8 brd ff:ff:ff:ff:ff:ff
       vf 0 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 1 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 2 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 3 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
  • SR-IOV デバイス割り当てを有効にするには、ホスト BIOS およびカーネルで IOMMU 機能を有効にする必要があります。これを行うには、以下を行います。

    • Intel ホストで、Intel Virtualization Technology for Directed I/O (VT-d) を有効にします。

      1. intel_iommu=on および iommu=pt パラメーターを使用して GRUB 設定を再生成します。

        # grubby --args="intel_iommu=on iommu=pt" --update-kernel=ALL
      2. ホストを再起動します。
    • AMD ホストで、AMD-Vi を有効にします。

      1. iommu=pt パラメーターで GRUB 設定を再生成します。

        # grubby --args="iommu=pt" --update-kernel=ALL
      2. ホストを再起動します。
  • 移行元ホストと移行先ホストはいずれも KVM ハイパーバイザーを使用します。
  • 移行元ホストと移行先のホストは、ネットワーク経由で相互に通信できなければなりません。ping ユーティリティーを使用してこれを確認します。
  • 宛先ホストで次のポートが開いている。

    • ポート 22 は、SSH を使用して宛先ホストに接続するために必要です。
    • ポート 16509 は、TLS を使用して宛先ホストに接続するために必要です。
    • ポート 16514 は、TCP を使用して宛先ホストに接続するために必要です。
    • ポート 49152 - 49215 は、QEMU がメモリーおよびディスク移行データを転送するために必要です。
  • ソースホストと宛先ホストが、移行可能なオペレーティングシステムとマシンタイプを使用している。これを確認するには、Supported hosts for virtual machine migration を参照してください。
  • 仮想マシンは、移行先ホストの CPU 機能と互換性がある必要があります。これを確認するには、仮想マシン移行のホスト CPU の互換性の確認 を参照してください。
  • 移行する仮想マシンのディスクイメージが、ソースホストと宛先ホストの両方にアクセスできる別のネットワーク上の場所にある。オフラインマイグレーションの場合は任意ですが、実行中の仮想マシンの移行に必要になります。

    このような仮想マシンの共有ストレージを設定する手順は、Sharing virtual machine disk images with other hosts を参照してください。

  • 仮想マシンの実行中に移行する場合は、ネットワークの帯域幅が、仮想マシンがダーティーメモリーページを生成する速度を超える必要があります。
  • 接続プロトコルに対応する仮想ネットワークソケットが有効になっている。

    VM 移行を実行する場合、ソースホスト上の virsh クライアントは、いくつかのプロトコルの 1 つを使用して、宛先ホスト上の libvirt デーモンに接続できます。次の手順の例では SSH 接続を使用していますが、別の接続を選択することもできます。** libvirt で SSH 接続を使用する場合は、宛先ホストで virtqemud ソケットが有効になっていて実行中であることを確認してください。

    +

    # systemctl enable --now virtqemud.socket
    • libvirt で TLS 接続を使用する場合は、virtproxyd-tls ソケットが有効になっていて、宛先ホストで実行していることを確認してください。

      # systemctl enable --now virtproxyd-tls.socket
    • libvirt で TCP 接続を使用する場合は、virtproxyd-tcp ソケットが有効になっていて、宛先ホストで実行していることを確認してください。

      # systemctl enable --now virtproxyd-tcp.socket

手順

  1. ソースホストで、Mellanox ネットワークデバイスを switchdev モードに設定します。

    # devlink dev eswitch set pci/<device_pci_address> mode switchdev
  2. ソースホストで、Mellanox デバイス上に Virtual Function を作成します。

    # echo 1 > /sys/bus/pci/devices/0000\:e1\:00.0/sriov_numvfs

    ファイルパスの /0000\:e1\:00.0/ の部分は、デバイスの PCI アドレスに基づいています。この例では、0000:e1:00.0 です。

  3. ソースホストで、VF をそのドライバーからアンバインドします。

    # virsh nodedev-detach <vf_pci_address> --driver pci-stub

    次のコマンドを使用して、VF の PCI アドレスを表示できます。

    # lshw -c network -businfo
    
    Bus info                     Device             Class           Description
    ===========================================================================
    pci@0000:e1:00.0  enp225s0np0    network        MT2910 Family [ConnectX-7]
    pci@0000:e1:00.1  enp225s0v0     network        ConnectX Family mlx5Gen Virtual Function
  4. ソースホストで、VF の移行機能を有効にします。

    # devlink port function set pci/0000:e1:00.0/1 migratable enable

    この例の pci/0000:e1:00.0/1 は、指定の PCI アドレスを持つ Mellanox デバイス上の最初の VF を示しています。

  5. ソースホストで、VF の移行用に Open vSwitch (OVS) を設定します。Mellanox デバイスが switchdev モードの場合、ネットワーク経由でデータを転送できません。

    1. openvswitch サービスが実行中であることを確認します。

      # systemctl start openvswitch
    2. ネットワークのパフォーマンスを向上させるために、ハードウェアオフロードを有効にします。

      # ovs-vsctl set Open_vSwitch . other_config:hw-offload=true
    3. 移行中にネットワーク接続が開いたままになるように、最大アイドル時間を増やします。

      # ovs-vsctl set Open_vSwitch . other_config:max-idle=300000
    4. OVS インスタンスに新しいブリッジを作成します。

      # ovs-vsctl add-br <bridge_name>
    5. openvswitch サービスを再起動します。

      # systemctl restart openvswitch
    6. 物理的な Mellanox デバイスを OVS ブリッジに追加します。

      # ovs-vsctl add-port <bridge_name> enp225s0np0

      この例では、<bridge_name> はステップ d で作成したブリッジの名前であり、enp225s0np0 は Mellanox デバイスのネットワークインターフェイス名です。

    7. Mellanox デバイスの VF を OVS ブリッジに追加します。

      # ovs-vsctl add-port <bridge_name> enp225s0npf0vf0

      この例では、<bridge_name> はステップ d で作成したブリッジの名前であり、enp225s0npf0vf0 は VF のネットワークインターフェイス名です。

  6. 宛先ホスト でステップ 1 - 5 を繰り返します。
  7. ソースホストで、mlx_vf.xml などの新しいファイルを開き、次のような VF の XML 設定を追加します。

     <interface type='hostdev' managed='yes'>
          <mac address='52:54:00:56:8c:f7'/>
          <source>
            <address type='pci' domain='0x0000' bus='0xe1' slot='0x00' function='0x1'/>
          </source>
     </interface>

    この例では、VF のパススルーを仮想マシンのネットワークインターフェイスとして設定します。MAC アドレスが一意であることを確認し、ソースホスト上の VF の PCI アドレスを使用します。

  8. ソースホストで、VF の XML ファイルを仮想マシンに割り当てます。

    # virsh attach-device <vm_name> mlx_vf.xml --live --config

    この例の mlx_vf.xml は、VF 設定を含む XML ファイルの名前です。実行中の仮想マシンにデバイスを割り当てるために、--live オプションを使用します。

  9. ソースホストで、VF が割り当てられた実行中の仮想マシンのライブマイグレーションを開始します。

    # virsh migrate --live --domain <vm_name> --desturi qemu+ssh://<destination_host_ip_address>/system

検証

  1. 移行された仮想マシンで、Mellanox VF のネットワークインターフェイス名を表示します。

    # ifconfig
    
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255
            inet6 fe80::a00:27ff:fe4e:66a1  prefixlen 64  scopeid 0x20<link>
            ether 08:00:27:4e:66:a1  txqueuelen 1000  (Ethernet)
            RX packets 100000  bytes 6543210 (6.5 MB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 100000  bytes 6543210 (6.5 MB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    enp4s0f0v0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.3.10  netmask 255.255.255.0  broadcast 192.168.3.255
            inet6 fe80::a00:27ff:fe4e:66c3  prefixlen 64  scopeid 0x20<link>
            ether 08:00:27:4e:66:c3  txqueuelen 1000  (Ethernet)
            RX packets 200000  bytes 12345678 (12.3 MB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 200000  bytes 12345678 (12.3 MB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  2. 移行した仮想マシンで、Mellanox VF が動作することを確認します。次に例を示します。

    # ping -I <VF_interface_name> 8.8.8.8
    
    PING 8.8.8.8 (8.8.8.8) from 192.168.3.10 <VF_interface_name>: 56(84) bytes of data.
    64 bytes from 8.8.8.8: icmp_seq=1 ttl=57 time=27.4 ms
    64 bytes from 8.8.8.8: icmp_seq=2 ttl=57 time=26.9 ms
    
    --- 8.8.8.8 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1002ms
    rtt min/avg/max/mdev = 26.944/27.046/27.148/0.102 ms
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.