On Tue, Jun 03, 2014 at 03:57:25PM +0100, Daniel P. Berrange wrote: > On Tue, Jun 03, 2014 at 04:51:14PM +0200, Giuseppe Scrivano wrote: > > "Daniel P. Berrange" <berrange@xxxxxxxxxx> writes: > > > > > I'd suggest using oprofile or sysprof to collect data on exactly > > > where our cputime is disappearing to before trying to optimize > > > further. > > > > > > I've seen that creating and accessing many gobjects, as this chunk of > > code in osinfo_loader.c does, takes a lot of cputime: > > > > OsinfoDevice *dev = osinfo_loader_get_device(loader, id); > > osinfo_entity_set_param(OSINFO_ENTITY(dev), > > OSINFO_DEVICE_PROP_VENDOR_ID, > > vendor_id); > > osinfo_entity_set_param(OSINFO_ENTITY(dev), > > OSINFO_DEVICE_PROP_VENDOR, > > vendor); > > osinfo_entity_set_param(OSINFO_ENTITY(dev), > > OSINFO_DEVICE_PROP_PRODUCT_ID, > > device_id); > > osinfo_entity_set_param(OSINFO_ENTITY(dev), > > OSINFO_DEVICE_PROP_PRODUCT, > > device); > > osinfo_entity_set_param(OSINFO_ENTITY(dev), > > OSINFO_DEVICE_PROP_BUS_TYPE, > > busType); > > So that basically comes down to the performance of the hash > table inserts. I wonder if we could make use of GQuark and/or > g_intern_string so that the hash table lookup can do a straight > pointer or int comparison, instead of strcmp. }? The call to osinfo_loader_get_device() can also hide a g_object_new(), which can be heavy. Christophe
Attachment:
pgpRZJpH_rgA3.pgp
Description: PGP signature
_______________________________________________ Libosinfo mailing list Libosinfo@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libosinfo