[ovs-dev] [PATCH 5/5] dpif-netdev: Reset RSS hash when recirculating.

Ethan Jackson ethan at nicira.com
Mon Apr 20 20:04:09 UTC 2015


I don't really like this.  For one thing, Suppose in a particular
stage no changes to the packet are made.  There's a good chance you'll
recompute the same hash and still collide.

What if instead, in the emc code if the depth > 0, you folded it into
the hash for the lookup?  Very simple change that I think addresses
these issues.

Ethan

On Wed, Apr 15, 2015 at 11:11 AM, Daniele Di Proietto
<diproiettod at vmware.com> wrote:
> Having the same RSS hash after recirculation can cause unnecessary
> collisions in the exact match cache.  Setting the RSS hash to 0 forces
> the datapath to compute a new value and account for the changes in the
> packet or in the metadata.
>
> Requested-by: Ethan Jackson <ethan at nicira.com>
> Signed-off-by: Daniele Di Proietto <diproiettod at vmware.com>
> ---
>  lib/dpif-netdev.c | 6 ++++++
>  1 file changed, 6 insertions(+)
>
> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
> index 20bb498..28262e6 100644
> --- a/lib/dpif-netdev.c
> +++ b/lib/dpif-netdev.c
> @@ -3404,6 +3404,10 @@ dp_execute_cb(void *aux_, struct dp_packet **packets, int cnt,
>
>              err = push_tnl_action(dp, a, packets, cnt);
>              if (!err) {
> +                for (i = 0; i < cnt; i++) {
> +                    dp_packet_set_rss_hash(packets[i], 0);
> +                }
> +
>                  (*depth)++;
>                  dp_netdev_input(pmd, packets, cnt);
>                  (*depth)--;
> @@ -3433,6 +3437,7 @@ dp_execute_cb(void *aux_, struct dp_packet **packets, int cnt,
>
>                      for (i = 0; i < cnt; i++) {
>                          packets[i]->md.in_port.odp_port = portno;
> +                        dp_packet_set_rss_hash(packets[i], 0);
>                      }
>
>                      (*depth)++;
> @@ -3491,6 +3496,7 @@ dp_execute_cb(void *aux_, struct dp_packet **packets, int cnt,
>
>              for (i = 0; i < cnt; i++) {
>                  packets[i]->md.recirc_id = nl_attr_get_u32(a);
> +                dp_packet_set_rss_hash(packets[i], 0);
>              }
>
>              (*depth)++;
> --
> 2.1.4
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev



More information about the dev mailing list