On Fri, Aug 27, 2021 at 1:08 PM Mark Michelson <[email protected]> wrote:
>
> Simple enough, works for me.
>
> Acked-by: Mark Michelson <[email protected]>
Thanks. I applied this patch to the main branch.
Numan
>
> On 8/24/21 5:15 PM, Ilya Maximets wrote:
> > Currently pipeline is hashed as a string ("egress" or "ingress"),
> > and this seems wasteful. Hashing it as a digit (P_IN or P_OUT)
> > to eliminate one call to hash_string() for every generated logical
> > flow.
> >
> > In my testing this saves 1.5 - 3 % of a processing time.
> >
> > Signed-off-by: Ilya Maximets <[email protected]>
> > ---
> > lib/ovn-util.c | 14 ++++++++++----
> > lib/ovn-util.h | 8 +++++++-
> > northd/ovn-northd.c | 8 +-------
> > 3 files changed, 18 insertions(+), 12 deletions(-)
> >
> > diff --git a/lib/ovn-util.c b/lib/ovn-util.c
> > index 3805923c8..683ca37d9 100644
> > --- a/lib/ovn-util.c
> > +++ b/lib/ovn-util.c
> > @@ -523,11 +523,18 @@ ovn_is_known_nb_lsp_type(const char *type)
> > return false;
> > }
> >
> > +static enum ovn_pipeline
> > +ovn_pipeline_from_name(const char *pipeline)
> > +{
> > + return pipeline[0] == 'i' ? P_IN : P_OUT;
> > +}
> > +
> > uint32_t
> > sbrec_logical_flow_hash(const struct sbrec_logical_flow *lf)
> > {
> > const struct sbrec_datapath_binding *ld = lf->logical_datapath;
> > - uint32_t hash = ovn_logical_flow_hash(lf->table_id, lf->pipeline,
> > + uint32_t hash = ovn_logical_flow_hash(lf->table_id,
> > +
> > ovn_pipeline_from_name(lf->pipeline),
> > lf->priority, lf->match,
> > lf->actions);
> >
> > @@ -535,12 +542,11 @@ sbrec_logical_flow_hash(const struct
> > sbrec_logical_flow *lf)
> > }
> >
> > uint32_t
> > -ovn_logical_flow_hash(uint8_t table_id, const char *pipeline,
> > +ovn_logical_flow_hash(uint8_t table_id, enum ovn_pipeline pipeline,
> > uint16_t priority,
> > const char *match, const char *actions)
> > {
> > - size_t hash = hash_2words((table_id << 16) | priority, 0);
> > - hash = hash_string(pipeline, hash);
> > + size_t hash = hash_2words((table_id << 16) | priority, pipeline);
> > hash = hash_string(match, hash);
> > return hash_string(actions, hash);
> > }
> > diff --git a/lib/ovn-util.h b/lib/ovn-util.h
> > index 9935cad34..b0bc70a16 100644
> > --- a/lib/ovn-util.h
> > +++ b/lib/ovn-util.h
> > @@ -102,8 +102,14 @@ const char *db_table_usage(struct ds *tables,
> >
> > bool ovn_is_known_nb_lsp_type(const char *type);
> >
> > +/* The two pipelines in an OVN logical flow table. */
> > +enum ovn_pipeline {
> > + P_IN, /* Ingress pipeline. */
> > + P_OUT /* Egress pipeline. */
> > +};
> > +
> > uint32_t sbrec_logical_flow_hash(const struct sbrec_logical_flow *);
> > -uint32_t ovn_logical_flow_hash(uint8_t table_id, const char *pipeline,
> > +uint32_t ovn_logical_flow_hash(uint8_t table_id, enum ovn_pipeline
> > pipeline,
> > uint16_t priority,
> > const char *match, const char *actions);
> > uint32_t ovn_logical_flow_hash_datapath(const struct uuid
> > *logical_datapath,
> > diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c
> > index a9a3987b8..b22cf5388 100644
> > --- a/northd/ovn-northd.c
> > +++ b/northd/ovn-northd.c
> > @@ -120,12 +120,6 @@ static const char *ssl_ca_cert_file;
> >
> > /* Pipeline stages. */
> >
> > -/* The two pipelines in an OVN logical flow table. */
> > -enum ovn_pipeline {
> > - P_IN, /* Ingress pipeline. */
> > - P_OUT /* Egress pipeline. */
> > -};
> > -
> > /* The two purposes for which ovn-northd uses OVN logical datapaths. */
> > enum ovn_datapath_type {
> > DP_SWITCH, /* OVN logical switch. */
> > @@ -4412,7 +4406,7 @@ ovn_lflow_add_at(struct hmap *lflow_map, struct
> > ovn_datapath *od,
> > uint32_t hash;
> >
> > hash = ovn_logical_flow_hash(ovn_stage_get_table(stage),
> > - ovn_stage_get_pipeline_name(stage),
> > + ovn_stage_get_pipeline(stage),
> > priority, match,
> > actions);
> >
> >
>
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev