From 8be8ff7c7adabe712561a6ebb725ce7d8b255fcc Mon Sep 17 00:00:00 2001 From: Anna Babu Palathingal Date: Fri, 1 Dec 2023 16:58:54 -0500 Subject: [PATCH] Added code to detect micro architecture - zlinux version detection - add tests Signed-off-by: Anna Babu Palathingal --- examples/platformRequirements/playlist.xml | 68 ++++++++++++++++++++ makeGen.mk | 2 +- scripts/testTKG/test_platformRequirements.py | 24 +++++++ src/org/openj9/envInfo/MachineInfo.java | 30 ++++++++- 4 files changed, 120 insertions(+), 4 deletions(-) diff --git a/examples/platformRequirements/playlist.xml b/examples/platformRequirements/playlist.xml index 514369e1..9fe0067e 100644 --- a/examples/platformRequirements/playlist.xml +++ b/examples/platformRequirements/playlist.xml @@ -37,8 +37,76 @@ ^arch.x86 + + + test_microarchitecture_detection_skylake + echo "test microarchitecture detection for skylake"; \ + $(TEST_STATUS) + + skylake + + + + + + test_microarchitecture_detection_z15_t01 + echo "test microarchitecture detection for z15.t01"; \ + $(TEST_STATUS) + + z15.t01 + + + + test_microarchitecture_detection_z15_t02 + echo "test microarchitecture detection for z15.t02"; \ + $(TEST_STATUS) + + z15.t02 + + + + + + test_microarchitecture_detection_z14_zr1 + echo "test microarchitecture detection for z14.zr1"; \ + $(TEST_STATUS) + + z14.zr1 + + + + + + test_microarchitecture_detection_z14 + echo "test microarchitecture detection for z14"; \ + $(TEST_STATUS) + + z14 + + + + + + test_microarchitecture_detection_z13s + echo "test microarchitecture detection for z13s"; \ + $(TEST_STATUS) + + z13s + + + + + + test_microarchitecture_detection_z13 + echo "test microarchitecture detection for z13"; \ + $(TEST_STATUS) + + z13 + + + test_bits_64 echo "test bits.64"; \ $(TEST_STATUS) diff --git a/makeGen.mk b/makeGen.mk index 1b3fec2e..49e811ea 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..421754bd 100644 --- a/scripts/testTKG/test_platformRequirements.py +++ b/scripts/testTKG/test_platformRequirements.py @@ -113,6 +113,30 @@ def run_test(): 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("Output:", stdout) + if micro_arch is not None: + micro_arch = micro_arch.group(1) + label_str = os_label.split(".") + # micro_arch example: skylake + try: + if label_str[0] == "skylake": + passed.add('test_microarchitecture_detection_skylake_0') + elif label_str[0] == "z15": + passed.add('test_microarchitecture_detection_z15') + elif label_str[0] == "z14": + passed.add('test_microarchitecture_detection_z14') + elif label_str[0] == "z13s": + passed.add('test_microarchitecture_detection_z13s_0') + elif label_str[0] == "z13": + passed.add('test_microarchitecture_detection_z13_0') + else: + skipped.add('test_microarchitecture_not_supported_0') + + except ValueError as ve: + print("warning: os version value failed to convert to an integer") + skipped.add('test_microarchitecture_not_supported_0') + rt &= checkResult(result, passed, set(), set(), skipped) return rt diff --git a/src/org/openj9/envInfo/MachineInfo.java b/src/org/openj9/envInfo/MachineInfo.java index 94151154..9094a9bb 100644 --- a/src/org/openj9/envInfo/MachineInfo.java +++ b/src/org/openj9/envInfo/MachineInfo.java @@ -38,7 +38,9 @@ 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 '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 +203,32 @@ 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); + // Check for specific machine versions and set the microArch accordingly if (microArchOutput.toLowerCase().contains("skylake")) { - String microArch = "skylake"; - putInfo(new Info("microArch", MICRO_ARCH_CMD, microArch, null)); + microArchOutput = "skylake"; + } else if (microArchOutput.contains("8562")) { + microArchOutput = "IBM z15 T02"; + } else if (microArchOutput.contains("8561")) { + microArchOutput = "IBM z15 T01"; + } else if (microArchOutput.contains("3907")) { + microArchOutput = "IBM z14 ZR1"; + } else if (microArchOutput.contains("3906")) { + microArchOutput = "IBM z14"; + } else if (microArchOutput.contains("2965")) { + microArchOutput = "IBM z13s"; + } else if (microArchOutput.contains("2964")) { + microArchOutput= "IBM z13"; + } + // Check if the detected microarchitecture is supported + Set supportedMicroArchitectures = new HashSet<>(Arrays.asList("skylake", "z15", "z14", "z13")); + + if (supportedMicroArchitectures.stream().anyMatch(microArchOutput.toLowerCase()::contains)) { + putInfo(new Info("microArch", MICRO_ARCH_CMD, microArchOutput, null)); + } else { + // The detected microarchitecture is not supported + System.out.println("Detected microarchitecture is not supported: " + microArchOutput); } + 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));