RFR(L): 8220312: Implementation: NUMA-Aware Memory Allocation for G1, Logging (3/3)
Kim Barrett
kim.barrett at oracle.com
Mon Nov 4 04:07:33 UTC 2019
> On Nov 2, 2019, at 2:08 AM, sangheon.kim at oracle.com wrote:
>
> Here's the webrev:
> http://cr.openjdk.java.net/~sangheki/8220312/webrev.4
> http://cr.openjdk.java.net/~sangheki/8220312/webrev.4.inc
> http://cr.openjdk.java.net/~sangheki/8220312/webrev.4.inc.numa_move_pages
>
> Testing: hs-tier 1 ~ 5 with / without UseNUMA.
I didn't spend much time looking at the actual logging output; Thomas
and Stefan have both given that a pretty thorough look. Instead I
looked for more structural things.
------------------------------------------------------------------------------
There are several functions named "print()" which I think should have
some other name. The classes involved (G1NUMA, G1NUMAStats, maybe
other that I didn't check for) are derived from CHeapObj<>. In a
non-product build, CHeapObj<> is derived from AllocatedObj, which
provides a (non-virtual) "print()" function that calls the virtual
"print_on()" function.
By giving these classes their own print(), this change is overriding
this existing public API in non-product builds only. While overriding
a public non-virtual function is permitted, it is usually denigrated.
And having different overriding behavior based on build type seems
particularly confusing, especially since one is about logging and the
other isn't.
------------------------------------------------------------------------------
src/hotspot/share/gc/g1/g1ParScanThreadState.inline.hpp
241 memset((void*)_obj_alloc_stat, 0, sizeof(size_t) * num_nodes);
Unnecessary cast to void*.
------------------------------------------------------------------------------
src/hotspot/share/gc/g1/g1RegionCounts.hpp
28 #include "gc/g1/heapRegion.hpp"
Unnecessary #include here; forward declaration of HeapRegion would be
sufficient.
------------------------------------------------------------------------------
src/hotspot/share/gc/g1/g1RegionCounts.hpp
Why are add, clear, and length virtual? This class doesn't seem to be
used as a base class, and isn't overriding anything from it's base.
If it were a base class, then the destructor should not be public and
non-virtual.
------------------------------------------------------------------------------
src/hotspot/share/gc/g1/g1RegionCounts.hpp
34 class G1RegionCounts : public StackObj {
The name of this class seems very generic and isn't at all suggestive
of it having anything at all to do with NUMA.
------------------------------------------------------------------------------
src/hotspot/share/gc/g1/heapRegionManager.cpp
128 if (hr->node_index() < numa->num_active_nodes()) {
129 numa->update_statistics(G1NUMAStats::NewRegionAlloc, requested_node_index, hr->node_index());
130 }
Should we be doing this if NUMA disabled?
------------------------------------------------------------------------------
src/hotspot/share/gc/g1/heapRegionSet.cpp
323 FreeRegionList::FreeRegionList(const char* name, HeapRegionSetChecker* checker):
324 HeapRegionSetBase(name, checker),
325 _node_info(G1NUMA::numa()->is_enabled() ? new NodeInfo() : NULL) {
Unusual indentatio of initializer-list.
------------------------------------------------------------------------------
src/hotspot/share/gc/g1/heapRegionSet.hpp
189 const uint requested_node_index);
[pre-existing from earlier patch in this series?]
Useless const qualifier.
------------------------------------------------------------------------------
src/hotspot/share/gc/g1/heapRegionSet.hpp
246 class NodeInfo : public CHeapObj<mtGC> {
NodeInfo is an overly generic name for the global namespace.
------------------------------------------------------------------------------
More information about the hotspot-gc-dev
mailing list