Metonymical Deflection

ゆるく日々のコト・たまにITインフラ

vDPA の設定方法 番外編

本ブログでは、NICの調達方法やovs-dpdk以外の設定方法、課題となっている事などを記載していきます。
トピックが多岐に渡るため、順不同に読んで頂いて構いません。

前回記事からの続編となります。*1
以下は関連記事の一覧となります。

vDPA の設定方法 vhost_vdpa + VM編 - Metonymical Deflection
vDPA の設定方法 virtio_vdpa + VM編 - Metonymical Deflection
vDPA の設定方法 vhost_vdpa + kubernetes編 - Metonymical Deflection
vDPA の設定方法 vhost_vdpa + kubernetes + Accelerated Bridge CNI編 - Metonymical Deflection
Scalable Function の設定方法 vdpa + VM編 - Metonymical Deflection

1.トピック

  • NICの調達方法
  • Linux Bridgeにおける設定方法
  • ovsにおける設定方法(dpdk無し)
  • 課題1:仮想マシンの起動方法
  • 課題2:VFリレー設定

2.NICの調達方法

Linux KernelでvDPAに対応したドライバは3つあります。
linux/drivers/vdpa at master · torvalds/linux · GitHub
各ドライバに対応したNICは以下の通りです。

ifcvf Intel製 SmartNIC N3000シリーズ, N5000シリーズ 高額($4k)で、かつ個人購入は困難
mlx5 Mellanox製 ConnectX-6 Dx, BlueField SmartNIC ConnectX-6 Dxの場合、高額($1.2k)だが個人購入は可能
vdpa_sim vdpaデバイスシミュレータですが、CentOS8.3標準Kernelに入っています。modinfo vdpa_sim コマンドで確認できます。 シミュレータのため外部NWと通信できない。

このため、ConnectX-6 Dxの購入が現実的だと思います。
また、ConnectX-6 Dxの場合、正式サポートしている型番が以下のサイトに掲載されています。
5. MLX5 vDPA driver — Data Plane Development Kit 21.05.0 documentation

Mellanox® ConnectX®-6 200G MCX654106A-HCAT (2x200G)
Mellanox® ConnectX®-6 Dx EN 25G MCX621102AN-ADAT (2x25G)
Mellanox® ConnectX®-6 Dx EN 100G MCX623106AN-CDAT (2x100G)
Mellanox® ConnectX®-6 Dx EN 200G MCX623105AN-VDAT (1x200G)
Mellanox® BlueField SmartNIC 25G MBF1M332A-ASCAT (2x25G)

上記のうち、"MCX623106AN-CDAT"は、以下のサイトで購入可能です。*2
NVIDIA MCX623106AN-CDAT ConnectX-6 Dx 100GbE QSFP56 ネットワークアダプター, SmartNIC - FS 日本

なお、私がNICを調達したとき、上記のサイトではまだ取り扱っていなかったため、ebayを探していたところ、たまたまHPEブランドの"MCX623106AS-CDAT"が$650くらいで購入できました。*3

3.Linux Bridgeにおける設定方法

本編の記事では、ovs-dpdkを使用しましたが、それには以下3つの理由があります。

  1. ovs-dpdkの場合、bsf番号を含めた形でrepresentorを明示的に指定する必要があります。これにより、どことどこが接続されているのかを理解できると考えたため、ovs-dpdkを使用しました。
  2. ovs-dpdk, ovs, Linux Bridgeの3つを比較した場合、ovs-dpdkは最も手間の掛かる複雑な設定が要求されます。一方でovs-dpdkの設定が理解できれば、他のケースは容易に理解することができると考えたためです。
  3. 今後、仮想マシンでTRexを動作させた負荷試験を検討しており、ovs-dpdk, ovs, Linux Bridgeそれぞれの環境で負荷試験を実施したいと考えていたからです。

<補足>
例えば、vhost_vdpaの場合、以下の赤文字を辿ると、PF, VF, VF repの関連性が理解できると思います。

ovs-vsctl add-port br30-ovs ens2f0_0 -- set Interface ens2f0_0 type=dpdk options:dpdk-devargs=0000:07:00.0,representor=[0]

[root@c83g155 ~]# lshw -businfo -c network
Bus info          Device      Class          Description
========================================================
pci@0000:07:00.0  ens2f0      network        MT2892 Family [ConnectX-6 Dx]
pci@0000:07:00.1  ens2f1      network        MT2892 Family [ConnectX-6 Dx]
pci@0000:07:00.2  ens2f0v0    network        ConnectX Family mlx5Gen Virtual Function
pci@0000:07:01.2  ens2f1v0    network        ConnectX Family mlx5Gen Virtual Function
pci@0000:07:00.0  ens2f0_0    network        Ethernet interface
pci@0000:07:00.1  ens2f1_0    network        Ethernet interface

[root@c83g155 ~]# ls -Fal /sys/bus/vdpa/drivers/vhost_vdpa
total 0
drwxr-xr-x 2 root root    0 Apr  8 00:06 ./
drwxr-xr-x 3 root root    0 Apr  7 23:49 ../
--w------- 1 root root 4096 Apr  8 00:07 bind
lrwxrwxrwx 1 root root    0 Apr  8 00:07 module -> ../../../../module/vhost_vdpa/
--w------- 1 root root 4096 Apr  8 00:06 uevent
--w------- 1 root root 4096 Apr  8 00:07 unbind
lrwxrwxrwx 1 root root    0 Apr  8 00:07 vdpa0 -> ../../../../devices/pci0000:00/0000:00:03.0/0000:07:00.2/vdpa0/
lrwxrwxrwx 1 root root    0 Apr  8 00:07 vdpa1 -> ../../../../devices/pci0000:00/0000:00:03.0/0000:07:01.2/vdpa1/

qemu-system-x86_64 \
 -enable-kvm \
 -cpu host \
 -m 8G \
 -hda /var/lib/libvirt/images/c77g1532.qcow2 \
 -netdev type=vhost-vdpa,vhostdev=/dev/vhost-vdpa-0,id=vhost-vdpa0 \
 -device virtio-net-pci,netdev=vhost-vdpa0,page-per-vq=on,iommu_platform=on,disable-legacy=on \
 -nographic \
 2>&1 | tee vm153.log

前置きが長くなりましたが、上記を踏まえて、Linux Bridgeにおける設定方法を記載します。
事前に本編の"6.SR-IOV switchdev modeへ変更"を実施しておいてください。

3-1.Linux Bridgeの作成
nmcli connection add type bridge autoconnect yes con-name br30ens2f0 ifname br30ens2f0
nmcli connection modify br30ens2f0 bridge.stp no
nmcli connection modify br30ens2f0 ipv4.method disabled ipv6.method ignore
nmcli connection up br30ens2f0
nmcli connection add type bridge-slave ifname ens2f0 master br30ens2f0
nmcli connection add type bridge-slave ifname ens2f0_0 master br30ens2f0

nmcli connection add type bridge autoconnect yes con-name br31ens2f1 ifname br31ens2f1
nmcli connection modify br31ens2f1 bridge.stp no
nmcli connection modify br31ens2f1 ipv4.method disabled ipv6.method ignore
nmcli connection up br31ens2f1
nmcli connection add type bridge-slave ifname ens2f1 master br31ens2f1
nmcli connection add type bridge-slave ifname ens2f1_0 master br31ens2f1
3-2.Linux Bridgeの確認
nmcli con show

[root@c83g155 ~]# nmcli con show
NAME                   UUID                                  TYPE      DEVICE
System eno1            c68c8589-0538-477f-8921-d1da3a50a7c1  ethernet  eno1
br11eno2               15c513f2-8180-44e7-b5a5-af8a61574118  bridge    br11eno2
br30ens2f0             c3d898f3-c3c4-4f84-ae94-4c0d663bd02c  bridge    br30ens2f0
br31ens2f1             0704f4ff-d502-4541-b2a9-b6bc7291ae47  bridge    br31ens2f1
virbr0                 28699aa1-57bf-4686-86f4-7625a2311628  bridge    virbr0
bridge-slave-eno2      4e9db04a-0e3a-4099-8726-0c3fc5b09d78  ethernet  eno2
bridge-slave-ens2f0    d612bf46-c387-4883-aef1-b37b5d29aca2  ethernet  ens2f0
bridge-slave-ens2f0_0  173c7792-6df9-41af-b6ab-9a4f66567d95  ethernet  ens2f0_0
bridge-slave-ens2f1    2a90162e-585a-4c5e-ac52-73ca935c80d0  ethernet  ens2f1
bridge-slave-ens2f1_0  327e0276-f90c-4dd2-89fd-2aeeabd6c69f  ethernet  ens2f1_0
eno3                   8bcc3718-cdd2-40f9-a484-d25ccc5b9a11  ethernet  --
eno4                   3e0a2034-acbb-49c6-a63f-6438213c51c3  ethernet  --
ens1f0                 fd0d2166-840e-4e1a-bfbd-55c0df2ad791  ethernet  --
ens1f1                 f9c8d336-f15b-4b8b-91c9-14d5094d7fd7  ethernet  --
3-3.vhost_vdpaモジュールの有効化 : vhost_vdpaの場合

virtio_vdpaモジュールが有効化されている場合、rmmod virtio_vdpaコマンドで無効化してください。

rmmod virtio_vdpa
modprobe vhost_vdpa
3-4.仮想マシンの起動 : vhost_vdpaの場合
c77g153
(8)
qemu-system-x86_64 \
 -enable-kvm \
 -cpu host \
 -m 8G \
 -hda /var/lib/libvirt/images/c77g1532.qcow2 \
 -netdev type=vhost-vdpa,vhostdev=/dev/vhost-vdpa-0,id=vhost-vdpa0 \
 -device virtio-net-pci,netdev=vhost-vdpa0,page-per-vq=on,iommu_platform=on,disable-legacy=on \
 -nographic \
 2>&1 | tee vm153.log

c77g159
(9)
qemu-system-x86_64 \
 -enable-kvm \
 -cpu host \
 -m 8G \
 -hda /var/lib/libvirt/images/c77g1592.qcow2 \
 -netdev type=vhost-vdpa,vhostdev=/dev/vhost-vdpa-1,id=vhost-vdpa1 \
 -device virtio-net-pci,netdev=vhost-vdpa1,page-per-vq=on,iommu_platform=on,disable-legacy=on \
 -nographic \
 2>&1 | tee vm159.log
3-5.virtio_vdpaモジュールの有効化 : virtio_vdpaの場合

vhost_vdpaモジュールが有効化されている場合、rmmod vhost_vdpaコマンドで無効化してください。

rmmod vhost_vdpa
modprobe virtio_vdpa
3-6.dpdk-vdpaの設定 : virtio_vdpaの場合
/usr/src/dpdk/build/examples/dpdk-vdpa \
--socket-mem 1024,1024 \
-a 0000:07:00.2,class=vdpa \
-a 0000:07:01.2,class=vdpa \
--log-level=pmd,debug -- -i

create /tmp/sock-virtio0 0000:07:00.2
create /tmp/sock-virtio1 0000:07:01.2
3-7.仮想マシンの起動 : virtio_vdpaの場合
c77g153
virsh start c77g153; virsh console c77g153

c77g159
virsh start c77g159; virsh console c77g159

4.ovsにおける設定方法(dpdk無し)

ovsの設定方法は、Linux Bridgeと同様に、とてもシンプルな設定です。
dpdkは使用しませんが、HW offloadは設定しておきます。

4-1.ovsの初期設定
systemctl start openvswitch
ovs-vsctl set Open_vSwitch . other_config:hw-offload=true other_config:tc-policy=none
systemctl restart openvswitch
ovs-vsctl get Open_vSwitch . other_config

other_configの設定値は以下のようになっていればOKです。
他の設定値(dpdk-initなど)の削除方法は前回記事を参照してください。

ovs-vsctl get Open_vSwitch . other_config

[root@c83g155 ~]# ovs-vsctl get Open_vSwitch . other_config
{hw-offload="true", tc-policy=none}
4-2.ovsの設定
ovs-vsctl add-br br30-ovs
ovs-vsctl add-port br30-ovs ens2f0
ovs-vsctl add-port br30-ovs ens2f0_0
ovs-vsctl add-br br31-ovs
ovs-vsctl add-port br31-ovs ens2f1
ovs-vsctl add-port br31-ovs ens2f1_0
ovs-vsctl show

以下のように設定されていればOKです。

ovs-vsctl show

[root@c83g155 ~]# ovs-vsctl show
59a34ea2-ca80-48b9-8b14-a656c79bc451
    Bridge br31-ovs
        Port ens2f1
            Interface ens2f1
        Port ens2f1_0
            Interface ens2f1_0
        Port br31-ovs
            Interface br31-ovs
                type: internal
    Bridge br30-ovs
        Port br30-ovs
            Interface br30-ovs
                type: internal
        Port ens2f0
            Interface ens2f0
        Port ens2f0_0
            Interface ens2f0_0
    ovs_version: "2.14.1"
4-3.仮想マシンの起動

仮想マシンの起動方法は3-3から3-7と同じ手順となります。

4-4.ステータス確認

<ConsoleA>
vhost_vdpaの場合

Apr 15 10:00:53 c83g155 kernel: mlx5_core 0000:07:00.2: mlx5_vdpa_set_status:1786:(pid 8284): performing device reset
Apr 15 10:00:53 c83g155 kvm[8292]: 1 guest now active
Apr 15 10:00:53 c83g155 dbus-daemon[2123]: [session uid=0 pid=2123] Activating via systemd: service name='org.freedesktop.Tracker1.Miner.Extract' unit='tracker-extract.service' requested by ':1.73' (uid=0 pid=2781 comm="/usr/libexec/tracker-miner-fs ")
Apr 15 10:00:53 c83g155 systemd[1964]: Starting Tracker metadata extractor...
Apr 15 10:00:53 c83g155 dbus-daemon[2123]: [session uid=0 pid=2123] Successfully activated service 'org.freedesktop.Tracker1.Miner.Extract'
Apr 15 10:00:53 c83g155 systemd[1964]: Started Tracker metadata extractor.
Apr 15 10:01:16 c83g155 kernel: mlx5_core 0000:07:00.2: mlx5_vdpa_handle_set_map:473:(pid 8291): memory map update
Apr 15 10:01:18 c83g155 ovs-vswitchd[8061]: ovs|00001|odp_util(handler4)|ERR|internal error parsing flow key recirc_id(0),dp_hash(0),skb_priority(0),in_port(3),skb_mark(0),ct_state(0),ct_zone(0),ct_mark(0),ct_label(0),eth(src=00:11:22:33:44:00,dst=01:00:5e:00:00:16),eth_type(0x0800),ipv4(src=192.168.30.153,dst=224.0.0.22,proto=2,tos=0xc0,ttl=1,frag=no)
Apr 15 10:01:18 c83g155 ovs-vswitchd[8061]: ovs|00002|odp_util(handler4)|ERR|internal error parsing flow key recirc_id(0),dp_hash(0),skb_priority(0),in_port(5),skb_mark(0),ct_state(0),ct_zone(0),ct_mark(0),ct_label(0),eth(src=00:11:22:33:44:00,dst=01:00:5e:00:00:16),eth_type(0x0800),ipv4(src=192.168.30.153,dst=224.0.0.22,proto=2,tos=0xc0,ttl=1,frag=no)
Apr 15 10:01:18 c83g155 kernel: tc mirred to Houston: device br30-ovs is down
Apr 15 10:01:18 c83g155 kernel: tc mirred to Houston: device br31-ovs is down
=====================snip=====================
Apr 15 10:01:36 c83g155 systemd[1964]: tracker-extract.service: Succeeded.

"tc mirred to Houston: device br30-ovs is down"のメッセージが出力されますが、特に問題ありません。

virtio_vdpaの場合
ovs-dpdkと同じメッセージが出力されます。

<ConsoleB>

[root@c83g155 ~]# ovs-ofctl -O OpenFlow14 dump-ports br30-ovs
OFPST_PORT reply (OF1.4) (xid=0x2): 3 ports
  port LOCAL: rx pkts=0, bytes=0, drop=13, errs=0, frame=0, over=0, crc=0
           tx pkts=0, bytes=0, drop=0, errs=0, coll=0
           duration=302.134s
  port  ens2f0: rx pkts=2557039, bytes=260820713, drop=0, errs=0, frame=0, over=0, crc=0
           tx pkts=2557043, bytes=260821159, drop=0, errs=0, coll=0
           duration=302.105s
  port  "ens2f0_0": rx pkts=2557014, bytes=250589621, drop=0, errs=0, frame=0, over=0, crc=0
           tx pkts=33992436, bytes=3162372357, drop=0, errs=0, coll=0
           duration=302.085s

<ConsoleC>

[root@c83g155 ~]# ovs-ofctl -O OpenFlow14 dump-ports br31-ovs
OFPST_PORT reply (OF1.4) (xid=0x2): 3 ports
  port LOCAL: rx pkts=0, bytes=0, drop=13, errs=0, frame=0, over=0, crc=0
           tx pkts=0, bytes=0, drop=0, errs=0, coll=0
           duration=308.302s
  port  ens2f1: rx pkts=2557043, bytes=260821159, drop=0, errs=0, frame=0, over=0, crc=0
           tx pkts=2557039, bytes=260820713, drop=0, errs=0, coll=0
           duration=308.279s
  port  "ens2f1_0": rx pkts=2557014, bytes=250589517, drop=0, errs=0, frame=0, over=0, crc=0
           tx pkts=33999072, bytes=3162887345, drop=0, errs=0, coll=0
           duration=308.258s

<ConsoleD>
ovs-dpdkと同じ出力となります。

5.課題1:仮想マシンの起動方法

2021/06/01 Update
libvirtdによるVM起動方法を以下の記事に追記しました。
vDPA の設定方法 vhost_vdpa + VM編 - Metonymical Deflection

ここからは、試してみたけど上手く行かなかったことを記載していきます。
仮想マシンの起動方法として、以下2つの方法を記載しています。

これは以下の組合せの場合、通信が出来なかったためです。

起動方法 vhost_vdpa virtio_vdpa
qemu OK NG
libvirt NG OK OK

ここでは、具体的にどのような設定をして通信不可となったのかを記載します。

5-1.qemuとvirtio_vdpaによる仮想マシンの起動

以下のコマンドで仮想マシンを起動することは可能ですが、通信できませんでした。

qemu-system-x86_64 \
 -enable-kvm \
 -cpu host \
 -m 8G \
 -hda /var/lib/libvirt/images/c77g1532.qcow2 \
 -mem-prealloc \
 -chardev socket,id=char0,path=/tmp/sock-virtio0 \
 -netdev type=vhost-user,id=vdpa,chardev=char0 \
 -device virtio-net-pci,netdev=vdpa,mac=00:11:22:33:44:00,page-per-vq=on \
 -nographic \
 2>&1 | tee vm153.log

ポイントは、以下のlibvirtの設定をqemuの設定に置換できれば、通信ができるようになると考えています。

<currentMemory unit='KiB'>4194304</currentMemory>
<memoryBacking>
  <hugepages>
    <page size='1048576' unit='KiB'/>
  </hugepages>
</memoryBacking>

<cpu mode='custom' match='exact' check='partial'>
  <numa>
    <cell id='0' cpus='0-1' memory='4194304' unit='KiB' memAccess='shared'/>
  </numa>
</cpu>

qemuのヘルプを確認したところ、numaの設定はできそうです。しかし、qemuにおけるhugepagesの設定方法がわからないため、引き続き調査をしていきたいと考えています。

5-2.libvirtとvhost_vdpaによる仮想マシンの起動

vhost_vdpaの場合、vDPAデバイスXMLで設定することが可能となっています。*4
https://libvirt.org/formatdomain.html#vdpa-devices
具体的には以下のように設定します。

<devices>
......
  <interface type='vdpa'>
    <source dev='/dev/vhost-vdpa-0'/>
  </interface>
......
</devices>

しかし、上記の設定に加え、以下の設定を実施してみましたが通信できませんでした。

virt-xml c77g153 --edit --qemu-commandline='-device'
virt-xml c77g153 --edit --qemu-commandline='virtio-net-pci,netdev=vhost-vdpa0,page-per-vq=on,iommu_platform=on,disable-legacy=on'

こちらについても、引き続き調査をしていきたいと考えています。
仮想マシンの管理上、libvirtに統一した方が良いと考えているため、5-2の方法を優先的に調べようと思います。

6.課題2:VFリレー設定

以下のMellanoxサイトにVFリレーによるHardware vDPAの設定方法が記載されています。
VirtIO Acceleration through VF Relay (Software & Hardware vDPA)
https://docs.mellanox.com/pages/viewpage.action?pageId=43718786#OVSOffloadUsingASAP%C2%B2Direct-swvdpaVirtIOAccelerationthroughVFRelay(Software&HardwarevDPA)
サンプルコンフィグが記載されていますが、ポイントは"vdpa-socket-path=<sock path>"となります。

ovs-vsctl add-port br0 vdpa0 -- set Interface vdpa0 type=dpdkvdpa \
options:vdpa-socket-path=<sock path> \
options:vdpa-accelerator-devargs= \
options:dpdk-devargs=,representor=[id] \
options: vdpa-max-queues = \
options: vdpa-sw=

具体的には以下のように設定します。

ovs-vsctl add-port br0-ovs vdpa0 -- set Interface vdpa0 type=dpdkvdpa options:vdpa-socket-path=/var/run/virtio-forwarder/sock0 options:vdpa-accelerator-devargs=0000:01:00.2 options:dpdk-devargs=0000:01:00.0,representor=[0] options: vdpa-max-queues=8

ここで、"<sock path>"は"/var/run/virtio-forwarder/sock0"となりますが、"virtio-forwarder"を利用して、事前にVFリレーの設定を実施しておく必要があるようです。
Virtio-forwarder Documentation — Virtio-forwarder 1.2.99.19 documentation
しかし、上記サイトの手順でvirtio-forwarderをインストールしたところ、以下のエラーでインストールできませんでした。

Error:
 Problem: package dpdk-19.11.3-1.el8.x86_64 requires libmlx4.so.1()(64bit), but none of the providers can be installed
  - package dpdk-19.11.3-1.el8.x86_64 requires libmlx4.so.1(MLX4_1.0)(64bit), but none of the providers can be installed
……

このため、今回利用している"dpdk21.02"の各ライブラリのリンクをした後、ソースからビルドしてみようと考えています。
なお、Mellanoxサイトにも記載のある通り、この方法はovs-dpdkのアップストリームでは承認されていない方法となるため、優先度を下げて調査しようと考えています。*5

以上です。

7.最後に

参考にさせて頂いたサイトは、本文中に記載しました。

vDPA自体も難しい点は多々ありましたが、特に難しかったのはSR-IOV switchdevモードのところで、switchdevモード時のトラフィックフローを理解するまでに多くの時間を要しました。
しかし、以下のブログの解説により突破口が開き、何とか先に進むことが出来ました。
yunazunoさんの解説には大変感謝致しております。
yunazuno.hatenablog.com

今後、vDPAが普及するのか、それとも消えてしまうのかはわかりませんが、ScalableIOVなどの技術と組合せて利用することにより、その真価が発揮されるのではないかと予想しています。
01.org

次回は、Kubernetes環境におけるvDPAの設定方法について、詳細を記載していきたいと考えています。

関連記事

No vm(qemu)/k8s k8s Pod/VMI vDPA Framework vDPA Type SR-IOV mode Related Articles
1 vm - kernel vhost lagacy Not started
2 vm - kernel vhost switchdev vDPA の設定方法 vhost_vdpa + VM編 - Metonymical Deflection
3 vm - kernel virtio lagacy Not started
4 vm - kernel virtio switchdev Not started
5 vm - dpdk vhost lagacy Not started
6 vm - dpdk vhost switchdev Not started
7 vm - dpdk virtio lagacy Not started
8 vm - dpdk virtio switchdev vDPA の設定方法 virtio_vdpa + VM編 - Metonymical Deflection
9 k8s pod kernel vhost lagacy vDPA の設定方法 vhost_vdpa + kubernetes編 - Metonymical Deflection
10 k8s pod kernel vhost switchdev vDPA の設定方法 vhost_vdpa + kubernetes + Accelerated Bridge CNI編 - Metonymical Deflection
11 k8s pod kernel virtio lagacy Not started
12 k8s pod kernel virtio switchdev Not started
13 k8s pod dpdk client lagacy Not started
14 k8s pod dpdk client switchdev Not started
15 k8s pod dpdk server lagacy Not started
16 k8s pod dpdk server switchdev Not started

*1:既に前回記事を読まれている方に向けて記載していますので、詳細な説明などは省略しています。

*2:ちなみに、100GbpsのDACは、このサイトで購入しています。

*3:MCX623106AN-CDAT(正式サポートNIC)とMCX623106AS-CDAT(私が購入したNIC)では、型番が微妙に異なるため、vDPAのHW offloadができないかもしれない、という不安と戦いながら検証を進めていました。

*4:libvirt v6.9.0 QEMU only, requires QEMU 5.1.0 or newer

*5:もう一つ、気になる点として、"type=dpdkvdpa"があります。ovsのv2.15.0をソースからビルドして、このtypeを指定したらとエラーで弾かれました。このため、本編"2-3.Mellanoxドライバ(OFED)のインストール"で導入されるovsを使用しないとVFリレーによる設定はできないかもしれません。