Note: This bug is displayed in read-only format because the product is no longer active in Red Hat Bugzilla.
The FDP team is no longer accepting new bugs in Bugzilla. Please report your issues under FDP project in Jira. Thanks.

Bug 2006839

Summary: [RFE] ovsdb-server: Deduplicate ovsdb_atom strings
Product: Red Hat Enterprise Linux Fast Datapath Reporter: Ilya Maximets <i.maximets>
Component: ovsdb2.16Assignee: Ilya Maximets <i.maximets>
Status: CLOSED ERRATA QA Contact: Rick Alongi <ralongi>
Severity: high Docs Contact:
Priority: high    
Version: RHEL 8.0CC: ctrautma, jhsiao, kfida, ralongi
Target Milestone: ---Keywords: FutureFeature
Target Release: FDP 21.I   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: openvswitch2.16-2.16.0-15.el8fdp Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of:
: 2006845 (view as bug list) Environment:
Last Closed: 2022-01-10 16:50:58 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 2006845    

Description Ilya Maximets 2021-09-22 14:03:03 UTC
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 big
performance impact.

Preliminary tests with introduction of a  a new reference-counted structure
'ovsdb_atom_string' that allows to not copy strings every time, but just
increase a reference counter, shows 2x performance improvement for standalone
databases in terms of a number of transactions per second it can execute,
and 3x for clustered databases (these are copying atoms more frequently
due to transaction history support).  Memory consumption also seems to be
cut in half in my benchmarks.

Initial implementation:
https://github.com/igsilya/ovs/commit/5756700c68cccd6e5bbe1ce86291e0a255e0669a

Comment 1 Ilya Maximets 2021-09-24 14:15:00 UTC
Patch accepted in upstream:
  https://github.com/openvswitch/ovs/commit/429b114c5aadee24ccfb16ad7d824f45cdcea75a

Comment 2 OvS team 2021-09-29 21:44:39 UTC
* Wed Sep 29 2021 Dumitru Ceara <dceara> - 2.16.0-15
- ovsdb-data: Deduplicate string atoms. [RH git: 24e7d1140e] (#2006839)
    commit 429b114c5aadee24ccfb16ad7d824f45cdcea75a
    Author: Ilya Maximets <i.maximets>
    Date:   Wed Sep 22 09:28:50 2021 +0200
    
        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>
        Acked-by: Dumitru Ceara <dceara>
        Acked-by: Mark D. Gray <mark.d.gray>
    
    Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=2006839
    Signed-off-by: Dumitru Ceara <dceara>

Comment 5 Rick Alongi 2022-01-05 18:30:02 UTC
Per email with Dev (i.maximets), no specific test case is feasible for this change; general testing performed during the release is sufficient for regression testing.  A full test suite was run for FDP 21.J using openvswitch2.16-2.16.0-32.el8fdp.

Marking as Verified.

Comment 6 Rick Alongi 2022-01-06 12:56:50 UTC
SanityOnly info:

[ralongi@ralongi openvswitch2.16]$ git log --oneline --grep=2006839
24e7d1140e (tag: openvswitch2.16-2.16.0-15.el8fdp) ovsdb-data: Deduplicate string atoms.
[ralongi@ralongi openvswitch2.16]$ git show 24e7d1140e
commit 24e7d1140e4b255e0691beec765847725a3b8ffb (tag: openvswitch2.16-2.16.0-15.el8fdp)
Author: Dumitru Ceara <dceara>
Date:   Wed Sep 29 13:13:10 2021 +0200

    ovsdb-data: Deduplicate string atoms.
    
    commit 429b114c5aadee24ccfb16ad7d824f45cdcea75a
    Author: Ilya Maximets <i.maximets>
    Date:   Wed Sep 22 09:28:50 2021 +0200
    
        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.

Comment 8 errata-xmlrpc 2022-01-10 16:50:58 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory (openvswitch2.16 bug fix update), and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHBA-2022:0053