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