Regards
_Sugesh

> -----Original Message-----
> From: ovs-dev-boun...@openvswitch.org [mailto:ovs-dev-
> boun...@openvswitch.org] On Behalf Of Yuanhan Liu
> Sent: Tuesday, September 5, 2017 10:23 AM
> To: d...@openvswitch.org
> Subject: [ovs-dev] [PATCH v2 2/8] dpif-netdev: retrieve flow directly from
> the flow mark

[snip]
> 
>      atomic_read_relaxed(&pmd->dp->emc_insert_min, &cur_min);
> 
>      DP_PACKET_BATCH_REFILL_FOR_EACH (i, size, packet, packets_) {
>          struct dp_netdev_flow *flow;
> +        uint32_t flow_mark;
> 
>          if (OVS_UNLIKELY(dp_packet_size(packet) < ETH_HEADER_LEN)) {
>              dp_packet_delete(packet);
> @@ -4972,6 +4974,16 @@ emc_processing(struct dp_netdev_pmd_thread
> *pmd,
>              continue;
>          }
> 
> +        if (dp_packet_has_flow_mark(packet, &flow_mark)) {
> +            flow = dp_netdev_pmd_find_flow_by_mark(pmd, flow_mark);
> +            if (flow) {
[Sugesh] If the NIC/hardware can match on tcp_flags then this parsing can be 
avoided?
Is that true?
> +                tcp_flags = parse_tcp_flags(packet);
> +                dp_netdev_queue_batches(packet, flow, tcp_flags, batches,
> +                                        n_batches);
> +                continue;
> +            }
> +        }
> +
>          if (i != size - 1) {
>              struct dp_packet **packets = packets_->packets;
>              /* Prefetch next packet data and metadata. */ @@ -4989,7 +5001,8
> @@ emc_processing(struct dp_netdev_pmd_thread *pmd,
>          /* If EMC is disabled skip emc_lookup */
>          flow = (cur_min == 0) ? NULL: emc_lookup(flow_cache, key);
>          if (OVS_LIKELY(flow)) {
> -            dp_netdev_queue_batches(packet, flow, &key->mf, batches,
> +            tcp_flags = miniflow_get_tcp_flags(&key->mf);
> +            dp_netdev_queue_batches(packet, flow, tcp_flags, batches,
>                                      n_batches);
>          } else {
>              /* Exact match cache missed. Group missed packets together at @@ 
> -
> 5166,7 +5179,9 @@ fast_path_processing(struct dp_netdev_pmd_thread
> *pmd,
>          flow = dp_netdev_flow_cast(rules[i]);
> 
>          emc_probabilistic_insert(pmd, &keys[i], flow);
> -        dp_netdev_queue_batches(packet, flow, &keys[i].mf, batches,
> n_batches);
> +        dp_netdev_queue_batches(packet, flow,
> +                                miniflow_get_tcp_flags(&keys[i].mf),
> +                                batches, n_batches);
>      }
> 
>      dp_netdev_count_packet(pmd, DP_STAT_MASKED_HIT, cnt - miss_cnt);
> diff --git a/lib/flow.c b/lib/flow.c index b2b10aa..912c538 100644
> --- a/lib/flow.c
> +++ b/lib/flow.c
> @@ -991,6 +991,84 @@ parse_dl_type(const struct eth_header *data_,
> size_t size)
>      return parse_ethertype(&data, &size);  }
> 

[Snip]
> --
> 2.7.4
> 
> _______________________________________________
> dev mailing list
> d...@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to