RFR (XS): 8129855: -XX:+IgnoreUnrecognizedVMOptions hides "out of range" VM options.
Vladimir Kozlov
vladimir.kozlov at oracle.com
Fri Jul 31 02:41:07 UTC 2015
Yes, lets hear others opinion.
Note, your current changes should change 1.1.3 behavior too (should
produce ERR).
So new consistent behavior is if a flag is *known* and *modifiable* the
result should be the same with and without IgnoreUnrecognizedVMOptions flag.
You are also missing an other testing configuration - invalid usage of
debug flag in product VM:
-XX:DeoptimizeALot or -XX:CIStart=notnum
Those should be ignored in product (produce OK).
Thanks,
Vladimir
On 7/30/15 4:00 PM, gerard ziemski wrote:
> (resending with tables formatted using plain text - the mailing list
> sanitized my real tables. hopefully the plain text formatting will get
> preserved, if not, please see the table in the bug's comments section at
> https://bugs.openjdk.java.net/browse/JDK-8129855)
>
> Thank you Dmitry and Vladimir for feedback. I have a follow-up question
> to Vladimir's feedback:
>
>> I think we need more detailed check in case of locked flags. We should
>> bailout only for product vs develop and product vs notproduct
>> combinations (last 2 cases in get_locked_message()). For diagnostic
>> and experimental flags we should exit with error message - this flags
>> are available in product and most likely a developer forgot to add
>> unlock flag. If we ignore them a test will be executed differently
>> than intended. Thanks, Vladimir
>
> So, you are asking for changing the current behavior? According to the
> tests I performed (see #1.3.4, #1.3.5, #1.3.6 in table #1.3) what you
> ask for is a new behavior. What you ask for is to have
> "-XX:+IgnoreUnrecognizedVMOptions" not have any effect on locked
> experimental, diagnostic and commercial" flags, right?
>
> The issue JDK-8129855 only asks to restore behavior demonstrated by case
> #1.2.4 and not to break existing case #1.5.3 and #1.5.4, but I am open
> to do the changes you ask for if that's the consensus.
>
> Please see the following test cases and verify that this is the behavior
> we want - if that's the case, then I will make the corresponding change
> and do an update to my webrev (which at moment fails #1.3.4, #1.3.5 and
> #1.3.5 in table #1.3):
>
> Note: "(1)" next to results denotes a result that is different from the
> current jdk9/hs-rt behavior!
> Note: "(2)" next to results denotes a result that is different from the
> jdk8 behavior!
>
>
> #1.1 normal flag (unchanged):
>
> exists, invalid value does not
> exist
> -XX:MinHeapFreeRatio=notnum -XX:THIS_FLAG_DOESNT_EXIST
> -IgnoreUnrecognizedVMOptions ERR ERR
> +IgnoreUnrecognizedVMOptions OK OK
>
> #1.1.1 java -XX:-IgnoreUnrecognizedVMOptions -XX:MinHeapFreeRatio=notnum
> -version ; if [ $? -ne 0 ] ; then echo PASS ; else echo FAIL ; fi
> #1.1.2 java -XX:-IgnoreUnrecognizedVMOptions -XX:THIS_FLAG_DOESNT_EXIST
> -version ; if [ $? -ne 0 ] ; then echo PASS ; else echo FAIL ; fi
> #1.1.3 java -XX:+IgnoreUnrecognizedVMOptions -XX:MinHeapFreeRatio=notnum
> -version ; if [ $? -eq 0 ] ; then echo PASS ; else echo FAIL ; fi
> #1.1.4 java -XX:+IgnoreUnrecognizedVMOptions -XX:THIS_FLAG_DOESNT_EXIST
> -version ; if [ $? -eq 0 ] ; then echo PASS ; else echo FAIL ; fi
>
>
> #1.2 normal flag with ranges (the core of JDK-8129855, fixed):
>
> exists, in range exists,
> out of range
> -XX:StackRedPages=1 -XX:StackRedPages=0
> -IgnoreUnrecognizedVMOptions OK ERR
> +IgnoreUnrecognizedVMOptions OK ERR (1)
>
> #1.2.1 java -XX:-IgnoreUnrecognizedVMOptions -XX:StackRedPages=1
> -version ; if [ $? -eq 0 ] ; then echo PASS ; else echo FAIL ; fi
> #1.2.2 java -XX:-IgnoreUnrecognizedVMOptions -XX:StackRedPages=0
> -version ; if [ $? -ne 0 ] ; then echo PASS ; else echo FAIL ; fi
> #1.2.3 java -XX:+IgnoreUnrecognizedVMOptions -XX:StackRedPages=1
> -version ; if [ $? -eq 0 ] ; then echo PASS ; else echo FAIL ; fi
> #1.2.4 java -XX:+IgnoreUnrecognizedVMOptions -XX:StackRedPages=0
> -version ; if [ $? -ne 0 ] ; then echo PASS ; else echo FAIL ; fi
>
>
> #1.3 locked flag (new behavior):
>
> diagnostic & locked experimental &
> locked commercial & locked
> -XX:-UnlockDiagnosticVMOptions -XX:-UnlockExperimentalVMOptions
> -XX:-UnlockCommercialFeatures
> -XX:+PrintInlining -XX:+AlwaysSafeConstructors -XX:+FlightRecorder
> -IgnoreUnrecognizedVMOptions ERR ERR ERR
> +IgnoreUnrecognizedVMOptions ERR (1)(2) ERR (1)(2) ERR (1)(2)
>
> #1.3.1 java -XX:-IgnoreUnrecognizedVMOptions
> -XX:-UnlockDiagnosticVMOptions -XX:+PrintInlining -version ; if [ $?
> -ne 0 ] ; then echo PASS ; else echo FAIL ; fi
> #1.3.2 java -XX:-IgnoreUnrecognizedVMOptions
> -XX:-UnlockExperimentalVMOptions -XX:+AlwaysSafeConstructors -version ;
> if [ $? -ne 0 ] ; then echo PASS ; else echo FAIL ; fi
> #1.3.3 java -XX:-IgnoreUnrecognizedVMOptions
> -XX:-UnlockCommercialFeatures -XX:+FlightRecorder -version ; if [ $?
> -ne 0 ] ; then echo PASS ; else echo FAIL ; fi
> #1.3.4 java -XX:+IgnoreUnrecognizedVMOptions
> -XX:-UnlockDiagnosticVMOptions -XX:+PrintInlining -version ; if [ $?
> -ne 0 ] ; then echo PASS ; else echo FAIL ; fi
> #1.3.5 java -XX:+IgnoreUnrecognizedVMOptions
> -XX:-UnlockExperimentalVMOptions -XX:+AlwaysSafeConstructors -version ;
> if [ $? -ne 0 ] ; then echo PASS ; else echo FAIL ; fi
> #1.3.6 java -XX:+IgnoreUnrecognizedVMOptions
> -XX:-UnlockCommercialFeatures -XX:+FlightRecorder -version ; if [ $?
> -ne 0 ] ; then echo PASS ; else echo FAIL ; fi
>
>
> #1.4 develop & notproduct flag on debug VM (trivial, unchanged):
>
> develop & !product_build notproduct &
> !product_build
> -XX:+DeoptimizeALot -XX:+VerifyCodeCache
> -IgnoreUnrecognizedVMOptions OK OK
> +IgnoreUnrecognizedVMOptions OK OK
>
> #1.4.1 java -XX:-IgnoreUnrecognizedVMOptions -XX:+DeoptimizeALot
> -version ; if [ $? -eq 0 ] ; then echo PASS ; else echo FAIL ; fi
> #1.4.2 java -XX:-IgnoreUnrecognizedVMOptions -XX:+VerifyCodeCache
> -version ; if [ $? -eq 0 ] ; then echo PASS ; else echo FAIL ; fi
> #1.4.3 java -XX:+IgnoreUnrecognizedVMOptions -XX:+DeoptimizeALot
> -version ; if [ $? -eq 0 ] ; then echo PASS ; else echo FAIL ; fi
> #1.4.4 java -XX:+IgnoreUnrecognizedVMOptions -XX:+VerifyCodeCache
> -version ; if [ $? -eq 0 ] ; then echo PASS ; else echo FAIL ; fi
>
>
> #1.5 develop & notproduct flag on product VM (consistent with
> JDK-6886353, unchanged):
>
> develop & product_build notproduct &
> product_build
> -XX:+DeoptimizeALot -XX:+VerifyCodeCache
> -IgnoreUnrecognizedVMOptions ERR ERR
> +IgnoreUnrecognizedVMOptions OK OK
>
> #1.5.1 java -XX:-IgnoreUnrecognizedVMOptions -XX:+DeoptimizeALot
> -version ; if [ $? -ne 0 ] ; then echo PASS ; else echo FAIL ; fi
> #1.5.2 java -XX:-IgnoreUnrecognizedVMOptions -XX:+VerifyCodeCache
> -version ; if [ $? -ne 0 ] ; then echo PASS ; else echo FAIL ; fi
> #1.5.3 java -XX:+IgnoreUnrecognizedVMOptions -XX:+DeoptimizeALot
> -version ; if [ $? -eq 0 ] ; then echo PASS ; else echo FAIL ; fi
> #1.5.4 java -XX:+IgnoreUnrecognizedVMOptions -XX:+VerifyCodeCache
> -version ; if [ $? -eq 0 ] ; then echo PASS ; else echo FAIL ; fi
>
>
>
> ------------------------------------------------------------------------------------------------------------------------------------
>
>
> There was a brief email thread on this subject sometime ago at
> http://mail.openjdk.java.net/pipermail/hotspot-dev/2015-June/019213.html
> and it was decided that we need a new flag that provides a better
> alternative - that effort is now tracked by
> https://bugs.openjdk.java.net/browse/JDK-8132545
>
> Tested with test case from
> https://bugs.openjdk.java.net/browse/JDK-8130697,
> https://bugs.openjdk.java.net/browse/JDK-6886353and via "JPRT -testset
> hotspot"
>
> References:
> bug:https://bugs.openjdk.java.net/browse/JDK-8129855
> webrev: http://cr.openjdk.java.net/~gziemski/8129855_rev0/
>
>
> cheers
>
>
More information about the hotspot-dev
mailing list