# HG changeset patch # User sgehwolf # Date 1573059996 -3600 # Node ID fc68b2cdfeebe0ff243703a62bcbf935cf2afafa # Parent 7bdc4f073c7f1fc6bf347f02e18b319b833b6448 8233712: Limit default tests jobs based on ulimit -u setting Reviewed-by: erikj, ihse diff -r 7bdc4f073c7f -r fc68b2cdfeeb make/RunTests.gmk --- a/make/RunTests.gmk Fri Nov 15 16:10:29 2019 +0100 +++ b/make/RunTests.gmk Wed Nov 06 18:06:36 2019 +0100 @@ -247,11 +247,29 @@ CORES_DIVIDER := 4 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 TEST_JOBS := $(shell $(AWK) \ 'BEGIN { \ c = $(NUM_CORES) / $(CORES_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; \ c = c * $(TEST_JOBS_FACTOR); \ c = c * $(TEST_JOBS_FACTOR_JDL); \ diff -r 7bdc4f073c7f -r fc68b2cdfeeb make/RunTestsPrebuiltSpec.gmk --- a/make/RunTestsPrebuiltSpec.gmk Fri Nov 15 16:10:29 2019 +0100 +++ b/make/RunTestsPrebuiltSpec.gmk Wed Nov 06 18:06:36 2019 +0100 @@ -175,6 +175,7 @@ EXPR := expr FILE := file HG := hg +ULIMIT := ulimit # On Solaris gnu versions of some tools are required. ifeq ($(OPENJDK_BUILD_OS), solaris) diff -r 7bdc4f073c7f -r fc68b2cdfeeb make/autoconf/basics.m4 --- a/make/autoconf/basics.m4 Fri Nov 15 16:10:29 2019 +0100 +++ b/make/autoconf/basics.m4 Wed Nov 06 18:06:36 2019 +0100 @@ -574,6 +574,26 @@ ]) ############################################################################### +# 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, # but is used by much of the early bootstrap code. AC_DEFUN_ONCE([BASIC_SETUP_FUNDAMENTAL_TOOLS], @@ -1284,6 +1304,9 @@ elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then BASIC_REQUIRE_PROGS(ELFEDIT, elfedit) fi + if ! test "x$OPENJDK_TARGET_OS" = "xwindows"; then + BASIC_REQUIRE_BUILTIN_PROGS(ULIMIT, ulimit) + fi ]) ############################################################################### diff -r 7bdc4f073c7f -r fc68b2cdfeeb make/autoconf/spec.gmk.in --- a/make/autoconf/spec.gmk.in Fri Nov 15 16:10:29 2019 +0100 +++ b/make/autoconf/spec.gmk.in Wed Nov 06 18:06:36 2019 +0100 @@ -767,6 +767,7 @@ XCODEBUILD=@XCODEBUILD@ DTRACE := @DTRACE@ FIXPATH:=@FIXPATH@ +ULIMIT:=@ULIMIT@ TAR_TYPE:=@TAR_TYPE@ TAR_CREATE_EXTRA_PARAM:=@TAR_CREATE_EXTRA_PARAM@