On Wed, Jul 31, 2024 at 3:03 PM Ilya Maximets <[email protected]> wrote:

> On 7/31/24 11:05, Dumitru Ceara wrote:
> > From: Ales Musil <[email protected]>
> >
> > Currently, OVN would generate up to 2 flows per sample, depending
> > on the configuration. Add optimization that can reduce the number
> > of flows added into the ACL pipeline down to 3 per collector. This
> > optimization can be achieved only when the sample action with
> > registers is supported in OvS and the sample has only single
> > collector. The single collector per sample should be the case
> > in most configurations, usually even the same collector
> > for all samples which greatly reduces the number of flows per
> > ACL with sampling.
> >
> > If there are more collectors per sample or the OvS feature is not
> > supported, the implementation will fall back to flows per sample.
> >
> > Reported-at: https://issues.redhat.com/browse/FDP-709
> > Signed-off-by: Ales Musil <[email protected]>
> > ---
> >  include/ovn/logical-fields.h |   2 +
> >  lib/logical-fields.c         |   8 +
> >  northd/northd.c              | 256 +++++++++++++++++++-------
> >  tests/ovn-northd.at          | 341 ++++++++++++++++++++++++++++++-----
> >  tests/ovn.at                 |   2 +
> >  tests/system-ovn.at          |  10 +-
> >  6 files changed, 509 insertions(+), 110 deletions(-)
>
> Not a full review, but a couple comments inline.
>
> >
> > diff --git a/include/ovn/logical-fields.h b/include/ovn/logical-fields.h
> > index ce79b501cf..d6c4a9b6b3 100644
> > --- a/include/ovn/logical-fields.h
> > +++ b/include/ovn/logical-fields.h
> > @@ -197,6 +197,8 @@ const struct ovn_field *ovn_field_from_name(const
> char *name);
> >  #define OVN_CT_NATTED_BIT  1
> >  #define OVN_CT_LB_SKIP_SNAT_BIT 2
> >  #define OVN_CT_LB_FORCE_SNAT_BIT 3
> > +#define OVN_CT_OBS_STAGE_1ST_BIT 4
> > +#define OVN_CT_OBS_STAGE_END_BIT 5
> >
> >  #define OVN_CT_BLOCKED 1
> >  #define OVN_CT_NATTED  2
> > diff --git a/lib/logical-fields.c b/lib/logical-fields.c
> > index 0c187e1c84..134d2674fd 100644
> > --- a/lib/logical-fields.c
> > +++ b/lib/logical-fields.c
> > @@ -165,6 +165,14 @@ ovn_init_symtab(struct shash *symtab)
> >                                      OVN_CT_STR(OVN_CT_LB_FORCE_SNAT_BIT)
> >                                      "]",
> >                                      WR_CT_COMMIT);
> > +    expr_symtab_add_subfield_scoped(symtab, "ct_mark.obs_stage", NULL,
> > +                                    "ct_mark["
> > +
> OVN_CT_STR(OVN_CT_OBS_STAGE_1ST_BIT) ".."
> > +                                    OVN_CT_STR(OVN_CT_OBS_STAGE_END_BIT)
> > +                                    "]",
> > +                                    WR_CT_COMMIT);
> > +    expr_symtab_add_subfield_scoped(symtab, "ct_mark.obs_collector_id",
> NULL,
> > +                                    "ct_mark[16..23]", WR_CT_COMMIT);
> >
> >      expr_symtab_add_field_scoped(symtab, "ct_label", MFF_CT_LABEL, NULL,
> >                                   false, WR_CT_COMMIT);
> > diff --git a/northd/northd.c b/northd/northd.c
> > index 6bf3ca4d8c..fd9cfe82db 100644
> > --- a/northd/northd.c
> > +++ b/northd/northd.c
> > @@ -144,8 +144,20 @@ static bool vxlan_mode;
> >  #define REGBIT_ACL_VERDICT_ALLOW "reg8[16]"
> >  #define REGBIT_ACL_VERDICT_DROP "reg8[17]"
> >  #define REGBIT_ACL_VERDICT_REJECT "reg8[18]"
> > +#define REGBIT_ACL_OBS_STAGE "reg8[19..20]"
> >  #define REG_ACL_TIER "reg8[30..31]"
> >
> > +enum acl_observation_stage {
> > +    ACL_OBS_FROM_LPORT,
> > +    ACL_OBS_FROM_LPORT_AFTER_LB,
> > +    ACL_OBS_TO_LPORT,
> > +    ACL_OBS_STAGE_MAX
> > +};
>
> Values of this enum end up in the database as part of actions.
> It's better to define exact values for them.
>


Fair point.


>
> <snip>
>
> > diff --git a/tests/system-ovn.at b/tests/system-ovn.at
> > index 52b2b84d7b..a9cb54b452 100644
> > --- a/tests/system-ovn.at
> > +++ b/tests/system-ovn.at
> > @@ -7724,7 +7724,7 @@ NS_CHECK_EXEC([sw0-p3], [ping -q -c 10 -i 0.3 -w
> 15 10.0.0.2 | FORMAT_PING], \
> >  AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.0.0.2) | \
> >  sed -e 's/zone=[[0-9]]*/zone=<cleared>/' | \
> >  sed -e
> 's/labels=0x4d3[[0-9a-f]]*/labels=0x4d3000000000000000000000000/'], [0],
> [dnl
>
> What's the point of replacing with 24 zeroes?
> Maybe just 0x4d3 ?
>
> Would be nice to check that we matched 24 characters, but
> I'm not sure if there is a nice portable way to do that.
>

Well this sed is not part of this patch actually we can change but rather
as follow up change.


>
> Best regards, Ilya Maximets.
>
>
Thanks,
Ales

-- 

Ales Musil

Senior Software Engineer - OVN Core

Red Hat EMEA <https://www.redhat.com>

[email protected]
<https://red.ht/sig>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to