Max memory settings can be set using human number with unit

This commit is contained in:
Laurent Clouet
2019-02-20 13:53:18 +01:00
parent 208f49ba1d
commit 388b1158bd
4 changed files with 34 additions and 19 deletions

View File

@@ -565,7 +565,7 @@ public class Job {
int end = element.indexOf(')'); int end = element.indexOf(')');
if (end > 0) { if (end > 0) {
try { try {
long mem = Utils.parseNumber(element.substring(1, end).trim()); long mem = Utils.parseNumber(element.substring(1, end).trim()) / 1000; // internal use of ram is in kB
if (mem > getProcessRender().getMemoryUsed()) { if (mem > getProcessRender().getMemoryUsed()) {
getProcessRender().setMemoryUsed(mem); getProcessRender().setMemoryUsed(mem);
} }
@@ -580,7 +580,7 @@ public class Job {
int end = element.indexOf('|'); int end = element.indexOf('|');
if (end > 0) { if (end > 0) {
try { try {
long mem = Utils.parseNumber(element.substring(1, end).trim()); long mem = Utils.parseNumber(element.substring(1, end).trim()) / 1000; // internal use of ram is in kB
if (mem > getProcessRender().getMemoryUsed()) { if (mem > getProcessRender().getMemoryUsed()) {
getProcessRender().setMemoryUsed(mem); getProcessRender().setMemoryUsed(mem);
} }

View File

@@ -84,7 +84,7 @@ public class SettingsLoader {
cores = String.valueOf(cores_); cores = String.valueOf(cores_);
} }
if (maxRam_ > 0) { if (maxRam_ > 0) {
ram = String.valueOf(maxRam_); ram = String.valueOf(maxRam_) + "k";
} }
if (maxRenderTime_ > 0) { if (maxRenderTime_ > 0) {
renderTime = String.valueOf(maxRenderTime_); renderTime = String.valueOf(maxRenderTime_);
@@ -350,7 +350,7 @@ public class SettingsLoader {
} }
if (config.getMaxMemory() == -1 && ram != null) { if (config.getMaxMemory() == -1 && ram != null) {
config.setMaxMemory(Long.valueOf(ram)); config.setMaxMemory(Utils.parseNumber(ram) / 1000); // internal ram value is in kB
} }
if (config.getMaxRenderTime() == -1 && renderTime != null) { if (config.getMaxRenderTime() == -1 && renderTime != null) {

View File

@@ -146,6 +146,10 @@ public class Utils {
file.delete(); file.delete();
} }
/**
* Parse a number string to a number.
* Input can be as "32", "10k", "100K", "100G", "1.3G", "0.4T"
*/
public static long parseNumber(String in) { public static long parseNumber(String in) {
in = in.trim(); in = in.trim();
in = in.replaceAll(",", "."); in = in.replaceAll(",", ".");
@@ -158,18 +162,22 @@ public class Utils {
m.find(); m.find();
int scale = 1; int scale = 1;
switch (m.group(2).charAt(0)) { switch (m.group(2).charAt(0)) {
case 'G': case 'T':
scale *= 1000; case 't':
case 'g': scale = 1000 * 1000 * 1000 * 1000;
scale *= 1000; break;
case 'M': case 'G':
scale *= 1000; case 'g':
case 'm': scale = 1000 * 1000 * 1000;
scale *= 1000; break;
case 'K': case 'M':
case 'm':
scale = 1000 * 1000;
break;
case 'K':
case 'k':
scale = 1000;
break; break;
default:
return 0;
} }
return Math.round(Double.parseDouble(m.group(1)) * scale); return Math.round(Double.parseDouble(m.group(1)) * scale);
} }

View File

@@ -38,6 +38,7 @@ import com.sheepit.client.Log;
import com.sheepit.client.Pair; import com.sheepit.client.Pair;
import com.sheepit.client.SettingsLoader; import com.sheepit.client.SettingsLoader;
import com.sheepit.client.ShutdownHook; import com.sheepit.client.ShutdownHook;
import com.sheepit.client.Utils;
import com.sheepit.client.hardware.gpu.GPU; import com.sheepit.client.hardware.gpu.GPU;
import com.sheepit.client.hardware.gpu.GPUDevice; import com.sheepit.client.hardware.gpu.GPUDevice;
import com.sheepit.client.hardware.gpu.nvidia.Nvidia; import com.sheepit.client.hardware.gpu.nvidia.Nvidia;
@@ -72,8 +73,8 @@ public class Worker {
@Option(name = "-cores", usage = "Number of cores/threads to use for the render", metaVar = "3", required = false) @Option(name = "-cores", usage = "Number of cores/threads to use for the render", metaVar = "3", required = false)
private int nb_cores = -1; private int nb_cores = -1;
@Option(name = "-memory", usage = "Maximum memory allow to be used by renderer (in MB)", required = false) @Option(name = "-memory", usage = "Maximum memory allow to be used by renderer, number with unit (800M, 2G, ...)", required = false)
private long max_ram = -1; private String max_ram = null;
@Option(name = "-rendertime", usage = "Maximum time allow for each frame (in minute)", required = false) @Option(name = "-rendertime", usage = "Maximum time allow for each frame (in minute)", required = false)
private int max_rendertime = -1; private int max_rendertime = -1;
@@ -219,8 +220,14 @@ public class Worker {
config.setUseNbCores(nb_cores); config.setUseNbCores(nb_cores);
} }
if (max_ram > 0) { if (max_ram != null) {
config.setMaxMemory(max_ram * 1000); try {
config.setMaxMemory(Utils.parseNumber(max_ram) / 1000); // internal value are in kB
}
catch (java.lang.IllegalStateException e) {
System.err.println("Error: failed to parse memory parameter");
return;
}
} }
if (max_rendertime > 0) { if (max_rendertime > 0) {