Currently ovn-ic recomputes its entire transit-switch/gateway/route
state on every change to the IC databases (or the local NB/SB). On
large interconnected deployments this full recompute dominates the
ovn-ic runtime and adds significant latency between a configuration
change in one AZ and its propagation to the others.
This series introduces incremental processing (I+P) to ovn-ic, mirroring
the engine-node model already used by ovn-northd and ovn-controller. The
full recompute is split into per-subsystem engine nodes, and each node
gets an incremental change handler so that a change to a single object no
longer forces a global recompute.
Approach
--------
- The monolithic recompute is first refactored into per-subsystem
*_run functions and then into independent engine nodes (az, dp_enum,
gateway, ts, tr, port_binding, route, service_mon).
- Each node gains an incremental handler that reacts only to the
tracked changes on its inputs, falling back to recompute when a
change cannot be handled incrementally.
Testing
-------
- make check / make check-ovn-ic all pass.
- Scale test as above:
3: perf-ovn-ic.at:233 ovn-ic basic scale test -- 200 VPCs x 3 AZs x 4 TSs:
incremental vs recompute -- parallelization=yes
4: perf-ovn-ic.at:239 ovn-ic basic scale test -- 400 VPCs x 3 AZs x 4 TSs:
incremental vs recompute -- parallelization=yes
Results
-------
3: ovn-ic basic scale test -- 200 VPCs x 3 AZs x 4 TSs: incremental vs
recompute -- parallelization=yes
Results for 'Incremental: +1 VPC at 200-VPC scale (node handler times)'
---
en_ts incremental Maximum (msec): 5
en_ts incremental Average (msec): 0.990723
en_tr incremental Maximum (msec): 0
en_tr incremental Average (msec): 0
en_route incremental Maximum (msec): 6
en_route incremental Average (msec): 1.458008
en_port_binding incremental Maximum (msec): 0
en_port_binding incremental Average (msec): 0
en_tunnel_key incremental Maximum (msec): 1
en_tunnel_key incremental Average (msec): 0
3: ovn-ic basic scale test -- 200 VPCs x 3 AZs x 4 TSs: incremental vs
recompute -- parallelization=yes
Results for 'Full recompute at 201-VPC scale (node times)'
---
en_ts recompute Maximum (msec): 3
en_ts recompute Average (msec): 3.000000
en_tr recompute Maximum (msec): 0
en_tr recompute Average (msec): 0.000000
en_route recompute Maximum (msec): 155
en_route recompute Average (msec): 155.000000
en_port_binding recompute Maximum (msec): 62
en_port_binding recompute Average (msec): 62.000000
en_tunnel_key recompute Maximum (msec): 3
en_tunnel_key recompute Average (msec): 3.000000
4: ovn-ic basic scale test -- 400 VPCs x 3 AZs x 4 TSs: incremental vs
recompute -- parallelization=yes
Results for 'Incremental: +1 VPC at 400-VPC scale (node handler times)'
---
en_ts incremental Maximum (msec): 4
en_ts incremental Average (msec): 1.301319
en_tr incremental Maximum (msec): 0
en_tr incremental Average (msec): 0
en_route incremental Maximum (msec): 5
en_route incremental Average (msec): 2.055176
en_port_binding incremental Maximum (msec): 0
en_port_binding incremental Average (msec): 0
en_tunnel_key incremental Maximum (msec): 0
en_tunnel_key incremental Average (msec): 0
4: ovn-ic basic scale test -- 400 VPCs x 3 AZs x 4 TSs: incremental vs
recompute -- parallelization=yes
Results for 'Full recompute at 401-VPC scale (node times)'
---
en_ts recompute Maximum (msec): 7
en_ts recompute Average (msec): 7.000000
en_tr recompute Maximum (msec): 0
en_tr recompute Average (msec): 0.000000
en_route recompute Maximum (msec): 147
en_route recompute Average (msec): 147.000000
en_port_binding recompute Maximum (msec): 121
en_port_binding recompute Average (msec): 121.000000
en_tunnel_key recompute Maximum (msec): 6
en_tunnel_key recompute Average (msec): 6.000000
Paulo Guilherme Silva (13):
ic: Do not include config.h from headers.
northd: Read ic-vxlan_mode as a boolean value, not key presence.
ic: Prepare *_run functions for engine nodes.
ic: Split full recompute into per-subsystem engine nodes.
ic: Add incremental handler for the en_az node.
ic: Add the en_tunnel_key node.
ic: Add incremental handler for the en_gateway node.
ic: Add incremental handler for the en_ts node.
ic: Add incremental handler for the en_tr node.
ic: Add incremental handler for the en_port_binding node.
ic: Add incremental handler for the en_route node.
tests: Add ovn-ic incremental-processing basic scale test.
ic: Add incremental handler for the en_service_mon node.
NEWS | 13 +
ic/automake.mk | 18 +
ic/en-address-set.c | 56 +
ic/en-address-set.h | 11 +
ic/en-az.c | 127 ++
ic/en-az.h | 24 +
ic/en-gateway.c | 413 ++++
ic/en-gateway.h | 15 +
ic/en-ic.c | 9 +-
ic/en-ic.h | 2 -
ic/en-port-binding.c | 1651 ++++++++++++++++
ic/en-port-binding.h | 39 +
ic/en-route.c | 2657 ++++++++++++++++++++++++++
ic/en-route.h | 39 +
ic/en-service-monitor.c | 552 ++++++
ic/en-service-monitor.h | 16 +
ic/en-tr.c | 205 ++
ic/en-tr.h | 15 +
ic/en-ts.c | 216 +++
ic/en-ts.h | 19 +
ic/en-tunnel-key.c | 426 +++++
ic/en-tunnel-key.h | 46 +
ic/inc-proc-ic.c | 279 ++-
ic/inc-proc-ic.h | 9 +-
ic/ovn-ic.c | 3739 ++++---------------------------------
ic/ovn-ic.h | 59 +-
northd/en-global-config.c | 4 +-
ovn-ic-nb.xml | 23 +
tests/automake.mk | 3 +-
tests/ovn-ic.at | 636 +++++++
tests/ovn-macros.at | 32 +
tests/ovn-northd.at | 18 +
tests/perf-ovn-ic.at | 250 +++
tests/perf-testsuite.at | 1 +
34 files changed, 8218 insertions(+), 3404 deletions(-)
create mode 100644 ic/en-address-set.c
create mode 100644 ic/en-address-set.h
create mode 100644 ic/en-az.c
create mode 100644 ic/en-az.h
create mode 100644 ic/en-gateway.c
create mode 100644 ic/en-gateway.h
create mode 100644 ic/en-port-binding.c
create mode 100644 ic/en-port-binding.h
create mode 100644 ic/en-route.c
create mode 100644 ic/en-route.h
create mode 100644 ic/en-service-monitor.c
create mode 100644 ic/en-service-monitor.h
create mode 100644 ic/en-tr.c
create mode 100644 ic/en-tr.h
create mode 100644 ic/en-ts.c
create mode 100644 ic/en-ts.h
create mode 100644 ic/en-tunnel-key.c
create mode 100644 ic/en-tunnel-key.h
create mode 100644 tests/perf-ovn-ic.at
--
2.34.1
--
_'Esta mensagem é direcionada apenas para os endereços constantes no
cabeçalho inicial. Se você não está listado nos endereços constantes no
cabeçalho, pedimos-lhe que desconsidere completamente o conteúdo dessa
mensagem e cuja cópia, encaminhamento e/ou execução das ações citadas estão
imediatamente anuladas e proibidas'._
* **'Apesar do Magazine Luiza tomar
todas as precauções razoáveis para assegurar que nenhum vírus esteja
presente nesse e-mail, a empresa não poderá aceitar a responsabilidade por
quaisquer perdas ou danos causados por esse e-mail ou por seus anexos'.*
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev