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

Felix Meschberger commented on FELIX-4692:
------------------------------------------

For illustration purposes some measurments of the 
{{ServiceRegistry.getServiceReferences(String className, SimpleFilter filter)}} 
method.

|| Period                     || #1   || #2    || #3     || #4    || #5    || 
#6  || ||
| Startup                     | 8720 | 8720 | 8720 | 8720 | 8722 | 8720 | calls 
to getServiceReferences method |
|                                  | 4074 | 3983 | 3740 | 1397 | 1086 | 1017 | 
Total ms spent in method |
| Startup + Shutdown | 15093 | 15105 | 15075 | 15091 | 15199 | 15197 | calls to 
getServiceReferences method |
|                                  | 12951 | 13039 | 12012 | 4336 | 3144 | 3101 
| Total ms spent in method |

# Unmodified framework at Rev. 1649764
# Guard {{matches.retainAll(caps)}} call only -- not that much of an influence, 
interestingly; probably not doing much work most of the time due to small set 
of entries in the matches set.
# Guard {{matches.retainAll(caps)}} call and not wrapping set in ArrayList -- 
some more improvement, nothing drammatic yet
# Guard {{matches.retainAll(caps)}} call, not wrapping set in ArrayList, 
special case code (not in the patch) to specially handle 
{{SimpleFilter.PRESENT}} filters - starts to go into the right direction
# [^FELIX-4692-2.patch] applied -- since the presence check derives from access 
to services with a {{null}} service interface, changing the filter to 
{{MATCH_ALL}} instead looks even better and makes for simpler code in the 
{{CapabilitySet}} not requiring special handling of the presence check.
# [^FELIX-4692.diff] applied -- best numbers but most complex and thus not used.

All tests are run on an mid-2013 MacBook Air 13 with 1.7 GHz Intel Core i7, 8GB 
RAM, and SSD. The absolute values vary but relative values across the options 
are interesting.

> 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-2.patch, 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
(v6.3.4#6332)

Reply via email to