8241354: ZGC: fatal error: Failed to get NUMA id due to get_mempolicy operation not permitted(Internet mail)

Stefan Karlsson stefan.karlsson at oracle.com
Mon Mar 23 08:41:48 UTC 2020


Hi Jie,

On 2020-03-22 14:35, jiefu(傅杰) wrote:
> Hi Erik,
>
> Thanks for your review and valuable comments.
>
> Updated: http://cr.openjdk.java.net/~jiefu/8241354/webrev.01/
>
> Please review it.

Thanks for providing this patch.

If it is only the get_mempolicy that is problematic, then I wonder if it 
would be better to leave the UseNUMA flag untouched and only turn off 
the ZGC specific NUMA parts. Maybe something like this:

static bool check_get_mempolicy_support() {
   int dummy = 0;
   int mode = -1;
   // Check whether get_mempolicy is supported or not
   if (ZSyscall::get_mempolicy(&mode, NULL, 0, (void*)&dummy, 
MPOL_F_NODE | MPOL_F_ADDR) == -1) {
     if (!FLAG_IS_DEFAULT(UseNUMA)) {
       warning("ZGC NUMA support is disabled since get_mempolicy is 
unsupported.");
     }
     return false;
   }

   return true;
}

void ZNUMA::initialize_platform() {
   _enabled = UseNUMA && check_get_mempolicy_support();
}

An alternative would be to take this a step further (probably as a 
separate RFR) and provide a user friendly output in our -Xlog:gc+init 
output:

[0.015s][info][gc,init] Initializing The Z Garbage Collector
[0.015s][info][gc,init] Version: 
15-internal+0-2020-03-04-0947497.stefank... (fastdebug)
[0.015s][info][gc,init] NUMA Support: Unsupported <== HERE
[0.015s][info][gc,init] CPUs: 32 total, 32 available
[0.015s][info][gc,init] Memory: 128851M
[0.015s][info][gc,init] Large Page Support: Disabled
[0.015s][info][gc,init] Medium Page Size: 32M
[0.015s][info][gc,init] Workers: 20 parallel, 4 concurrent

Borrowing the structure from how UseLargePages are setup and printed:

void ZLargePages::initialize_platform() {
   if (UseLargePages) {
     if (UseTransparentHugePages) {
       _state = Transparent;
     } else {
       _state = Explicit;
     }
   } else {
     _state = Disabled;
   }
}

const char* ZLargePages::to_string() {
   switch (_state) {
   case Explicit:
     return "Enabled (Explicit)";

   case Transparent:
     return "Enabled (Transparent)";

   default:
     return "Disabled";
   }
}

Thanks,
StefanK

>
> Thanks a lot.
> Best regards,
> Jie
>
> On 2020/3/22, 4:26 PM, "Erik Österlund" <erik.osterlund at oracle.com> wrote:
>
>      Hi Jie,
>      
>      It seems to me that if the environment doesn’t supply the required NUMA APIs, then we really should disable UseNUMA instead. I propose we check the availability of the syscall during initialization instead, and switch off all NUMA functionality when appropriate. And we should only print a warning if the user explicitly supplied UseNUMA on the command line.
>      
>      Thanks,
>      /Erik
>      
>      > On 20 Mar 2020, at 13:15, jiefu(傅杰) <jiefu at tencent.com> wrote:
>      >
>      > Hi all,
>      >
>      > JBS:    https://bugs.openjdk.java.net/browse/JDK-8241354
>      > Webrev: http://cr.openjdk.java.net/~jiefu/8241354/webrev.00/
>      >
>      > A VM fatal error may be observed if ZGC is used.
>      >
>      > The background is that some of our products will run in the docker.
>      > For some safety reason, SYS_get_mempolicy is not allowed in the docker.
>      >
>      > It might be not a good practice to generate a fatal error when get_mempolicy fails.
>      > What do you think?
>      >
>      > Thanks a lot.
>      > Best regards,
>      > Jie
>      
>      
>      
>



More information about the hotspot-gc-dev mailing list