>Hi Bhanu > >Would it be possible to combine patches 1 and 2, rather than initially defining >an empty netdev_txq_flush for dpdk ? I think the combined patch would have >more context.
No problem Darrell . I will merge 1 & 2 in V4. - Bhanuprakash. > > >-----Original Message----- >From: <ovs-dev-boun...@openvswitch.org> on behalf of Bhanuprakash >Bodireddy <bhanuprakash.bodire...@intel.com> >Date: Thursday, June 29, 2017 at 3:39 PM >To: "d...@openvswitch.org" <d...@openvswitch.org> >Subject: [ovs-dev] [PATCH v3 2/6] netdev-dpdk: Add netdev_dpdk_txq_flush > function. > > This commit adds netdev_dpdk_txq_flush() function. If there are > any packets waiting in the queue, they are transmitted instantly > using the rte_eth_tx_burst function. In XPS enabled case, lock is > taken on the tx queue before flushing the queue. > > Signed-off-by: Bhanuprakash Bodireddy ><bhanuprakash.bodire...@intel.com> > Signed-off-by: Antonio Fischetti <antonio.fische...@intel.com> > Co-authored-by: Antonio Fischetti <antonio.fische...@intel.com> > Signed-off-by: Markus Magnusson <markus.magnus...@ericsson.com> > Co-authored-by: Markus Magnusson <markus.magnus...@ericsson.com> > Acked-by: Eelco Chaudron <echau...@redhat.com> > --- > lib/netdev-dpdk.c | 31 +++++++++++++++++++++++++++++-- > 1 file changed, 29 insertions(+), 2 deletions(-) > > diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c > index 9ca4433..dd42716 100644 > --- a/lib/netdev-dpdk.c > +++ b/lib/netdev-dpdk.c > @@ -293,6 +293,11 @@ struct dpdk_mp { > struct ovs_list list_node OVS_GUARDED_BY(dpdk_mp_mutex); > }; > > +/* Queue 'INTERIM_QUEUE_BURST_THRESHOLD' packets before >transmitting. > + * Defaults to 'NETDEV_MAX_BURST'(32) packets. > + */ > +#define INTERIM_QUEUE_BURST_THRESHOLD NETDEV_MAX_BURST > + > /* There should be one 'struct dpdk_tx_queue' created for > * each cpu core. */ > struct dpdk_tx_queue { > @@ -302,6 +307,12 @@ struct dpdk_tx_queue { > * pmd threads (see 'concurrent_txq'). > */ > int map; /* Mapping of configured vhost-user > queues > * to enabled by guest. */ > + int dpdk_pkt_cnt; /* Number of buffered packets waiting > to > + be sent on DPDK tx queue. */ > + struct rte_mbuf >*dpdk_burst_pkts[INTERIM_QUEUE_BURST_THRESHOLD]; > + /* Intermediate queue where packets can > + * be buffered to amortize the cost of > MMIO > + * writes. */ > }; > > /* dpdk has no way to remove dpdk ring ethernet devices > @@ -1897,9 +1908,25 @@ netdev_dpdk_send__(struct netdev_dpdk *dev, >int qid, > * few packets (< INTERIM_QUEUE_BURST_THRESHOLD) buffered in the >queue. > */ > static int > -netdev_dpdk_txq_flush(struct netdev *netdev OVS_UNUSED, > - int qid OVS_UNUSED, bool concurrent_txq OVS_UNUSED) > +netdev_dpdk_txq_flush(struct netdev *netdev, > + int qid, bool concurrent_txq) > { > + struct netdev_dpdk *dev = netdev_dpdk_cast(netdev); > + struct dpdk_tx_queue *txq = &dev->tx_q[qid]; > + > + if (OVS_LIKELY(txq->dpdk_pkt_cnt)) { > + if (OVS_UNLIKELY(concurrent_txq)) { > + qid = qid % dev->up.n_txq; > + rte_spinlock_lock(&dev->tx_q[qid].tx_lock); > + } > + > + netdev_dpdk_eth_tx_burst(dev, qid, txq->dpdk_burst_pkts, > + txq->dpdk_pkt_cnt); > + > + if (OVS_UNLIKELY(concurrent_txq)) { > + rte_spinlock_unlock(&dev->tx_q[qid].tx_lock); > + } > + } > return 0; > } > > -- > 2.4.11 > > _______________________________________________ > dev mailing list > d...@openvswitch.org > https://urldefense.proofpoint.com/v2/url?u=https- >3A__mail.openvswitch.org_mailman_listinfo_ovs- >2Ddev&d=DwICAg&c=uilaK90D4TOVoH58JNXRgQ&r=BVhFA09CGX7JQ5Ih- >uZnsw&m=1wUGGHlSVXpqn5THs- >saPYXoqzsKYA6zy3m0dzrOr5c&s=HDVtHRNK1uhmuU70EfLAxfXvZXasjTmO8b8 >zpS7M9t4&e= > > > > > > > _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev