[ovs-dev] [PATCH] json: Use reference counting in json objects
Rodriguez Betancourt, Esteban
estebarb at hpe.com
Thu Aug 25 18:31:18 UTC 2016
For example:
50 process inserting each 1000 rows to a test table (4 columns: string * 2, bool, integer) using commit block
Master OVS
Test Duration 131 seconds
Average Inserts Per second 746.2687 inserts/s
Average Insert Duration 134.1382ms
Minimal Insert Duration 0.166202ms
Maximum Insert Duration 489.8593ms
JSON GC Patch
Test Duration 86 seconds
Average Inserts Per second 1176 inserts/s
Average Insert Duration 82.26761ms
Minimal Insert Duration 0.165448ms
Maximum Insert Duration 751.2111ms
5 process inserting 10000 rows each to the same test table
Master OVS
Test Duration 8 seconds
Average Inserts Per second 7142.857 inserts/s
Average Insert Duration 0.656431ms
Minimal Insert Duration 0.125197ms
Maximum Insert Duration 11.93203ms
JSON GC Patch
Test Duration 7 seconds
Average Inserts Per second 8333.333 inserts/s
Average Insert Duration 0.55688ms
Minimal Insert Duration 0.143233ms
Maximum Insert Duration 26.26319ms
Also, accordingly with profiling using callgrind functions like json_clone or json_destroy sometimes can take up to 20% and 36% of the ops executed inOVSDB (those functions and functions called by those ones...). Although, in one odd case it shows that json_clone takes 50% of the operations executed. We can't avoid calling json_destroy sometimes, but I didn't find any place where a cloned JSON object is updated: only cloned, passed the new pointer and release the old one.
Regards,
Esteban
From: Ryan Moats [mailto:rmoats at us.ibm.com]
Sent: jueves, 25 de agosto de 2016 9:28
To: Rodriguez Betancourt, Esteban <estebarb at hpe.com>
Cc: dev at openvswitch.org
Subject: Re: [ovs-dev] [PATCH] json: Use reference counting in json objects
"dev" <dev-bounces at openvswitch.org> wrote on 08/16/2016 04:50:37 PM:
> From: "Rodriguez Betancourt, Esteban" <estebarb at hpe.com>
> To: "dev at openvswitch.org" <dev at openvswitch.org>
> Date: 08/16/2016 04:50 PM
> Subject: [ovs-dev] [PATCH] json: Use reference counting in json objects
> Sent by: "dev" <dev-bounces at openvswitch.org>
>
> After profiling OVSDB insert performance it was found
> that some significant portion of its time OVSDB is
> calling the function json_clone.
>
> Also, most of the usages of json_clone never modify the json,
> just keeps it to prevent it to be freed.
>
> With that in mind the struct json, json_create, json_clone
> and json_destroy were modified to keep a count of how many
> references of the json struct are left. Only when that count
> reaches zero the json struct is freed.
>
> The old "json_clone" function was renamed as "json_deep_clone".
>
> The change provides some performance improvement, depending
> on the transactions performed in OVSDB.
>
> Signed-off-by: Esteban Rodriguez Betancourt <estebarb at hpe.com>
> ---
Can you add some quantification of the statement
"provides some performance improvement"?
More information about the dev
mailing list