RFR (S) 8176580: [ppc, s390] CRC32C: wrong checksum result in some cases

Zoltán Majó zoltan.majo at oracle.com
Wed Apr 12 11:10:04 UTC 2017


P.S.: Forgot to mention: The problem does not appear on any other x86_64 
platform.

On 04/12/2017 01:07 PM, Zoltán Majó wrote:
> Hi Volker,
> Hi Lutz,
>
>
> yesterday I tried to push webrev.03 using JPRT. Unfortunately, the 
> TestCRC32C.java test you've modified fails on Mac OS X on x86_64. Do 
> you have an idea why that could be?
>
> Thank you! Best regards,
>
>
> Zoltan
>
> On 04/11/2017 06:03 PM, Volker Simonis wrote:
>> Thanks a lot Zoltan!
>>
>>
>> On Tue, Apr 11, 2017 at 4:35 PM, Zoltán Majó <zoltan.majo at oracle.com 
>> <mailto:zoltan.majo at oracle.com>> wrote:
>>
>>     Hi Volker,
>>
>>
>>     On 04/11/2017 03:34 PM, Volker Simonis wrote:
>>
>>
>>         Hi Zoltan,
>>
>>         could you please be so kind to sponsor this reviewed change
>>         for jdk10?
>>
>>
>>     yes, of course. I'll push it today.
>>
>>     Best regards,
>>
>>
>>     Zoltan
>>
>>         Initially we wanted to push it ourselves because it was s390x
>>         only but now that we've also touched the tests we need a 
>> sponsor.
>>
>>         Thank you and best regards,
>>         Volker
>>
>>         ---------- Forwarded message ----------
>>         From: *Volker Simonis* <volker.simonis at gmail.com
>>         <mailto:volker.simonis at gmail.com>
>>         <mailto:volker.simonis at gmail.com
>>         <mailto:volker.simonis at gmail.com>>>
>>         Date: Fri, Mar 31, 2017 at 10:53 AM
>>         Subject: Re: RFR (S) 8176580: [ppc, s390] CRC32C: wrong
>>         checksum result in some cases
>>         To: "Schmidt, Lutz" <lutz.schmidt at sap.com
>>         <mailto:lutz.schmidt at sap.com> <mailto:lutz.schmidt at sap.com
>>         <mailto:lutz.schmidt at sap.com>>>
>>         Cc: Andrew Haley <aph at redhat.com <mailto:aph at redhat.com>
>>         <mailto:aph at redhat.com <mailto:aph at redhat.com>>>,
>>         "hotspot-compiler-dev at openjdk.java.net
>>         <mailto:hotspot-compiler-dev at openjdk.java.net>
>>         <mailto:hotspot-compiler-dev at openjdk.java.net
>> <mailto:hotspot-compiler-dev at openjdk.java.net>>"
>>         <hotspot-compiler-dev at openjdk.java.net
>>         <mailto:hotspot-compiler-dev at openjdk.java.net>
>>         <mailto:hotspot-compiler-dev at openjdk.java.net
>> <mailto:hotspot-compiler-dev at openjdk.java.net>>>
>>
>>
>>         Ping...
>>
>>         Can somebody please push this change?
>>
>>         It's ppc64/s390x only but as a courtesy to the community it
>>         also fixes
>>         the CRC JTreg tests so unfortunately I still can't push it
>>         myself :)
>>
>>         Thank you and best regards,
>>         Volker
>>
>>
>>         On Tue, Mar 28, 2017 at 5:01 PM, Volker Simonis
>>         <volker.simonis at gmail.com <mailto:volker.simonis at gmail.com>
>>         <mailto:volker.simonis at gmail.com
>>         <mailto:volker.simonis at gmail.com>>> wrote:
>>         > Hi Lutz,
>>         >
>>         > thanks a lot for fixing the test!
>>         > Your change looks good now.
>>         >
>>         > Because this touches shared (i.e. test) files, we still need
>>         a sponsor
>>         > so can somebody please sponsor this change?
>>         >
>>         > Thank you and best regards,
>>         > Volker
>>         >
>>         >
>>         >
>>         > On Fri, Mar 24, 2017 at 4:54 PM, Schmidt, Lutz
>>         <lutz.schmidt at sap.com <mailto:lutz.schmidt at sap.com>
>>         <mailto:lutz.schmidt at sap.com <mailto:lutz.schmidt at sap.com>>>
>>         wrote:
>>         >> Hi Volker,
>>         >>
>>         >> Sorry for letting you wait. Here is the final(?) webrev,
>>         containing all your requests for cleanup and improvements:
>>         >> http://cr.openjdk.java.net/~lucy/webrevs/8176580.03/
>> <http://cr.openjdk.java.net/%7Elucy/webrevs/8176580.03/>
>> <http://cr.openjdk.java.net/%7Elucy/webrevs/8176580.03/
>> <http://cr.openjdk.java.net/%7Elucy/webrevs/8176580.03/>>
>>         >>
>>         >> As before, the *.cpp files have not been modified.
>>         >>
>>         >> Best Regards,
>>         >> Lutz
>>         >>
>>         >>
>>         >>
>>         >> On 21/03/2017, 17:55, "Volker Simonis"
>>         <volker.simonis at gmail.com <mailto:volker.simonis at gmail.com>
>>         <mailto:volker.simonis at gmail.com
>>         <mailto:volker.simonis at gmail.com>>> wrote:
>>         >>
>>         >>     Hi Lutz,
>>         >>
>>         >>     thanks a lot for updating the tests. I think they look
>>         much better now.
>>         >>
>>         >>     There's just one more cleanup I'd like to propose. Can
>>         you please move
>>         >>     the throw right into the check() function. Just make
>>         check() return
>>         >>     void and throw from it if there's a mismatch between
>>         the computed and
>>         >>     the expected result. I leave it up to you if you want
>>         to pass an extra
>>         >>     error string to check() which will be printed in the
>>         case of an error.
>>         >>     I personally don't think that's necessary as it will be
>>         evident from
>>         >>     the stack trace which computation failed.
>>         >>
>>         >>     Also the try/catch and rethrow in test_multi() isn't
>>         necessary. The
>>         >>     test can be simply terminated by the initial exception.
>>         >>
>>         >>     Thank you and best regards,
>>         >>     Volker
>>         >>
>>         >>
>>         >>     On Fri, Mar 17, 2017 at 10:03 PM, Schmidt, Lutz
>>         <lutz.schmidt at sap.com <mailto:lutz.schmidt at sap.com>
>>         <mailto:lutz.schmidt at sap.com <mailto:lutz.schmidt at sap.com>>>
>>         wrote:
>>         >>     > Hi Volker,
>>         >>     >
>>         >>     > Thanks a lot for your valuable hints.
>>         >>     >
>>         >>     > I have worked some time on the Java test files:
>>         >>     >   TestCRC32.java and TestCRC32C.java are now
>>         identical as far as possible.
>>         >>     >   They now throw an exception, should any error be
>>         detected.
>>         >>     >   The “reference CRC value” is now used in
>>         test_multi() as well.
>>         >>     >   The extra test runs have been removed again.
>>         >>     >   The test methodology is fixed: each result is
>>         tested against its reference.
>>         >>     >   The tests now detect the bug introduced with
>>         8175368 and 8175369.
>>         >>     >   No issue is indicated when testing with 8176580.
>>         >>     >   I ran jcheck, and to the best of my ability and
>>         knowledge, there is no trailing whitespace.
>>         >>     >   All *.cpp files were left untouched!
>>         >>     >
>>         >>     > The next iteration of the webrev:
>>         http://cr.openjdk.java.net/~lucy/webrevs/8176580.02/
>> <http://cr.openjdk.java.net/%7Elucy/webrevs/8176580.02/>
>> <http://cr.openjdk.java.net/%7Elucy/webrevs/8176580.02/
>> <http://cr.openjdk.java.net/%7Elucy/webrevs/8176580.02/>>
>>         >>     >
>>         >>     > Best regards,
>>         >>     > Lutz
>>         >>     >
>>         >>     >
>>         >>     > Dr. Lutz Schmidt | SAP JVM | PI  SAP CP Core | T: +49
>>         (6227) 7-42834 <tel:%2B49%20%286227%29%207-42834>
>>         <tel:%2B49%20%286227%29%207-42834>
>>         >>     >
>>         >>     >
>>         >>     >
>>         >>     > On 16.03.17, 11:28, "Volker Simonis"
>>         <volker.simonis at gmail.com <mailto:volker.simonis at gmail.com>
>>         <mailto:volker.simonis at gmail.com
>>         <mailto:volker.simonis at gmail.com>>> wrote:
>>         >>     >
>>         >>     >     On Wed, Mar 15, 2017 at 5:55 PM, Schmidt, Lutz
>>         <lutz.schmidt at sap.com <mailto:lutz.schmidt at sap.com>
>>         <mailto:lutz.schmidt at sap.com <mailto:lutz.schmidt at sap.com>>>
>>         wrote:
>>         >>     >     >
>>         >>     >     > Hi Andrew, Volker,
>>         >>     >     >
>>         >>     >     > What do you think about these test enhancements?
>>         >>     >     >   Webrev:
>>         http://cr.openjdk.java.net/~lucy/webrevs/8176580.01/
>> <http://cr.openjdk.java.net/%7Elucy/webrevs/8176580.01/>
>> <http://cr.openjdk.java.net/%7Elucy/webrevs/8176580.01/
>> <http://cr.openjdk.java.net/%7Elucy/webrevs/8176580.01/>>
>>
>>         >>     >     >
>>         >>     >     > Please note: the cpp files in the webrev
>>         remained unchanged.
>>         >>     >     >
>>         >>     >     > I added some improvements (as I believe) to the
>>         TestCRC32(C).java files.
>>         >>     >     >
>>         >>     >     > In some more detail:
>>         >>     >     > The test now calculates a “reference CRC
>>         value”, based on a java implementation of the CRC32 algorithm.
>>         This reference value is used to verify all other crc values,
>>         in particular during initialization and warmup. Three
>>         additional test runs check a non-zero offset with –Xint,
>>         -Xcomp -XX:-TieredCompilation (C2 only), -Xcomp
>>         -XX:+TieredCompilation (C1 + C2).
>>         >>     >     >
>>         >>     >
>>         >>     >     Hi Lutz,
>>         >>     >
>>         >>     >     thanks for updating the tests. I've had a closer
>>         look at the tests and
>>         >>     >     realized that they actually can never fail! The
>>         check() routine just
>>         >>     >     prints an error message but that will not let the
>>         test fail. So I
>>         >>     >     would suggest to throw a runtime exception in the
>>         check() routine
>>         >>     >     after the error message was printed.
>>         >>     >
>>         >>     >     I also suggest to do the check during the normal
>>         test execution (i.e.
>>         >>     >     in test_multi()) so there's no need for extra
>>         test runs.
>>         >>     >
>>         >>     >     Finally, the current test methodology in
>>         test_multi() is broken:
>>         >>     >      - it sets the reference by calling CRC from the
>>         interpreter which
>>         >>     >     won't work if the intrinsic is also used in the
>>         interpreter.
>>         >>     >      - it only compares the reference against the
>>         last computation of CRC
>>         >>     >     in the loop which will be the result of the C2
>>         generated code. This
>>         >>     >     misses errors in C1.
>>         >>     >
>>         >>     >     I suggest to use your new, pure Java
>>         implementation for the
>>         >>     >     computation of the reference result and compare
>>         the reference with the
>>         >>     >     result of calling CRC in every iteration of the
>>         loop so we really
>>         >>     >     check all possibilities from interpreter trough
>>         C1 to C2.
>>         >>     >
>>         >>     >     Finally, can you please pay attention to not
>>         insert trailing
>>         >>     >     whitespace (there was some at line 88 in
>>         TestCRC32C.java). You can
>>         >>     >     easily verify this by running jcheck before
>>         creating the webrevs.
>>         >>     >
>>         >>     >     Thanks,
>>         >>     >     Volker
>>         >>     >
>>         >>     >     >
>>         >>     >     > Best regards,
>>         >>     >     > Lutz
>>         >>     >     >
>>         >>     >     >
>>         >>     >     > On 15.03.17, 11:50, "Volker Simonis"
>>         <volker.simonis at gmail.com <mailto:volker.simonis at gmail.com>
>>         <mailto:volker.simonis at gmail.com
>>         <mailto:volker.simonis at gmail.com>>> wrote:
>>         >>     >     >
>>         >>     >     >     On Tue, Mar 14, 2017 at 7:05 PM, Andrew
>>         Haley <aph at redhat.com <mailto:aph at redhat.com>
>>         <mailto:aph at redhat.com <mailto:aph at redhat.com>>> wrote:
>>         >>     >     >     > On 14/03/17 13:12, Schmidt, Lutz wrote:
>>         >>     >     >     >
>>         >>     >     >     >> Yes, one might think of running a test
>>         suite subset multiple times
>>         >>     >     >     >> with different parameters. In this case,
>>         -Xint and/or –Xcomp were
>>         >>     >     >     >> helpful. Forcing tests to run fully
>>         interpreted or fully compiled
>>         >>     >     >     >> helps in cases where a certain function,
>>         e.g. an intrinsic, is
>>         >>     >     >     >> invoked via distinct code paths.
>>         >>     >     >     >
>>         >>     >     >     > Right, so your patch should include that
>>         change to the test suite.
>>         >>     >     >     >
>>         >>     >     >
>>         >>     >     >     Hi Lutz,
>>         >>     >     >
>>         >>     >     >     I agree with Andrew. We should really fix
>>         the tests such that they
>>         >>     >     >     check the correctness of the intrinsics.
>>         >>     >     >
>>         >>     >     >     This may be tricky if all three, the
>>         interpreter, the client and the
>>         >>     >     >     server compiler use the same intrinsic
>>         implementation. You could
>>         >>     >     >     either copy the pure Java implementation
>>         into the test so that you can
>>         >>     >     >     compare the results of the intrinsic
>>         operation against it or you can
>>         >>     >     >     switch them off in the compilers with
>>         >>     >     > "-XX:DisableIntrinsic=_updateBytesCRC32C
>>         >>     >     >
>>         -XX:DisableIntrinsics=_updateDirectByteBufferCRC32C" and
>>         compare the
>>         >>     >     >     results. Not sure which solution is more
>>         practical, but I would be
>>         >>     >     >     really scared if we wouldn't have these test.
>>         >>     >     >
>>         >>     >     >     Regards,
>>         >>     >     >     Volker
>>         >>     >     >
>>         >>     >     >     > Andrew.
>>         >>     >     >     >
>>         >>     >     >
>>         >>     >     >
>>         >>     >
>>         >>     >
>>         >>
>>         >>
>>
>>
>>
>



More information about the hotspot-compiler-dev mailing list