felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Richard S. Hall (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (FELIX-4692) Improve Service access time
Date Fri, 19 Dec 2014 20:55:13 GMT

    [ https://issues.apache.org/jira/browse/FELIX-4692?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14254007#comment-14254007

Richard S. Hall commented on FELIX-4692:

Looking at the code of CapabilitySet.match(Set<> caps, SimpleFilter sf) on line 239
we do "matches.retainAll(caps)" which in your case caps would be your 10k services, so I expect
that this is where you see the slowdown.

We have to do the retainAll() because it gives us the intersection of matches from the index
and all other capabilities that have been matched by any other part of the filter up until
this point (i.e., since this is recursive due to expression nesting). However, it is certainly
the case that the very first time through (i.e., at the top level), we don't need to do retainAll()
because by definition caps would already be m_capSet, which is all available capabilities.

So, perhaps the simple optimization is to simply check if (caps == m_capSet) and if so don't
do retain all.

> Improve Service access time
> ---------------------------
>                 Key: FELIX-4692
>                 URL: https://issues.apache.org/jira/browse/FELIX-4692
>             Project: Felix
>          Issue Type: Improvement
>          Components: Framework
>    Affects Versions: framework-4.4.1
>            Reporter: Felix Meschberger
>            Assignee: Felix Meschberger
>             Fix For: framework-4.6.0
>         Attachments: FELIX-4692.diff
> Currently the ServiceRegistry takes roughly 1ms to access a single service. In a reasonably
large system, this may over time consume considerable time.
> For example in our inhouse system sporting roughly 5000 services with 15'000 service
accesses during startup, these accesses acount for almost 15 seconds or roughly 25-30% of
the total startup time.
> Internally all accesses to services are handled with a Filter even if the service is
simply retrieved with the service name without a filter. This causes a considerable overhead.
> A simple improvement is to keep services not only in a global Capabitliy Set accessible
through generic filters but also keep such a set for each registered service name.
> The measured improvement of this change is substantial: accessing these 15'000 services
now only takes roughly 3 seconds or 0.2 ms per service or 5 times faster.

This message was sent by Atlassian JIRA

View raw message