FD.io/VPP(以下、VPP)のセットアップと自動起動設定までの構築方法を記載します。
TRexのDUTとして使用するため、前回記事のVyOSをVPPに変更しています。
なお、今回はVMware Workstation 15 Pro(以下、VMWareWrk)上のCentOS7.7で構築していきますが、KVMの場合と異なる点があります。
このため、KVM編は別の機会に記載したいと思います。
1.環境
1-1.VMWare
筐体 : 自作PC(Win10pro) CPU : Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz VMWare : VMware(R) Workstation 15 Pro 15.5.6 build-16341506 OS : CentOS7.7 TRex : v20.05.1
1-2.全体構成
FD.io/VPPの環境を構築していきます。
VMWareWrk上では上手くいきましたが、ESXi6.7上では上手く行かず。。
1-3 .全体の流れ ~概要~
- 事前準備とインストール
- 初期設定
- 動作確認
2.事前準備とインストール
3.初期設定
3-1.インターフェースのbsf確認
VPPにアサインするインターフェースのbfs(Bus,Slot,Function)番号とインターフェース名を確認します。
赤文字で記載した「03:00.0」の部分が「bus:slot.function」になります。*1
[root@c77g126 ~]# dpdk-devbind -s Network devices using kernel driver =================================== 0000:02:00.0 '82545EM Gigabit Ethernet Controller (Copper) 100f' if=ens32 drv=e1000 unused= *Active* 0000:03:00.0 'VMXNET3 Ethernet Controller 07b0' if=ens160 drv=vmxnet3 unused= 0000:0b:00.0 'VMXNET3 Ethernet Controller 07b0' if=ens192 drv=vmxnet3 unused=
以下のコマンドでも確認可能ですので、どちらでも構いません。
[root@c77g126 ~]# lshw -businfo -c network Bus info Device Class Description ==================================================== pci@0000:02:00.0 ens32 network 82545EM Gigabit Ethernet Controller (Copper) pci@0000:03:00.0 ens160 network VMXNET3 Ethernet Controller pci@0000:0b:00.0 ens192 network VMXNET3 Ethernet Controller virbr0-nic network Ethernet interface virbr0 network Ethernet interface
3-2.OS起動時の設定
OS起動時にvfio-pciの読込みとインターフェースダウンを実施しますので、以下の通り設定を最下行に追記してください。
設定完了後、実行権限を付与します。
vi /etc/rc.local [root@c77g126 ~]# vi /etc/rc.local modprobe vfio-pci ifconfig ens160 down ifconfig ens192 down exit 0 [root@c77g126 ~]# chmod 755 /etc/rc.local
3-3.VPPのstartup.conf設定
VPPのstartup.confに設定を追記します。
青文字箇所を追記してください。*2
vi /etc/vpp/startup.conf [root@c77g126 ~]# 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:03:00.0 { name ens160 num-rx-queues 2 num-tx-queues 2 } dev 0000:0b:00.0 { name ens192 num-rx-queues 2 num-tx-queues 2 } }
上記の設定はVPPサービス起動時にインターフェースをアタッチする設定やvpp.cfgファイルの参照先パスの設定となります。*3
3-4.VPPのvpp.cfg設定
vpp.cfgファイルはCiscoで言うところのstartup-configファイルに相当します。
これを設定しておかないと、起動するたびにIPアドレスの設定などを都度実施することになりますので、最低限の設定を投入します。
vi /root/vpp.cfg [root@c77g126 ~]# vi /root/vpp.cfg set int ip address ens160 192.168.7.1/24 set int ip address ens192 192.168.8.1/24 ip route add 16.0.0.0/24 via 192.168.7.2 ip route add 48.0.0.0/24 via 192.168.8.2 set int state ens160 up set int state ens192 up
IPの設定とStatic Routeの設定、最後にインターフェースアップ設定を入れておきます。*4
4.動作確認
4-1.インターフェース周りの確認
以下のコマンドでVPPコンソールに入ります。
vppctl
出力例
[root@c77g126 ~]# vppctl _______ _ _ _____ ___ __/ __/ _ \ (_)__ | | / / _ \/ _ \ _/ _// // / / / _ \ | |/ / ___/ ___/ /_/ /____(_)_/\___/ |___/_/ /_/ vpp#
VPPコンソールに入ったら、以下4つのコマンドでステータスを確認します。
show pci show hardware-interfaces show interface show interface addr
出力例
確認するポイントを赤文字で記載します。
vpp# show pci Address Sock VID:PID Link Speed Driver Product Name Vital Product Data 0000:02:00.0 0 8086:100f unknown e1000 0000:03:00.0 0 15ad:07b0 5.0 GT/s x32 vfio-pci 0000:0b:00.0 0 15ad:07b0 5.0 GT/s x32 vfio-pci vpp# show hardware-interfaces Name Idx Link Hardware ens160 1 up ens160 Link speed: 10 Gbps Ethernet address 00:0c:29:35:dd:19 VMware VMXNET3 carrier up full duplex mtu 9206 flags: admin-up pmd Devargs: rx: queues 2 (max 16), desc 512 (min 128 max 4096 align 1) tx: queues 1 (max 8), desc 512 (min 512 max 4096 align 1) pci: device 15ad:07b0 subsystem 15ad:07b0 address 0000:03:00.00 numa 0 max rx packet len: 16384 promiscuous: unicast off all-multicast on vlan offload: strip off filter off qinq off rx offload avail: vlan-strip udp-cksum tcp-cksum tcp-lro vlan-filter jumbo-frame scatter rss-hash rx offload active: none tx offload avail: vlan-insert udp-cksum tcp-cksum tcp-tso multi-segs tx offload active: multi-segs rss avail: ipv4-tcp ipv4 ipv6-tcp ipv6 rss active: none tx burst function: vmxnet3_xmit_pkts rx burst function: vmxnet3_recv_pkts tx frames ok 1 tx bytes ok 42 extended stats: tx good packets 1 tx good bytes 42 tx q0packets 1 tx q0bytes 42 ens192 2 up ens192 Link speed: 10 Gbps Ethernet address 00:0c:29:35:dd:23 VMware VMXNET3 carrier up full duplex mtu 9206 flags: admin-up pmd Devargs: rx: queues 2 (max 16), desc 512 (min 128 max 4096 align 1) tx: queues 1 (max 8), desc 512 (min 512 max 4096 align 1) pci: device 15ad:07b0 subsystem 15ad:07b0 address 0000:0b:00.00 numa 0 max rx packet len: 16384 promiscuous: unicast off all-multicast on vlan offload: strip off filter off qinq off rx offload avail: vlan-strip udp-cksum tcp-cksum tcp-lro vlan-filter jumbo-frame scatter rss-hash rx offload active: none tx offload avail: vlan-insert udp-cksum tcp-cksum tcp-tso multi-segs tx offload active: multi-segs rss avail: ipv4-tcp ipv4 ipv6-tcp ipv6 rss active: none tx burst function: vmxnet3_xmit_pkts rx burst function: vmxnet3_recv_pkts tx frames ok 1 tx bytes ok 42 extended stats: tx good packets 1 tx good bytes 42 tx q0packets 1 tx q0bytes 42 local0 0 down local0 Link speed: unknown local vpp# show interface Name Idx State MTU (L3/IP4/IP6/MPLS) Counter Count ens160 1 up 9000/0/0/0 tx packets 1 tx bytes 42 ens192 2 up 9000/0/0/0 tx packets 1 tx bytes 42 local0 0 down 0/0/0/0 vpp# show interface addr ens160 (up): L3 192.168.7.1/24 ens192 (up): L3 192.168.8.1/24 local0 (dn):
4-2.疎通確認
自身のIPにPingが飛ばないため、対向機器にPingを飛ばすか、対向機器からPingを飛ばしてください。
vpp# ping 192.168.7.1 Statistics: 5 sent, 0 received, 100% packet loss 自身のIPにはPingが飛びません。 vpp# ping 192.168.7.2 116 bytes from 192.168.7.2: icmp_seq=1 ttl=64 time=.3834 ms 116 bytes from 192.168.7.2: icmp_seq=2 ttl=64 time=.3127 ms 116 bytes from 192.168.7.2: icmp_seq=3 ttl=64 time=.2928 ms 116 bytes from 192.168.7.2: icmp_seq=4 ttl=64 time=.3206 ms 116 bytes from 192.168.7.2: icmp_seq=5 ttl=64 time=.2619 ms Statistics: 5 sent, 5 received, 0% packet loss vpp#
ここまでOKであれば、前回&前々回記事を参考にTRexから負荷を印加してみてください。
以上です。
5.最後に
以下のサイトを参考にさせて頂きました。
VPP事始め
Setup the FD.io Repository - Centos 7 — The Vector Packet Processor 20.01 documentation
VPP with VMware/Vmxnet3 — The Vector Packet Processor 20.05 documentation
先にも記載しましたが、VMware Workstation 15 Proでは正常に動作しましたが、ESXi6.7上では外部と疎通できずでした。
仮想マシンはCentOS7に加え、Ubuntu18.04でも試行しましたがNGでした。
CPUパフォーマンスカウンタを仮想化、IOMMUを仮想化の有効化も試しましたがNGでした。*5
なお、KVM上での動作については以下の構成で全てOKだったので、今後記載していきたいと思います。
- ベアメタル
- Linux Bridge
- OvS-DPDK
- SR-IOV
SR-IOVではMTUを1501以上にしないと外部疎通が不可など、割とクセがあるので、細かく記載できればと考えています。
仮想マシン上でDPDKが動作するものも増えてきたため、性能を測る上での比較元として、VPPを活用していきたいなと考えています。
あとは、DPDK利用時のチューニングの勘所などを知る上で、VPPはとてもよい教材だと思うので、もう少し掘り下げて動作を確認していければと考えています。
加えて、以下の構成も試してみたいなと考えています。