RFR: 8260296: SA's dumpreplaydata fails [v3]

Igor Ignatyev iignatyev at openjdk.java.net
Wed Feb 3 05:42:52 UTC 2021


On Wed, 27 Jan 2021 08:07:04 GMT, Roland Westrelin <roland at openjdk.org> wrote:

>> I noticed that the SA's dumpreplaydata command fails with:
>> 
>> java.lang.AssertionError: CLHSDB wasn't run successfully: Opening core file, please wait...
>> hsdb> Exception in thread "main" java.lang.InternalError: ciMetadata does not appear to be polymorphic
>> 
>> with a simple test program. This happens because the SA can't find the
>> vtable symbol for ciMetadata (build produced by gcc 9.2.1). AFAIU,
>> there's nothing in our build system that hides that symbol. I had to
>> move one method's definition from the header file to the cpp file for
>> the symbol to be visible again.
>> 
>> We have a test that checks dumpreplaydata but it doesn't catch that
>> problem. The test produces a replay file from a core file with the SA
>> by running a simple test with -Xcomp and CICrash=1. So the replay data
>> has very little or no profile data (which is what causes the problem
>> above). I propose running a slightly more complicated test method and
>> crashing after the method has had time to run for long enough to
>> collect profile data.
>> 
>> The other shortcoming of the test is that it doesn't look at the
>> content of the replay file. It only warns if they differ. The replay
>> file produced by the VM and the one produced by the SA should be
>> identical (except for comment lines). So I propose we check that.
>> 
>> Finally, I can't run that test on my system because core files are
>> handled by systemd (I'm running some recent version of fedora). I
>> suppose, the system can be configured differently but having the test
>> work out the box is nice. I extended the test case to handle that.
>> 
>> With the improved test, there are a few differences between the VM and
>> SA replay files caused by VM changes that were not mirrored in the
>> SA. I fixed those.
>
> Roland Westrelin has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains seven additional commits since the last revision:
> 
>  - convert all tests
>  - Merge branch 'master' into JDK-8260296
>  - use CoreUtils
>  - whitespaces
>  - SA fixes
>  - VM fix
>  - test

test/lib/jdk/test/lib/util/CoreUtils.java line 166:

> 164:                                 for (int i = 0; i < 10; i++) {
> 165:                                     Thread.sleep(5000);
> 166:                                     OutputAnalyzer out = ProcessTools.executeProcess("coredumpctl", "dump",  "-1",  "-o", core, Long.valueOf(pid).toString());

you can use `String::valueOf` to a string represenatation of `long`:
Suggestion:

                                    OutputAnalyzer out = ProcessTools.executeProcess("coredumpctl", "dump",  "-1",  "-o", core, String.valueOf(pid));

-------------

PR: https://git.openjdk.java.net/jdk/pull/2195


More information about the hotspot-compiler-dev mailing list