Sorry the last e-mail had wrong output format. We got a crash of ovs-vswitchd.I start ovs following the instructions of INSTALL.DPDK.md, with the ovs master code.In my enironment, there are four cpu cores, the "real_n_txq" of dpdk port is 1 and "txq_needs_locking" is "true" ...ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdevovs-vsctl add-port br0 dpdk0 -- set Interface dpdk0 type=dpdkovs-vsctl add-port br0 dpdkvhost0 -- set Interface dpdkvhost0 type=dpdkvhost It works, then i bring up a guest and do some tests, a segmentfault happenned to ovs-vswitchd when I run "iperf3" clients on guest and host at the same time.guest: iperf client sends tcp packets -> dpdkvhost0 -> OVS -> dpdk0 -> outsidehost: iperf client sends tcp packets -> br0 -> OVS -> dpdk0 -> outside The segmentfault like this:Program received signal SIGSEGV, Segmentation fault.eth_em_xmit_pkts (tx_queue=0x7f623d0f9880, tx_pkts=0x7f623d0ebee8, nb_pkts=65535) at dpdk-2.0.0/lib/librte_pmd_e1000/em_rxtx.c:436436 ol_flags = tx_pkt->ol_flags;(gdb) bt#0 eth_em_xmit_pkts (tx_queue=0x7f623d0f9880, tx_pkts=0x7f623d0ebee8, nb_pkts=65535) at dpdk-2.0.0/lib/librte_pmd_e1000/em_rxtx.c:436#1 0x0000000000625d3d in rte_eth_tx_burst at dpdk-2.0.0/x86_64-native-linuxapp-gcc/include/rte_ethdev.h:2572#2 dpdk_queue_flush__ (dev=dev@entry=0x7f623d0f9940, qid=qid@entry=0) at lib/netdev-dpdk.c:808#3 0x0000000000627324 in dpdk_queue_pkts (cnt=1, pkts=0x7fff5da5a8f0, qid=0, dev=0x7f623d0f9940) at lib/netdev-dpdk.c:1003#4 dpdk_do_tx_copy (netdev=netdev@entry=0x7f623d0f9940, qid=qid@entry=0, pkts=pkts@entry=0x7fff5da5ae80, cnt=cnt@entry=1) at lib/netdev-dpdk.c:1073#5 0x0000000000627e96 in netdev_dpdk_send__ (may_steal=<optimized out>, cnt=1, pkts=0x7fff5da5ae80, qid=0, dev=0x7f623d0f9940) at lib/netdev-dpdk.c:1116#6 netdev_dpdk_eth_send (netdev=0x7f623d0f9940, qid=<optimized out>, pkts=0x7fff5da5ae80, cnt=1, may_steal=<optimized out>) at lib/netdev-dpdk.c:1169
The traffics of guest and br0 are processing by main thread and pmd thread seperately. The pkts of br0 are sent by "netdev_dpdk_send__" with lock "rte_spinlock_lock" via dpdk port, and the pmd main thread processes the sending direction pkts of dpdk port by dpdk_queue_flush without lock. The carsh seems to be caused by this.We fixed it with this patch and the segmentfault did not happen again.The modification does not affect the performance phy to phy when the txq num is equal to cpu num, we tesed it on server with Intel Xecn E52630 and 82599 xge nic.I guess it also does not affect the performance of the opposite condition(not equal) for the "flush_tx" of the txq is "true" and it will be flushed every time in "dpdk_queue_pkts".We dont clearly kown if there is better modificaion, some help will be greately appreciated. ------------------------------------------------------------------From:Gray, Mark D <mark.d.g...@intel.com>Time:2015 Jun 5 (Fri) 22:53To:钢锁0310 <l...@dtdream.com>, d...@openvswitch.com <d...@openvswitch.com>Subject:Re: [ovs-dev] [PATCH] netdev-dpdk: Do not flush tx queue which is shared among CPUs since it is always flushed> > When tx queue is shared among CPUS,the pkts always be flush in> 'netdev_dpdk_eth_send'> So it is unnecessarily for flushing in netdev_dpdk_rxq_recv Otherwise tx will> be accessed without lockingAre you seeing a specific bug or is this just to account for a device withless queues than pmds?> > Signed-off-by: Wei li <l...@dtdream.com>> ---> lib/netdev-dpdk.c | 7 +++++--> 1 file changed, 5 insertions(+), 2 deletions(-)> > diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index 63243d8..25e3a73> 100644> --- a/lib/netdev-dpdk.c> +++ b/lib/netdev-dpdk.c> @@ -892,8 +892,11 @@ netdev_dpdk_rxq_recv(struct netdev_rxq *rxq_,> struct dp_packet **packets,> int nb_rx;> > /* There is only one tx queue for this core. Do not flush other> - * queueus. */> - if (rxq_->queue_id == rte_lcore_id()) {> + * queueus.s/queueus/queues> + * Do not flush tx queue which is shared among CPUs> + * since it is always flushed */> + if (rxq_->queue_id == rte_lcore_id() &&> + OVS_LIKELY(!dev->txq_needs_locking)) {> dpdk_queue_flush(dev, rxq_->queue_id);Do you see any drop in performance in a simple phy-phy case beforeand after this patch?> }> > --> 1.9.5.msysgit.1> > > _______________________________________________> dev mailing list> dev@openvswitch.org> http://openvswitch.org/mailman/listinfo/dev_______________________________________________dev mailing listdev@openvswitch.orghttp://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev