From c42fe448d6e0d35221f2525d8de2bc939db3477e Mon Sep 17 00:00:00 2001
From: Moe Jette <jette1@llnl.gov>
Date: Mon, 18 Sep 2006 19:43:54 +0000
Subject: [PATCH] Disable pthread_create() for PMI_send when TotalView is
 running for     better performance.

---
 NEWS                     | 2 ++
 src/api/pmi_server.c     | 9 ++++++++-
 src/slaunch/opt.c        | 1 +
 testsuite/expect/test7.2 | 2 +-
 4 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/NEWS b/NEWS
index 936ea31e56d..ae679b8be85 100644
--- a/NEWS
+++ b/NEWS
@@ -10,6 +10,8 @@ documents those changes that are of interest to users and admins.
     are expecting to get back.  No srun_node_id anymore passed around in
     a slurm_msg_t
  -- Remove sched/wiki plugin (use sched/wiki2 for now)
+ -- Disable pthread_create() for PMI_send when TotalView is running for 
+    better performance.
 
 * Changes in SLURM 1.2.0-pre2
 =============================
diff --git a/src/api/pmi_server.c b/src/api/pmi_server.c
index 374e5ca0056..12c797116d0 100644
--- a/src/api/pmi_server.c
+++ b/src/api/pmi_server.c
@@ -187,7 +187,14 @@ static void *_agent(void *x)
 			msg_args = xmalloc(sizeof(struct msg_arg));
 			msg_args->bar_ptr = &args->barrier_xmit_ptr[j];
 			msg_args->kvs_ptr = &kvs_set;
-			if (pthread_create(&msg_id, &attr, _msg_thread, 
+			if (agent_max_cnt == 1) {
+				/* TotalView slows down a great deal for
+				 * pthread_create() calls, so just send the
+				 * messages inline when TotalView is in use
+				 * or for some other reason we only want 
+				 * one pthread. */
+				_msg_thread((void *) msg_args);
+			} else if (pthread_create(&msg_id, &attr, _msg_thread,
 					(void *) msg_args)) {
 				fatal("pthread_create: %m");
 			}
diff --git a/src/slaunch/opt.c b/src/slaunch/opt.c
index 0b6f8c8e7ed..8e8b43b16ae 100644
--- a/src/slaunch/opt.c
+++ b/src/slaunch/opt.c
@@ -1102,6 +1102,7 @@ void set_options(const int argc, char **argv)
 			 * is really attached */
 			opt.parallel_debug   = true;
 			MPIR_being_debugged  = 1;
+			pmi_server_max_threads(1);
 			break;
 		case LONG_OPT_USAGE:
 			_usage();
diff --git a/testsuite/expect/test7.2 b/testsuite/expect/test7.2
index 898ac19e5e1..a2e75f89370 100755
--- a/testsuite/expect/test7.2
+++ b/testsuite/expect/test7.2
@@ -67,7 +67,7 @@ if { [test_bluegene] } {
 # Adjust time limits as needed for large task counts */
 #                   times are here  vv 
 set timeout [expr $max_job_delay +  60]
-spawn $srun -l -N$node_cnt -n8 -O -t1 --pmi-threads=3 $file_prog_get
+spawn $srun -l -N$node_cnt -n8 -O -t1 --threads=1 $file_prog_get
 expect {
 	-re "FAILURE" {
 		send_user "\nFAILURE: some error occured\n"
-- 
GitLab