RFR: 8134963 [Newtests] New tests for G1 remembered set up and down
Thomas Schatzl
thomas.schatzl at oracle.com
Wed Jan 27 12:21:41 UTC 2016
Hi Dima,
On Tue, 2016-01-26 at 19:36 +0300, Dmitry Fazunenko wrote:
> Hi Thomas,
>
> Many thanks for your comments!
>
> New version is available here:
> http://cr.openjdk.java.net/~dfazunen/8134963/webrev.04/
>
> The comments are inline:
>
> On 14.01.2016 15:49, Thomas Schatzl wrote:
> > Hi Dima,
> >
> > On Wed, 2015-12-30 at 19:43 +0300, Dmitry Fazunenko wrote:
> > > Hi everyone,
> > >
> > > An updated version of the stress test for Remembered Set:
> > > http://cr.openjdk.java.net/~dfazunen/8134963/webrev.03/
> > >
> > > Tested in RBT in many configurations.
> > > Many thanks to Thomas for his offline comments.
> > some comments:
> >
> > - I would prefer to have described the input parameters somewhere
> > in
> > the description of the test (the "what the test does" one) instead
> > of
> > some comments in the main() method.
> * Test Parameters:
> * args[0] - number of objects per Heap Region (1 - means
> humongous)
> * args[1] - number of regions to refresh to provoke GC at the end
> of
> cycle.
> * (0 - means no GC, i.e. no reading from RSet)
> * args[2] - timeout in seconds (to stop execution to avoid jtreg
> timeout)
Okay.
> > - is there some way to add some kind of progress indicator?
> done: output looks like
> %% step 6 out of 10 (~33% done)
> %% 0 --> 256
> %% step 7 out of 10 (~65% done)
> %% 256 --> 266
> %% step 8 out of 10 (~66% done)
> %% 266 --> 5
Okay.
> > - line 200-202: the thresholds are automatically calculated, based
> > on region size and options. See
> > OtherRegionsTable::OtherRegionsTable for the fine->coarse
> > threshold (_max_fine_entries), and SparsePRT::cards_num() for an
> > entry point for the sparse->fine threshold.
> >
> > Maybe they should be retrieved from the corresponding VM global.
> fixed
> // threshold for sparce -> fine
> final int FINE =
> WB.getIntxVMFlag("G1RSetSparseRegionEntries").intValue();
>
> // threshold for fine -> coarse
> final int COARSE =
> WB.getIntxVMFlag("G1RSetRegionEntries").intValue();
Thanks.
> > - maybe an explanation what regToRefCounts is would be nice. Note
> > that I think it is (slightly) useful to actually add more than
> > COARSE entries (a few) to check that code path a bit more (adding
> > entries to rsets that are already coarsened).
> >
> > - a bit more documentation in go() what is actually done.
> >
> > E.g. maybe this
> >
> > // an object from "to" region
> > // if pre > cur, then we will forget
> >
> > would read better as
> >
> > // Select an object that we will install references to. If the
> > number
> > // of references after should be less than they were before, select
> > // NULL.
> done.
>
> >
> > - while I typically do not comment on naming of local variables, I
> > have no clue what "star" should mean in this context. Maybe
> > "target" or just "obj" would make my life happier :)
> star --> celebrity
>
> the celebrity is a representative of a region, which become very
> popular among others
>
> // Select a celebrity object that we will
> install
> references to.
> // The celebrity will be referred from all other
> regions.
> // If the number of references after should be
> less
> than they
> // were before, select NULL.
Just "target" without the long comment would have been fine, but now
that you already described the variable name, you may as wel keep it :)
>
> >
> > - please start comments with upper case and ending with a full stop
> > (if they are full sentences).
> done
> >
> > - not sure what the "reading" means, probably you mean "To force
> > the
> > use of rememebered set entries we need to provoke a GC. To induce
> > some
> > fragmentation, and some mixed GCs, we need to make a few objects
> > unreachable.".
>
> done
Thanks.
> > - as we already discussed in email, the stress test times out on
> > slow machines (I think these machines are always old SPARC with
> > very few threads). I am not sure what is better, either decrease
> > the length of the test or the timeout. (Did you try on e.g. Intel
> > Atoms? - not sure if they qualify since the heap requirement for
> > the test is 3G min)
> >
> > But an alternative could be some regular polling of the current
> > runtime in the application and exit early.
> >
> > I fear that otherwise we will spend more time on this in the
> > future.
> Done. Test stops working if the given timeout has achieved:
Thanks a lot for this.
> 539.845: #30: [GC pause (WhiteBox Initiated Concurrent Mark) (young)
> (initial-mark) 925M->924M(960M), 0.3904663 secs]
> 540.235: #31: [GC concurrent-mark-start]
> 541.547: #31: [GC concurrent-mark-end, 1.3114741 secs]
> 541.547: #31: [GC remark, 0.0081503 secs]
> 541.555: #31: [GC cleanup 924M->924M(960M), 0.0428539 secs]
> %% step 6 out of 10 (~33% done)
> %% 0 --> 256
> %% step 7 out of 10 (~65% done)
> %% 256 --> 266
> %% step 8 out of 10 (~66% done)
> %% 266 --> 5
> %% TIMEOUT!!!
> %% Summary
> %% Time spent : 1620 seconds
> %% Free memory left : 35840K
> %% Test passed
> ----------System.err:(1/15)----------
> STATUS:Passed.
> ----------rerun:(23/2223)*----------
Some other typos:
76 * from Rx to Ry. If c[i] < c[i-1] at the end of iteration
HTML encoded "<" sign :)
221 // regToRegRefCounts - array of reference counts from
region to region.
The full stop should be removed as the sentence seems to be continued
in the next line.
223 // The number of test iterations is array legnth - 1.
length
226 // If c[i] < c[i-1] then some referenes will be cleaned.
references
267 //Number of references went down.
268 //Need to provoke recalculation of RSet.
Missing spaces after the "//"
Given that my remaining issues are about typos, I do not need a re
-review for fixing them.
Also thanks for renaming the test (and the CR).
Looks good.
Thanks,
Thomas
More information about the hotspot-gc-dev
mailing list