RFR (S): 8218458: [TESTBUG] runtime/NMT/CheckForProperDetailStackTrace.java fails with Expected stack trace missing from output
David Holmes
david.holmes at oracle.com
Sun Apr 7 23:40:29 UTC 2019
Hi Thomas,
My apologies, I did not mean to ignore your input here. Thanks for
taking a look and pointing out the scanning error in my original proposal.
Hopefully you are okay with the simpler approach that Chris has advocated.
Thanks,
David
On 4/04/2019 5:12 pm, Thomas Stüfe wrote:
> Hi David, Chris,
>
> I think this is an improvement and goes in the right direction. Those
> hard-wired inline guesses always made me twitch a bit.
>
> The patch looks fine to me in its current form, since it is already an
> improvement. So the following remarks are "optional":
>
> - Since all we want to do is to test that NMT detail printing works, we
> do not have to use one of the malloc paths; I have the feeling the mmap
> paths are more "inline stable" since they usually end up in one of the
> ReservedSpace child class constructors which do not get inlined.
>
> Like this:
>
> 74 [0x0000000706400000 - 0x0000000800000000] reserved 4091904KB for
> Java Heap from
> 75 [0x00007f9b514cff07]
> ReservedHeapSpace::try_reserve_range(char*, char*, unsigned long, char*,
> char*, unsigned long, unsigned long, bool)+0xb7
> 76 [0x00007f9b514d08d8]
> ReservedHeapSpace::initialize_compressed_heap(unsigned long, unsigned
> long, bool)+0x5f8
> 77 [0x00007f9b514d0f3a]
> ReservedHeapSpace::ReservedHeapSpace(unsigned long, unsigned long, bool,
> char const*) [clone .part.29]+0x9a
> 78 [0x00007f9b51450331] Universe::reserve_heap(unsigned long,
> unsigned long)+0xe1
>
> Or this:
>
> 256 [0x00007f9b308c5000 - 0x00007f9b3f8c5000] reserved 245760KB for
> Code from
> 257 [0x00007f9b514cad02]
> ReservedCodeSpace::ReservedCodeSpace(unsigned long, unsigned long,
> bool)+0xa2
> 258 [0x00007f9b505bcfb7] CodeCache::reserve_heap_memory(unsigned
> long)+0xe7
> 259 [0x00007f9b505bd75b] CodeCache::initialize_heaps()+0x2db
> 260 [0x00007f9b505bde45] CodeCache::initialize()+0x1b5
>
> will be stacks you always will see.
>
> - I do not like scanning the whole output for each single stack frame.
> The test may give false positives. I would like it more if we were to
> read the file line by line, and when the first pattern line matches,
> check that subsequent lines match too. This is how we do call stack
> matching at SAP for similar tests.
> This is also more efficient since you do not re-scan the whole output
> each time.
>
> In general:
>
> NMT is really very useful. We could think about
> increasing NMT_TrackingStackDepth, since 4 is obviously not a lot. 6 or
> 8 would be better. I do not believe the memory footprint increase would
> be significant, but of course we would have to measure.
>
> Thanks! Thomas
>
> On Thu, Apr 4, 2019 at 8:36 AM Chris Plummer <chris.plummer at oracle.com
> <mailto:chris.plummer at oracle.com>> wrote:
>
> On 4/3/19 11:23 PM, David Holmes wrote:
> > Hi Chris,
> >
> > On 4/04/2019 4:12 pm, Chris Plummer wrote:
> >> Hi David,
> >>
> >> I have concerns that this will hide some of the other bugs I've
> >> mentioned: JDK-8133749, JDK-8133747, and JDK-8133740. These bugs
> >> result in 1 or two frames appearing in the stacktrace that
> should be
> >> skipped. Notably NativeCallStack::NativeCallStack() and
> >> os::get_native_stack().
> >
> > The test still checks those are not present first:
> >
> > 73 // We should never see either of these frames because
> they
> > are supposed to be skipped. */
> > 74 output.shouldNotContain("NativeCallStack::NativeCallStack");
> > 75 output.shouldNotContain("os::get_native_stack");
> Ah yes. I skimmed over the test looking for it but missed it.
> >
> >> Also, AllocateHeap() should normally not be in the stack trace, but
> >> the test has specifically allowed for it for windows and solaris
> >> slowdebug builds. Although these builds should have honored the
> >> ALWAYSINLINE directive, it was deemed acceptable that it was not in
> >> slowdebug builds. However, I would not want to allow AllocateHeap()
> >> to appear in a product build, and best not to see it in fastdebug
> >> either.
> >
> > This is a test of NMT detail not a test of whether a given compiler
> > chooses to inline something like AllocateHeap. I don't think it
> is the
> > job of this test to be checking for something specific to the native
> > compiler. The previous handling of AllocateHeap seemed to be there
> > simply because it was the only way to deal with an optional frame -
> > but now that's handled generically.
> It's appearance means you effectively only have 3 frames to identity
> callsites instead of 4. If it does appear in a product build, a
> solution
> should be looked into to get rid of it. If the port owner decides it
> can't get rid of it (or is unwilling to), then an exception should be
> added to the test like was done for solaris and windows slowdebug
> builds.
>
> thanks,
>
> Chris
> >
> > Thanks,
> > David
> >
> >> Given the changes you made to allow more flexibly in which frames
> >> appear, I think you need to now also make sure the above 3
> mentioned
> >> frames are not present, except for allowing AllocateHeap() in
> >> slowdebug builds.
> >>
> >> thanks,
> >>
> >> Chris
> >>
> >> On 4/3/19 10:53 PM, David Holmes wrote:
> >>> Bug: https://bugs.openjdk.java.net/browse/JDK-8218458
> >>> Webrev: http://cr.openjdk.java.net/~dholmes/8218458/webrev/
> >>>
> >>> The actual stack trace reported by NMT detail is affected by the
> >>> inlining decisions of the native compiler, and on the type of
> build.
> >>> So we define an "ideal" stacktrace and then allow for some
> frames to
> >>> be missing based on empirical observations. So to date we have
> seen
> >>> two frames that may or may not be inlined and so we allow for 2
> >>> non-matching entries.
> >>>
> >>> The special-casing of AllocateHeap is removed as now it is just an
> >>> optional frame.
> >>>
> >>> Chris: does this maintain the "spirit" of the test as you intended?
> >>>
> >>> Zhengyu: can you test this on your system(s) please.
> >>>
> >>> Thanks,
> >>> David
> >>
> >>
>
>
More information about the hotspot-runtime-dev
mailing list