[9, 8u40] RFR (S): 8058148: MaxNodeLimit and LiveNodeCountInliningCutoff should be increased
Vladimir Ivanov
vladimir.x.ivanov at oracle.com
Tue Nov 18 19:40:18 UTC 2014
https://bugs.openjdk.java.net/browse/JDK-8058148
9: http://cr.openjdk.java.net/~vlivanov/8058148/webrev.9.00
8u40: http://cr.openjdk.java.net/~vlivanov/8058148/webrev.8u40.00
LambdaForm sharing implementation (JEP-210 [1]) changes LambdaForm
bytecode shape. Bytecode size increases and it causes more pressure on
JIT-compiler. It leads to severe peak performance regressions due to C2
compilation bailouts when the compiler hits MaxNodeLimit &
LiveNodeCountInliningCutoff.
My experiments w/ Octane/Nashorn shows that bumping
LiveNodeCountInliningCutoff from 20k to 40k (2x) and MaxNodeLimit from
80k to 240k (3x) are enough to get rid of C2 bailouts.
It's safe to increase LiveNodeCountInliningCutoff, since it affects only
incremental inlining, which is enabled only for JSR292.
Regarding MaxNodeLimit, loop opts depend on it. So, there's a risk its
change can negatively affect time-to-performance and peak performance
due to loops over-optimization.
I prepared different fixes for 9 and 8u40.
For 8u40, I took a conservative route and bump the limit only for
methods w/ invokedynamic and MethodHandle.invoke* usages.
I keep per-compilation MaxNodeLimit value and update it when indy
instruction or MH.invoke* methods are encountered.
For 9, I propose to simply bump the limit. Performance team is fine with
the change.
Testing: Octane benchmarks w/ new limits.
Thanks!
Best regards,
Vladimir Ivanov
More information about the hotspot-compiler-dev
mailing list