9c6e77467db7d54f98e58e1e858ee7afae0e40e5 galt Thu Oct 11 03:07:37 2012 -0700 v12.15 - bugfixes and better support of rlimit for parasol diff --git src/parasol/para/para.c src/parasol/para/para.c index b05b52f..9739732 100644 --- src/parasol/para/para.c +++ src/parasol/para/para.c @@ -138,30 +138,34 @@ " List jobs that had problems (even if successfully rerun).\n" " Includes host info.\n" "para running\n" " Print info on currently running jobs.\n" "para hippos time\n" " Print info on currently running jobs taking > 'time' (minutes) to run.\n" "para time\n" " List timing information.\n" "para recover jobList newJobList\n" " Generate a job list by selecting jobs from an existing list where\n" " the `check out' tests fail.\n" "para priority 999\n" " Set batch priority. Values explained under 'push' options above.\n" "para maxJob 999\n" " Set batch maxJob. Values explained under 'push' options above.\n" + "para ram 999\n" + " Set batch ram usage. Values explained under 'push' options above.\n" + "para cpu 999\n" + " Set batch cpu usage. Values explained under 'push' options above.\n" "para resetCounts\n" " Set batch done and crash counters to 0.\n" "para flushResults\n" " Flush results file. Warns if batch has jobs queued or running.\n" "para freeBatch\n" " Free all batch info on hub. Works only if batch has nothing queued or running.\n" "para showSickNodes\n" " Show sick nodes which have failed when running this batch.\n" "para clearSickNodes\n" " Clear sick nodes statistics and consecutive crash counts of batch.\n" "\n" "Common options\n" " -verbose=1 - set verbosity level.\n", version, NORMAL_PRIORITY, @@ -1995,30 +1999,61 @@ if (endTime > lastEnd) { lastEnd = endTime; gotEnd = TRUE; } } } } } if (gotEnd) return lastEnd - firstSub; else return now - firstSub; } + +void paraRam(char *batch, char *val) +/* set batch ram = val */ +{ +long long newRam = paraParseRam(val); +if (newRam == -1) + usage(); +struct jobDb *db = readBatch(batch); +struct job *job; +for (job = db->jobList; job != NULL; job = job->next) + { + job->ramUsed = newRam; + } +atomicWriteBatch(db, batch); +} + +void paraCpu(char *batch, char *val) +/* set batch cpu = val */ +{ +float newCpus = sqlFloat(val); +if (newCpus < 0) + usage(); +struct jobDb *db = readBatch(batch); +struct job *job; +for (job = db->jobList; job != NULL; job = job->next) + { + job->cpusUsed = newCpus; + } +atomicWriteBatch(db, batch); +} + void paraTimes(char *batch) /* Report times of run. */ { struct jobDb *db = readBatch(batch); double totalCpu = 0, totalWall = 0; double oneWall, longestWall = 0; struct job *job; char *longestWallId = NULL; struct submission *sub; int jobCount = 0; int runningCount = 0; int timedCount = 0; int crashCount = 0; int queueCount = 0; double runTime = 0, longestRun = 0; @@ -2275,30 +2310,42 @@ else if (sameWord(command, "priority")) { if (argc != 3) usage(); paraPriority(argv[2]); } else if (sameWord(command, "maxJob") || sameWord(command, "maxNode")) { if (argc != 3) usage(); /* backwards compatibility */ if (sameWord(command, "maxNode")) warn("maxNode deprecated, use maxJob"); paraMaxJob(argv[2]); } +else if (sameWord(command, "ram")) + { + if (argc != 3) + usage(); + paraRam(batch, argv[2]); + } +else if (sameWord(command, "cpu")) + { + if (argc != 3) + usage(); + paraCpu(batch, argv[2]); + } else if (sameWord(command, "resetCounts")) { if (argc != 2) usage(); paraResetCounts(); } else if (sameWord(command, "freeBatch")) { if (argc != 2) usage(); freeBatch(); } else if (sameWord(command, "flushResults")) { if (argc != 2)