Metonymical Deflection

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

CentOS7 FD.io/VPP セットアップ KVM編

FD.io/VPP(以下、VPP)のセットアップと自動起動設定までの構築方法について、以下4つのパターンで記載していきます。

  • Bare Metal
  • Linux Bridge
  • OvS-DPDK
  • SR-IOV

1.構成

1-1.環境
筐体                             : DL360 Gen9
CPU                           : Intel(R) Xeon E5-4667 v4 CPU @ 2.20GHz
System ROM                       : P89 05/21/2018
NIC                              : Intel 82599ES
OS                               : CentOS7.6(1810)
Kernel                           : 3.10.0-957.el7.x86_64
Installed Environment Groups     : Server with GUI
Add-Ons for Selected Environment : Virtualization Client, Virtualization Hypervisor, Virtualization Tools 
ovs                              : 2.13.0
DPDK                             : 19.11.2
1-2.全体構成

f:id:metonymical:20200810000205j:plain
VPPの環境をそれぞれ構築していきます。
Bare Metal以外はKVM上の仮想マシンにVPPをインストールします。

1-3 .全体の流れ ~概要~

インストールや設定方法は前回記事と同様ですので、若干被る部分もあります。
まずはBare Metalについて記載した後、KVM上の仮想マシンで、Linux Bridge、OvS-DPDK、SR-IOVについてそれぞれ差分となるポイントを記載したいと思います。

  1. 事前準備とインストール
  2. 初期設定
  3. 動作確認
  4. Linux Bridgeの場合
  5. OvS-DPDKの場合
  6. SR-IOVの場合

2.事前準備とインストール

yum -y install epel-release dpdk-tools
curl -s https://packagecloud.io/install/repositories/fdio/release/script.rpm.sh | sudo bash
yum -y install vpp vpp-plugins vpp-devel vpp-api-python vpp-api-lua vpp-debuginfo vpp-devel

必要なパッケージのインストール
リポジトリ設定
VPPのインストール

3.初期設定

3-1.インターフェースのbsf確認

VPPにアサインするインターフェースのbfs(Bus,Slot,Function)番号とインターフェース名を確認します。
赤文字で記載した「05:00.x」の部分が「bus:slot.function」になります。*1

[root@c76g116 ~]# dpdk-devbind -s

Network devices using kernel driver
===================================
0000:02:00.0 'NetXtreme BCM5719 Gigabit Ethernet PCIe 1657' if=eno1 drv=tg3 unused=vfio-pci *Active*
0000:02:00.1 'NetXtreme BCM5719 Gigabit Ethernet PCIe 1657' if=eno2 drv=tg3 unused=vfio-pci
0000:02:00.2 'NetXtreme BCM5719 Gigabit Ethernet PCIe 1657' if=eno3 drv=tg3 unused=vfio-pci
0000:02:00.3 'NetXtreme BCM5719 Gigabit Ethernet PCIe 1657' if=eno4 drv=tg3 unused=vfio-pci
0000:05:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' if=ens2f0 drv=ixgbe unused=vfio-pci
0000:05:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' if=ens2f1 drv=ixgbe unused=vfio-pci 

以下のコマンドでも確認可能ですので、どちらでも構いません。

[root@c76g116 ~]# lshw -businfo -c network
Bus info          Device      Class          Description
========================================================
pci@0000:05:00.0  ens2f0      network        82599ES 10-Gigabit SFI/SFP+ Network Connection
pci@0000:05:00.1  ens2f1      network        82599ES 10-Gigabit SFI/SFP+ Network Connection
pci@0000:02:00.0  eno1        network        NetXtreme BCM5719 Gigabit Ethernet PCIe
pci@0000:02:00.1  eno2        network        NetXtreme BCM5719 Gigabit Ethernet PCIe
pci@0000:02:00.2  eno3        network        NetXtreme BCM5719 Gigabit Ethernet PCIe
pci@0000:02:00.3  eno4        network        NetXtreme BCM5719 Gigabit Ethernet PCIe
3-2.OS起動時の設定

OS起動時にvfio-pciの読込みとインターフェースダウンを実施しますので、以下の通り設定を最下行に追記してください。
設定完了後、実行権限を付与します。

vi /etc/rc.local

[root@c76g116 ~]# vi /etc/rc.local

modprobe vfio-pci
ifconfig ens2f0 down
ifconfig ens2f1 down
exit 0

[root@c76g116 ~]# chmod 755 /etc/rc.local
3-3.VPPのstartup.conf設定

VPPのstartup.confに設定を追記します。
青文字箇所を追記してください。*2
緑文字箇所はコメントアウトしてください。

vi /etc/vpp/startup.conf

[root@c76g116 ~]# vi /etc/vpp/startup.conf
unix {
  nodaemon
  log /var/log/vpp/vpp.log
  full-coredump
  cli-listen /run/vpp/cli.sock
  gid vpp
  startup-config /root/vpp.cfg
}

dpdk {
        dev default {
                num-rx-desc 512
                num-tx-desc 512
        }
        no-multi-seg
        dev 0000:05:00.0 {
                name ens2f0
                num-rx-queues 2
                num-tx-queues 2
        }
        dev 0000:05:00.1 {
                name ens2f1
                num-rx-queues 2
                num-tx-queues 2
        }
}

cpu {
        ## Set logical CPU core where main thread runs, if main core is not set
        ## VPP will use core 1 if available
         main-core 1

        ## Set logical CPU core(s) where worker threads are running
        # corelist-workers 2-3,18-19
         corelist-workers 2-3
}

上記の設定はVPPサービス起動時にインターフェースをアタッチする設定やvpp.cfgファイルの参照先パスの設定となります。*3

3-4.VPPのvpp.cfg設定

vpp.cfgファイルはCiscoで言うところのstartup-configファイルに相当します。
これを設定しておかないと、起動するたびにIPアドレスの設定などを都度実施することになりますので、最低限の設定を投入します。

vi /root/vpp.cfg

[root@c76g116 ~]# vi /root/vpp.cfg

set int ip address ens2f0 192.168.30.116/24
set int ip address ens2f1 192.168.31.116/24
set int state ens2f0 up
set int state ens2f1 up

IPの設定、最後にインターフェースアップ設定を入れておきます。*4

3-5.VPPサービス自動起動設定と再起動

VPPサービス自動起動設定と再起動を実施します。

systemctl enable vpp

reboot

4.動作確認

4-1.インターフェース周りの確認

以下のコマンドでVPPコンソールに入ります。

vppctl

出力例

[root@c76g116 ~]# vppctl
    _______    _        _   _____  ___
 __/ __/ _ \  (_)__    | | / / _ \/ _ \
 _/ _// // / / / _ \   | |/ / ___/ ___/
 /_/ /____(_)_/\___/   |___/_/  /_/

vpp#

VPPコンソールに入ったら、以下4つのコマンドでステータスを確認します。

show pci
show hardware-interfaces
show interface
show interface addr
show threads

出力例
確認するポイントを赤文字で記載します。

vpp# show pci
Address      Sock VID:PID     Link Speed   Driver          Product Name                    Vital Product Data
0000:02:00.0   0  14e4:1657   5.0 GT/s x2  tg3             HPE Ethernet 1Gb 4-port 331i Ada PN: N/A
                                                                                           EC: A-5427
                                                                                           SN: N/A
                                                                                           MN: 103C
                                                                                           V0: 0x 35 57 20 50 43 49 65 47 ...
                                                                                           V1: 0x 32 30 2e 31 32 2e 32
                                                                                           V2: 0x 4e 2f 41
                                                                                           V3: 0x 31 2e 34 36
                                                                                           V5: 0x 30 41
                                                                                           V6: 0x 32 30 2e 36 2e 35 30
                                                                                           V7: 0x 33 33 31 69
                                                                                           VA: 0x 32 30 2e 31 32 2e 34 31
                                                                                           RV: 0x a1 00 00 00 00 00 00 00 ...
0000:02:00.1   0  14e4:1657   5.0 GT/s x2  tg3             HPE Ethernet 1Gb 4-port 331i Ada PN: N/A
各インターフェースごとにPCI情報が表示されますが省略します。
0000:02:00.2   0  14e4:1657   5.0 GT/s x2  tg3             HPE Ethernet 1Gb 4-port 331i Ada PN: N/A
0000:02:00.3   0  14e4:1657   5.0 GT/s x2  tg3             HPE Ethernet 1Gb 4-port 331i Ada PN: N/A
0000:05:00.0   0  8086:10fb   5.0 GT/s x8  vfio-pci
0000:05:00.1   0  8086:10fb   5.0 GT/s x8  vfio-pci


vpp# show hardware-interfaces
              Name                Idx   Link  Hardware
ens2f0                             1     up   ens2f0
  Link speed: 10 Gbps
  Ethernet address 00:1b:21:8e:84:c8
  Intel 82599
    carrier up full duplex mtu 9206
    flags: admin-up pmd tx-offload intel-phdr-cksum rx-ip4-cksum
    Devargs:
    rx: queues 2 (max 128), desc 512 (min 32 max 4096 align 8)
    tx: queues 2 (max 64), desc 512 (min 32 max 4096 align 8)
    pci: device 8086:10fb subsystem 108e:7b11 address 0000:05:00.00 numa 0
    max rx packet len: 15872
    promiscuous: unicast off all-multicast on
    vlan offload: strip off filter off qinq off
    rx offload avail:  vlan-strip ipv4-cksum udp-cksum tcp-cksum tcp-lro
                       macsec-strip vlan-filter vlan-extend jumbo-frame scatter
                       security keep-crc rss-hash
    rx offload active: ipv4-cksum
    tx offload avail:  vlan-insert ipv4-cksum udp-cksum tcp-cksum sctp-cksum
                       tcp-tso macsec-insert multi-segs security
    tx offload active: udp-cksum tcp-cksum
    rss avail:         ipv4-tcp ipv4-udp ipv4 ipv6-tcp-ex ipv6-udp-ex ipv6-tcp
                       ipv6-udp ipv6-ex ipv6
    rss active:        ipv4-tcp ipv4-udp ipv4 ipv6-tcp-ex ipv6-udp-ex ipv6-tcp
                       ipv6-udp ipv6-ex ipv6
    tx burst function: ixgbe_xmit_pkts
    rx burst function: ixgbe_recv_pkts_vec

ens2f1                             2     up   ens2f1
  Link speed: 10 Gbps
  Ethernet address 00:1b:21:8e:84:c9
  Intel 82599
    carrier up full duplex mtu 9206
    flags: admin-up pmd tx-offload intel-phdr-cksum rx-ip4-cksum
    Devargs:
    rx: queues 2 (max 128), desc 512 (min 32 max 4096 align 8)
    tx: queues 2 (max 64), desc 512 (min 32 max 4096 align 8)
    pci: device 8086:10fb subsystem 108e:7b11 address 0000:05:00.01 numa 0
    max rx packet len: 15872
    promiscuous: unicast off all-multicast on
    vlan offload: strip off filter off qinq off
    rx offload avail:  vlan-strip ipv4-cksum udp-cksum tcp-cksum tcp-lro
                       macsec-strip vlan-filter vlan-extend jumbo-frame scatter
                       security keep-crc rss-hash
    rx offload active: ipv4-cksum
    tx offload avail:  vlan-insert ipv4-cksum udp-cksum tcp-cksum sctp-cksum
                       tcp-tso macsec-insert multi-segs security
    tx offload active: udp-cksum tcp-cksum
    rss avail:         ipv4-tcp ipv4-udp ipv4 ipv6-tcp-ex ipv6-udp-ex ipv6-tcp
                       ipv6-udp ipv6-ex ipv6
    rss active:        ipv4-tcp ipv4-udp ipv4 ipv6-tcp-ex ipv6-udp-ex ipv6-tcp
                       ipv6-udp ipv6-ex ipv6
    tx burst function: ixgbe_xmit_pkts
    rx burst function: ixgbe_recv_pkts_vec

    extended stats:
      mac remote errors                                    1
local0                             0    down  local0
  Link speed: unknown
  local


vpp# show interface
              Name               Idx    State  MTU (L3/IP4/IP6/MPLS)     Counter          Count
ens2f0                            1      up          9000/0/0/0
ens2f1                            2      up          9000/0/0/0
local0                            0     down          0/0/0/0


vpp# show interface addr
ens2f0 (up):
  L3 192.168.30.116/24
ens2f1 (up):
  L3 192.168.31.116/24
local0 (dn):


vpp# show threads
ID     Name                Type        LWP     Sched Policy (Priority)  lcore  Core   Socket State
0      vpp_main                        24943   other (0)                1      2      0
1      vpp_wk_0            workers     24945   other (0)                2      4      0
2      vpp_wk_1            workers     24946   other (0)                3      9      0
4-2.疎通確認

自身のIPにPingが飛ばないため、対向機器にPingを飛ばすか、対向機器からPingを飛ばしてください。

vpp# ping 192.168.30.116

Statistics: 5 sent, 0 received, 100% packet loss
自身のIPにはPingが飛びません。

vpp# ping 192.168.30.254
116 bytes from 192.168.30.254: icmp_seq=1 ttl=64 time=.3834 ms
116 bytes from 192.168.30.254: icmp_seq=2 ttl=64 time=.3127 ms
116 bytes from 192.168.30.254: icmp_seq=3 ttl=64 time=.2928 ms
116 bytes from 192.168.30.254: icmp_seq=4 ttl=64 time=.3206 ms
116 bytes from 192.168.30.254: icmp_seq=5 ttl=64 time=.2619 ms

Statistics: 5 sent, 5 received, 0% packet loss
vpp#

ここまでOKであれば、Bare Metalとしての構築は完了です。

4-3.次項へ進む前の準備

本項からは仮想マシンc77g118を作成してVPPをインストールした後、Linux Bridge、OvS-DPDK、SR-IOVのそれぞれで外部NWと接続する際のポイントなどを記載していきます。

同一の物理マシン上で作業を続ける場合、以下のコマンドにより設定後、一旦rebootしてください。*5

systemctl disable vpp

vi /etc/rc.local

#modprobe vfio-pci
#ifconfig ens2f0 down
#ifconfig ens2f1 down

reboot

VPPの自動起動停止
/etc/rc.localを元に戻す設定

5.Linux Bridgeの場合

Linux Bridgeの詳細については、以下の過去記事を参照してください。
Linux nmcliコマンドによるBonding VLAN Bridge Interface設定 - Metonymical Deflection
説明は省きますが、設定方法のみ記載します。

5-1.brインターフェース作成とアタッチ

本項はHostOS上での設定となります。
brインターフェースを作成します。

nmcli connection add type bridge autoconnect yes con-name br300 ifname br300
nmcli connection modify br300 bridge.stp no
nmcli connection modify br300 ipv4.method disabled ipv6.method ignore
nmcli connection up br300
nmcli connection add type bridge-slave ifname ens2f0 master br300
nmcli con show
brctl show

nmcli connection add type bridge autoconnect yes con-name br301 ifname br301
nmcli connection modify br301 bridge.stp no
nmcli connection modify br301 ipv4.method disabled ipv6.method ignore
nmcli connection up br301
nmcli connection add type bridge-slave ifname ens2f1 master br301
nmcli con show
brctl show

仮想マシンにbrインターフェースをアタッチします。
f:id:metonymical:20200809220134j:plain

5-2.仮想マシン上でのVPPインストールと設定

以下、仮想マシン上での設定となります。
インストール方法は「2-1.事前準備とインストール」と同一です。

5-3.インターフェースのbsf確認

設定方法は同一なので、ポイントだけ記載します。

[root@c77g118 ~]# dpdk-devbind -s

Network devices using kernel driver
===================================
0000:00:03.0 'Virtio network device 1000' if=eth0 drv=virtio-pci unused=virtio_pci *Active*
0000:00:09.0 'Virtio network device 1000' if=eth1 drv=virtio-pci unused=virtio_pci
0000:00:0a.0 'Virtio network device 1000' if=eth2 drv=virtio-pci unused=virtio_pci
5-4.OS起動時の設定
vi /etc/rc.local

[root@c77g118 ~]# vi /etc/rc.local

modprobe vfio-pci
ifconfig eth1 down
ifconfig eth2 down
exit 0

[root@c77g118 ~]# chmod 755 /etc/rc.local
5-5.VPPのstartup.conf設定
vi /etc/vpp/startup.conf

[root@c77g118 ~]# vi /etc/vpp/startup.conf
unix {
  nodaemon
  log /var/log/vpp/vpp.log
  full-coredump
  cli-listen /run/vpp/cli.sock
  gid vpp
  startup-config /root/vpp.cfg
}

dpdk {
        dev default {
                num-rx-desc 512
                num-tx-desc 512
        }
        no-multi-seg
        dev 0000:00:09.0 {
                name eth1
                num-rx-queues 2
                num-tx-queues 2
        }
        dev 0000:00:0a.0 {
                name eth2
                num-rx-queues 2
                num-tx-queues 2
        }
}

cpu {
        ## Set logical CPU core where main thread runs, if main core is not set
        ## VPP will use core 1 if available
         main-core 1

        ## Set logical CPU core(s) where worker threads are running
        # corelist-workers 2-3,18-19
         corelist-workers 2-3
}
5-6.VPPのvpp.cfg設定
vi /root/vpp.cfg

[root@c77g118 ~]# vi /root/vpp.cfg

set int ip address eth1 192.168.30.118/24
set int ip address eth2 192.168.31.118/24
set int state eth1 up
set int state eth2 up
5-7.VPPサービス自動起動設定と再起動
systemctl enable vpp

reboot

6.OvS-DPDKの場合

OvS-DPDKの詳細については、以下の過去記事を参照してください。
CentOS7 ovs(Open vSwitch)+DPDKのビルドとネットワーク設定方法 - Metonymical Deflection
説明は省きますが、上記URLと異なっている箇所のみ記載します。
<補足>
HostOS上のOvSとDPDKは以下のVerにて設定しました。
ovs:v2.13.0
DPDK:v19.11.2

6-1.OvSインターフェース周りの設定

本項はHostOS上での設定となります。

♯DPDKにバインド
dpdk-devbind.py --bind=vfio-pci ens2f0
dpdk-devbind.py --bind=vfio-pci ens2f1

アップリンク(物理スイッチとの接続)の設定
ovs-vsctl add-port ovsbr0 dpdk300 \
vlan_mode=access tag=300 \
-- set Interface dpdk300 type=dpdk options:dpdk-devargs=0000:05:00.0
ovs-vsctl show

ovs-vsctl add-port ovsbr0 dpdk301 \
vlan_mode=access tag=301 \
-- set Interface dpdk301 type=dpdk options:dpdk-devargs=0000:05:00.1
ovs-vsctl show

♯ダウンリンク(仮想マシンとの接続)の設定
mkdir -p /usr/local/openvswitch/
touch /usr/local/openvswitch/vhuc300
ovs-vsctl add-port ovsbr0 vhuc300 \
vlan_mode=access tag=300 \
-- set Interface vhuc300 type=dpdkvhostuserclient \
options:vhost-server-path=/usr/local/openvswitch/vhuc300
ovs-vsctl show

mkdir -p /usr/local/openvswitch/
touch /usr/local/openvswitch/vhuc301
ovs-vsctl add-port ovsbr0 vhuc301 \
vlan_mode=access tag=301 \
-- set Interface vhuc301 type=dpdkvhostuserclient \
options:vhost-server-path=/usr/local/openvswitch/vhuc301
ovs-vsctl show

仮想マシンxmlファイル設定
ダウンリンクと仮想マシンのインターフェースを接続する設定となります。
それ以外にもHugepageやCPU Pinning設定が含まれていますが、詳細は過去記事を参照してください。

[root@c76g116 ~]# virsh edit c76g118

  <currentMemory unit='KiB'>8388608 </currentMemory>
  <memoryBacking>
    <hugepages>
      <page size='1048576' unit='KiB' nodeset='0'/>
    </hugepages>
  </memoryBacking>
  <vcpu placement='static'>4</vcpu>
  <cputune>
    <shares>8192</shares>
    <vcpupin vcpu='0' cpuset='10'/>
    <vcpupin vcpu='1' cpuset='11'/>
    <vcpupin vcpu='2' cpuset='12'/>
    <vcpupin vcpu='3' cpuset='13'/>
    <emulatorpin cpuset='10-13'/>
  </cputune>

  <cpu mode='host-model' check='partial'>
    <model fallback='allow'/>
    <numa>
      <cell id='0' cpus='0-3' memory='8388608' unit='KiB' memAccess='shared'/>
    </numa>
  </cpu>

   <interface type='vhostuser'>
     <source type='unix' path='/usr/local/openvswitch/vhuc300' mode='server'/>
     <model type='virtio'/>
   </interface>
   <interface type='vhostuser'>
     <source type='unix' path='/usr/local/openvswitch/vhuc301' mode='server'/>
     <model type='virtio'/>
   </interface>青=追記,緑=置換
6-2.仮想マシン上でのVPPインストールと設定

以下、仮想マシン上での設定となります。
インストール方法は「2-1.事前準備とインストール」と同一です。

6-3.インターフェースのbsf確認

設定方法は同一なので、ポイントだけ記載します。

[root@c77g118 ~]# dpdk-devbind -s

Network devices using kernel driver
===================================
0000:00:03.0 'Virtio network device 1000' if=eth0 drv=virtio-pci unused=virtio_pci *Active*
0000:00:09.0 'Virtio network device 1000' if=eth1 drv=virtio-pci unused=virtio_pci
0000:00:0a.0 'Virtio network device 1000' if=eth2 drv=virtio-pci unused=virtio_pci

Linux Bridgeの場合と比較して、全く変化がないことを確認してください。
bsf番号(00:09.0など)やインターフェース名が変わっているようであれば、この後の項においても同様に変更してください。
特にbsf番号が変わる場合があるため、注視してください。

6-4.OS起動時の設定

「5-4.OS起動時の設定」と同一です。

6-5.VPPのstartup.conf設定

「5-5.VPPのstartup.conf設定」と同一です。

6-6.VPPのvpp.cfg設定

「5-6.VPPのvpp.cfg設定」と同一です。

6-7.VPPサービス自動起動設定と再起動

「5-7.VPPサービス自動起動設定と再起動」と同一です。

7.SR-IOVの場合

SR-IOVの詳細については、以下の過去記事を参照してください。
CentOS7でSR-IOV設定 - Metonymical Deflection
CentOS8 小ネタ集その4:SR-IOVの設定 - Metonymical Deflection
説明は省きますが、設定方法のみ記載します。

上記に加え、以下の設定でMTUを1501以上にしてください。*6

vi /etc/udev/rules.d/50-eth.rules

ACTION=="add", SUBSYSTEM=="net", KERNEL=="ens2f0", RUN+="/sbin/ip link set ens2f0 mtu 9000"
ACTION=="add", SUBSYSTEM=="net", KERNEL=="ens2f1", RUN+="/sbin/ip link set ens2f1 mtu 9000"
7-1.SR-IOV VFへのアタッチ

本項はHostOS上での設定となります。
仮想マシンのインターフェースとして、SR-IOV VFをアタッチします。
f:id:metonymical:20200809235202j:plain

7-2.仮想マシン上でのVPPインストールと設定

以下、仮想マシン上での設定となります。
インストール方法は「2-1.事前準備とインストール」と同一です。

7-3.インターフェースのbsf確認

設定方法は同一なので、ポイントだけ記載します。

[root@c77g118 ~]# dpdk-devbind -s

Network devices using kernel driver
===================================
0000:00:03.0 'Virtio network device 1000' if=eth0 drv=virtio-pci unused=virtio_pci,vfio-pci *Active*
0000:00:09.0 '82599 Ethernet Controller Virtual Function 10ed' if=eth1 drv=ixgbevf unused=vfio-pci
0000:00:0a.0 '82599 Ethernet Controller Virtual Function 10ed' if=eth2 drv=ixgbevf unused=vfio-pci
7-4.OS起動時の設定

「5-4.OS起動時の設定」と同一です。

7-5.VPPのstartup.conf設定

「5-5.VPPのstartup.conf設定」と同一です。

7-6.VPPのvpp.cfg設定

「5-6.VPPのvpp.cfg設定」と同一です。

7-7.VPPサービス自動起動設定と再起動

「5-7.VPPサービス自動起動設定と再起動」と同一です。

以上です。

8.最後に

参考サイトは前回記事と同様です。

KVM VMWare ESXi6.7 VMWare Work pro15
Bare Metal N/A N/A
Linux Bridge vSwitch(未成功) LANセグメント
OvS-DPDK ? N/A
SR-IOV SR-IOV(未成功) N/A

上記より、ESXiの仮想スイッチ上でDPDKを動作させる方法が少し気になっています。
以下URLに記載の通り、nmlx5-core-PMDとして対応しているように見受けられるのですが、VMWareネイティブのDPDK対応仮想スイッチに相当するものがあるか否かがよくわからず。。。
https://docs.mellanox.com/pages/releaseview.action?pageId=15049806
N-VDSであればDPDKが動作しているのか?ちょっと気になっています。

なお、以下の全体構成図では、どこでPMDが動作しているかも表していますが、
f:id:metonymical:20200810000205j:plain
今後はOvS-DPDKとSR-IOVのメリットのみを享受できるような方向性で進化&深化していくと考えています。
具体例として、vDPA(virtual data path acceleration)やScaleble IOVなどが挙げられますが、k8sのPod上で、クラウドネイティブな柔軟性を確保しつつ、Bare Metalに近い性能を簡単に引き出せる技術だと考えています。

vDPA
Achieving network wirespeed in an open standard manner: introducing vDPA
Scaleble IOV
https://01.org/blogs/2019/assignable-interfaces-intel-scalable-i/o-virtualization-linux

これらをすぐにキャッチアップできるようにするためにも、今回のような構成を充分に理解し、サクッと組み上げられる基礎的な技術力が必須になっていくのでは?と考えています。

なお、過去記事でCiscoCSR1000vなどの仮想アプライアンスについて記載しましたが、単体での性能を確認することに加えて、VPPと比較することにより、どの程度性能が出るのか?といった相対的な指標が導き出せた方が評価し易いかもしれないと考えました。
なので、性能値を測る上での比較元として利用するため、どのような環境においても、VPPをサクッと構築できたら便利だなと思い今回の記事を書いた次第です。

*1:ちなみに、先頭の「0000」は、PCIのDomain番号となります。

*2:DPDKの設定項目はstartup.confの下方に存在しますが、全てコメントアウトされているため、そのまま追記して構いません。

*3:ファイル名や格納パスは任意でOKなようです。

*4:前回記事とは異なり、今回は通常のRouterとして動作させるため、本設定のみで充分です。

*5:dpdk-devbind -uコマンドにより、DPDKの制御下からUnbindできるもののKernel制御に戻らない場合が多いので筐体ごと再起動してください。

*6:MTU1500以下の場合、疎通不可となる事象を確認しましたので、1501以上に設定してください。