When I try to set other_config:n-dpdk-rxqs to 64 with two intel niantic dpdk
ports on a single dpdk bridge, the bridge instance will 'crash' - I
can't access
it's flows through ovs-ofctl commands. I am running an OVS from the 2.5
branch,
specifically commit ID b3e263929a7a00c96a1329f93f1b8fce58b726e4, DPDK 16.04.
If I set other_config:n-dpdk-rxqs to 32, everything works:
Sep 16 10:18:35 bl460gen9-05 ovs-vsctl: ovs|00001|vsctl|INFO|Called as
ovs-vsctl set Open_vSwitch . other_config:n-dpdk-rxqs=32
Sep 16 10:18:35 bl460gen9-05 ovs-vswitchd[24697]: PMD:
ixgbe_dev_tx_queue_setup(): sw_ring=0x7fceda7954c0
hw_ring=0x7fceda79d500 dma_addr=0xfda79d500
Sep 16 10:18:35 bl460gen9-05 ovs-vswitchd[24697]: PMD:
ixgbe_set_tx_function(): Using simple tx code path
Sep 16 10:18:35 bl460gen9-05 ovs-vswitchd[24697]: PMD:
ixgbe_set_tx_function(): Vector tx enabled.
...(lots of the same three lines)
If I set n-dpdk-rxqs to 64 with a single dpdk port, everything works.
But if I try for 64 with _two_ ports, which should be a value the
niantic PMD supports, I get:
Sep 16 10:21:47 bl460gen9-05 ovs-vsctl: ovs|00001|vsctl|INFO|Called as
ovs-vsctl set Open_vSwitch . other_config:n-dpdk-rxqs=64
Sep 16 10:21:47 bl460gen9-05 ovs-vswitchd[24697]: PMD:
ixgbe_dev_tx_queue_setup(): sw_ring=0x7fceda7954c0
hw_ring=0x7fceda79d500 dma_addr=0xfda79d500
Sep 16 10:21:47 bl460gen9-05 ovs-vswitchd[24697]: PMD:
ixgbe_set_tx_function(): Using simple tx code path
Sep 16 10:21:47 bl460gen9-05 ovs-vswitchd[24697]: PMD:
ixgbe_set_tx_function(): Vector tx enabled.
...
Sep 16 10:21:47 bl460gen9-05 ovs-vswitchd[24697]: PMD:
ixgbe_dev_rx_queue_setup(): sw_ring=0x7fced8f32f40
sw_sc_ring=0x7fced8f2ee00 hw_ring=0x7fced8f37080 dma_addr=0xfd8f37080
Sep 16 10:21:47 bl460gen9-05 ovs-vswitchd[24697]: PMD:
ixgbe_dev_rx_queue_setup(): sw_ring=0x7fced8f1a8c0
sw_sc_ring=0x7fced8f16780 hw_ring=0x7fced8f1ea00 dma_addr=0xfd8f1ea00
Sep 16 10:21:47 bl460gen9-05 ovs-vswitchd[24697]: PMD:
ixgbe_set_rx_function(): Vector rx enabled, please make sure RX burst
size no less than 4 (port=1).
Sep 16 10:21:48 bl460gen9-05 ovs-vswitchd[24697]: PMD:
ixgbe_alloc_rx_queue_mbufs(): RX mbuf alloc failed queue_id=60
Sep 16 10:21:48 bl460gen9-05 ovs-vswitchd[24697]: PMD:
ixgbe_dev_rx_queue_start(): Could not alloc mbuf for queue:60
Sep 16 10:21:48 bl460gen9-05 ovs-vswitchd[24697]: PMD:
ixgbe_dev_start(): Unable to start rxtx queues
Sep 16 10:21:48 bl460gen9-05 ovs-vswitchd[24697]: PMD:
ixgbe_dev_start(): failure in ixgbe_dev_start(): -1
Sep 16 10:21:48 bl460gen9-05 ovs-vswitchd[24697]:
ovs|00070|dpdk|ERR|Interface dpdk1 start error: Input/output error
Sep 16 10:21:48 bl460gen9-05 ovs-vswitchd[24697]:
ovs|00071|dpif_netdev|ERR|Failed to set dpdk interface dpdk1 rx_queue to: 64
Sep 16 10:21:48 bl460gen9-05 kernel: [156923.315906]
ovs-vswitchd[24697]: segfault at 410100 ip 0000000000460192 sp
00007ffeba4587b0 error 7 in ovs-vswitchd-dpdk[400000+1bc000]
Sep 16 10:21:49 bl460gen9-05 ovs-vswitchd:
ovs|00002|daemon_unix(monitor)|ERR|1 crashes: pid 24697 died, killed
(Segmentation fault), core dumped, restarting
The coredump shows a bunch of threads doing poll() epoll_wait(), select() or
nanosleep() except one:
(gdb) bt
#0 0x0000000000460192 in dp_netdev_process_rxq_port.isra ()
#1 0x00007fe6ffda7620 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#2 0x00000000004d4b70 in shash_add_nocopy__ ()
#3 0x0000000002218de0 in ?? ()
#4 0x00000000004e1ac5 in xmalloc ()
#5 0x0000000000000000 in ?? ()
(gdb)
This is with 12G hugepages on node0. Despite the error messages, ps
shows that
vswitchd is still running:
john@bl460gen9-05:~$ ps -ef | grep -i ovs-vswitchd
root 24696 1 0 10:18 ? 00:00:00 ovs-vswit... --dpdk -c
0x1 -n 2 --socket-mem 12288,0 -- 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 25802 24696 79 10:23 ? 00:00:00 ovs-vswitchd --dpdk -c
0x1 -n 2 --socket-mem 12288 0 -- 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
john 25804 24200 0 10:23 pts/3 00:00:00 grep -i ovs-vswitchd
It won't respond, however to /etc/init.d/openvswitch-switch stop, which
gives
the message:
root@bl460gen9-05:/home/john# /etc/init.d/openvswitch-switch stop
Exiting ovs-vswitchd (28055).
ovsdb-server is not running.
But is apparently lying because I still see ovs-vswitchd running. I have
to kill
it and my hugepages are therefore not de-allocated.
But I can't show flows, nor can I add a bridge and look at the flows
later. I
can run testpmd with 64 rxq and 64 txq with no issue:
# testpmd -c 0x3 -d
/usr/lib/x86_64-linux-gnu/dpdk/librte_pmd_ixgbe.so.1.1 -- --rxq=64
--txq=64 -i
I can succesfully forward in this way, with two ports. Thinking that it
was simply a memory
allocation issue, I tried allocating less memory using --socket-mem, and was
able to succesfully run testpmd with only 1G of hugepage memory and 64
rxq and
txq. I have not yet tried this with OVS master and DPDK 16.07.
_______________________________________________
discuss mailing list
discuss@openvswitch.org
http://openvswitch.org/mailman/listinfo/discuss