JDK-7029168 : conditional card marks should be automatically enabled for some configs
Type:Enhancement
Component:hotspot
Sub-Component:compiler
Affected Version:hs21,9,10
Priority:P4
Status:Open
Resolution:Unresolved
OS:solaris_10
CPU:x86
Submitted:2011-03-18
Updated:2018-10-05
The Version table provides details related to the release that this issue/RFE will be addressed.
Unresolved : Release in which this issue/RFE will be addressed. Resolved: Release in which this issue/RFE has been resolved. Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.
Conditional card marks (-XX:UseCondCardMark) should be enabled automatically for multi socket configs.
Comments
EVALUATION
It would require figuring out the topology of the current machine which is fairly tricky. From Vladimir:
For NUMA we assign local memory group id to each java thread. Since most modern cpus have local memory controllers we may use it to determine how many sockets we are running on. But we do not have it for Windows.
And, yes, in general on x86 we can do:
sockets = os::active_processor_count()/(VM_Version::cores_per_cpu() * VM_Version::logical_processors_per_package())
But on sparc VM does not have cores and threads per cpu info currently.
Note, active_processor_count() on Solaris takes into account a processor set VM runs on. On windows it takes into account affinity. Only linux does not have it:
int os::active_processor_count() {
// Linux doesn't yet have a (official) notion of processor sets,
// so just return the number of online processors.
int online_cpus = ::sysconf(_SC_NPROCESSORS_ONLN);
But you can create processor set which use one thread per socket which
invalidates the expression above.
Then there is zoning/virtualization and I don't know how we handle it.
As you can see, it is mess.
Vladimir