That was my first reaction when looking at the explanation, but then I realized the test is testing that the stack sizes are the same for two different snapshots of the same */unsuspended/* thread. That sounds like reason enough to make the change, even if graal were not an issue.

thanks,

Chris

On 8/27/18 6:19 PM, Igor Ignatyev wrote:
(cc'ing compiler alias)

I ain't sure that we should change these tests given that w/ libgraal (as an 
opposite to the current way we use graal) we shouldn't see this issue at all. 
I'd rather left these tests in the graal-specific problem list till we switch 
to libraal.

Vladimir, Katja, what do you think?

Thanks,
-- Igor

On Aug 27, 2018, at 5:57 PM, Daniil Titov <daniil.x.ti...@oracle.com> wrote:

Hi JC, Serguei, and Alex,

Please review an updated version of the webrev that has these comments fixed.

Webrev: http://cr.openjdk.java.net/~dtitov/8209585/webrev.02/
Issue: https://bugs.openjdk.java.net/browse/JDK-8209585

Thanks!
Daniil



From: serviceability-dev <serviceability-dev-boun...@openjdk.java.net> on behalf of 
Daniil Titov <daniil.x.ti...@oracle.com>
Date: Monday, August 27, 2018 at 11:05 AM
To: JC Beyler <jcbey...@google.com>, <serguei.spit...@oracle.com>
Cc: <serviceability-dev@openjdk.java.net>
Subject: Re: 8209585: [Graal] vmTestbase/nsk/jvmti/scenarios/sampling tests fail with 
"Too small stack of resumed thread"

Hi Jc,
Thank you for spotting this! I will send on review an updated webrev with these comments fixed. Best regards,
Daniil
From: JC Beyler <jcbey...@google.com>
Date: Monday, August 27, 2018 at 10:41 AM
To: <serguei.spit...@oracle.com>
Cc: <daniil.x.ti...@oracle.com>, <serviceability-dev@openjdk.java.net>
Subject: Re: RFR: 8209585: [Graal] vmTestbase/nsk/jvmti/scenarios/sampling tests fail 
with "Too small stack of resumed thread"
Hi Serguei, Fair enough, at least this removes a bit of the chance of flakiness :-) Should we at least clean up the comment for methods that are changed? /**
  * Testcase: check tested threads
  *    - invoke getFrameCount() for each thread
  *    - check if frameCount is not less than minimal stack depth
  *    - invoke getStackTrace() for each thread
  *    - check if stack depth is not less than frameCount
  *    - for suspended thread check if stack depth is equal to frameCount
  *
  * Returns NSK_TRUE if test may continue; or NSK_FALSE for test break.
  */
static int checkThreads(int suspended, const char* kind) {
The " * - check if stack depth is not less than frameCount" is no longer done with this webrev. Thanks,
Jc
On Sun, Aug 26, 2018 at 9:52 PM mailto:serguei.spit...@oracle.com <mailto:serguei.spit...@oracle.com> wrote:
Hi Jc,

Initially, I has the same concern.
But now I think there is no point to take these values on non-suspended threads.
It has to be good enough to compare the values taken on suspended threads only.

Thanks,
Serguei


On 8/24/18 16:49, JC Beyler wrote:
Hi Daniil,
Just my two cents about this :) I was looking at this and wondered if it made sense to fix the test this way (I always worry about simplifying a test and losing coverage). I understand the bug is that it is possible that between both calls, Graal could add some frames and therefore might trip this test: - if (frameStackSize < frameCount) { However, by removing the test altogether and only relying on the suspended frames, are we not reducing our coverage of the test (basically never really testing the running threads anymore, only the suspended ones?). Alternatively, when we look at this code and the hypothesis of Graal stacks "slipping in between calls", two cases could occur:
   A) The Graal frames are present in the first call but not the second
   B) The Graal frames are present in the second call but not the first
In the (B) case, the test would not trip, as frameStackSize would be >= frameCount so that is not an issue.
In the (A) case, we could simply recall the frameCount and assure ourselves the 
frames have disappeared, no?
Something like: if (frameStackSize < frameCount) {
            // This can occur for Graal if graal frames crept in. Call 
getFrameCount again and see if they have disappeared since
           // frameStackSize seems to say so.
            ... insert call here and a new check...
NSK_COMPLAIN5("Too small stack of %s thread #%d (%s):\n"
                             "#   getStackTrace(): %d\n"
                             "#   getFrameCount(): %d\n",
                             kind, i, threadsDesc[i].threadName,
                             (int)frameStackSize, (int)frameCount);
             nsk_jvmti_setFailStatus();
         }
Just my 2 cents because I worry about simplifying a test for Graal but losing coverage in the general case,
Jc
On Thu, Aug 23, 2018 at 8:29 PM Daniil Titov <mailto:daniil.x.ti...@oracle.com> wrote:
Please review the change that fixes 4 JVMTI tests when running with Graal.

One of the checks these tests perform compares the number of frames in the 
thread's stack returned by JVMTI GetFrameCount() with the number of frames 
entries returned by JVMTI GetStackTrace(). The thread to be tested executes 
arithmetic operations in the loop so the consequent calls of GetFrameCount() 
or/and  GetStackTrace() should return the stack trace of the same depth.

However,  with Graal on, additional "adjustCompilationLevel" frames could 
appear on the stack trace, e.g.:

adjustCompilationLevel:166, HotSpotGraalCompilerFactory 
(org.graalvm.compiler.hotspot)
adjustCompilationLevel:504, HotSpotJVMCIRuntime (jdk.vm.ci.hotspot)
testedMethod:56, Test$Runner
run:67, Test$Runner

that results in the stack depth reported by the first invocation of 
GetFrameCount() or GetStackTrace() might differ from the stack depth reported 
by the consequent calls of the same methods.

The fix modifies the tests to ensure the check that GetFrameCount () and 
GetStackTrace() report the same stack depth is performed only if the thread is 
suspended. For two tests 
(vmTestbase/nsk/jvmti/scenarios/sampling/SP02/sp02t001/TestDescription.java  
and vmTestbase/nsk/jvmti/scenarios/sampling/SP06/sp06t001/TestDescription.java) 
such check for suspended threads already exists so in these tests the 
problematic check was not modified by just removed.

Issue: https://bugs.openjdk.java.net/browse/JDK-8209585
Webrev: http://cr.openjdk.java.net/~dtitov/8209585/webrev.01

Thanks,
Daniil


-- Thanks,
Jc

-- Thanks,
Jc



Reply via email to