This is an automated email from the ASF dual-hosted git repository.
mboehm7 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/systemds.git
The following commit(s) were added to refs/heads/main by this push:
new 64d1618f90 [SYSTEMDS-3728] Extended memory checker util for windows OS
and tests
64d1618f90 is described below
commit 64d1618f901538f72a27b2437ba240748051d926
Author: Matthias Boehm <[email protected]>
AuthorDate: Tue Aug 27 12:19:37 2024 +0200
[SYSTEMDS-3728] Extended memory checker util for windows OS and tests
---
.github/workflows/javaTests.yml | 2 +-
.../org/apache/sysds/utils/SettingsChecker.java | 35 +++++++++++++---
.../test/component/utils/SettingsCheckerTest.java | 46 ++++++++++++++++++++++
3 files changed, 76 insertions(+), 7 deletions(-)
diff --git a/.github/workflows/javaTests.yml b/.github/workflows/javaTests.yml
index df81841638..224d74bd4f 100644
--- a/.github/workflows/javaTests.yml
+++ b/.github/workflows/javaTests.yml
@@ -54,7 +54,7 @@ jobs:
"**.test.usertest.**",
"**.component.c**.**",
"**.component.e**.**,**.component.f**.**,**.component.m**.**",
-
"**.component.p**.**,**.component.r**.**,**.component.s**.**,**.component.t**.**",
+
"**.component.p**.**,**.component.r**.**,**.component.s**.**,**.component.t**.**,**.component.u**.**",
"**.functions.a**.**,**.functions.binary.matrix.**,**.functions.binary.scalar.**,**.functions.binary.tensor.**",
"**.functions.blocks.**,**.functions.data.rand.**,",
"**.functions.countDistinct.**,**.functions.countDistinctApprox.**",
diff --git a/src/main/java/org/apache/sysds/utils/SettingsChecker.java
b/src/main/java/org/apache/sysds/utils/SettingsChecker.java
index 210263813b..f842134ab6 100644
--- a/src/main/java/org/apache/sysds/utils/SettingsChecker.java
+++ b/src/main/java/org/apache/sysds/utils/SettingsChecker.java
@@ -43,7 +43,7 @@ public interface SettingsChecker {
}
}
- private static void checkMemorySetting() {
+ public static void checkMemorySetting() {
long JRE_Mem_Byte = Runtime.getRuntime().maxMemory();
long Sys_Mem_Byte = maxMemMachine() * 1024;
// Default 500MB
@@ -52,17 +52,17 @@ public interface SettingsChecker {
final long Logging_Limit = 1024L * 1024 * 1024 * 10;
if(JRE_Mem_Byte <= DefaultJava_500MB) {
- String st =
byteMemoryToHumanReadableString(JRE_Mem_Byte);
+ String st = byteMemoryToString(JRE_Mem_Byte);
LOG.warn("Low memory budget set of: " + st + " this
should most likely be increased");
}
else if(JRE_Mem_Byte < Logging_Limit && JRE_Mem_Byte * 10 <
Sys_Mem_Byte) {
- String st =
byteMemoryToHumanReadableString(JRE_Mem_Byte);
- String sm =
byteMemoryToHumanReadableString(Sys_Mem_Byte);
+ String st = byteMemoryToString(JRE_Mem_Byte);
+ String sm = byteMemoryToString(Sys_Mem_Byte);
LOG.warn("Low memory budget of total: " + sm + " set
to: " + st);
}
}
- private static long maxMemMachine() {
+ public static long maxMemMachine() {
String sys = System.getProperty("os.name");
if("Linux".equals(sys)) {
return maxMemMachineLinux();
@@ -70,6 +70,9 @@ public interface SettingsChecker {
else if(sys.contains("Mac OS")) {
return maxMemMachineOSX();
}
+ else if(sys.startsWith("Windows")) {
+ return maxMemMachineWin();
+ }
else {
return -1;
}
@@ -100,6 +103,26 @@ public interface SettingsChecker {
throw new RuntimeException(e);
}
}
+
+ private static long maxMemMachineWin() {
+ try {
+ String command = "wmic memorychip get capacity";
+ Runtime rt = Runtime.getRuntime();
+ Process pr = rt.exec(command);
+ String[] memStr = new
String(pr.getInputStream().readAllBytes(), StandardCharsets.UTF_8).split("\n");
+ //skip header, and aggregate DIMM capacities
+ long capacity = 0;
+ for( int i=1; i<memStr.length; i++ ) {
+ String tmp = memStr[i].trim();
+ if( tmp.length() > 0 )
+ capacity += Long.parseLong(tmp);
+ }
+ return capacity;
+ }
+ catch(IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
/**
* Converts a number of bytes in a long to a human readable string with
GB, MB, KB and B.
@@ -107,7 +130,7 @@ public interface SettingsChecker {
* @param bytes Number of bytes.
* @return A human readable string
*/
- public static String byteMemoryToHumanReadableString(long bytes) {
+ public static String byteMemoryToString(long bytes) {
if(bytes > 1000000000)
return String.format("%6d GB", bytes / 1024 / 1024 /
1024);
else if(bytes > 1000000)
diff --git
a/src/test/java/org/apache/sysds/test/component/utils/SettingsCheckerTest.java
b/src/test/java/org/apache/sysds/test/component/utils/SettingsCheckerTest.java
new file mode 100644
index 0000000000..1d2d297e4c
--- /dev/null
+++
b/src/test/java/org/apache/sysds/test/component/utils/SettingsCheckerTest.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.sysds.test.component.utils;
+
+import org.apache.sysds.test.AutomatedTestBase;
+import org.apache.sysds.utils.SettingsChecker;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class SettingsCheckerTest extends AutomatedTestBase {
+
+ @Override
+ public void setUp() {}
+
+ @Test
+ public void testCheckMemory() {
+ try {
+ SettingsChecker.check();
+ SettingsChecker.checkMemorySetting();
+ long mem = SettingsChecker.maxMemMachine();
+ String memStr = SettingsChecker.byteMemoryToString(mem);
+ System.out.println(memStr);
+ }
+ catch(Exception ex) {
+ ex.printStackTrace();
+ Assert.fail();
+ }
+ }
+}