Do you have an updated webrev? /Magnus
> 1 nov. 2018 kl. 22:28 skrev Ekaterina Pavlova <ekaterina.pavl...@oracle.com>: > > Magnus, > > thanks for the review. > I fixed everything you pointed to. > > thanks, > -katya > >> On 11/1/18 6:46 AM, Magnus Ihse Bursie wrote: >> Hi Katya, >> Sorry for the late response. :-( >>> On 2018-10-29 21:24, Ekaterina Pavlova wrote: >>> Vladimir, >>> I added "-XX:+UseAOTStrictLoading" to "java -version", see >>> make/RunTests.gmk. >>> Also added "--compile-with-assertion" to jaotc flags in case "-ea" flag was >>> present in vm options >>> (otherwise AOTed library will warn that it does not have java assertions in >>> compiled code). >> This code: >> + ifneq ($$(findstring -ea, $$($1_VM_OPTIONS)), ) >> Using findstring is somewhat brittle here, since it will find substrings as >> well. Better to use filter which will match an exact word. >>> >>> I will add -XX:+UseAOTStrictLoading and "-Xlog:aot+class+fingerprint=trace >>> -Xlog:aot+class+load=trace" >>> directly to AOT testing tasks in mach5 jobs. >>> >>> Magnus, >>> I changed >>> "$$(addprefix -vmoption:, $$($1_AOT_OPTIONS))" >>> to >>> + ifneq ($$($1_AOT_OPTIONS), ) >>> + $1_JTREG_BASIC_OPTIONS += -vmoptions:"$$($1_AOT_OPTIONS)" >>> + endif >>> >>> Please review updated webrev: >>> http://cr.openjdk.java.net/~epavlova//8152988/webrev.01/ >> Some fallout from my and Erik's discussion still needs implementing in >> RunTests.gmk: >> $$(addprefix --compile-commands , $$($1_AOT_CCLIST)) \ >> Please rewrite as: >> $$(addprefix --compile-commands$(SPACE), $$($1_AOT_CCLIST)) \ >> I'm still not happy with the always printed "java -version". :( Vladimir >> agreed that it would be reasonable to redirect this into a file. This can be >> done by e.g. >> + $$(call ExecuteWithLog, $$@.check, \ >> + $$(FIXPATH) $$(JDK_IMAGE_DIR)/bin/java \ >> + $$($1_VM_OPTIONS) -XX:+PrintAOT -XX:+UseAOTStrictLoading >> -XX:AOTLibrary=$$@ -version \ >> + > $$@.verify-aot >> + ) >> This will redirect the output to $($1_AOT_LIB).verify-aot in >> test-support/aot. >> I still would like to see the if statement around SetupAot moved out, like >> this: >> + ifneq ($$(GTEST_AOT_MODULES), ) + $$(eval $$(call SetupAot, $1, \ >> + MODULES := $$(GTEST_AOT_MODULES), \ >> + VM_OPTIONS := $$(GTEST_VM_OPTIONS) $$(GTEST_JAVA_OPTIONS), \ >> + )) + endif >> and similarly for JTREG. This is coupled with removing the "ifneq >> ($$($1_MODULES), )" in SetupAotBody (and do not forget to un-indent two >> spaces). >> /Magnus >>> >>> thanks, >>> -katya >>> >>> >>>> On 10/23/18 4:40 PM, Vladimir Kozlov wrote: >>>>> On 10/22/18 9:36 AM, Ekaterina Pavlova wrote: >>>>> Vladimir, >>>>> >>>>> thanks a lot for the review. >>>>> "-XX:+PrintAOT" was only passed to "java -version" which is done before >>>>> the testing to verify that AOTed libraries work. >>>> >>>> If it is only for -version then using -XX:+PrintAOT is okay. >>>> >>>>> It also perhaps could be useful debug info in case some tests starts fail. >>>>> But I can change -XX:+PrintAOT to -XX:+UseAOTStrictLoading if you think >>>>> it is more than enough. >>>> >>>> -XX:+UseAOTStrictLoading is more important for tests which have different >>>> flags specified and may invalidate AOTLibrary configuration. We would want >>>> to catch tests which will not use AOT libraries. At least when we test >>>> these your changes. >>>> >>>>> >>>>> Do you suggest to add "-Xlog:aot+class+fingerprint=trace >>>>> -Xlog:aot+class+load=trace" to "java -version" only >>>>> or to java flags used during tests execution as well? >>>> >>>> These options are next step after -XX:+UseAOTStrictLoading. We were asked >>>> before how we can guarantee that AOTed methods are used by tests. One way >>>> is PrintAOT which should show published AOT methods. An other way is Xlogs >>>> flags which have less output but provide at least some level of >>>> information that AOTed classes are used and not skipped. >>>> >>>> Thanks, >>>> Vladimir >>>> >>>>> >>>>> >>>>> -katya >>>>> >>>>>> On 10/19/18 10:40 AM, Vladimir Kozlov wrote: >>>>>> I share concern about output of -XX:+PrintAOT - it prints all AOT >>>>>> classes and methods. For AOTed java.base the output will be almost the >>>>>> same for all tests (depends which are java.base classes are used). >>>>>> >>>>>> I would suggest instead to use -XX:+UseAOTStrictLoading which exit(1) VM >>>>>> if it can't load AOT library for some reason (mismatched configuration - >>>>>> different GCs). >>>>>> >>>>>> Also -Xlog:aot+class+fingerprint=trace to trace cases of mismatching >>>>>> class fingerprint. >>>>>> Also -Xlog:aot+class+load=trace -to trace AOT class loading or skipping >>>>>> them if they are not matching. >>>>>> >>>>>> And I agree to redirect this into file. >>>>>> >>>>>> Thanks, >>>>>> Vladimir >>>>>> >>>>>>> On 10/19/18 9:04 AM, Erik Joelsson wrote: >>>>>>> Hello, >>>>>>> >>>>>>> I will answer the parts I'm responsible for. >>>>>>> >>>>>>>> On 2018-10-19 00:21, Magnus Ihse Bursie wrote: >>>>>>>> >>>>>>>> In RunTests.gmk, the following line is repeated: >>>>>>>> # Note, this could not be done during JDK build time. >>>>>>>> >>>>>>>> In the options: >>>>>>>> $1_JAOTC_OPTS := \ >>>>>>>> -J-Xmx4g --info \ >>>>>>>> -Xmx4g is huge, much larger than what we typically use. Is this >>>>>>>> intentional? This will risk crashing at machines with too little free >>>>>>>> memory. Will AOT fail to work with less memory? >>>>>>>> >>>>>>>> >>>>>>>> There's an extra space before the comma here: >>>>>>>> $$(addprefix --compile-commands , $$($1_AOT_CCLIST)) \ >>>>>>>> Question (to Erik, I presume): the idea of addprefix here is that >>>>>>>> AOT_CCLIST can be empty, and this was a convenient way to just add >>>>>>>> "--compile-commands <the list file>" if it exists? I was a bit >>>>>>>> confounded at first since normally we only use it for distributing a >>>>>>>> prefix over multiple items, and I could see no way for AOT_CCLIST to >>>>>>>> ever be more than one item. >>>>>>>> >>>>>>> Yes, that was the intention. I often use addprefix that way and find it >>>>>>> convenient that it seamlessly handles 0-N number of elements in the >>>>>>> argument without the need for cumbersome conditionals. The extra space >>>>>>> is needed in this case but should perhaps be explicit using $(SPACE). >>>>>>>> >>>>>>>> About this: >>>>>>>> # Note, ExecuteWithLog doesn't play well with with two calls in the >>>>>>>> same recipe. >>>>>>>> $$(info $$(JDK_IMAGE_DIR)/bin/java $$($1_JVM_OPTIONS) -XX:+PrintAOT >>>>>>>> -XX:AOTLibrary=$$@ -version) >>>>>>>> $$(FIXPATH) $$(JDK_IMAGE_DIR)/bin/java \ >>>>>>>> $$($1_JVM_OPTIONS) \ >>>>>>>> -XX:+PrintAOT -XX:AOTLibrary=$$@ -version >>>>>>>> First, what is the purpose of this? Is it to verify that the generated >>>>>>>> AOT library works? This will result in a lot of "java -version" being >>>>>>>> printed at the time when running tests. Perhaps the output should be >>>>>>>> redirected? (Assuming that java exists with a non-zero exit value if >>>>>>>> things fail, but if it does not, I'm not sure how this would help >>>>>>>> otherwise.) >>>>>>>> >>>>>>> My guess is that they want diagnostics saved in case tests fail. >>>>>>>> Second, there's no problem to use multiple ExecuteWithLog in the same >>>>>>>> recipe, however, the base variable needs to be different. E.g: >>>>>>>> $$(call ExecuteWithLog, $$@_verify, \ >>>>>>>> $$(FIXPATH) $$(JDK_IMAGE_DIR)/bin/java \ >>>>>>>> ... >>>>>>>> >>>>>>> The issue I'm referring to is that the $(info) line in ExecuteWithLog >>>>>>> will print the commands first, then execute the first line of the >>>>>>> recipe. This makes the output confusing since both of those commands >>>>>>> print (what I'm assuming is) relevant diagnostics information. This is >>>>>>> simply a consequence of using $(info) for printing the command line. >>>>>>> Make will evaluate all the recipe lines first, then execute them one by >>>>>>> one. To be clear, it ends up like this: >>>>>>> >>>>>>> Executing [jaotc ...] >>>>>>> Executing [java ...] >>>>>>> <output from jaotc> >>>>>>> <output from java> >>>>>>>> >>>>>>>> Further, >>>>>>>> SetupAot = $(NamedParamsMacroTemplate) >>>>>>>> define SetupAotBody >>>>>>>> ifneq ($$($1_MODULES), ) >>>>>>>> ... >>>>>>>> If think it would be clearer if the if-test is on the call site for >>>>>>>> SetupAot instead. Now it's unconditionally called, but does nothing if >>>>>>>> AOT is not used. I think that looks odd. >>>>>>>> >>>>>>> My goal was to minimize the repeated code at each call site. While >>>>>>> developing this, I had a lot more duplication at first, and it was a >>>>>>> hassle to update each location every time I needed to change something. >>>>>>> Other than that I don't feel strongly for either construct. >>>>>>>> >>>>>>>> And here, >>>>>>>> - run-test-$1: clean-workdir-$1 $(TEST_PREREQS) >>>>>>>> + run-test-$1: clean-workdir-$1 $$($1_AOT_TARGETS) >>>>>>>> I don't think you can just remove TEST_PREREQS like that..? (The same >>>>>>>> goes for the other run-test-$1 instance.) >>>>>>>> >>>>>>> I added the TEST_PREREQS variable to support the CDS archive >>>>>>> generation, which was recently removed. With the way SetupAot turned >>>>>>> out to need separate calls from each SetupTestRun, the global >>>>>>> TEST_PREREQS wasn't suitable. I don't know of any current need for a >>>>>>> general TEST_PREREQS. >>>>>>>> >>>>>>>> Finally: >>>>>>>> + $$(addprefix -vmoption:, $$($1_AOT_OPTIONS)) \ >>>>>>>> I'm not really comfortable with this use of addprefix. I think a >>>>>>>> construct like: >>>>>>>> ifneq ($$($1_AOT_OPTIONS), ) >>>>>>>> $1_JTREG_BASIC_OPTIONS += -vmoption:$$($1_AOT_OPTIONS) >>>>>>>> endif >>>>>>>> would be much clearar. Ideally, I'd like to see the same construct in >>>>>>>> the SetupAotModule function as well, but that's not as important. >>>>>>>> >>>>>>> I agree. >>>>>>> >>>>>>> /Erik >>>>>>>> >>>>>>>> The rest of the build changes look good. (I can't say anything about >>>>>>>> the test/**/*-list.txt files.) >>>>>>>> >>>>>>>> /Magnus >>>>>>>> >>>>>>>>> testing: Tested by running subset of hotspot, jdk and jck tests with >>>>>>>>> TEST_OPTS_AOT_MODULES=java.base jdk.internal.vm.compiler >>>>>>>>> with "make run-test" and in Mach5. >>>>>>>>> >>>>>>>>> thanks, >>>>>>>>> -katya >>>>>>>>> >>>>>>>>> p.s. >>>>>>>>> Thanks a lot Erik for huge help with porting original patch done in >>>>>>>>> old testing framework (test/TestCommon.gmk) >>>>>>>>> to new one (make/RunTests*). >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>> >>> >