RFR [XS]: 8248429: Add --enable-preview as VM argument when running microbenchmarks
Jorn Vernee
jorn.vernee at oracle.com
Tue Jun 30 12:52:21 UTC 2020
Hi Claes,
I see what you mean.
I've created a patch that instead greps through all the benchmark source
files, and finds files with `--enable-preview` in them. Then, only those
files are compiled with --enable-preview, by using a separate call to
SetupJavaCompilation.
This relies on the fact that the benchmarks that use preview features
also use `@Fork(... jvmAppendArgs= "--enable-preview")`, but, maybe a
different marker can be used to mark benchmarks that need to be compiled
with --enable-preview as well. Alternatively, we could use 2 separate
directory structures to house preview and non-preview benchmarks. WDYT?
Webrev: http://cr.openjdk.java.net/~jvernee/8248429/webrev.00/
Testing: deleting build/<config>/support/test/micro and
build/<config>/images/test/micro and confirming that compiling and
running benchmarks with and without preview features works as expected.
I don't think there's any automated tests for benchmarks right?
Jorn
On 27/06/2020 01:38, Claes Redestad wrote:
> Patch looks fine (although you might want to update the comment).
>
> It's more concerning that I didn't catch this (seems all tests of
> mine were with --enable-preview), and we'll still inconvenience users
> who need to run the jar file directly. So it seems we should consider
> fixing so that only those benchmarks that actually need --enable-preview
> are built with that flag.
>
> /Claes
>
> On 2020-06-27 00:21, Jorn Vernee wrote:
>> Forgot to attach the JBS link:
>> https://bugs.openjdk.java.net/browse/JDK-8248429
>>
>> Jorn
>>
>> On 27/06/2020 00:14, Jorn Vernee wrote:
>>> Hi,
>>>
>>> https://bugs.openjdk.java.net/browse/JDK-8248135 added
>>> --enable-preview to the javac options when building micro benchmarks.
>>>
>>> We should also add it to the set of default VM arguments passed to
>>> the microbenchmark jar so it doesn't need to be passed manually.
>>>
>>> If --enable-preview is not passed, the microbenchmarks can not be
>>> run (even the ones that don't use preview features). Since the class
>>> files have a modified minor version due to building with
>>> --enable-preview, the VM must also be started with --enable-preview
>>> in order to be able to load the classes. In the absence of
>>> --enable-preview, for instance the following error will occur:
>>>
>>> java.lang.UnsupportedClassVersionError: Preview features are not
>>> enabled for
>>> org/openjdk/bench/jdk/incubator/foreign/generated/CallOverhead_panama_args10_jmhTest
>>> (class file version 60.65535). Try running with '--enable-preview'
>>> at java.base/java.lang.ClassLoader.defineClass1(Native Method)
>>> at
>>> java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
>>> at
>>> java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
>>>
>>> at
>>> java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:825)
>>>
>>> at
>>> java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:723)
>>>
>>> at
>>> java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:646)
>>>
>>> at
>>> java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:604)
>>>
>>> at
>>> java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
>>>
>>> at
>>> java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
>>> at java.base/java.lang.Class.forName0(Native Method)
>>> at java.base/java.lang.Class.forName(Class.java:377)
>>> at
>>> org.openjdk.jmh.util.ClassUtils.loadClass(ClassUtils.java:72)
>>> at
>>> org.openjdk.jmh.runner.BenchmarkHandler.<init>(BenchmarkHandler.java:68)
>>> at
>>> org.openjdk.jmh.runner.BaseRunner.runBenchmark(BaseRunner.java:233)
>>> at
>>> org.openjdk.jmh.runner.BaseRunner.doSingle(BaseRunner.java:139)
>>> at
>>> org.openjdk.jmh.runner.BaseRunner.runBenchmarksForked(BaseRunner.java:76)
>>> at
>>> org.openjdk.jmh.runner.ForkedRunner.run(ForkedRunner.java:72)
>>> at org.openjdk.jmh.runner.ForkedMain.main(ForkedMain.java:84)
>>>
>>>
>>> Please review the patch attached inline at [1].
>>>
>>> Testing: running a microbenchmark without passing '--enable-preview'
>>> manually and confirming that it doesn't fail to load the classes.
>>>
>>> Thanks,
>>> Jorn
>>>
>>> [1] :
>>>
>>> diff --git a/make/RunTests.gmk b/make/RunTests.gmk
>>> index 721bb827639..59911d89e9f 100644
>>> --- a/make/RunTests.gmk
>>> +++ b/make/RunTests.gmk
>>> @@ -691,7 +691,7 @@ define SetupRunMicroTestBody
>>> endif
>>>
>>> # Set library path for native dependencies
>>> - $1_JMH_JVM_ARGS :=
>>> -Djava.library.path=$$(TEST_IMAGE_DIR)/micro/native
>>> + $1_JMH_JVM_ARGS :=
>>> -Djava.library.path=$$(TEST_IMAGE_DIR)/micro/native --enable-preview
>>>
>>> ifneq ($$(MICRO_VM_OPTIONS)$$(MICRO_JAVA_OPTIONS), )
>>> $1_JMH_JVM_ARGS += $$(MICRO_VM_OPTIONS) $$(MICRO_JAVA_OPTIONS)
>>>
More information about the build-dev
mailing list