[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