InterruptedException in InfraControl.preTearDown so far only on ARM
eric.caspole at oracle.com
eric.caspole at oracle.com
Thu Jul 29 21:01:53 UTC 2021
Hi Aleksey,
I would like to get your thoughts on this corner case problem. I have
written a single shot JMH, a bit extracted from another workload
processing a large file, to see the run to run variability. But on the 2
node ARM64 platform, about 3 in 10 runs I get the InterruptedException
and the iteration fails as shown at the bottom. This is all using JDK 17
and 18 builds. It happens with both G1 and ParallelGC.
Sergey observed that the other wrappers have some try/catch around
InfraControl.preTearDown:
try {
while (control.warmdownShouldWait) {
blackhole.consume(l_getclient0_G.get());
res.allOps++;
}
control.preTearDown();
} catch (InterruptedException ie) {
control.preTearDownForce();
}
But the single shot wrapper has no try/catch there:
int batchSize = iterationParams.getBatchSize();
report_ss_jmhStub(control, res, benchmarkParams, iterationParams, threadParams, blackhole, notifyControl, startRndMask, batchSize, l_reporterbench0_0);
control.preTearDown();
if (control.isLastIteration()) {
f_reporterbench0_0 = null;
}
Do you remember why? Or maybe this is some ARM issue, I cannot get this
exception on x64 in 30+ tries running it the same way on 2 node systems
with JDK 17 and 18 builds.
Here is the exception that happens after several minutes of running the
iteration:
[36.242s][info][gc] GC(25) Pause Young (Mixed) (G1 Evacuation Pause)
6751M->6150M(16960M) 440.807ms
[40.179s][info][gc] GC(26) Pause Young (Normal) (G1 Evacuation Pause)
7142M->7050M(16960M) 386.541ms
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) [618.992s][info][gc] GC(27) Pause Young
(Normal) (G1 Evacuation Pause) 7914M->7694M(16960M) 466.143ms
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*) (*interrupt*)
(*interrupt*) <failure>
java.lang.InterruptedException
at
java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1048)
at
java.base/java.util.concurrent.CountDownLatch.await(CountDownLatch.java:230)
at
org.openjdk.jmh.runner.InfraControl.preTearDown(InfraControl.java:90)
at
com.oracle.micro.generated.ReporterBench_report_jmhTest.report_SingleShotTime(ReporterBench_report_jmhTest.java:300)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at
org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:453)
at
org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:437)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
What do you think?
Thanks,
Eric
More information about the jmh-dev
mailing list