diff --git a/gc/base/Configuration.cpp b/gc/base/Configuration.cpp
index a9ffec8e054..1c566fefc7d 100644
--- a/gc/base/Configuration.cpp
+++ b/gc/base/Configuration.cpp
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 1991, 2019 IBM Corp. and others
+ * Copyright (c) 1991, 2020 IBM Corp. and others
*
* This program and the accompanying materials are made available under
* the terms of the Eclipse Public License 2.0 which accompanies this
@@ -448,35 +448,27 @@ MM_Configuration::initializeGCParameters(MM_EnvironmentBase* env)
/* TODO 108399: May need to adjust -Xmn*, -Xmo* values here if not fully specified on startup options */
+ Assert_MM_true(0 < extensions->gcThreadCount);
+
/* initialize packet lock splitting factor */
if (0 == extensions->packetListSplit) {
- if (16 >= extensions->gcThreadCount) {
- extensions->packetListSplit = extensions->gcThreadCount;
- } else if (32 >= extensions->gcThreadCount) {
- extensions->packetListSplit = 16 + ((extensions->gcThreadCount - 16) / 4);
- } else {
- extensions->packetListSplit = 20 + ((extensions->gcThreadCount - 32) / 8);
- }
+ extensions->packetListSplit = (extensions->gcThreadCount - 1) / 8 + 1;
}
+#if defined(OMR_GC_MODRON_SCAVENGER)
/* initialize scan cache lock splitting factor */
if (0 == extensions->cacheListSplit) {
- if (16 >= extensions->gcThreadCount) {
- extensions->cacheListSplit = extensions->gcThreadCount;
- } else if (32 >= extensions->gcThreadCount) {
- extensions->cacheListSplit = 16 + ((extensions->gcThreadCount - 16) / 4);
- } else {
- extensions->cacheListSplit = 20 + ((extensions->gcThreadCount - 32) / 8);
- }
+ extensions->cacheListSplit = (extensions->gcThreadCount - 1) / 8 + 1;
}
+#endif /* OMR_GC_MODRON_SCAVENGER */
/* initialize default split freelist split amount */
if (0 == extensions->splitFreeListSplitAmount) {
- #if defined(OMR_GC_MODRON_SCAVENGER)
+#if defined(OMR_GC_MODRON_SCAVENGER)
if (extensions->scavengerEnabled) {
extensions->splitFreeListSplitAmount = (extensions->gcThreadCount - 1) / 8 + 1;
} else
- #endif /* OMR_GC_MODRON_SCAVENGER */
+#endif /* OMR_GC_MODRON_SCAVENGER */
{
OMRPORT_ACCESS_FROM_OMRPORT(env->getPortLibrary());
extensions->splitFreeListSplitAmount = (omrsysinfo_get_number_CPUs_by_type(OMRPORT_CPU_ONLINE) - 1) / 8 + 1;
diff --git a/gc/base/GCExtensionsBase.hpp b/gc/base/GCExtensionsBase.hpp
index b819487e0d7..7cadf1aaf9d 100644
--- a/gc/base/GCExtensionsBase.hpp
+++ b/gc/base/GCExtensionsBase.hpp
@@ -379,7 +379,6 @@ class MM_GCExtensionsBase : public MM_BaseVirtual {
uintptr_t workpacketCount; /**< this value is ONLY set if -Xgcworkpackets is specified - otherwise the workpacket count is determined heuristically */
uintptr_t packetListSplit; /**< the number of ways to split packet lists, set by -XXgc:packetListLockSplit=, or determined heuristically based on the number of GC threads */
- uintptr_t cacheListSplit; /**< the number of ways to split scanCache lists, set by -XXgc:cacheListLockSplit=, or determined heuristically based on the number of GC threads */
uintptr_t markingArraySplitMaximumAmount; /**< maximum number of elements to split array scanning work in marking scheme */
uintptr_t markingArraySplitMinimumAmount; /**< minimum number of elements to split array scanning work in marking scheme */
@@ -456,6 +455,7 @@ class MM_GCExtensionsBase : public MM_BaseVirtual {
bool scvTenureStrategyHistory; /**< Flag for enabling the History scavenger tenure strategy. */
bool scavengerEnabled;
bool scavengerRsoScanUnsafe;
+ uintptr_t cacheListSplit; /**< the number of ways to split scanCache lists, set by -XXgc:cacheListLockSplit=, or determined heuristically based on the number of GC threads */
#if defined(OMR_GC_CONCURRENT_SCAVENGER)
bool softwareRangeCheckReadBarrier; /**< enable software read barrier instead of hardware guarded loads when running with CS */
bool concurrentScavenger; /**< CS enabled/disabled flag */
@@ -1450,7 +1450,6 @@ class MM_GCExtensionsBase : public MM_BaseVirtual {
, useGCStartupHints(true)
, workpacketCount(0) /* only set if -Xgcworkpackets specified */
, packetListSplit(0)
- , cacheListSplit(0)
, markingArraySplitMaximumAmount(DEFAULT_ARRAY_SPLIT_MAXIMUM_SIZE)
, markingArraySplitMinimumAmount(DEFAULT_ARRAY_SPLIT_MINIMUM_SIZE)
, rootScannerStatsEnabled(false)
@@ -1512,6 +1511,7 @@ class MM_GCExtensionsBase : public MM_BaseVirtual {
, scvTenureStrategyHistory(true)
, scavengerEnabled(false)
, scavengerRsoScanUnsafe(false)
+ , cacheListSplit(0)
#if defined(OMR_GC_CONCURRENT_SCAVENGER)
, softwareRangeCheckReadBarrier(false)
, concurrentScavenger(false)
diff --git a/gc/verbose/VerboseHandlerOutput.cpp b/gc/verbose/VerboseHandlerOutput.cpp
index 9ecdd3028db..058f6eb5d2e 100644
--- a/gc/verbose/VerboseHandlerOutput.cpp
+++ b/gc/verbose/VerboseHandlerOutput.cpp
@@ -310,7 +310,9 @@ MM_VerboseHandlerOutput::handleInitialized(J9HookInterface** hook, uintptr_t eve
}
writer->formatAndOutput(env, 1, "", _extensions->packetListSplit);
+#if defined(OMR_GC_MODRON_SCAVENGER)
writer->formatAndOutput(env, 1, "", _extensions->cacheListSplit);
+#endif /* OMR_GC_MODRON_SCAVENGER */
writer->formatAndOutput(env, 1, "", _extensions->splitFreeListSplitAmount);
writer->formatAndOutput(env, 1, "", event->numaNodes);