mbox series

[ovs-dev,v9,00/10] Configure OVN QoS thorugh OvS db

Message ID cover.1684403044.git.lorenzo.bianconi@redhat.com
Headers show
Series Configure OVN QoS thorugh OvS db | expand

Message

Lorenzo Bianconi May 18, 2023, 9:48 a.m. UTC
Rework OVN QoS implementation in order to configure it through OVS QoS
table instead of running tc command directly bypassing OVS.
This series allows to apply QoS rules on the localnet port related to
logical switch ports running on the same datapath. Considering the
following netowrk configuration:

LSP{0,1} -- LogicalSwitch -- Localnet0

It is possible to apply the following QoS rules on Localnet0 on egress traffic
entering the cluster from LSP{0,1}:
- LSP0: min-rate r0, max_rate R0
- LSP1: min-rate r1, max_rate R1

https://bugzilla.redhat.com/show_bug.cgi?id=2129742

Changes since v8:
- fix typo in add_ovs_qos_table_entry() checking for ovn_qos in
  qos->external_ids column
- fix possible double-free in configure_qos()
Changes since v7:
- make queue_id allocation in norhd global
- update QoS configuration in binding_handle_ovs_interface_changes()
- fix "ovn-controller incremental processing" test
- fix possible NULL pointer dereference
- add new ovn-northd unit test
- get rid of ovs port lookup by name
- rebase on top of ovn main branch
Changes since v6:
- run add_ovs_qos_table_entry() and remove_stale_qos_entry() in setup_qos()
- rename setup_qos() in configure_qos()
- add some new unit-tests in ovn.at
- erase QoS configuration if related port_binding is removed
Changes since v5:
- add IP for qos_map map
- add some new unit-tests in ovn.at
Changes since v4:
- do not remove ovn-egress-iface parameter
- rebase on top of ovn main branch

Lorenzo Bianconi (10):
  controller: remove tunnel interfaces from egress_ifaces sset
  controller: add incremental processing for ovn-controller qos_map
  northd: add qos_physical_network in port_binding config column
  controller: configure qos through ovs qos table and do not run tc
    directly
  controller: improve ovs port lookup by qos
  controller: use unsigned long long int for
    qos_max_rate/qos_min_rate/qos_burst
  northd: make queue_id allocation global for the ovn cluster
  northd: apply QoS rules on the localnet port related to LSP ports
  controller: get rid of egress_ifaces sset
  update NEWS with new QoS info

 NEWS                        |   6 +
 controller/binding.c        | 620 +++++++++++++++++-------------------
 controller/binding.h        |   6 +-
 controller/ovn-controller.c |  35 +-
 controller/ovsport.c        |  16 +
 controller/ovsport.h        |   3 +
 northd/northd.c             | 163 +++-------
 northd/ovn-northd.8.xml     |  12 +
 ovn-sb.xml                  |   5 +
 tests/ovn-northd.at         |  24 ++
 tests/ovn-performance.at    |   5 -
 tests/ovn.at                | 185 +++++++++++
 tests/system-ovn.at         | 151 ++++++++-
 13 files changed, 770 insertions(+), 461 deletions(-)

Comments

Mark Michelson May 18, 2023, 2:41 p.m. UTC | #1
Thanks to Lorenzo and everyone who reviewed and tested this series. I 
have merged it to main.

On 5/18/23 05:48, Lorenzo Bianconi wrote:
> Rework OVN QoS implementation in order to configure it through OVS QoS
> table instead of running tc command directly bypassing OVS.
> This series allows to apply QoS rules on the localnet port related to
> logical switch ports running on the same datapath. Considering the
> following netowrk configuration:
> 
> LSP{0,1} -- LogicalSwitch -- Localnet0
> 
> It is possible to apply the following QoS rules on Localnet0 on egress traffic
> entering the cluster from LSP{0,1}:
> - LSP0: min-rate r0, max_rate R0
> - LSP1: min-rate r1, max_rate R1
> 
> https://bugzilla.redhat.com/show_bug.cgi?id=2129742
> 
> Changes since v8:
> - fix typo in add_ovs_qos_table_entry() checking for ovn_qos in
>    qos->external_ids column
> - fix possible double-free in configure_qos()
> Changes since v7:
> - make queue_id allocation in norhd global
> - update QoS configuration in binding_handle_ovs_interface_changes()
> - fix "ovn-controller incremental processing" test
> - fix possible NULL pointer dereference
> - add new ovn-northd unit test
> - get rid of ovs port lookup by name
> - rebase on top of ovn main branch
> Changes since v6:
> - run add_ovs_qos_table_entry() and remove_stale_qos_entry() in setup_qos()
> - rename setup_qos() in configure_qos()
> - add some new unit-tests in ovn.at
> - erase QoS configuration if related port_binding is removed
> Changes since v5:
> - add IP for qos_map map
> - add some new unit-tests in ovn.at
> Changes since v4:
> - do not remove ovn-egress-iface parameter
> - rebase on top of ovn main branch
> 
> Lorenzo Bianconi (10):
>    controller: remove tunnel interfaces from egress_ifaces sset
>    controller: add incremental processing for ovn-controller qos_map
>    northd: add qos_physical_network in port_binding config column
>    controller: configure qos through ovs qos table and do not run tc
>      directly
>    controller: improve ovs port lookup by qos
>    controller: use unsigned long long int for
>      qos_max_rate/qos_min_rate/qos_burst
>    northd: make queue_id allocation global for the ovn cluster
>    northd: apply QoS rules on the localnet port related to LSP ports
>    controller: get rid of egress_ifaces sset
>    update NEWS with new QoS info
> 
>   NEWS                        |   6 +
>   controller/binding.c        | 620 +++++++++++++++++-------------------
>   controller/binding.h        |   6 +-
>   controller/ovn-controller.c |  35 +-
>   controller/ovsport.c        |  16 +
>   controller/ovsport.h        |   3 +
>   northd/northd.c             | 163 +++-------
>   northd/ovn-northd.8.xml     |  12 +
>   ovn-sb.xml                  |   5 +
>   tests/ovn-northd.at         |  24 ++
>   tests/ovn-performance.at    |   5 -
>   tests/ovn.at                | 185 +++++++++++
>   tests/system-ovn.at         | 151 ++++++++-
>   13 files changed, 770 insertions(+), 461 deletions(-)
>