On 06/15/2018 10:21 PM, Hohensee, Paul wrote:
After some difficulty with the submit cluster, with which Erik helped me out,
the patch passes. It also passed fastdebug hotspot tier 1 testing on my Mac
laptop, which former includes the new test.
I had to increase -Xmx and -Xms to 12m in order to get
TestOldGenCollectionUsage to pass on the submit cluster, though the old 10m
works fine on my Mac. New webrev:
Thanks, the change of -Xmx and -Xms to 12m now also makes the test pass
on my workstation.
http://cr.openjdk.java.net/~phh/8195115/webrev.03/
There seems to be some trailing whitespace in the patch, have you run
jcheck (or `hg diff` which highlights trailing whitespace in red)?
Please see
+ TraceMemoryManagerStats tms(&_memory_manager, gc_cause(),
+ collector_state()->yc_type() == Mixed
/* allMemoryPoolsAffected */);
+
^---- whitespace
and
+int MemoryManager::add_pool(MemoryPool* pool) {
+ int index = _num_pools;
^---- whitespace
Another small comment, I would have written
+void GCMemoryManager::add_pool(MemoryPool* pool) {
+ int index = MemoryManager::add_pool(pool);
+ _pool_always_affected_by_gc[index] = true;
+}
+
+void GCMemoryManager::add_pool(MemoryPool* pool, bool
always_affected_by_gc) {
+ int index = MemoryManager::add_pool(pool);
+ _pool_always_affected_by_gc[index] = always_affected_by_gc;
+}
+
as
+void GCMemoryManager::add_pool(MemoryPool* pool) {
+ add_pool(pool, true);
+}
+
+void GCMemoryManager::add_pool(MemoryPool* pool, bool
always_affected_by_gc) {
+ int index = MemoryManager::add_pool(pool);
+ _pool_always_affected_by_gc[index] = always_affected_by_gc;
+}
+
to not have to two duplicate implementations of
GCMemoryManager::add_pool. Would you mind updating the patch with this
change (and remove the trailing whitespace)?
Thanks,
Erik
Thanks,
Paul
On 6/12/18, 6:52 AM, "Erik Helin" <erik.he...@oracle.com> wrote:
(adding back serviceability-dev, please keep both hotspot-gc-dev and
serviceability-dev)
Hi Paul,
before I start re-reviewing, did you test the new version of the patch
via the jdk/submit repository [0]?
Thanks,
Erik
[0]: http://hg.openjdk.java.net/jdk/submit
On 06/09/2018 03:29 PM, Hohensee, Paul wrote:
> Didn't seem to make it to hotspot-gc-dev...
>
> On 6/8/18, 10:14 AM, "serviceability-dev on behalf of Hohensee, Paul"
<serviceability-dev-boun...@openjdk.java.net on behalf of hohen...@amazon.com> wrote:
>
> Back after a long hiatus...
>
> Thanks, Eric, for your review. Here's a new webrev incorporating
your recommendations.
>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8195115
> Webrev: http://cr.openjdk.java.net/~phh/8195115/webrev.02/
>
> TIA for your re-review. Plus, may I have another reviewer look at
it please?
>
> Paul
>
> On 2/26/18, 8:47 AM, "Erik Helin" <erik.he...@oracle.com> wrote:
>
> Hi Paul,
>
> a couple of comments on the patch:
>
> - memoryService.hpp:
> + 150 bool countCollection,
> + 151 bool allMemoryPoolsAffected = true);
>
> There is no need to use a default value for the parameter
> allMemoryPoolsAffected here. Skipping the default value also
allows
> you to put allMemoryPoolsAffected to
TraceMemoryManager::initialize
> in the same relative position as for the constructor
parameter (this
> will make the code more uniform and easier to follow).
>
> - memoryManager.cpp
>
> Instead of adding a default parameter, maybe add a new
method?
> Something like
GCMemoryManager::add_not_always_affected_pool()
> (I couldn't come up with a shorter name at the moment).
>
> - TestMixedOldGenCollectionUsage.java
>
> The test is too strict about how and when collections should
> occur. Tests written this way often become very brittle,
they might
> e.g. fail to finish a concurrent mark on time on a very
slow, single
> core, machine. It is better to either force collections by
using the
> WhiteBox API or make the test more lenient.
>
> Thanks,
> Erik
>
> On 02/22/2018 09:54 PM, Hohensee, Paul wrote:
> > Ping for a review please.
> >
> > Thanks,
> >
> > Paul
> >
> > On 2/16/18, 12:26 PM, "serviceability-dev on behalf of Hohensee,
Paul" <serviceability-dev-boun...@openjdk.java.net on behalf of hohen...@amazon.com> wrote:
> >
> > The CSR https://bugs.openjdk.java.net/browse/JDK-8196719
for the original fix has been approved, so I’m back to requesting a code review,
please.
> >
> > Bug: https://bugs.openjdk.java.net/browse/JDK-8195115
> > Webrev:
http://cr.openjdk.java.net/~phh/8195115/webrev.hs.01/
> >
> > Passed a submit repo run, passes its jtreg test, and a
JDK8 version is in production use at Amazon.
> >
> > From the original RR:
> >
> > > The bug is that from the JMX point of view, G1’s
incremental collector
> > > (misnamed as the “G1 Young Generation” collector)
only affects G1’s
> > > survivor and eden spaces. In fact, mixed
collections run by this
> > > collector also affect the G1 old generation.
> > >
> > > This proposed fix is to record, for each of a JMX
garbage collector's
> > > memory pools, whether that memory pool is affected
by all collections
> > > using that collector. And, for each collection,
record whether or not
> > > all the collector's memory pools are affected.
After each collection,
> > > for each memory pool, if either all the
collector's memory pools were
> > > affected or the memory pool is affected for all
collections, record
> > > CollectionUsage for that pool.
> > >
> > > For collectors other than G1 Young Generation, all
pools are recorded as
> > > affected by all collections and every collection
is recorded as
> > > affecting all the collector’s memory pools. For
the G1 Young Generation
> > > collector, the G1 Old Gen pool is recorded as not
being affected by all
> > > collections, and non-mixed collections are
recorded as not affecting all
> > > memory pools. The result is that for non-mixed
collections,
> > > CollectionUsage is recorded after a collection
only the G1 Eden Space
> > > and G1 Survivor Space pools, while for mixed
collections CollectionUsage
> > > is recorded for G1 Old Gen as well.
> > >
> > > Other than the effect of the fix on G1 Old Gen
MemoryPool.
> > > CollectionUsage, the only external behavior change
is that
> > > GarbageCollectorMXBean.getMemoryPoolNames will now
return 3 pool names
> > > rather than 2.
> > >
> > > With this fix, a collector’s memory pools can be
divided into two
> > > disjoint subsets, one that participates in all
collections and one that
> > > doesn’t. This is a bit more general than the
minimum necessary to fix
> > > G1, but not by much. Because I expect it to apply
to other incremental
> > > region-based collectors, I went with the more
general solution. I
> > > minimized the amount of code I had to touch by
using default parameters
> > > for GCMemoryManager::add_pool and the
TraceMemoryManagerStats constructors.
> >
> >
> >
>
>
>
>