[ovs-git] [ovn-org/ovn] e07e39: ovn-controller: Split logical flow and physical fl...

numansiddique noreply at github.com
Mon Jun 14 12:25:16 UTC 2021


  Branch: refs/heads/master
  Home:   https://github.com/ovn-org/ovn
  Commit: e07e397b7ae9c31bbb24204c3bc61d8374825767
      https://github.com/ovn-org/ovn/commit/e07e397b7ae9c31bbb24204c3bc61d8374825767
  Author: Numan Siddique <numans at ovn.org>
  Date:   2021-06-14 (Mon, 14 Jun 2021)

  Changed paths:
    M TODO.rst
    M controller/ofctrl.c
    M controller/ofctrl.h
    M controller/ovn-controller.c
    M controller/physical.c
    M controller/physical.h

  Log Message:
  -----------
  ovn-controller: Split logical flow and physical flow processing.

Presently, the 'flow_output' engine node recomputes physical
flows by calling physical_run() in the 'physical_flow_changes'
handler in some scenarios.  Because of this, an engine run can
do a full recompute of physical flows but not full recompute
of logical flows.  Although this works now, it is problematic
as the same desired flow table is used for both physical and
logical flows.

This patch now separates the handling of logical flows and
physical flows and removes the 'physical_flow_changes' engine
node.  Two separate engine nodes are added - lflow_output and
pflow_output with their own flow tables and these two nodes are
now inputs to the main engine node - flow_output.  This separation
reflects the data dependency more clearly.

Acked-by: Mark Michelson <mmichels at redhat.com>
Acked-by: Han Zhou <hzhou at ovn.org>
Signed-off-by: Numan Siddique <numans at ovn.org>


  Commit: cda86fa31817fe406a307df50c82b9e1f1a5210f
      https://github.com/ovn-org/ovn/commit/cda86fa31817fe406a307df50c82b9e1f1a5210f
  Author: Numan Siddique <numans at ovn.org>
  Date:   2021-06-14 (Mon, 14 Jun 2021)

  Changed paths:
    M controller/ovn-controller.c

  Log Message:
  -----------
  controller: Handle sbrec_chassis changes in lflow and pflow output engines.

This patch adds a sbrec_chassis change handler to both the lflow and
plfow output engines.  It returns false if a chassis is added or deleted
so that a full recompute is triggered.  Any updates to the sbrec_chassis
table is ignored as there is no need to handle these changes.

Acked-by: Mark Michelson <mmichels at redhat.com>
Acked-by: Han Zhou <hzhou at ovn.org>
Signed-off-by: Numan Siddique <numans at ovn.org>


  Commit: 9faecf9fb8bfd57668fd5972104f689b30b6bdc1
      https://github.com/ovn-org/ovn/commit/9faecf9fb8bfd57668fd5972104f689b30b6bdc1
  Author: Numan Siddique <numans at ovn.org>
  Date:   2021-06-14 (Mon, 14 Jun 2021)

  Changed paths:
    M controller/ovn-controller.c
    M controller/physical.c
    M tests/ovn-performance.at

  Log Message:
  -----------
  ovn-controller: Handle datapath changes incrementally for ct zone I-P engine node.

After the commit [1], we do a full recompute of ct zone I-P engine for
any datapath binding change.  This results in physical_flow() getting
called.  In a highly scaled environment this can result in costly CPU
cycles.  This patch addressed this by handling the datapath binding
changes incrementally in the ct_zone engine node.  ct zone recomputation
is required only when a datapath binding is deleted or a logical router
datapath binding changes the snat-ct-zone option value.  This patch
handles this.

[1] - f9cab11d5fab("Allow explicit setting of the SNAT zone on a gateway router.")
Acked-by: Mark Michelson <mmichels at redhat.com>
Acked-by: Han Zhou <hzhou at ovn.org>
Signed-off-by: Numan Siddique <numans at ovn.org>


  Commit: ea323fa29ee87533aeb3f449424f4628dcd256c5
      https://github.com/ovn-org/ovn/commit/ea323fa29ee87533aeb3f449424f4628dcd256c5
  Author: Numan Siddique <numans at ovn.org>
  Date:   2021-06-14 (Mon, 14 Jun 2021)

  Changed paths:
    M controller/physical.c

  Log Message:
  -----------
  physical: Set the port binding uuid as cookie for flows where relevant.

Some of the OF flows added by physical.c in tables LOCAL_OUTPUT,
CHECK_LOOPBACK, SAVE_INPORT can store the port binding uuid as
flow cookie because these flows matches on port binding key
in the MFF_LOG_OUTPORT field.  Whereas right now it stores 0 as cookie.

This patch stores the port binding uuid as cookie for these flows.
When a port binding is deleted, the port binding handler for flow_output
engine node flood removes the flows with the port binding uuid and
such flows wont get removed.  Right now this is not a problem because
deleting a port binding also triggers in physical_run() being called
and it recomputes all the physical flows.

This patch is required for an upcoming patch which do not call
physical_run() for port binding deletes.

Acked-by: Mark Michelson <mmichels at redhat.com>
Acked-by: Han Zhou <hzhou at ovn.org>
Signed-off-by: Numan Siddique <numans at ovn.org>


  Commit: 5813f824cdca2a0078c149466daeb4c9bf08195e
      https://github.com/ovn-org/ovn/commit/5813f824cdca2a0078c149466daeb4c9bf08195e
  Author: Numan Siddique <numans at ovn.org>
  Date:   2021-06-14 (Mon, 14 Jun 2021)

  Changed paths:
    M controller/ovn-controller.c

  Log Message:
  -----------
  controller I-P: ct zone runtime data handler.

This patch adds an handler for runtime data changes to the ct_zones
engine node.  Before this patch, the handler was NULL.  With this patch
we do a full recompute of ct_zones engine if:

1. runtime_data's local_lports change.

2. If a new datapath is added to the local datapaths.

For all other changes of runtime data, there is no need to recompute
ct_zones engine node.

Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=1962345
Acked-by: Mark Michelson <mmichels at redhat.com>
Acked-by: Han Zhou <hzhou at ovn.org>
Signed-off-by: Numan Siddique <numans at ovn.org>


Compare: https://github.com/ovn-org/ovn/compare/f9eb118364f0...5813f824cdca


More information about the git mailing list