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);