Elastic Compute Service (ECS) および ECS Bare Metal Instance (EBM) で UIO ドライバーを VFIO ドライバーに置き換え、DPDK のランタイムエラーを解消します。
前提条件
背景情報
第6世代のインスタンスタイプ (g6、c6、r6など) 以降では、DPDK アプリケーションでランタイムエラーが発生する場合があります。たとえば、pktgen-dpdk が igb_uio ドライバーにバインドされた NIC を検出できないことがあります。次のエラーが表示される場合は、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 または EBM インスタンスに接続します。詳細については、「Log on to a Linux instance using Workbench」をご参照ください。
-
GRUB 設定を確認します。
cat /proc/cmdline -
intel_iommu=onを/etc/default/grubに追加します。-
ファイルを開きます。
sudo vim /etc/default/grub -
iを押して挿入モードに入ります。intel_iommu=onをGRUB_CMDLINE_LINUXパラメーターに追加します。ファイルを保存して閉じます。変更後の設定例:

-
設定を適用します。
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
-
インスタンスを再起動し、起動後に再接続します。
reboot警告再起動操作により、インスタンスが短時間停止し、インスタンスで実行されているサービスが中断される可能性があります。 オフピーク時にインスタンスを再起動することを推奨します。
-
-
VFIO ドライバーと vfio-pci ドライバーをロードします。
sudo modprobe vfio && \ sudo modprobe vfio-pci -
noiommu_modeを有効にします。sudo bash -c 'echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode' -
NIC の
bus-info値を取得します。ethtool -i ethXethXを対象の NIC ID に置き換えます。eth1の例:
-
NIC を
vfio-pciドライバーにバインドします。 DPDK インストールディレクトリのusertoolsディレクトリに移動して、以下を実行します。sudo ./dpdk-devbind.py -b vfio-pci 0000:00:06.0説明0000:00:06.0を、お使いの NIC の実際のbus-info値に置き換えます。./dpdk-devbind.py --statusを実行して確認します。 次の出力は、0000:00:06.0がvfio-pciにバインドされていることを示しています:
-
DPDK アプリケーションを起動します。DPDK インストールディレクトリ内の
build/appディレクトリに移動し、ご使用のバージョンに対応するコマンドを実行します。-
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 0000:00:06.0は NIC を指定します。total-num-mbufs=2048は、お使いのヒュージページサイズと一致させる必要があります。両方を実際の値に置き換えてください。DPDK アプリケーションの実行例:

-
