Skip to content
Snippets Groups Projects
Commit bc306b68 authored by Moe Jette's avatar Moe Jette
Browse files
parent 78aa6a50
No related branches found
No related tags found
No related merge requests found
......@@ -90,8 +90,12 @@ documents those changes that are of interest to users and admins.
failed.
-- BLUEGENE - Fix, for if you are setting an subbp into an error mode
where the subbp stated isn't the first ionode in a nodecard.
-- fix for backfill to not core when checking shared nodes.
-- fix for scontrol to not core when hitting just return in interactive mode.
-- Fix for backfill to not core when checking shared nodes.
-- Fix for scontrol to not core when hitting just return in interactive mode.
-- Improve sched/backfill logic with respect to shared nodes (multiple jobs
per node).
-- In sched/wiki (Maui interface) add job info fields QOS, RCLASS, DMEM and
TASKSPERNODE.
* Changes in SLURM 2.0.1
========================
......
......@@ -50,6 +50,7 @@ Linux NetworX and many other contributorss.
<li>Donald Lipari (LLNL)</li>
<li>Steven McDougall (SiCortex)</li>
<li>Donna Mecozzi (LLNL)</li>
<li>Bj&oslash;rn-Helge Mevik (University of Oslo, Norway)</li>
<li>Chris Morrone (LLNL)</li>
<li>Pere Munt (Barcelona Supercomputer Center, Spain)</li>
<li>Michal Novotny (Masaryk University, Czech Republic)</li>
......@@ -76,6 +77,6 @@ Networking, Italy)</li>
<li>Anne-Marie Wunderlin (Bull)</li>
</ul>
<p style="text-align:center;">Last modified 27 May 2009</p>
<p style="text-align:center;">Last modified 16 June 2009</p>
<!--#include virtual="footer.txt"-->
......@@ -87,7 +87,7 @@ For example:
\-\-begin=16:00
\-\-begin=now+1hour
\-\-begin=now+60 (seconds by default)
\-\-begin=2010-01-20T12:34:67
\-\-begin=2010-01-20T12:34:00
.fi
.TP
......
......@@ -86,7 +86,7 @@ For example:
\-\-begin=16:00
\-\-begin=now+1hour
\-\-begin=now+60 (seconds by default)
\-\-begin=2010-01-20T12:34:67
\-\-begin=2010-01-20T12:34:00
.fi
.TP
......
......@@ -74,7 +74,7 @@ For example:
\-\-begin=16:00
\-\-begin=now+1hour
\-\-begin=now+60 (seconds by default)
\-\-begin=2010-01-20T12:34:67
\-\-begin=2010-01-20T12:34:00
.fi
.TP
......
......@@ -248,6 +248,7 @@ static int _try_sched(struct job_record *job_ptr, bitstr_t **avail_bitmap,
/* Try to schedule the job. First on dedicated nodes
* then on shared nodes (if so configured). */
uint16_t orig_shared;
time_t now = time(NULL);
orig_shared = job_ptr->details->shared;
job_ptr->details->shared = 0;
tmp_bitmap = bit_copy(*avail_bitmap);
......@@ -255,7 +256,8 @@ static int _try_sched(struct job_record *job_ptr, bitstr_t **avail_bitmap,
max_nodes, req_nodes,
SELECT_MODE_WILL_RUN);
job_ptr->details->shared = orig_shared;
if ((rc != SLURM_SUCCESS) && (orig_shared != 0)) {
if (((rc != SLURM_SUCCESS) || (job_ptr->start_time > now)) &&
(orig_shared != 0)) {
FREE_NULL_BITMAP(*avail_bitmap);
*avail_bitmap= tmp_bitmap;
rc = select_g_job_test(job_ptr, *avail_bitmap,
......
......@@ -17,7 +17,7 @@
* any later version.
*
* In addition, as a special exception, the copyright holders give permission
* to link the code of portions of this program with the OpenSSL library under
* to link the code of portions of this program with the OpenSSL library under
* certain conditions as described in each individual source file, and
* distribute linked combinations including the two. You must obey the GNU
* General Public License in all respects for all of the code used other than
......@@ -51,6 +51,7 @@
static char * _dump_all_jobs(int *job_cnt, time_t update_time);
static char * _dump_job(struct job_record *job_ptr, time_t update_time);
static uint16_t _get_job_cpus_per_task(struct job_record *job_ptr);
static uint16_t _get_job_tasks_per_node(struct job_record *job_ptr);
static uint32_t _get_job_end_time(struct job_record *job_ptr);
static char * _get_job_features(struct job_record *job_ptr);
static uint32_t _get_job_min_disk(struct job_record *job_ptr);
......@@ -83,16 +84,19 @@ static char * _task_list(struct job_record *job_ptr);
* WCLIMIT=<secs>; wall clock time limit, seconds
* TASKS=<cpus>; CPUs required
* [NODES=<nodes>;] count of nodes required
* [TASKSPERNODE=<cnt>;] tasks required per node
* DPROCS=<cpus_per_task>; count of CPUs required per task
* QUEUETIME=<uts>; submission time
* STARTTIME=<uts>; time execution started
* PARTITIONMASK=<partition>; partition name
* [DMEM=<mbytes>;] MB of memory required per cpu
* RMEM=<MB>; MB of memory required
* RDISK=<MB>; MB of disk space required
* [COMPLETETIME=<uts>;] termination time
* [SUSPENDTIME=<secs>;] seconds that job has been suspended
* [QOS=<quality_of_service>]; quality of service
* [ACCOUNT=<bank_account>]; bank account name
* [ACCOUNT=<bank_account>;] bank account name
* [QOS=<quality_of_service>;] quality of service
* [RCLASS=<resource_class>;] resource class
* [COMMENT=<whatever>;] job dependency or account number
* UNAME=<user_name>; user name
* GNAME=<group_name>; group name
......@@ -205,7 +209,7 @@ static char * _dump_job(struct job_record *job_ptr, time_t update_time)
{
char tmp[16384], *buf = NULL;
char *uname, *gname;
uint32_t end_time, suspend_time;
uint32_t end_time, suspend_time, min_mem;
if (!job_ptr)
return NULL;
......@@ -266,10 +270,18 @@ static char * _dump_job(struct job_record *job_ptr, time_t update_time)
xstrcat(buf, tmp);
if (!IS_JOB_FINISHED(job_ptr)) {
uint16_t tpn;
snprintf(tmp, sizeof(tmp),
"NODES=%u;",
_get_job_min_nodes(job_ptr));
xstrcat(buf, tmp);
tpn = _get_job_tasks_per_node(job_ptr);
if (tpn > 0) {
snprintf(tmp, sizeof(tmp),
"TASKPERNODE=%u;",
tpn);
xstrcat(buf, tmp);
}
}
snprintf(tmp, sizeof(tmp),
......@@ -284,6 +296,13 @@ static char * _dump_job(struct job_record *job_ptr, time_t update_time)
job_ptr->partition);
xstrcat(buf, tmp);
min_mem = _get_job_min_mem(job_ptr);
if (min_mem & MEM_PER_CPU) {
snprintf(tmp, sizeof(tmp),
"DMEM=%u;", min_mem & (~MEM_PER_CPU));
xstrcat(buf, tmp);
}
snprintf(tmp, sizeof(tmp),
"RMEM=%u;RDISK=%u;",
_get_job_min_mem(job_ptr),
......@@ -306,7 +325,7 @@ static char * _dump_job(struct job_record *job_ptr, time_t update_time)
if (job_ptr->account) {
/* allow QOS spec in form "qos-name" */
if (!strncmp(job_ptr->account,"qos-",4)) {
if (!strncmp(job_ptr->account, "qos-", 4)) {
snprintf(tmp, sizeof(tmp),
"QOS=%s;", job_ptr->account + 4);
} else {
......@@ -317,9 +336,33 @@ static char * _dump_job(struct job_record *job_ptr, time_t update_time)
}
if (job_ptr->comment && job_ptr->comment[0]) {
snprintf(tmp,sizeof(tmp),
"COMMENT=%s;", job_ptr->comment);
xstrcat(buf,tmp);
/* Parse comment for class/qos spec */
char *copy;
char *cred, *value;
copy = xstrdup(job_ptr->comment);
cred = strtok(copy, ",");
while (cred != NULL) {
if (!strncmp(cred, "qos:", 4)) {
value = &cred[4];
if (value[0] != '\0') {
snprintf(tmp, sizeof(tmp),
"QOS=%s;", value);
xstrcat(buf, tmp);
}
} else if (!strncmp(cred, "class:", 6)) {
value = &cred[6];
if (value[0] != '\0') {
snprintf(tmp, sizeof(tmp),
"RCLASS=%s;", value);
xstrcat(buf, tmp);
}
}
cred = strtok(NULL, ",");
}
xfree(copy);
snprintf(tmp, sizeof(tmp),
"COMMENT=%s;", job_ptr->comment);
xstrcat(buf, tmp);
}
if (job_ptr->details &&
......@@ -346,6 +389,16 @@ static uint16_t _get_job_cpus_per_task(struct job_record *job_ptr)
return cpus_per_task;
}
static uint16_t _get_job_tasks_per_node(struct job_record *job_ptr)
{
uint16_t tasks_per_node = 0;
if (job_ptr->details && job_ptr->details->ntasks_per_node)
tasks_per_node = job_ptr->details->ntasks_per_node;
return tasks_per_node;
}
static uint32_t _get_job_min_mem(struct job_record *job_ptr)
{
if (job_ptr->details)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment