Я пытаюсь настроить openvswitch с DPDK в Ubuntu 16.04 с помощью пакета openvswitch-switch-dpdk. Я использую сервер HP DL380 Gen-8 с картой Intel 82599ES Dual Port 10G.
Я могу связать порты на плате Intel с драйвером DPDK (пробовал и с vfio-pci, и с uio_pci_generic) успешно, но не могу добавить эти интерфейсы к мосту OVS, так как я продолжаю получать сообщение об ошибке could not open network device dpdk0 (No such device)
. Я следую процедуре из по этой ссылке .
Любая помощь в этом отношении будет принята с благодарностью.
Выход сервера
VT-d включен в BIOS, а iommu включен в grub
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
Два порта 10G на сетевой карте Intel 82599 настроены для использования драйвера 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"
Я не могу добавить порты 10G с драйвером DPDK к мосту 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)
TL; DR:
взгляд на системный журнал и ovs-журнал при запуске OpenvSwitch с dpdk, что идет не так, как надо на dpdk & инициализация портов.
Деталь:
Ваша установка выглядит хорошей до сих пор по сравнению с тем, что я обычно вижу. Учитывая то, что Вы сообщили о наиболее вероятной проблеме, правильно, где последнее сообщение об ошибке указывает на Вас, чтобы "Видеть, что ovs-vswitchd регистрируется для деталей". или в Системном журнале, куда большинство сообщений EAL идет.
В то время, когда Вы добавляете порт, Вы, вероятно, просто видите, что он не может найти его. То, что будет более интересным для Вас, является журналом во время, когда Вы (пере-) запускаете openvswitch. Там необходимо видеть, что он обнаруживает и инициализирует порты dpdk0 и dpdk1 - или в противном случае какие ошибки связаны.
Как ссылка я загрузил мой журнал , разделенный на три столбца для команды, ovs-журнала и системного журнала. Я ожидал бы, что что-то вокруг моей строки 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 .