On Mon, May 11, 2015 at 5:28 AM, Kevin Traynor <kevin.tray...@intel.com> wrote: > The max allowed burst size for a single vhost enqueue is 32. > This code facilitates trying to send greater than the burst > size of packets to the vhost interface by adding a retry loop > and calling vhost enqueue multiple times. As this could > potentially block, a timeout is added. > > Signed-off-by: Kevin Traynor <kevin.tray...@intel.com>
> --- > lib/netdev-dpdk.c | 43 +++++++++++++++++++++++++++++++++++++------ > 1 files changed, 37 insertions(+), 6 deletions(-) > > diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c > index cbb266d..3ab5995 100644 > --- a/lib/netdev-dpdk.c > +++ b/lib/netdev-dpdk.c > @@ -104,6 +104,11 @@ BUILD_ASSERT_DECL((MAX_NB_MBUF / > ROUND_DOWN_POW2(MAX_NB_MBUF/MIN_NB_MBUF)) > /* Character device cuse_dev_name. */ > char *cuse_dev_name = NULL; > > +/* > + * Maximum amount of time in micro seconds to try and enqueue to vhost. > + */ > +#define VHOST_ENQ_RETRY_USECS 100 > + > static const struct rte_eth_conf port_conf = { > .rxmode = { > .mq_mode = ETH_MQ_RX_RSS, > @@ -901,7 +906,12 @@ __netdev_dpdk_vhost_send(struct netdev *netdev, struct > dp_packet **pkts, > { > struct netdev_dpdk *vhost_dev = netdev_dpdk_cast(netdev); > struct virtio_net *virtio_dev = netdev_dpdk_get_virtio(vhost_dev); > - int tx_pkts, i; > + struct rte_mbuf **cur_pkts = (struct rte_mbuf **) pkts; > + unsigned int total_pkts = cnt; > + unsigned int tx_pkts, i; > + unsigned int expired = 0; > + uint64_t start; > + uint64_t timeout = VHOST_ENQ_RETRY_USECS * rte_get_timer_hz() / 1E6; > I changed the transmit function a bit to avoid the division on every transmit call and pushed patch to master. Thanks. _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev