> -----Original Message-----
> From: Daniele Di Proietto [mailto:diproiet...@vmware.com]
> Sent: Thursday, June 11, 2015 4:36 PM
> To: Flavio Leitner
> Cc: dev@openvswitch.org; Traynor, Kevin; Gray, Mark D
> Subject: Re: [ovs-dev] Is this an issue for DPDK vhost rss?
> 
> 
> 
> On 11/06/2015 15:23, "Flavio Leitner" <f...@sysclose.org> wrote:
> 
> >On Thu, Jun 11, 2015 at 12:45:10PM +0000, Daniele Di Proietto wrote:
> >>
> >>
> >> On 11/06/2015 04:25, "Flavio Leitner" <f...@sysclose.org> wrote:
> >>
> >> >On Wed, Jun 10, 2015 at 03:13:21PM +0000, Daniele Di Proietto wrote:
> >> >>
> >> >>
> >> >> On 10/06/2015 12:48, "Gray, Mark D" <mark.d.g...@intel.com> wrote:
> >> >> >
> >> >> >The vhost port won't generate an RSS hash because it is a virtual
> >>NIC.
> >> >> >
> >> >> >>
> >> >> >
> >> >> >> It doesn't cause a problem, just make the pkt fall into a slow
> >>path,
> >> >> >>should we
> >> >> >
> >> >> >> fix it?
> >> >>
> >> >> Thanks for investigating this.  We should definitely fix it.
> >> >>
> >> >> >
> >> >> >> The flag ol_flags may be useful for OVS or let DPDK fix this in
> >>vhost
> >> >> >>rcv.
> >> >> >
> >> >> >
> >> >> >
> >> >> >How do you propose that this would work? The RSS would still have
> >>to be
> >> >> >
> >> >> >generated in software.
> >> >> >
> >> >> >>
> >> >>
> >> >> A simple solution would be to reset the RSS hash inside
> >> >> netdev_dpdk_vhost_rxq_recv().  Other netdev providers that do not
> >> >>support
> >> >> reading the RSS hash (netdev-linux, netdev-bsd) call
> >> >> dp_packet_set_rss_hash(pkt, 0) on every received packet.
> >> >>
> >> >> This would probably have a small impact on performance, but it's
> >>better
> >> >> than trashing the exact match cache.
> >> >>
> >> >> I don't believe there's anything that DPDK can do here (like
> >>resetting
> >> >>the
> >> >> hash when the packet is freed), but please correct me if I'm wrong.
> >> >>
> >> >> Thoughts?
> >> >
> >> >I think Dongjun is right and we should use ol_flags.
> >> >Something like this:
> >> >
> >> >diff --git a/lib/dp-packet.h b/lib/dp-packet.h
> >> >index e4c2593..ad315d1 100644
> >> >--- a/lib/dp-packet.h
> >> >+++ b/lib/dp-packet.h
> >> >@@ -518,7 +518,12 @@ static inline uint32_t
> >> > dp_packet_get_rss_hash(struct dp_packet *p)
> >> > {
> >> > #ifdef DPDK_NETDEV
> >> >-    return p->mbuf.hash.rss;
> >> >+    if (p->mbuf.ol_flags & PKT_RX_RSS_HASH) {
> >> >+        return p->mbuf.hash.rss;
> >> >+    }
> >> >+    else {
> >> >+        return 0;
> >> >+    }
> >> > #else
> >> >     return p->rss_hash;
> >> > #endif
> >> >
> >> >
> >> >I haven't tested that but rte_vhost_dequeue_burst() does
> >> >ol_flags = 0, so this would be a generic solution for all
> >> >dpdk devices.
> >> >
> >> >Thoughts?
> >> >
> >> >fbl
> >>
> >> This seems a much better solution.  I had no idea that ol_flags
> >> included PKT_RX_RSS_HASH.
> >>
> >> Unfortunately, I tested it and it appears that ixgbe_recv_pkts_vec()
> >> is not setting the flag correctly (it is documented in the comments).
> >> Other ideas?
> >
> >The ixgbe_recv_pkts_vec() should at least set ol_flags to zero
> >because it isn't providing a valid hash and what you get is garbage
> >from the OVS stack.  Is that what you are seeing?
> 
> No, the problem is the opposite: ixgbe_recv_pkts_vec() returns a valid
> rss hash, but doesn't set PKT_RX_RSS_HASH in ol_flags.  

agreed, that's what I'm seeing.

This doesn't
> affect correctness, but it forces us to always calculate the hash in
> software.

not with the present code, but with the fix suggested by Flavio it would.

> 
> Is it possible to make ixgbe_recv_pkts_vec() set PKT_RX_RSS_HASH in DPDK?

we'll find out about this - not sure if there's a reason for not setting it.

> Otherwise, should we avoid using the vectorized version?

that's debatable - from a performance view it may be better to leave it in
and take the hit elsewhere for the time being if there's a possibility that
it will be changed in DPDK later.

> 
> That said, we probably should go with your solution anyway.
> 
> >If so, ixgbe_recv_pkts_vec() needs to set ol_flags to zero. This will
> >fix for every user of dpdk, not just OVS.
> >
> >As a possible workaround for OVS we could fix dp_netdev_process_rxq_port()
> >to memset(0) the packets mbufs array which should be faster than loop
> >through the array and set fields to zero.
> 
> I don't understand what you mean here exactly
> 
> Thanks,
> 
> Daniele

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to