On 15/06/2015 12:16, "Traynor, Kevin" <kevin.tray...@intel.com> wrote:
> >> -----Original Message----- >> From: Traynor, Kevin >> Sent: Thursday, June 11, 2015 4:55 PM >> To: Daniele Di Proietto; Flavio Leitner >> Cc: dev@openvswitch.org; Gray, Mark D >> Subject: RE: [ovs-dev] Is this an issue for DPDK vhost rss? >> >> >> > -----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. > >There is a dpdk patchset that contains a potential fix for this and lots >of >other changes, but I haven't tested yet. >https://urldefense.proofpoint.com/v2/url?u=http-3A__dpdk.org_ml_archives_d >ev_2015-2DJune_018436.html&d=BQIFAg&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMN >tXt-uEs&r=SmB5nZacmXNq0gKCC1s_Cw5yUNjxgD4v5kJqZ2uWLlE&m=FDVPKa2SqwpyYOTmA2 >zGdscCPa1FVdQG3Zbr4tHrp38&s=fjg7wArWvYLJlgEGKijK6W6ECAxGk660UrPF3rAr4Rs&e= > > >> >> > 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. > >With a loop to reset the rss after the rte_vhost_dequeue_burst() call I'm >seeing a drop of ~100kpps in vhost performance. Rx vectoristion gives a >gain >of about ~1 mpps on my system for the phy2phy cases. > >Using the ol_flags check is the right option when DPDK supports setting it >correctly with rx vectorisation. In the meantime there's choice of using >the >reset loop or removing rx vectorisation - what do you think? Thanks for sharing these results. I've observed that if OVS can't use the RSS hash and has to compute we lose ~2Mpps on a single flow phy2phy test. Despite this, I still think we should consider the ol_flags because: * DPDK drivers (other than ixgbe) should use ol_flags as well to mark the RSS hash as valid * ixgbe_recv_pkts_vec() will report PKT_RX_RSS_HASH in future releases (the patch you sent will be effective since DPDK 2.2, right?) If the throughput with the non-vector rx routine is higher we can disable the vector rx as a temporary workaround. I'll do some tests and send a patch tomorrow. Daniele > >> >> > >> > 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