JDK-8243961 : ForceNUMA and only one available NUMA node fails assertion on Windows
  • Type: Bug
  • Component: hotspot
  • Sub-Component: gc
  • Affected Version: 15
  • Priority: P2
  • Status: Closed
  • Resolution: Fixed
  • OS: windows
  • Submitted: 2020-04-28
  • Updated: 2020-08-13
  • Resolved: 2020-05-06
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.

To download the current JDK release, click here.
JDK 15
15 b22Fixed
Related Reports
Relates :  
Relates :  
Relates :  
Description
$ ./jdk-15/fastdebug/bin/java -XX:+UseG1GC -XX:+UseNUMA -XX:+ForceNUMA -version
# To suppress the following error report, specify this argument
# after -XX: or in .hotspotrc:  SuppressErrorAt=t:/workspace/open/src/hotspot/os/windows/os_windows.cpp:2912
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (t:/workspace/open/src/hotspot/os/windows/os_windows.cpp:2912), pid=9256, tid=18272
#  assert(numa_node_list_holder.get_count() > 0) failed: Multiple NUMA nodes expected

The specific choice of GC probably doesn't matter for this.

Comments
Ran test case from description.
13-08-2020

URL: https://hg.openjdk.java.net/jdk/jdk/rev/7431f992aa4d User: kbarrett Date: 2020-05-06 02:36:29 +0000
06-05-2020

The problem is that when os::init_2 is called, UseNUMAInterleaving is defaulted to false, so we don't call num_interleaving_init. Then later, because UseNUMA is enabled, Arguments::adjust_after_os sets UseNUMAInterleaving true. So we try to do interleaving even though we haven't initalized the support for it. There are other potential failure cases here too. For example, if UseNUMAInterleaving were set false by os::init_2 because numa_interleaving_init failed, if UseNUMA is true we'll still later set UseNUMAInterleaving true and later fail.
28-04-2020