8233712: Limit default tests jobs based on ulimit -u setting

Reviewed-by: erikj, ihse
This commit is contained in:
Severin Gehwolf 2019-11-06 18:06:36 +01:00
parent 38f3241513
commit 753c58b7f5
4 changed files with 43 additions and 0 deletions

View File

@ -247,11 +247,29 @@ ifeq ($(TEST_JOBS), 0)
CORES_DIVIDER := 4 CORES_DIVIDER := 4
endif endif
endif endif
# For some big multi-core machines with low ulimit -u setting we hit the max
# threads/process limit. In such a setup the memory/cores-only-guided
# TEST_JOBS config is insufficient. From experience a concurrency setting of
# 14 works reasonably well for low ulimit values (<= 4096). Thus, use
# divider 4096/14. For high ulimit -u values this shouldn't make a difference.
ULIMIT_DIVIDER := (4096/14)
PROC_ULIMIT := -1
ifneq ($(OPENJDK_TARGET_OS), windows)
PROC_ULIMIT := $(shell $(ULIMIT) -u)
ifeq ($(PROC_ULIMIT), unlimited)
PROC_ULIMIT := -1
endif
endif
MEMORY_DIVIDER := 2048 MEMORY_DIVIDER := 2048
TEST_JOBS := $(shell $(AWK) \ TEST_JOBS := $(shell $(AWK) \
'BEGIN { \ 'BEGIN { \
c = $(NUM_CORES) / $(CORES_DIVIDER); \ c = $(NUM_CORES) / $(CORES_DIVIDER); \
m = $(MEMORY_SIZE) / $(MEMORY_DIVIDER); \ m = $(MEMORY_SIZE) / $(MEMORY_DIVIDER); \
u = $(PROC_ULIMIT); \
if (u > -1) { \
u = u / $(ULIMIT_DIVIDER); \
if (u < c) c = u; \
} \
if (c > m) c = m; \ if (c > m) c = m; \
c = c * $(TEST_JOBS_FACTOR); \ c = c * $(TEST_JOBS_FACTOR); \
c = c * $(TEST_JOBS_FACTOR_JDL); \ c = c * $(TEST_JOBS_FACTOR_JDL); \

View File

@ -175,6 +175,7 @@ UNZIP := unzip
EXPR := expr EXPR := expr
FILE := file FILE := file
HG := hg HG := hg
ULIMIT := ulimit
# On Solaris gnu versions of some tools are required. # On Solaris gnu versions of some tools are required.
ifeq ($(OPENJDK_BUILD_OS), solaris) ifeq ($(OPENJDK_BUILD_OS), solaris)

View File

@ -573,6 +573,26 @@ AC_DEFUN([BASIC_REQUIRE_SPECIAL],
BASIC_CHECK_NONEMPTY($1) BASIC_CHECK_NONEMPTY($1)
]) ])
###############################################################################
# Like BASIC_REQUIRE_PROGS but also allows for bash built-ins
# $1: variable to set
# $2: executable name (or list of names) to look for
# $3: [path]
AC_DEFUN([BASIC_REQUIRE_BUILTIN_PROGS],
[
BASIC_SETUP_TOOL($1, [AC_PATH_PROGS($1, $2, , $3)])
if test "x[$]$1" = x; then
AC_MSG_NOTICE([Required tool $2 not found in PATH, checking built-in])
if help $2 > /dev/null 2>&1; then
AC_MSG_NOTICE([Found $2 as shell built-in. Using it])
$1="$2"
else
AC_MSG_ERROR([Required tool $2 also not found as built-in.])
fi
fi
BASIC_CHECK_NONEMPTY($1)
])
############################################################################### ###############################################################################
# Setup the most fundamental tools that relies on not much else to set up, # Setup the most fundamental tools that relies on not much else to set up,
# but is used by much of the early bootstrap code. # but is used by much of the early bootstrap code.
@ -1284,6 +1304,9 @@ AC_DEFUN_ONCE([BASIC_SETUP_COMPLEX_TOOLS],
elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then
BASIC_REQUIRE_PROGS(ELFEDIT, elfedit) BASIC_REQUIRE_PROGS(ELFEDIT, elfedit)
fi fi
if ! test "x$OPENJDK_TARGET_OS" = "xwindows"; then
BASIC_REQUIRE_BUILTIN_PROGS(ULIMIT, ulimit)
fi
]) ])
############################################################################### ###############################################################################

View File

@ -767,6 +767,7 @@ JIB_HOME:=@JIB_HOME@
XCODEBUILD=@XCODEBUILD@ XCODEBUILD=@XCODEBUILD@
DTRACE := @DTRACE@ DTRACE := @DTRACE@
FIXPATH:=@FIXPATH@ FIXPATH:=@FIXPATH@
ULIMIT:=@ULIMIT@
TAR_TYPE:=@TAR_TYPE@ TAR_TYPE:=@TAR_TYPE@
TAR_CREATE_EXTRA_PARAM:=@TAR_CREATE_EXTRA_PARAM@ TAR_CREATE_EXTRA_PARAM:=@TAR_CREATE_EXTRA_PARAM@