This series is aimed to reduce size of a Southbound DB. In modern OVN cluster there is a big probability that same logical flows are installed for several logical switches. Currently, OVN will create a separate logical flow for each logical switch (datapath) filled with exact same match, actions and so on. The only difference between these flows is a logical_datapath column. Depending on a size of a cluster, there could be hundreds or even thousands of copies of the same flow.
This change introduces new table Logical Datapath Group. With this table we could combine datapaths in a single set and link the whole datapath group to a single logical flow. In my testing for a 7MB Northbound DB with 100 logical switches taken from the ovn-k8s cluster test, size of a Southbound DB decreased from 480 MB to 90 MB. Number of logical flows in SB DB for this test case: Currently - 1173779 With patches - 171632 Current implementation is functional, but it has few small unfinished parts: 1. Backward compatibility code for ovn-controller is missing. 2. Some tests are failing and I don't know why yet (didn't spend much time on this): 58: ovn -- dhcpv6 : 1 HV, 2 LS, 5 LSPs FAILED (ovn.at:6209) 59: ovn -- 2 HVs, 2 LRs connected via LS, gateway router FAILED (ovs-macros.at:222) 153: ovn -- Symmetric ECMP reply flows FAILED (ovn.at:21589) 159: ovn -- ARP replies for SNAT external ips FAILED (ovn.at:22328) Test 59 fails with crash inside idl code on ovn-controller side and that is suspicious (might be not entirely my fault): SIGSEGV detected, backtrace: 0x4567de <fatal_signal_handler+0x1e> 0x7f27270b96b0 <killpg+0x40> 0x4b1e40 <hmap_next_with_hash__+0x10> 0x4abeb7 <ovsdb_idl_get_row+0x27> 0x4b0cbf <ovsdb_idl_process_update2+0x1f> 0x4b0b43 <ovsdb_idl_db_parse_update__+0x213> 0x4b04a9 <ovsdb_idl_db_parse_update+0x9> 0x4afa0f <ovsdb_idl_db_parse_update_rpc+0xff> 0x4aa554 <ovsdb_idl_process_msg+0x74> 0x4aa35f <ovsdb_idl_run+0xcf> 0x4aec62 <ovsdb_idl_loop_run+0x12> 0x42043c <main+0x117c> 0x7f27270a41a3 <__libc_start_main+0xf3> 0x404e5e <_start+0x2e> 3. Patches 3-5 should be a single patch in order to work. Split for now to make review easier. 4. Code might be not so elegnt in a few places. First 5 patches implements 1:1 relation between lflow and datapath group, but it's still beneficial to have. First 5 patches reduces DB in my case form 480 to 150 MB. I also didn't run any performance tests. This will be necessary, since flow processing is altered and this might give extra load on northd and ovn-controller. P.S. It looks like it's still Friday the 13th PST.. :) Ilya Maximets (6): tests: Sort flow and database dumps. ovn-sb.ovsschema: Add Logical Datapath Groups. northd: Add support for logical datapath groups. controller: Unfinished changes to support Logical Datapath Groups. utilities: Add support for Logical Datapath Groups. northd: Use same Logical Datapath Group for different flows. controller/lflow.c | 105 ++++++++++------ controller/lflow.h | 1 - controller/ovn-controller.c | 23 +--- lib/ovn-util.c | 14 +-- lib/ovn-util.h | 3 +- northd/ovn-northd.c | 244 ++++++++++++++++++++++++++++++------ ovn-sb.ovsschema | 22 +++- ovn-sb.xml | 42 +++++-- tests/ovn-northd.at | 6 +- tests/ovn.at | 2 +- utilities/ovn-sbctl.c | 57 ++++++--- utilities/ovn-trace.c | 35 ++++-- 12 files changed, 400 insertions(+), 154 deletions(-) -- 2.25.4 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev