このトピックでは、Elastic Compute Service (ECS) インスタンスの実行時にData Plane Development Kit (DPDK) アプリケーションで発生する例外を解決するために、Userspace I/O (UIO) ドライバーをVirtual Function I/O (VFIO) ドライバーに置き換える方法について説明します。
前提条件
巨大なページがインスタンスに設定されています。 詳細については、「Linuxインスタンスの膨大なページメモリを調整する方法」をご参照ください。
インスタンスにDPDKがインストールされています。 DPDKについては、データプレーン開発キット (DPDK *) ページを参照してください。
背景情報
DPDKアプリケーションが第6世代インスタンスタイプ (g6、c6、r6インスタンスタイプなど) 以降のインスタンスにデプロイされている場合、アプリケーションの実行時に例外が発生する可能性があります。 たとえば、Pktgen-DPDKを使用してインスタンスのパケット転送速度をテストすると、ネットワークインターフェイスコントローラー (NIC) がバインドされているigb_uioポートが見つからず、次のエラーメッセージが報告される場合があります。 DPDKアプリケーションで発生する例外を解決するには、UIOドライバをVFIOドライバに置き換えることができます。
EAL: eal_parse_sysfs_value(): cannot open sysfs value /sys/bus/pci/devices/0000:00:06.0/uio/uio0/portio/port0/start
手順
通常のECSインスタンスまたはECSベアメタルインスタンスに接続します。
詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。
GRand Unified Bootloader (GRUB) の設定を確認します。
cat /proc/cmdline
intel_iommu=on
パラメーターを/etc/default/grub
GRUB設定ファイルに追加します。次のコマンドを実行して、GRUB設定ファイルを開きます。
sudo vim /etc/default/grub
I
キーを押してInsertモードに入り、GRUB_CMDLINE_LINUXの行の末尾にintel_iommu=on
を追加し、設定ファイルを保存します。変更された設定ファイルの例を次の図に示します。
次のコマンドを実行して、変更された設定を適用します。
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
次のコマンドを実行して、インスタンスを再起動します。 次に、インスタンスに再接続します。
reboot
警告再起動操作により、インスタンスが短時間停止し、インスタンスで実行されているサービスが中断される可能性があります。 オフピーク時にインスタンスを再起動することを推奨します。
次のコマンドを実行して、VFIOおよびVFIO-PCIドライバーをインストールします。
sudo modprobe vfio && \ sudo modprobe vfio-pci
次のコマンドを実行して、IOMMUモードを有効にします。
sudo bash -c 'echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode'
次のコマンドを実行して、インスタンスにバインドされているNICのbus-info値を表示および記録します。
ethtool -i ethX
ethXをインスタンスにバインドされているNICのIDに置き換えます。 この例では、eth1が使用される。
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値に置き換えます。を実行します。Run the
. /dpdk-devbind.py-ステータス
コマンドを実行して、NICのバインディングステータスを表示します。 次のコマンド出力は、bus-info値が0000:00:06.0
であるNICがVFIO-PCIドライバにバインドされていることを示します。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が開始されたことを示します。