summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorIlya Maximets <i.maximets@ovn.org>2022-08-02 15:23:33 +0200
committerIlya Maximets <i.maximets@ovn.org>2022-08-12 01:20:04 +0200
commitd1864effeb26c85242b791197ae7309f47690a9d (patch)
tree431368fa0a710a69882062a804c44ca4dc425f83 /python
parentb0e8668f38f5a253b4f3d76251500e81fc122ecc (diff)
downloadopenvswitch-d1864effeb26c85242b791197ae7309f47690a9d.tar.gz
ovsdb: Fix copying weak references into transaction history.
Transaction history is used only to construct row data updates for clients, it's not used for checking data integrity, hence it doesn't need a copy of weak references. Not copying this data saves a lot of CPU cycles and memory in some cases. For example, in 250-node density-heavy scenario in ovn-heater these references can take up to 70% of RSS, which is about 8 GB of essentially wasted memory as reported by valgrind massif: ------------------------------------------------------------------------------- n time(i) total(B) useful-heap(B) extra-heap(B) stacks(B) ------------------------------------------------------------------------------- 20 1,011,495,832,314 11,610,557,104 10,217,785,620 1,392,771,484 0 88.00% (10,217,785,620B) (heap allocation functions) malloc/new/new[] ->70.47% (8,181,819,064B) 0x455372: xcalloc__ (util.c:121) ->70.07% (8,135,785,424B) 0x41609D: ovsdb_weak_ref_clone (row.c:66) ->70.07% (8,135,785,424B) 0x41609D: ovsdb_row_clone (row.c:151) ->34.74% (4,034,041,440B) 0x41B7C9: ovsdb_txn_clone (transaction.c:1124) | ->34.74% (4,034,041,440B) 0x41B7C9: ovsdb_txn_add_to_history (transaction.c:1163) | ->34.74% (4,034,041,440B) 0x41B7C9: ovsdb_txn_replay_commit (transaction.c:1198) | ->34.74% (4,034,041,440B) 0x408C35: parse_txn (ovsdb-server.c:633) | ->34.74% (4,034,041,440B) 0x408C35: read_db (ovsdb-server.c:663) | ->34.74% (4,034,041,440B) 0x406C9D: main_loop (ovsdb-server.c:238) | ->34.74% (4,034,041,440B) 0x406C9D: main (ovsdb-server.c:500) | ->34.74% (4,034,041,440B) 0x41B7DE: ovsdb_txn_clone (transaction.c:1125) ->34.74% (4,034,041,440B) 0x41B7DE: ovsdb_txn_add_to_history (transaction.c:1163) ->34.74% (4,034,041,440B) 0x41B7DE: ovsdb_txn_replay_commit (transaction.c:1198) ->34.74% (4,034,041,440B) 0x408C35: parse_txn (ovsdb-server.c:633) ->34.74% (4,034,041,440B) 0x408C35: read_db (ovsdb-server.c:663) ->34.74% (4,034,041,440B) 0x406C9D: main_loop (ovsdb-server.c:238) ->34.74% (4,034,041,440B) 0x406C9D: main (ovsdb-server.c:500) Replacing ovsdb_row_clone() with ovsdb_row_datum_clone() to avoid cloning unnecessary metadata. The ovsdb_txn_clone() function re-named to avoid issues if it will be re-used in the future for some other use-case. Acked-by: Dumitru Ceara <dceara@redhat.com> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Diffstat (limited to 'python')
0 files changed, 0 insertions, 0 deletions