> -----Original Message----- > From: dev [mailto:dev-boun...@openvswitch.org] On Behalf Of Daniele Di > Proietto > Sent: Tuesday, June 16, 2015 7:39 PM > To: dev@openvswitch.org > Subject: [ovs-dev] [PATCH] dpif-netdev: Check for PKT_RX_RSS_HASH flag. > > DPDK mbufs contain a valid RSS hash only if PKT_RX_RSS_HASH is > set in 'ol_flags'. Otherwise the hash is garbage and doesn't > relate to the packet. > > This fixes an issue with vhost, which, being a virtual NIC, doesn't > compute the hash. > > Unfortunately the ixgbe vPMD doesn't set the PKT_RX_RSS_HASH, forcing > OVS to compute an hash is software. This has a significant impact on > performance (-30% throughput in a single flow setup) which can be > mitigated in the CPU supports crc32c instructions.
Hi Daniele - revisiting this patch now that DPDK 2.1 support has been integrated into OVS. I've checked and the ixgbe vector PMD correctly sets the rss bit in ol_flags, so this patch should be able to do its job now it will get the correct input. The patch still applies and LGTM. > > Reported-by: Dongjun <do...@dtdream.com> > Suggested-by: Flavio Leitner <f...@sysclose.org> > Signed-off-by: Daniele Di Proietto <diproiet...@vmware.com> > --- > lib/dp-packet.h | 11 +++++++++++ > lib/dpif-netdev.c | 2 +- > 2 files changed, 12 insertions(+), 1 deletion(-) > > diff --git a/lib/dp-packet.h b/lib/dp-packet.h > index e4c2593..6840750 100644 > --- a/lib/dp-packet.h > +++ b/lib/dp-packet.h > @@ -529,11 +529,22 @@ dp_packet_set_rss_hash(struct dp_packet *p, uint32_t > hash) > { > #ifdef DPDK_NETDEV > p->mbuf.hash.rss = hash; > + p->mbuf.ol_flags |= PKT_RX_RSS_HASH; > #else > p->rss_hash = hash; > #endif > } > > +static inline bool > +dp_packet_rss_valid(struct dp_packet *p) > +{ > +#ifdef DPDK_NETDEV > + return p->mbuf.ol_flags & PKT_RX_RSS_HASH; > +#else > + return true; > +#endif > +} > + > #ifdef __cplusplus > } > #endif > diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c > index f13169c..c4a4b3a 100644 > --- a/lib/dpif-netdev.c > +++ b/lib/dpif-netdev.c > @@ -3036,7 +3036,7 @@ dpif_netdev_packet_get_rss_hash(struct dp_packet > *packet, > { > uint32_t hash, recirc_depth; > > - hash = dp_packet_get_rss_hash(packet); > + hash = dp_packet_rss_valid(packet) ? dp_packet_get_rss_hash(packet) : 0; > if (OVS_UNLIKELY(!hash)) { > hash = miniflow_hash_5tuple(mf, 0); > dp_packet_set_rss_hash(packet, hash); > -- > 2.1.4 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev