JDK-7060836 : RHEL 5.5 and 5.6 should support UseNUMA
  • Type: Bug
  • Component: hotspot
  • Sub-Component: runtime
  • Affected Version: hs22
  • Priority: P3
  • Status: Closed
  • Resolution: Fixed
  • OS: linux_redhat_5.0
  • CPU: generic
  • Submitted: 2011-06-29
  • Updated: 2013-11-01
  • Resolved: 2011-09-30
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 7 JDK 8 Other
7u2Fixed 8Fixed hs22Fixed
Related Reports
Relates :  
Description
RHEL 5.5 and 5.6 don't support UseNUMA because the locality group id implementation
is done via a call to sched_getcpu(), which was introduced in only in recent versions
of libc. In the case of RHEL 5.5 and 5.6, Hotspot cannot find sched_getcpu and UseNUMA
is disabled.

Comments
EVALUATION See main CR
12-09-2011

PUBLIC COMMENTS > On 8/7/11 5:22 PM, David Holmes wrote: >> >> I seemed to have missed the discussion of this CR and the suggested fix. I >> have a concern that this may cause compilation failures on some older >> Linux systems because SYS_getcpu and/or __NR_vgetcpu will not exist. I >> started trying to use sched_getcpu a few years back for the RTSJ 1.1 >> processor affinity API support that I started to prototype. >> There were a number of issues on our main RT linux systems >> because of the different statuses of the libc function and the >> syscall. The code that I was intending to use was as follows: >> >> 32-bit: >> >> #ifndef SYS_getcpu >> #define SYS_getcpu 318 >> #endif >> >> // Returns >= 0 for a processor id >> // -1 if getcpu syscall is not supported >> jint os::get_processor_id() { >> unsigned int cpu = 0; >> if (syscall(SYS_getcpu, &cpu, NULL, NULL) != -1) { >> assert(cpu >= 0, "negative CPU id"); >> return (jint) cpu; >> } >> else { >> return -1; >> } >> } >> >> >> 64-bit: (sample from Novell/SuSE folk) >> >> #include <asm/vsyscall.h> >> >> #ifndef __NR_vgetcpu >> #define __NR_vgetcpu 2 >> #endif >> >> int mygetcpu (unsigned *cpu, unsigned *node) >> { >> int (*p) (unsigned *cpu, unsigned *node, void *unused); >> p = (void*)VSYSCALL_ADDR(__NR_vgetcpu); >> return p (cpu, node, NULL); >> } >>
06-09-2011

EVALUATION http://hg.openjdk.java.net/hsx/hotspot-rt/hotspot/rev/7c2653aefc46
17-08-2011

EVALUATION http://hg.openjdk.java.net/hsx/hotspot-main/hotspot/rev/7c2653aefc46
17-08-2011

EVALUATION http://hg.openjdk.java.net/hsx/hotspot-gc/hotspot/rev/7c2653aefc46
06-08-2011

SUGGESTED FIX A patch which enables UseNUMA for older systems (sched_getcpu_syscall.patch) is attached, and/or see http://icedtea.classpath.org/hg/icedtea6?cmd=changeset;node=ddbf2447886c
29-06-2011