[ovs-dev] [PATCH 7/7] dpif-netdev: Share emc and fast path output batches.

Pravin Shelar pshelar at nicira.com
Fri May 15 19:51:04 UTC 2015


On Thu, Apr 23, 2015 at 11:40 AM, Daniele Di Proietto
<diproiettod at vmware.com> wrote:
> Until now the exact match cache processing was able to handle only four
> megaflow.  The rest of the packets was passed to the megaflow
> classifier.
>
> The limit was arbitraly set to four also because the algorithm used to
> group packets in output batches didn't perform well with a lot of
> megaflows.
>
> After changing the algorithm and after some performance testing it seems
> much better just share the same output batches between the exact match
> cache and the megaflow classifier.
>
> Signed-off-by: Daniele Di Proietto <diproiettod at vmware.com>
> ---
...

>   * 'packets' array (they have been moved to the beginning of the vector).
>   */
>  static inline size_t
>  emc_processing(struct dp_netdev_pmd_thread *pmd, struct dp_packet **packets,
> -               size_t cnt, struct netdev_flow_key *keys, long long now)
> +               size_t cnt, struct netdev_flow_key *keys,
> +               struct packet_batch batches[], size_t *n_batches)
>  {
> -    struct netdev_flow_key key;
> -    struct packet_batch batches[4];
>      struct emc_cache *flow_cache = &pmd->flow_cache;
> -    size_t n_batches, i;
> -    size_t notfound_cnt = 0;
> +    struct netdev_flow_key key;
> +    size_t i, notfound_cnt = 0;
>
> -    n_batches = 0;
>      miniflow_initialize(&key.mf, key.buf);
>      for (i = 0; i < cnt; i++) {
>          struct dp_netdev_flow *flow;
> @@ -3152,8 +3142,7 @@ emc_processing(struct dp_netdev_pmd_thread *pmd, struct dp_packet **packets,
>
>          flow = emc_lookup(flow_cache, &key);
>          if (OVS_UNLIKELY(!dp_netdev_queue_batches(packets[i], flow, &key.mf,
> -                                                  batches, &n_batches,
> -                                                  ARRAY_SIZE(batches)))) {
> +                                                  batches, n_batches))) {
Can you move the flow NULL check from dp_netdev_queue_batches(). It
makes this code bit clear on the packet processing flow.



More information about the dev mailing list