[infinispan-issues] [JBoss JIRA] (ISPN-5962) Implementation of RpcManagerImpl.invokeRemotely causes high CPU usage
Dan Berindei (JIRA)
issues at jboss.org
Tue Nov 24 08:14:00 EST 2015
[ https://issues.jboss.org/browse/ISPN-5962?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Dan Berindei updated ISPN-5962:
-------------------------------
Attachment: CompletableFutureBenchmarks.java
I wrote a JMH benchmark to measure the difference between {{CompletableFuture.get()}}, {{CompletableFuture.get(timeout, unit)}}, and {{CountDownLatch.await()}}. The test appears to show a significant difference between all 3 when the CPU is saturated, with {{CompletableFuture.get()}} being the slowest.
{noformat}
Benchmark Mode Cnt Score Error Units
CompletableFutureBenchmarks.completableFutureGetBusy thrpt 20 157501.654 ± 8227.728 ops/s
CompletableFutureBenchmarks.completableFutureGetSleeping thrpt 20 6337.177 ± 37.172 ops/s
CompletableFutureBenchmarks.completableFutureTimedGetBusy thrpt 20 178088.683 ± 7661.149 ops/s
CompletableFutureBenchmarks.completableFutureTimedGetSleeping thrpt 20 6331.961 ± 29.550 ops/s
CompletableFutureBenchmarks.countDownLatchAwaitBusy thrpt 20 194923.024 ± 7048.457 ops/s
CompletableFutureBenchmarks.countDownLatchAwaitSleeping thrpt 20 6326.857 ± 28.239 ops/s
{noformat}
However, the difference between the two {{CompletableFuture}} methods disappears completely in some runs...
{noformat}
Benchmark Mode Cnt Score Error Units
CompletableFutureBenchmarks.completableFutureGetBusy thrpt 20 173977.615 ± 7435.750 ops/s
CompletableFutureBenchmarks.completableFutureGetSleeping thrpt 20 6340.609 ± 21.529 ops/s
CompletableFutureBenchmarks.completableFutureTimedGetBusy thrpt 20 172650.973 ± 6382.962 ops/s
CompletableFutureBenchmarks.completableFutureTimedGetSleeping thrpt 20 6314.509 ± 30.036 ops/s
{noformat}
> Implementation of RpcManagerImpl.invokeRemotely causes high CPU usage
> ---------------------------------------------------------------------
>
> Key: ISPN-5962
> URL: https://issues.jboss.org/browse/ISPN-5962
> Project: Infinispan
> Issue Type: Enhancement
> Components: Core
> Affects Versions: 8.1.0.Beta1
> Reporter: Sanne Grinovero
> Assignee: Pedro Ruivo
> Attachments: CompletableFutureBenchmarks.java
>
>
> The method {{org.infinispan.remoting.rpc.RpcManagerImpl.invokeRemotely(Collection<Address>, ReplicableCommand, RpcOptions)}} is implemented by blocking on a {{CompletableFuture}}, but this then stalls on {{java.util.concurrent.CompletableFuture.waitingGet(boolean)}} by spending a significant amount of CPU time by spinning.
> When implementing RPC calls and having to wait for remote operations, spinning is probably not a good idea. Could we try implementing this in some way to hint towards a more pessimistic lock?
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)
More information about the infinispan-issues
mailing list