在 Ubuntu 16.04 中使用 OpenvSwitch 和 DPDK

在 Ubuntu 16.04 中使用 OpenvSwitch 和 DPDK

我正在尝试使用 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

相关内容