Details
-
Bug
-
Status: Accepted
-
Major
-
Resolution: Unresolved
-
None
-
None
-
Linux 10-175-112-202 4.1.6-rc3.aarch64 #1 SMP Mon Oct 12 01:43:03 UTC 2015 aarch64 aarch64 aarch64 GNU/Linux
-
Patch, Important
Description
mesos run in AArch64 will get error, the log is:
E0101 00:06:56.636520 32411 slave.cpp:3342] Container 'b6be429a-08f0-4d52-b01d-abfcb6e0106b' for executor 'hello.84d205ae-f626-11de-bd66-7a3f6cf980b9' of framework '868b9f04-9179-427b-b050-ee8f89ffa3bd-0000' failed to start: Failed to fork executor: Failed to clone child process: Failed to clone: Invalid argument
the "clone" achieve in libprocess 3rdparty stout library(in linux.hpp) packaging a syscall "clone" :
clone
inline pid_t clone(const lambda::function<int()>& func, int flags) { // Stack for the child. // - unsigned long long used for best alignment. // - 8 MiB appears to be the default for "ulimit -s" on OSX and Linux. // // NOTE: We need to allocate the stack dynamically. This is because // glibc's 'clone' will modify the stack passed to it, therefore the // stack must NOT be shared as multiple 'clone's can be invoked // simultaneously. int stackSize = 8 * 1024 * 1024; unsigned long long *stack = new unsigned long long[stackSize/sizeof(unsigned long long)]; pid_t pid = ::clone( childMain, &stack[stackSize/sizeof(stack[0]) - 1], // stack grows down. flags, (void*) &func); // If CLONE_VM is not set, ::clone would create a process which runs in a // separate copy of the memory space of the calling process. So we destroy the // stack here to avoid memory leak. If CLONE_VM is set, ::clone would create a // thread which runs in the same memory space with the calling process. if (!(flags & CLONE_VM)) { delete[] stack; } return pid; }
syscal "clone" parameter stack is 8-byte aligned,so if in 16-byte aligned stack mandatory architecture(aarch64) it will get error.
Attachments
Issue Links
- duplicates
-
MESOS-6835 Fix SIGBUS crash on ARM64/AArch64
- In Progress