[ovs-dev] [PATCH v2 ovn] Rely on unique name for ovn qos meters

Numan Siddique numans at ovn.org
Wed Apr 29 10:04:28 UTC 2020


On Mon, Apr 27, 2020 at 9:15 PM Lorenzo Bianconi <
lorenzo.bianconi at redhat.com> wrote:

> ovn currently identifies qos meters according to the rate and burst values
> configured. Doing so 2 meters on the same hv assigned to 2 different
> logical
> switch ports and configured with the same values for rate and burst will be
> mapped to the same ovs kernel mater and will share the bandwidth.
> Fix this behavior making qos meter name unique
>
> Tested-By: Maciej Jozefczyk <mjozefcz at redhat.com>
> Acked-by: Han Zhou <hzhou at ovn.org>
> Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi at redhat.com>
>

Thanks Lorenzo and Han.
I applied this patch to master.

Numan


> ---
> Changes since v1:
> - added unit test
> ---
>  controller/ofctrl.c |  2 +-
>  lib/actions.c       | 11 ++++++-----
>  tests/ovn.at        | 10 ++++++++++
>  3 files changed, 17 insertions(+), 6 deletions(-)
>
> diff --git a/controller/ofctrl.c b/controller/ofctrl.c
> index 36e39ba06..485a857d1 100644
> --- a/controller/ofctrl.c
> +++ b/controller/ofctrl.c
> @@ -970,7 +970,7 @@ add_meter_string(struct ovn_extend_table_info
> *m_desired,
>      enum ofputil_protocol usable_protocols;
>      char *meter_string = xasprintf("meter=%"PRIu32",%s",
>                                     m_desired->table_id,
> -                                   &m_desired->name[9]);
> +                                   &m_desired->name[52]);
>      char *error = parse_ofp_meter_mod_str(&mm, meter_string, OFPMC13_ADD,
>                                            &usable_protocols);
>      if (!error) {
> diff --git a/lib/actions.c b/lib/actions.c
> index c19813de0..6ba392ec1 100644
> --- a/lib/actions.c
> +++ b/lib/actions.c
> @@ -2851,12 +2851,13 @@ encode_SET_METER(const struct ovnact_set_meter *cl,
>       * describes the meter itself. */
>      char *name;
>      if (cl->burst) {
> -        name = xasprintf("__string: kbps burst stats bands=type=drop "
> -                         "rate=%"PRId64" burst_size=%"PRId64"", cl->rate,
> -                         cl->burst);
> +        name = xasprintf("__string: uuid "UUID_FMT" kbps burst stats "
> +                         "bands=type=drop rate=%"PRId64"
> burst_size=%"PRId64,
> +                         UUID_ARGS(&ep->lflow_uuid), cl->rate, cl->burst);
>      } else {
> -        name = xasprintf("__string: kbps stats bands=type=drop "
> -                         "rate=%"PRId64"", cl->rate);
> +        name = xasprintf("__string: uuid "UUID_FMT" kbps stats "
> +                         "bands=type=drop rate=%"PRId64,
> +                         UUID_ARGS(&ep->lflow_uuid), cl->rate);
>      }
>
>      table_id = ovn_extend_table_assign_id(ep->meter_table, name,
> diff --git a/tests/ovn.at b/tests/ovn.at
> index 2dd2f9211..3d9868824 100644
> --- a/tests/ovn.at
> +++ b/tests/ovn.at
> @@ -7678,6 +7678,16 @@ AT_CHECK([as hv ovs-ofctl dump-flows br-int -O
> OpenFlow13 | grep meter | wc -l],
>  AT_CHECK([as hv ovs-ofctl dump-meters br-int -O OpenFlow13 | grep
> rate=11123 | wc -l], [0], [0
>  ])
>
> +# Check multiple qos meters
> +ovn-nbctl qos-del lsw0
> +ovn-nbctl qos-add lsw0 to-lport 1001 'inport=="lp1" &&
> is_chassis_resident("lp1")' rate=100000 burst=100000
> +ovn-nbctl qos-add lsw0 to-lport 1001 'inport=="lp2" &&
> is_chassis_resident("lp2")' rate=100000 burst=100000
> +ovn-nbctl qos-add lsw0 to-lport 1002 'inport=="lp1" &&
> is_chassis_resident("lp1")' rate=100001 burst=100001
> +ovn-nbctl qos-add lsw0 to-lport 1002 'inport=="lp2" &&
> is_chassis_resident("lp2")' rate=100001 burst=100001
> +
> +AT_CHECK([as hv ovs-ofctl dump-meters br-int -O OpenFlow13 | grep meter |
> wc -l], [0], [4
> +])
> +
>  OVN_CLEANUP([hv])
>  AT_CLEANUP
>
> --
> 2.25.4
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
>


More information about the dev mailing list