[ovs-dev] [PATCH v2 3/3] ovsdb: monitor: Store serialized json in a json cache.

Ilya Maximets i.maximets at ovn.org
Tue Aug 24 19:00:39 UTC 2021


Same json from a json cache is typically sent to all the clients,
e.g., in case of OVN deployment with ovn-monitor-all=true.

There could be hundreds or thousands connected clients and ovsdb
will serialize the same json object for each of them before sending.

Serializing it once before storing into json cache to speed up
processing.

This change allows to save a lot of CPU cycles and a bit of memory
since we need to store in memory only a string and not the full json
object.

Testing with ovn-heater on 120 nodes using density-heavy scenario
shows reduction of the total CPU time used by Southbound DB processes
from 256 minutes to 147.  Duration of unreasonably long poll intervals
also reduced dramatically from 7 to 2 seconds:

           Count   Min    Max   Median    Mean   95 percentile
 -------------------------------------------------------------
  Before   1934   1012   7480   4302.5   4875.3     7034.3
  After    1909   1004   2730   1453.0   1532.5     2053.6

Signed-off-by: Ilya Maximets <i.maximets at ovn.org>
---
 ovsdb/monitor.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/ovsdb/monitor.c b/ovsdb/monitor.c
index 532dedcb6..ab814cf20 100644
--- a/ovsdb/monitor.c
+++ b/ovsdb/monitor.c
@@ -1231,6 +1231,15 @@ ovsdb_monitor_get_update(
                                             condition,
                                             ovsdb_monitor_compose_row_update2);
                 if (!condition || !condition->conditional) {
+                    if (json) {
+                        struct json *json_serialized;
+
+                        /* Pre-serializing the object to avoid doing this
+                         * for every client. */
+                        json_serialized = json_serialized_object_create(json);
+                        json_destroy(json);
+                        json = json_serialized;
+                    }
                     ovsdb_monitor_json_cache_insert(dbmon, version, mcs,
                                                     json);
                 }
-- 
2.31.1



More information about the dev mailing list