diff --git a/examples/platformRequirements/playlist.xml b/examples/platformRequirements/playlist.xml index 0bf3f54b..2b047ab5 100644 --- a/examples/platformRequirements/playlist.xml +++ b/examples/platformRequirements/playlist.xml @@ -107,5 +107,74 @@ $(TEST_STATUS) ^os.linux.ubuntu.20+ + + test_not_microarch_supported + echo "test on none microarch.supported"; \ + $(TEST_STATUS) + ^microarch.supported + + + + test_microarch_skylake + echo "test microarch.skylake"; \ + $(TEST_STATUS) + + microarch.skylake + + + + + test_microarch_z15plus + echo "test microarch.z15+"; + $(TEST_STATUS) + + microarch.z15+ + + + + + test_microarch_z15 + echo "test microarch.z15"; \ + $(TEST_STATUS) + + microarch.z15 + + + + + test_microarch_z14plus + echo "test microarch.z14+"; \ + $(TEST_STATUS) + + microarch.z14+ + + + + + test_microarch_z14 + echo "test microarch.z14"; \ + $(TEST_STATUS) + + microarch.z14 + + + + + test_microarch_z13plus + echo "test microarch.z13+"; \ + $(TEST_STATUS) + + microarch.z13+ + + + + + test_microarch_z13 + echo "test microarch.z13"; \ + $(TEST_STATUS) + + microarch.z13 + + - + \ No newline at end of file diff --git a/makeGen.mk b/makeGen.mk index 4db53d59..89ece3ea 100644 --- a/makeGen.mk +++ b/makeGen.mk @@ -42,7 +42,7 @@ autoconfig: perl scripts$(D)configure.pl autogen: autoconfig - ${TEST_JDK_HOME}/bin/java -cp $(Q)$(TKG_JAR)$(P)$(JSON_SIMPLE)$(Q) org.testKitGen.MainRunner --mode=$(MODE) --spec=$(SPEC) --microArch=$(MICROARCH) --osLabel=$(Q)$(OS_LABEL)$(Q) --jdkVersion=$(JDK_VERSION) --impl=$(JDK_IMPL) --vendor=$(Q)$(JDK_VENDOR)$(Q) --buildList=${BUILD_LIST} --iterations=$(TKG_ITERATIONS) --aotIterations=$(AOT_ITERATIONS) --testFlag=$(TEST_FLAG) --testTarget=$(TESTTARGET) --testList=$(TESTLIST) --numOfMachines=$(NUM_MACHINES) --testTime=$(TEST_TIME) --TRSSURL=$(TRSS_URL) $(OPTS) + ${TEST_JDK_HOME}/bin/java -cp $(Q)$(TKG_JAR)$(P)$(JSON_SIMPLE)$(Q) org.testKitGen.MainRunner --mode=$(MODE) --spec=$(SPEC) --microArch=$(Q)$(MICROARCH)$(Q) --osLabel=$(Q)$(OS_LABEL)$(Q) --jdkVersion=$(JDK_VERSION) --impl=$(JDK_IMPL) --vendor=$(Q)$(JDK_VENDOR)$(Q) --buildList=${BUILD_LIST} --iterations=$(TKG_ITERATIONS) --aotIterations=$(AOT_ITERATIONS) --testFlag=$(TEST_FLAG) --testTarget=$(TESTTARGET) --testList=$(TESTLIST) --numOfMachines=$(NUM_MACHINES) --testTime=$(TEST_TIME) --TRSSURL=$(TRSS_URL) $(OPTS) AUTOGEN_FILES = $(wildcard $(CURRENT_DIR)$(D)jvmTest.mk) AUTOGEN_FILES += $(wildcard $(CURRENT_DIR)$(D)machineConfigure.mk) diff --git a/scripts/testTKG/test_platformRequirements.py b/scripts/testTKG/test_platformRequirements.py index 62e0bc65..366e1b14 100644 --- a/scripts/testTKG/test_platformRequirements.py +++ b/scripts/testTKG/test_platformRequirements.py @@ -16,105 +16,160 @@ from utils import * def run_test(): - rt = True - printTestheader("platformRequirements") - - buildList = "TKG/examples/platformRequirements" - command = "make _all" - print(f"\t{command}") - result = subprocess.run(f"{EXPORT_BUILDLIST}={buildList}; {CD_TKG}; {MAKE_CLEAN}; {MAKE_COMPILE}; {command}", stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=True, check=False) - - stdout = result.stdout.decode() - specStr = re.search(r"set SPEC to (.*)", stdout) - - if specStr is not None: - spec = specStr.group(1) - else: - printError("Could not parse spec from output.") - return False - - passed = set() - skipped = set() - - if 'linux' in spec: - skipped.add('test_not_linux_arch_x86_0') - else: - if 'x86' in spec: - passed.add('test_not_linux_arch_x86_0') - else: - skipped.add('test_not_linux_arch_x86_0') - - if 'x86' in spec: - passed.add('test_arch_x86_0') - skipped.add('test_arch_nonx86_0') - else: - passed.add('test_arch_nonx86_0') - skipped.add('test_arch_x86_0') - - if '64' in spec: - passed.add('test_bits_64_0') - else: - skipped.add('test_bits_64_0') - - if 'osx' in spec: - passed.add('test_os_osx_0') - else: - skipped.add('test_os_osx_0') - - if 'osx_x86-64' in spec: - passed.add('test_osx_x86-64_0') - else: - skipped.add('test_osx_x86-64_0') - - if 'x86' in spec or '390' in spec: - passed.add('test_arch_x86_390_0') - else: - skipped.add('test_arch_x86_390_0') - - if 'osx_x86-64' in spec or ('win_x86' in spec and 'win_x86-64' not in spec) or 'aix_ppc-64' in spec: - passed.add('test_osx_x86-64_win_x86_aix_ppc-64_0') - else: - skipped.add('test_osx_x86-64_win_x86_aix_ppc-64_0') - - os_label = re.search(r"set OS_LABEL to (.*)", stdout) - if os_label is not None: - os_label = os_label.group(1) - label_str = os_label.split(".") - # os_label example: ubuntu.22 - try: - ver = int(label_str[1],10) - if label_str[0] == "ubuntu": - if ver >= 22: - passed.add('test_os_linux_ubuntu22_0') - if ver >= 20: - passed.add('test_os_linux_ubuntu20plus_0') - passed.add('test_os_linux_ubuntu20plus_rhel8plus_0') - if ver < 20: - passed.add('test_not_os_linux_ubuntu20plus_0') - - if label_str[0] == "rhel": - if ver >= 8: - passed.add('test_os_linux_ubuntu20plus_rhel8plus_0') - except ValueError as ve: - print ("warning: os version value failed to convert to an integer") - passed.add('test_not_os_linux_ubuntu20plus_0') - else: - passed.add('test_not_os_linux_ubuntu20plus_0') - - if 'test_os_linux_ubuntu20plus_0' not in passed: - skipped.add('test_os_linux_ubuntu20plus_0') - - if 'test_os_linux_ubuntu22_0' not in passed: - skipped.add('test_os_linux_ubuntu22_0') - - if 'test_os_linux_ubuntu20plus_rhel8plus_0' not in passed: - skipped.add('test_os_linux_ubuntu20plus_rhel8plus_0') - - if 'test_not_os_linux_ubuntu20plus_0' not in passed: - skipped.add('test_not_os_linux_ubuntu20plus_0') - - rt &= checkResult(result, passed, set(), set(), skipped) - return rt + rt = True + printTestheader("platformRequirements") + + buildList = "TKG/examples/platformRequirements" + command = "make _all" + print(f"\t{command}") + result = subprocess.run(f"{EXPORT_BUILDLIST}={buildList}; {CD_TKG}; {MAKE_CLEAN}; {MAKE_COMPILE}; {command}", stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=True, check=False) + + stdout = result.stdout.decode() + specStr = re.search(r"set SPEC to (.*)", stdout) + + if specStr is not None: + spec = specStr.group(1) + else: + printError("Could not parse spec from output.") + return False + + passed = set() + skipped = set() + + if 'linux' in spec: + skipped.add('test_not_linux_arch_x86_0') + else: + if 'x86' in spec: + passed.add('test_not_linux_arch_x86_0') + else: + skipped.add('test_not_linux_arch_x86_0') + + if 'x86' in spec: + passed.add('test_arch_x86_0') + skipped.add('test_arch_nonx86_0') + else: + passed.add('test_arch_nonx86_0') + skipped.add('test_arch_x86_0') + + if '64' in spec: + passed.add('test_bits_64_0') + else: + skipped.add('test_bits_64_0') + + if 'osx' in spec: + passed.add('test_os_osx_0') + else: + skipped.add('test_os_osx_0') + + if 'osx_x86-64' in spec: + passed.add('test_osx_x86-64_0') + else: + skipped.add('test_osx_x86-64_0') + + if 'x86' in spec or '390' in spec: + passed.add('test_arch_x86_390_0') + else: + skipped.add('test_arch_x86_390_0') + + if 'osx_x86-64' in spec or ('win_x86' in spec and 'win_x86-64' not in spec) or 'aix_ppc-64' in spec: + passed.add('test_osx_x86-64_win_x86_aix_ppc-64_0') + else: + skipped.add('test_osx_x86-64_win_x86_aix_ppc-64_0') + + os_label = re.search(r"set OS_LABEL to (.*)", stdout) + print("os_label in : {}".format(os_label)) + if os_label is not None: + os_label = os_label.group(1) + label_str = os_label.split(".") + # os_label example: ubuntu.22 + try: + ver = int(label_str[1],10) + if label_str[0] == "ubuntu": + if ver >= 22: + passed.add('test_os_linux_ubuntu22_0') + if ver >= 20: + passed.add('test_os_linux_ubuntu20plus_0') + passed.add('test_os_linux_ubuntu20plus_rhel8plus_0') + if ver < 20: + passed.add('test_not_os_linux_ubuntu20plus_0') + + if label_str[0] == "rhel": + if ver >= 8: + passed.add('test_os_linux_ubuntu20plus_rhel8plus_0') + except ValueError as ve: + print ("warning: os version value failed to convert to an integer") + passed.add('test_not_os_linux_ubuntu20plus_0') + else: + passed.add('test_not_os_linux_ubuntu20plus_0') + + if 'test_os_linux_ubuntu20plus_0' not in passed: + skipped.add('test_os_linux_ubuntu20plus_0') + + if 'test_os_linux_ubuntu22_0' not in passed: + skipped.add('test_os_linux_ubuntu22_0') + + if 'test_os_linux_ubuntu20plus_rhel8plus_0' not in passed: + skipped.add('test_os_linux_ubuntu20plus_rhel8plus_0') + + if 'test_not_os_linux_ubuntu20plus_0' not in passed: + skipped.add('test_not_os_linux_ubuntu20plus_0') + + micro_arch = re.search(r"set MICROARCH to (.*)", stdout) + print("micro_arch in platform req: {}".format(micro_arch)) + if micro_arch is not None: + micro_arch = micro_arch.group(1) + label_str = micro_arch + print("Label_str:",label_str) + # micro_arch example: skylake + try: + ver = int(''.join(filter(str.isdigit, micro_arch.split()[-1]))) + print("ver:",ver) + if label_str == "skylake": + passed.add('test_microarch_skylake_0') + if ver == 13: + passed.add('test_microarch_z13_0') + elif ver > 13: + passed.add('test_microarch_z13plus_0') + if ver == 14: + passed.add('test_microarch_z14_0') + elif ver > 14: + passed.add('test_microarch_z14plus_0') + if ver == 15: + passed.add('test_microarch_z15_0') + elif ver > 15: + passed.add('test_microarch_z15plus_0') + else: + skipped.add('test_not_microarch_supported_0') + except ValueError as ve: + print("warning: microarch version value failed to convert to an integer") + skipped.add('test_not_microarch_supported_0') + else: + passed.add('test_not_microarch_supported_0') + + if 'test_microarch_z15_0' not in passed: + skipped.add('test_microarch_z15_0') + + if 'test_microarch_z14_0' not in passed: + skipped.add('test_microarch_z14_0') + + if 'test_microarch_z13_0' not in passed: + skipped.add('test_microarch_z13_0') + + if 'test_microarch_z15plus_0' not in passed: + skipped.add('test_microarch_z15plus_0') + + if 'test_microarch_z14plus_0' not in passed: + skipped.add('test_microarch_z14plus_0') + + if 'test_microarch_z13plus_0' not in passed: + skipped.add('test_microarch_z13plus_0') + + if 'test_microarch_skylake_0' not in passed: + skipped.add('test_microarch_skylake_0') + + + rt &= checkResult(result, passed, set(), set(), skipped) + return rt if __name__ == "__main__": - run_test() \ No newline at end of file + run_test() \ No newline at end of file diff --git a/settings.mk b/settings.mk index 4224a716..bec16edc 100644 --- a/settings.mk +++ b/settings.mk @@ -92,7 +92,7 @@ ifndef JVM_VERSION ifeq (hotspot, $(JDK_IMPL)) JVM_VERSION = $(OPENJDK_VERSION) -else +else JVM_VERSION = $(OPENJDK_VERSION)-$(JDK_IMPL) endif @@ -103,7 +103,7 @@ ifneq (,$(findstring win,$(SPEC))) P=; D=\\ EXECUTABLE_SUFFIX=.exe -RUN_SCRIPT="cmd /c" +RUN_SCRIPT="cmd /c" RUN_SCRIPT_STRING=$(RUN_SCRIPT) SCRIPT_SUFFIX=.bat PROPS_DIR=props_win @@ -380,8 +380,8 @@ setup_%: testEnvSetup @$(ECHO) set JAVA_HOME to $(JAVA_HOME) @$(ECHO) set SPEC to $(SPEC) @$(ECHO) set TEST_FLAG to $(TEST_FLAG) - @if [ $(MICROARCH) ]; then \ - $(ECHO) set MICROARCH to $(MICROARCH); \ + @if [ "$(MICROARCH)" ]; then \ + $(ECHO) set MICROARCH to "$(MICROARCH)"; \ fi @if [ $(OS_LABEL) ]; then \ $(ECHO) set OS_LABEL to $(OS_LABEL); \ diff --git a/src/org/openj9/envInfo/MachineInfo.java b/src/org/openj9/envInfo/MachineInfo.java index 94151154..3c4658d9 100644 --- a/src/org/openj9/envInfo/MachineInfo.java +++ b/src/org/openj9/envInfo/MachineInfo.java @@ -38,7 +38,8 @@ public class MachineInfo { public static final String[] LINUX_OS_NAME_CMD = new String[] {"bash", "-c", "grep '^NAME' /etc/os-release | awk -F'=' ' gsub(/\"/,\"\") { print $2}'"}; public static final String[] LINUX_OS_VERSION_CMD = new String[] {"bash", "-c", "grep '^VERSION_ID' /etc/os-release | awk -F'=' ' gsub(/\"/,\"\") { print $2}'"}; - public static final String[] MICRO_ARCH_CMD = new String[] {"bash", "-c", "cat /proc/cpuinfo | grep 'model name' | uniq"}; + public static final String[] MICRO_ARCH_CMD = new String[] {"bash", "-c", "cat /proc/cpuinfo | grep -E 'machine|model name' | uniq"}; + public static final String[] ULIMIT_CMD = new String[] {"bash", "-c", "ulimit -a"}; public static final String[] INSTALLED_MEM_CMD = new String[] {"bash", "-c", "grep MemTotal /proc/meminfo | awk '{print $2}"}; @@ -201,10 +202,31 @@ private void getSysInfo() { putInfo(new Info("sysArch", SYS_ARCH_CMD, ce.execute(SYS_ARCH_CMD), null)); putInfo(new Info("procArch", PROC_ARCH_CMD, ce.execute(PROC_ARCH_CMD), null)); String microArchOutput = ce.execute(MICRO_ARCH_CMD); + String microArch = ""; + // Check for specific machine versions and set the microArch accordingly if (microArchOutput.toLowerCase().contains("skylake")) { - String microArch = "skylake"; + microArch = "skylake"; + } else if (microArchOutput.contains("8562")) { + microArch = "IBM z15"; + } else if (microArchOutput.contains("8561")) { + microArch = "IBM z15"; + } else if (microArchOutput.contains("3907")) { + microArch = "IBM z14"; + } else if (microArchOutput.contains("3906")) { + microArch = "IBM z14"; + } else if (microArchOutput.contains("2965")) { + microArch = "IBM z13"; + } else if (microArchOutput.contains("2964")) { + microArch= "IBM z13"; + } + else { + System.out.println("Unfamiliar microArch detected in TKG. It will not be added in TKG microArch!"); + System.out.println("microArchOutput: " + microArchOutput); + } + + if (!microArch.isEmpty()) { putInfo(new Info("microArch", MICRO_ARCH_CMD, microArch, null)); - } + } putInfo(new Info("sysOS", SYS_OS_CMD, ce.execute(SYS_OS_CMD), null)); putInfo(new Info("ulimit", ULIMIT_CMD, ce.execute(ULIMIT_CMD), null)); putInfo(new Info("docker", CHECK_DOCKER_CMD, ce.execute(CHECK_DOCKER_CMD), null));