Hi David,

I'm looking forward to test your improvements using the dependencymanager
benchmark tool ([1]).


[1]
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.benchmark/

/Pierre

On Wed, May 13, 2015 at 3:02 PM, David Bosschaert <
david.bosscha...@gmail.com> wrote:

> I have implemented the performance improvements that I was thinking of
> using Java 5 concurrency tools, they can be viewed at [1].
>
> I wrote a little performance test suite [2] that tests multithreaded
> service registry performance (10 threads) from single / multiple
> bundles with either singleton services and Prototype Service Factory
> services and the results are quite impressive. I'm getting performance
> improvements compared to the current trunk from 8 times better than
> the original (800%) to more than 30 times better (3000%).
>
> Carsten has already reviewed the code (thanks Carsten!) and I'm
> planning to commit it to Felix tomorrow if nobody objects.
>
> Cheers,
>
> David
>
> [1]
> https://github.com/bosschaert/felix/commit/e6a1b06c6e66d9c98e6d81b91ef7003c8e725450
> [2]
> https://github.com/bosschaert/coderthoughts/tree/master/service-registry-perftest/srperf
>
> On 23 March 2015 at 15:39, Richard S. Hall <he...@ungoverned.org> wrote:
> > On 3/23/15 10:17 , David Bosschaert wrote:
> >>
> >> On 23 March 2015 at 13:39, Richard S. Hall <he...@ungoverned.org>
> wrote:
> >>>
> >>> On 3/23/15 03:55 , Guillaume Nodet wrote:
> >>>>
> >>>> There's a call to interrupt() in Felix#acquireBundleLock(), not sure
> if
> >>>> it
> >>>> can be the culprit though.
> >>>> Interrupts could also be caused by a bundle being shutdown while one
> of
> >>>> its
> >>>> thread is waiting for a service, which should is a valid use case
> imho.
> >>>> Anyway, I think sanely reacting to a thread being interrupted would be
> >>>> good.
> >>>
> >>>
> >>> Yes, threads can be interrupted if they are holding a bundle lock and
> the
> >>> global lock holder needs the bundle lock.
> >>>
> >>> I admit that I do not recall why we ignore the interrupt here, but
> didn't
> >>> we
> >>> implement service lookup so that a bundle lock wasn't necessary? I
> >>> thought
> >>> we just checked for the validity of the bundle context before returning
> >>> or
> >>> something. Perhaps we felt there was no reason to be interrupted in
> that
> >>> case. I really don't know.
> >>
> >> I think that the Service Registry could be rewritten to be completely
> >> free of synchronized blocks using the Java 5 concurrency libraries,
> >
> >
> > Well, that just moves the sync blocks to the library, but yeah sure.
> >
> >> which I think would really be a better approach. There is too much
> >> locking going on in the current SR implementation IMHO.
> >
> >
> > I don't really think there is too much, but it is complicated.
> > Unfortunately, it is complicated to make sure that locks aren't held
> while
> > do service lookups and this is complicated because you can run into
> cycles,
> > etc.
> >
> > But feel free to try to simplify it.
> >
> >>
> >> This brings the question: can we move to Java 5 (or Java 6) for the
> >> Framework codebase? AFAIK we're currently still JDK 1.4 compatible but
> >> I would be surprised if there is anyone who still needs a JDK that
> >> went end-of-life 7 years ago.
> >
> >
> > At this point, it doesn't really matter to me.
> >
> > -> richard
> >
> >>
> >> Best regards,
> >>
> >> David
> >
> >
>

Reply via email to