我正在尝试使用 openvswitch-switch-dpdk 包在 Ubuntu 16.04 中使用 DPDK 设置 openvswitch。我正在使用带有 Intel 82599ES 双端口 10G 卡的 HP DL380 Gen-8 服务器。
我可以成功将 Intel 卡上的端口绑定到 DPDK 驱动程序(已尝试使用 vfio-pci 和 uio_pci_generic),但无法将这些接口添加到 OVS 桥接器,因为我一直收到错误could not open network device dpdk0 (No such device)
。我按照以下程序操作此链接。
任何在这方面的帮助都将不胜感激。
服务器输出
BIOS 中启用了 VT-d,grub 中启用了 iommu
root@kvmtwo:~# cat /proc/cmdline BOOT_IMAGE=/vmlinuz-4.4.0-22-generic root=/dev/mapper/kvmtwo--vg-root ro iommu=pt intel_iommu=on
已启用大页面
root@kvmtwo:~# cat /proc/meminfo |grep -i huge AnonHugePages: 135168 kB HugePages_Total: 1024 HugePages_Free: 512 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB
Intel 82599 NIC 上的两个 10G 端口配置为使用 uio_pci_generic 驱动程序
root@kvmtwo:~# dpdk_nic_bind -s Network devices using DPDK-compatible driver ============================================ 0000:07:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv=uio_pci_generic unused=ixgbe 0000:07:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv=uio_pci_generic unused=ixgbe Network devices using kernel driver =================================== 0000:03:00.0 'NetXtreme BCM5719 Gigabit Ethernet PCIe' if=eno1 drv=tg3 unused=uio_pci_generic 0000:03:00.1 'NetXtreme BCM5719 Gigabit Ethernet PCIe' if=eno2 drv=tg3 unused=uio_pci_generic *Active* 0000:03:00.2 'NetXtreme BCM5719 Gigabit Ethernet PCIe' if=eno3 drv=tg3 unused=uio_pci_generic 0000:03:00.3 'NetXtreme BCM5719 Gigabit Ethernet PCIe' if=eno4 drv=tg3 unused=uio_pci_generic Other network devices ===================== <none>
内容
/etc/default/openvswitch-switch
和/etc/dpdk/dpdk.conf
#/etc/default/openvswitch-switch DPDK_OPTS='--dpdk -c 0x1 -n 4 -m 4096,4096 --vhost-owner libvirt-qemu:kvm --vhost-perm 0664' /etc/dpdk/dpdk.conf NR_2M_PAGES=1024 NR_1G_PAGES=4
openvswitch 正在运行并使用 DPDK 库
root@kvmtwo:~# ovs-vsctl show 44ea2456-b7dc-4b76-a7da-222483ea08af ovs_version: "2.5.0" root@kvmtwo:~# ps -ef|grep ovs|grep dpdk root 1629 1 0 14:47 ? 00:00:00 ovs-vswit... --dpdk -c 0x1 -n 4 -m 4096,4096 --vhost-owner libvirt-qemu:kvm --vhost-perm 0664 -- unix:/var/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --mlockall --no-chdir --log-file=/var/log/openvswitch/ovs-vswitchd.log --pidfile=/var/run/openvswitch/ovs-vswitchd.pid --detach --monitor root 1630 1629 0 14:47 ? 00:00:03 ovs-vswitchd --dpdk -c 0x1 -n 4 -m 4096,4096 --vhost-owner libvirt-qemu:kvm --vhost-perm 0664 -- unix:/var/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --mlockall --no-chdir --log-file=/var/log/openvswitch/ovs-vswitchd.log --pidfile=/var/run/openvswitch/ovs-vswitchd.pid --detach --monitor
我可以添加 OVS 桥:
root@kvmtwo:~# ovs-vsctl show 44ea2456-b7dc-4b76-a7da-222483ea08af Bridge "ovsbr0" Port "ovsbr0" Interface "ovsbr0" type: internal ovs_version: "2.5.0"
我无法将带有 DPDK 驱动程序的 10G 端口添加到 OVS 桥。
root@kvmtwo:~# ovs-vsctl add-port ovsbr0 dpdk0 -- set Interface dpdk0 type=dpdk ovs-vsctl: Error detected while setting up 'dpdk0'. See ovs-vswitchd log for details. root@kvmtwo:~# ovs-vsctl show 44ea2456-b7dc-4b76-a7da-222483ea08af Bridge "ovsbr0" Port "dpdk0" Interface "dpdk0" type: dpdk error: "could not open network device dpdk0 (No such device)" Port "ovsbr0" Interface "ovsbr0" type: internal ovs_version: "2.5.0" root@kvmtwo:~# tail /var/log/openvswitch/ovs-vswitchd.log 2016-06-08T10:05:40.251Z|00054|bridge|WARN|could not open network device dpdk0 (No such device)
答案1
总结:
当使用 dpdk 启动 OpenvSwitch 时,查看 syslog 和 ovs-log,了解 dpdk 和端口初始化出了什么问题。
细节:
与我通常看到的相比,您的设置到目前为止看起来不错。考虑到您报告的内容,最可能的问题就在最后一条错误消息指向“查看 ovs-vswitchd 日志了解详细信息”的地方,或者在大多数 EAL 消息所在的 Syslog 中。
在添加端口时,您可能会发现它找不到它。对您来说更有趣的是您(重新)启动 openvswitch 时的日志。在那里您应该看到它发现并初始化端口 dpdk0 和 dpdk1 - 如果没有,则会出现哪些错误。
作为参考,我上传了我的日志,分为三列,分别用于命令、ovs-log 和 syslog。我估计第 54 行左右的某些内容在您的情况下无法正常工作。
应该是这样的:
ovs-ctl[3560]: EAL: PCI device 0000:04:00.1 on NUMA socket 0
ovs-ctl[3560]: EAL: probe driver: 8086:1528 rte_ixgbe_pmd
ovs-ctl[3560]: EAL: PCI memory mapped at 0x7f2140000000
ovs-ctl[3560]: EAL: PCI memory mapped at 0x7f2140200000
注意:还有此 Ubuntu 指南可帮助你https://help.ubuntu.com/16.04/serverguide/DPDK.html。