[ovs-dev] [PATCH 1/2] dpif: Add 'used' argument to dpif_flow_stats_extract().

Ethan Jackson ethan at nicira.com
Mon Aug 20 19:46:20 UTC 2012


Looks good, thanks.

Ethan

On Fri, Aug 17, 2012 at 11:27 PM, Ben Pfaff <blp at nicira.com> wrote:
> The following commit will need to use a value other than a literal
> time_msec() in one case.  This commit is just preparation.
>
> Factoring the time_msec() call out of the loop in
> handle_flow_miss_without_facet() is a really minor optimization.  It isn't
> the main point here.
>
> Signed-off-by: Ben Pfaff <blp at nicira.com>
> ---
>  lib/dpif.c             |    7 ++++---
>  lib/dpif.h             |    2 +-
>  ofproto/ofproto-dpif.c |    9 +++++----
>  3 files changed, 10 insertions(+), 8 deletions(-)
>
> diff --git a/lib/dpif.c b/lib/dpif.c
> index 667e07c..2968966 100644
> --- a/lib/dpif.c
> +++ b/lib/dpif.c
> @@ -685,15 +685,16 @@ dpif_port_poll_wait(const struct dpif *dpif)
>  }
>
>  /* Extracts the flow stats for a packet.  The 'flow' and 'packet'
> - * arguments must have been initialized through a call to flow_extract(). */
> + * arguments must have been initialized through a call to flow_extract().
> + * 'used' is stored into stats->used. */
>  void
>  dpif_flow_stats_extract(const struct flow *flow, const struct ofpbuf *packet,
> -                        struct dpif_flow_stats *stats)
> +                        long long int used, struct dpif_flow_stats *stats)
>  {
>      stats->tcp_flags = packet_get_tcp_flags(packet, flow);
>      stats->n_bytes = packet->size;
>      stats->n_packets = 1;
> -    stats->used = time_msec();
> +    stats->used = used;
>  }
>
>  /* Appends a human-readable representation of 'stats' to 's'. */
> diff --git a/lib/dpif.h b/lib/dpif.h
> index 0202915..45c78a5 100644
> --- a/lib/dpif.h
> +++ b/lib/dpif.h
> @@ -129,7 +129,7 @@ struct dpif_flow_stats {
>  };
>
>  void dpif_flow_stats_extract(const struct flow *, const struct ofpbuf *packet,
> -                             struct dpif_flow_stats *);
> +                             long long int used, struct dpif_flow_stats *);
>  void dpif_flow_stats_format(const struct dpif_flow_stats *, struct ds *);
>
>  enum dpif_flow_put_flags {
> diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
> index 10d450e..2fcb025 100644
> --- a/ofproto/ofproto-dpif.c
> +++ b/ofproto/ofproto-dpif.c
> @@ -2866,6 +2866,7 @@ handle_flow_miss_without_facet(struct flow_miss *miss,
>                                 struct flow_miss_op *ops, size_t *n_ops)
>  {
>      struct ofproto_dpif *ofproto = ofproto_dpif_cast(rule->up.ofproto);
> +    long long int now = time_msec();
>      struct action_xlate_ctx ctx;
>      struct ofpbuf *packet;
>
> @@ -2878,7 +2879,7 @@ handle_flow_miss_without_facet(struct flow_miss *miss,
>
>          ofpbuf_use_stub(&odp_actions, op->stub, sizeof op->stub);
>
> -        dpif_flow_stats_extract(&miss->flow, packet, &stats);
> +        dpif_flow_stats_extract(&miss->flow, packet, now, &stats);
>          rule_credit_stats(rule, &stats);
>
>          action_xlate_ctx_init(&ctx, ofproto, &miss->flow, miss->initial_tci,
> @@ -2929,7 +2930,7 @@ handle_flow_miss_with_facet(struct flow_miss *miss, struct facet *facet,
>              subfacet_make_actions(subfacet, packet, &odp_actions);
>          }
>
> -        dpif_flow_stats_extract(&facet->flow, packet, &stats);
> +        dpif_flow_stats_extract(&facet->flow, packet, time_msec(), &stats);
>          subfacet_update_stats(subfacet, &stats);
>
>          if (subfacet->actions_len) {
> @@ -4708,7 +4709,7 @@ rule_execute(struct rule *rule_, const struct flow *flow,
>      uint64_t odp_actions_stub[1024 / 8];
>      struct ofpbuf odp_actions;
>
> -    dpif_flow_stats_extract(flow, packet, &stats);
> +    dpif_flow_stats_extract(flow, packet, time_msec(), &stats);
>      rule_credit_stats(rule, &stats);
>
>      ofpbuf_use_stub(&odp_actions, odp_actions_stub, sizeof odp_actions_stub);
> @@ -6434,7 +6435,7 @@ packet_out(struct ofproto *ofproto_, struct ofpbuf *packet,
>          ofpbuf_use_stack(&key, &keybuf, sizeof keybuf);
>          odp_flow_key_from_flow(&key, flow);
>
> -        dpif_flow_stats_extract(flow, packet, &stats);
> +        dpif_flow_stats_extract(flow, packet, time_msec(), &stats);
>
>          action_xlate_ctx_init(&ctx, ofproto, flow, flow->vlan_tci, NULL,
>                                packet_get_tcp_flags(packet, flow), packet);
> --
> 1.7.2.5
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev



More information about the dev mailing list