On Mon, Jun 24, 2019 at 4:00 AM <[email protected]> wrote:
>
> From: Numan Siddique <[email protected]>
>
> Any changes for Port_Bindings rows of type - "chassisredirect", "patch",
"l3gateway" etc
> which are not related to the chassis can be ignored in the function
> 'binding_evaluate_port_binding_changes()'. Presently this returns true
and this results
> in unnecessary flow computation on a chassis.
>
> Changes to these Port_Bindings (of type != "") will be handled by the
engine handler
> flow_output_sb_port_binding_handler() for the engine node
'en_sb_port_binding' (which
> is input to 'en_flow_output'.
>
> For example, if a chassisredirect port is claimed by a gateway chassis,
the compute
> nodes only need to update the flow in table 32 in the bundle action.
Where as presently
> flow computation is triggered and this causes wastage of CPU.
>
> Signed-off-by: Numan Siddique <[email protected]>
> ---
>  ovn/controller/binding.c | 16 +++++++++++++---
>  1 file changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/ovn/controller/binding.c b/ovn/controller/binding.c
> index 87d0b6d88..7d287ece9 100644
> --- a/ovn/controller/binding.c
> +++ b/ovn/controller/binding.c
> @@ -715,11 +715,21 @@ binding_evaluate_port_binding_changes(
>           * - If a regular VIF is unbound from this chassis, the local
ovsdb
>           *   interface table will be updated, which will trigger
recompute.
>           *
> -         * - If the port is not a regular VIF, always trigger recompute.
*/
> +         * If the port is not a regular VIF, then ignore it. */
>          if (binding_rec->chassis == chassis_rec
>              || is_our_chassis(chassis_rec, binding_rec,
> -                              active_tunnels, &lport_to_iface,
local_lports)
> -            || strcmp(binding_rec->type, "")) {
> +                              active_tunnels, &lport_to_iface,
> +                              local_lports)) {
> +            changed = true;
> +            break;
> +        }
> +
> +        /* Any changes to chassisredirect port (not claimed by this
chassis),
> +         * doesn't require any logical flow computation. It only requires
> +         * physical flow update and thiss will be handled by
> +         * flow_output_sb_port_binding_handler() in ovn-controller.c */
> +        if (strcmp(binding_rec->type, "") &&
> +            strcmp(binding_rec->type, "chassisredirect")) {
>              changed = true;
>              break;
>          }
> --
> 2.21.0
>
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Makes sense. Thanks for the improvement!

Acked-by: Han Zhou <[email protected]>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to