From cb8215ab2b55d2dc95ec9e4539d77488ee4947d2 Mon Sep 17 00:00:00 2001
From: Moe Jette <jette1@llnl.gov>
Date: Wed, 7 Nov 2007 17:10:24 +0000
Subject: [PATCH] svn merge -r12633:12637
 https://eris.llnl.gov/svn/slurm/branches/slurm-1.2

---
 AUTHORS                            |  1 +
 NEWS                               |  2 ++
 doc/html/team.shtml                |  1 +
 src/plugins/sched/wiki/get_jobs.c  | 17 ++++++++++++++++-
 src/plugins/sched/wiki2/get_jobs.c | 17 ++++++++++++++++-
 5 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/AUTHORS b/AUTHORS
index 1ca83d05b9f..4811a692e77 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -30,6 +30,7 @@ Dan Phung <phung4(at)llnl.gov>
 Ashley Pitman <ashley(at)quadrics.com>
 Andy Riebs <Andy.Riebs(at)hp.com>
 Asier Roa <asier.roa(at)bsc.es>
+Miguel Ros <miguel.ros(at)bsc.es>
 Federico Sacerdoti <Federico.Sacerdoti(at)deshaw.com>
 Jeff Squyres <jsquyres(at)lam-mpi.org>
 Keven Tew <tew1(at)llnl.gov>
diff --git a/NEWS b/NEWS
index b545e02edfd..7239cca25a9 100644
--- a/NEWS
+++ b/NEWS
@@ -86,6 +86,8 @@ documents those changes that are of interest to users and admins.
     specified.
  -- BLUEGENE: Documented the prefix should always be lower case and the 3
     digit suffix should be uppercase if any letters are used as digits. 
+ -- In sched/wiki and sched/wiki2, add support for --cpus-per-task option.
+    From Miguel Ros, BSC.
 
 * Changes in SLURM 1.2.19
 =========================
diff --git a/doc/html/team.shtml b/doc/html/team.shtml
index 5898698fff2..f5f426f3daf 100644
--- a/doc/html/team.shtml
+++ b/doc/html/team.shtml
@@ -49,6 +49,7 @@ Networking, Italy)</li>
 <li>Ashley Pittman (Quadrics)</li>
 <li>Andy Riebs (HP)</li>
 <li>Asier Roa (Barcelona Supercomputer Center, Spain)<li>
+<li>Miguel Ros (Barcelona Supercomputer Center, Spain)<li>
 <li>Federico Sacerdoti (D.E. Shaw)<li>
 <li>Jeff Squyres (LAM MPI)</li>
 <li>Prashanth Tamraparni (HP, India)</li>
diff --git a/src/plugins/sched/wiki/get_jobs.c b/src/plugins/sched/wiki/get_jobs.c
index df478987d4c..a5f63fa07f2 100644
--- a/src/plugins/sched/wiki/get_jobs.c
+++ b/src/plugins/sched/wiki/get_jobs.c
@@ -47,6 +47,7 @@
 static char *	_dump_all_jobs(int *job_cnt, int state_info);
 static char *	_dump_job(struct job_record *job_ptr, int state_info);
 static char *	_get_group_name(gid_t gid);
+static uint16_t _get_job_cpus_per_task(struct job_record *job_ptr);
 static uint32_t	_get_job_end_time(struct job_record *job_ptr);
 static uint32_t	_get_job_min_disk(struct job_record *job_ptr);
 static uint32_t	_get_job_min_mem(struct job_record *job_ptr);
@@ -240,6 +241,11 @@ static char *	_dump_job(struct job_record *job_ptr, int state_info)
 		xstrcat(buf, tmp);
 	}
 
+	snprintf(tmp, sizeof(tmp),
+		"DPROCS=%u;",
+		_get_job_cpus_per_task(job_ptr));
+	xstrcat(buf, tmp);
+
 	snprintf(tmp, sizeof(tmp),
 		"QUEUETIME=%u;STARTTIME=%u;PARTITIONMASK=%s;",
 		_get_job_submit_time(job_ptr),
@@ -280,6 +286,15 @@ static char *	_dump_job(struct job_record *job_ptr, int state_info)
 	return buf;
 }
 
+static uint16_t _get_job_cpus_per_task(struct job_record *job_ptr)
+{
+	uint16_t cpus_per_task = 1;
+
+	if (job_ptr->details && job_ptr->details->cpus_per_task)
+		cpus_per_task = job_ptr->details->cpus_per_task;
+	return cpus_per_task;
+}
+
 static uint32_t _get_job_min_mem(struct job_record *job_ptr)
 {
 	if (job_ptr->details)
@@ -337,7 +352,7 @@ static uint32_t _get_job_tasks(struct job_record *job_ptr)
 			        job_ptr->details->ntasks_per_node));
 	}
 
-	return task_cnt;
+	return task_cnt / _get_job_cpus_per_task(job_ptr);
 }
 
 static uint32_t	_get_job_time_limit(struct job_record *job_ptr)
diff --git a/src/plugins/sched/wiki2/get_jobs.c b/src/plugins/sched/wiki2/get_jobs.c
index 690d9ac899b..2b0842a2e01 100644
--- a/src/plugins/sched/wiki2/get_jobs.c
+++ b/src/plugins/sched/wiki2/get_jobs.c
@@ -50,6 +50,7 @@ static char *	_dump_job(struct job_record *job_ptr, int state_info);
 static char *	_get_group_name(gid_t gid);
 static void	_get_job_comment(struct job_record *job_ptr, 
 			char *buffer, int buf_size);
+static uint16_t _get_job_cpus_per_task(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);
@@ -300,6 +301,11 @@ static char *	_dump_job(struct job_record *job_ptr, int state_info)
 		_get_job_min_nodes(job_ptr));
 	xstrcat(buf, tmp);
 
+	snprintf(tmp, sizeof(tmp),
+		"DPROCS=%u;",
+		_get_job_cpus_per_task(job_ptr));
+	xstrcat(buf, tmp);
+
 	snprintf(tmp, sizeof(tmp),
 		"QUEUETIME=%u;STARTTIME=%u;RCLASS=%s;",
 		_get_job_submit_time(job_ptr),
@@ -408,6 +414,15 @@ static void	_get_job_comment(struct job_record *job_ptr,
 	size += snprintf((buffer + size), (buf_size - size), "\";");
 }
 
+static uint16_t _get_job_cpus_per_task(struct job_record *job_ptr)
+{
+	uint16_t cpus_per_task = 1;
+
+	if (job_ptr->details && job_ptr->details->cpus_per_task)
+		cpus_per_task = job_ptr->details->cpus_per_task;
+	return cpus_per_task;
+}
+
 static uint32_t _get_job_min_mem(struct job_record *job_ptr)
 {
 	if (job_ptr->details)
@@ -465,7 +480,7 @@ static uint32_t _get_job_tasks(struct job_record *job_ptr)
 			        job_ptr->details->ntasks_per_node));
 	}
 
-	return task_cnt;
+	return task_cnt / _get_job_cpus_per_task(job_ptr);
 }
 
 static uint32_t	_get_job_time_limit(struct job_record *job_ptr)
-- 
GitLab