[jboss-jira] [JBoss JIRA] (WFLY-12372) Performance impact of moving from InjectedValue.getValue() reads to MSC Supplier impl get() reads
Brian Stansberry (Jira)
issues at jboss.org
Tue Aug 13 11:36:00 EDT 2019
Brian Stansberry created WFLY-12372:
---------------------------------------
Summary: Performance impact of moving from InjectedValue.getValue() reads to MSC Supplier impl get() reads
Key: WFLY-12372
URL: https://issues.jboss.org/browse/WFLY-12372
Project: WildFly
Issue Type: Bug
Components: MSC, Server
Affects Versions: 17.0.1.Final
Reporter: Brian Stansberry
Assignee: Richard Opalka
A byproduct of the move from the deprecated MSC org.jboss.msc.service.Service API to the new org.jboss.msc.Service API is that service wiring is shifted from a service getting refs to dependencies via InjectedValue.getValue() to Supplier.get() calls where the supplier is obtained from a ServiceBuilder.requires(....) call.
The concurrency characteristics of these two calls are different, which can result in performance changes if the calls are frequent; i.e. are part of high volume user request handling call paths. For example:
{code}
org.jboss.msc.service.ServiceRegistrationImpl.getValue()
org.jboss.msc.service.ReadableValueImpl.get()
org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.processInvocation(InterceptorContext) org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(InterceptorContext)
org.jboss.invocation.InterceptorContext.proceed()
{code}
An InjectedValue.getValue() call involves a read of a volatile field, followed by a read of the getValue() method of the service impl, which is typically also a read of a volatile field. The stack trace above shows how the Supplier.get() call is handled. The issue is the ServiceRegistrationImpl.getValue() call includes a synchronization lock on the ServiceRegistrationImpl value, which means the call is a concurrency chokepoint if it's used by many requests.
We need to examine the changes we've made related to this MSC API switch and identify and correct cases where this kind of thing has crept in.
--
This message was sent by Atlassian Jira
(v7.12.1#712002)
More information about the jboss-jira
mailing list