I did a bit debugging with Felix. Bundle.findEntries() try to iterate through all the entries and do a name matching. That's probably why it's more expensive. I assume there will be at most one entry for the same service name per bundle, so we can use the Bundle.getEntry(name) which is a fast indexed lookup.

Thanks,
Raymond

From: Rajini Sivaram
Sent: Monday, September 01, 2008 2:56 AM
To: [email protected]
Subject: Re: Performance of extensibility-osgi





On 9/1/08, Rajini Sivaram <[EMAIL PROTECTED]> wrote:
Raymond,

I would expect iterating through BundleContext.getBundles() every time to be quite expensive compared to maintaining a set of bundles, updated using a listener (we already do this in modules/osgi-runtime to maintain a thread context classloader, and this used to be the way we did service discovery for OSGi).


Sorry, looking at the implementation of getBundles(), it doesn't look particularly expensive. So I tried using bundle.getResource()/bundle.getResources() instead of bundle.findEntries(). That does speed things up quite a lot. For META-INF/services, you should be able to use getResource() since it is a package that is not exported/imported.



On 8/29/08, Raymond Feng <[EMAIL PROTECTED]> wrote:
Hi,

Can you help a bit on the poor-man's profiling? In the class of org.apache.tuscany.sca.extensibility.osgi.OSGiServiceDiscoverer and org.apache.tuscany.sca.extensibility.osgi.OSGiServiceDiscoverer.ClassLoaderImpl, there are API calls such as:

BundleContext.getBundles()
Bundle.getEntry(...)
Bundle.findEntries(...)

It would be really helpful if you can give us some rough ideas around these potential bottlenecks.

Thanks,
Raymond

From: Rajini Sivaram
Sent: Friday, August 29, 2008 7:50 AM
To: [email protected]
Subject: Performance of extensibility-osgi




I think there is a very big classloading performance issue with extensibility-osgi. Running itest/osgi-tuscany/osgi-tuscany-test takes three times as much time using the ServiceDiscoverer in extensibility-osgi compared to using the standard Classloader based ServiceDiscoverer using the BundleClassloader as we used to.

With the current build of Tuscany on my thinkpad:

Using extensibility-osgi
[INFO] Apache Tuscany OSGi-Based Tuscany Runtime Tests ....... SUCCESS [14:09.609s]
The same build without extensibility-osgi (with BundleClassloader as TCCL)
[INFO] Apache Tuscany OSGi-Based Tuscany Runtime Tests ....... SUCCESS [3:54.796s]


These figures show around 10 minutes extra execution time, attributed purely to classloading differences. Even though these tests show a worst-case scenario since there is an awful lot of classloading going on here with Tuscany being loaded many times, I think we should address this because the impact is significant.


Thank you...

Regards,

Rajini





--
Thank you...

Regards,

Rajini



--
Thank you...

Regards,

Rajini

Reply via email to