mirror of
https://github.com/openvswitch/ovs
synced 2025-09-04 16:25:17 +00:00
ovsdb-data: Deduplicate string atoms.
ovsdb-server spends a lot of time cloning atoms for various reasons, e.g. to create a diff of two rows or to clone a row to the transaction. All atoms, except for strings, contains a simple value that could be copied in efficient way, but duplicating strings every time has a significant performance impact. Introducing a new reference-counted structure 'ovsdb_atom_string' that allows to not copy strings every time, but just increase a reference counter. This change allows to increase transaction throughput in benchmarks up to 2x for standalone databases and 3x for clustered databases, i.e. number of transactions that ovsdb-server can handle per second. It also noticeably reduces memory consumption of ovsdb-server. Next step will be to consolidate this structure with json strings, so we will not need to duplicate strings while converting database objects to json and back. Signed-off-by: Ilya Maximets <i.maximets@ovn.org> Acked-by: Dumitru Ceara <dceara@redhat.com> Acked-by: Mark D. Gray <mark.d.gray@redhat.com>
This commit is contained in:
@@ -1833,7 +1833,7 @@ server_column_get_string(const struct server_row *row,
|
||||
{
|
||||
ovs_assert(server_columns[index].type.key.type == OVSDB_TYPE_STRING);
|
||||
const struct ovsdb_datum *d = &row->data[index];
|
||||
return d->n == 1 ? d->keys[0].string : default_value;
|
||||
return d->n == 1 ? d->keys[0].s->string : default_value;
|
||||
}
|
||||
|
||||
static bool
|
||||
|
Reference in New Issue
Block a user