すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:UIOドライバをVFIOドライバに置き換える

最終更新日:Dec 28, 2023

このトピックでは、Elastic Compute Service (ECS) インスタンスの実行時にData Plane Development Kit (DPDK) アプリケーションで発生する例外を解決するために、Userspace I/O (UIO) ドライバーをVirtual Function I/O (VFIO) ドライバーに置き換える方法について説明します。

前提条件

背景情報

DPDKアプリケーションが第6世代インスタンスタイプ (g6、c6、r6インスタンスタイプなど) 以降のインスタンスにデプロイされている場合、アプリケーションの実行時に例外が発生する可能性があります。 たとえば、Pktgen-DPDKを使用してインスタンスのパケット転送速度をテストすると、ネットワークインターフェイスコントローラー (NIC) がバインドされているigb_uioポートが見つからず、次のエラーメッセージが報告される場合があります。 DPDKアプリケーションで発生する例外を解決するには、UIOドライバをVFIOドライバに置き換えることができます。

EAL: eal_parse_sysfs_value(): sysfs値 /sys/bus/pci/devices/0000を開くことができません: 00:06.0/uio/uio0/portio /portio/port0/start

手順

  1. 通常のECSインスタンスまたはECSベアメタルインスタンスに接続します。

    詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。

  2. GRand Unified Bootloader (GRUB) の設定を確認します。

    cat /proc/cmdline
    • GRUB構成がintel_iommu=onパラメータを含み、iommu=ptパラメータを含まない場合、ステップ4に進む。

    • そうでなければ、GRUB構成を修正して、構成がintel_iommu=onパラメータを含み、iommu=ptパラメータを含まないことを確認し、ステップ3に進む。

      次の図は、intel_iommu=onパラメーターまたはiommu=ptパラメーターを含まないGRUB設定の例を示しています。 この場合、intel_iommu=onパラメーターをGRUB設定に追加する必要があります。

      image.png

  3. intel_iommu=onパラメーターを /etc/default/grub GRUB設定ファイルに追加します。

    1. 次のコマンドを実行して、GRUB設定ファイルを開きます。

      sudo vim /etc/default/grub
    2. Iキーを押してInsertモードに入り、GRUB_CMDLINE_LINUXの行の末尾にintel_iommu=onを追加し、設定ファイルを保存します。

      変更された設定ファイルの例を次の図に示します。grub-config

    3. 次のコマンドを実行して、変更された設定を適用します。

      sudo grub2-mkconfig -o /boot/grub2/grub.cfg

      image.png

    4. 次のコマンドを実行して、インスタンスを再起動します。 次に、インスタンスに再接続します。

      reboot
      警告

      再起動操作により、インスタンスが短時間停止し、インスタンスで実行されているサービスが中断される可能性があります。 オフピーク時にインスタンスを再起動することを推奨します。

  4. 次のコマンドを実行して、VFIOおよびVFIO-PCIドライバーをインストールします。

    sudo modprobe vfio && \
    sudo modprobe vfio-pci 
  5. 次のコマンドを実行して、IOMMUモードを有効にします。

    sudo bash -c 'echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode '
  6. 次のコマンドを実行して、インスタンスにバインドされているNICのbus-info値を表示および記録します。

    ethtool -i ethX

    ethXをインスタンスにバインドされているNICのIDに置き換えます。 この例では、eth1が使用される。bus-info

  7. DPDKのインストールディレクトリ下のusertoolsディレクトリに切り替えます。 次に、NICのbus-info値を指定して次のコマンドを実行し、NICをVFIO-PCIドライバーにバインドします。

    sudo。/dpdk-devbind.py -b vfio-pci 0000:00:06.0
    説明

    この例では、NICのbus-info値は0000:00:06.0です。 実際のシナリオでは、NICのbus-info値に置き換えます。

    を実行します。/dpdk-devbind.py -- statusコマンドを実行して、NICのバインディングステータスを表示します。 次のコマンド出力は、bus-info値が0000:00:06.0であるNICがVFIO-PCIドライバにバインドされていることを示します。bound-status

  8. DPDKのインストールディレクトリ下のbuild/appディレクトリに切り替え、DPDKのバージョンに基づいて次のいずれかのコマンドを実行してDPDKを起動します。

    • DPDKのバージョンが18.02以降の場合は、次のコマンドを実行します。

      sudo。/testpmd -w 0000:00:06.0 -c 0x3 -- total-num-mbufs=2048 -ai
    • DPDKのバージョンが18.02より前の場合は、次のコマンドを実行します。

      sudo。/testpmd -w 0000:00:06.0 -c 0x3 -- total-num-mbufs=2048 -- disable-hw-vlan -ai
    説明

    -wはNICのbus-info値を指定します。 この例では、-wは0000:00:06.0に設定されています。 total-num-mbufsは、巨大なページのサイズを指定します。 この例では、total-num-mbufsは2048に設定されています。 実際のシナリオでは、ビジネス要件に基づいてこれらのパラメーターを設定します。

    次のコマンド出力は、DPDKが開始されたことを示します。run-dpdk