You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by bc...@apache.org on 2012/08/15 22:39:19 UTC

git commit: TS-1356 Simple way of assigning threads to a CPU. It just loops over the net threads an assigns them to a CPU. Better version to come later.

Updated Branches:
  refs/heads/master 1686269fb -> 025cd2796


TS-1356 Simple way of assigning threads to a CPU.  It just loops over
the net threads an assigns them to a CPU.  Better version to come later.


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/025cd279
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/025cd279
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/025cd279

Branch: refs/heads/master
Commit: 025cd2796b331b022c255f2cb531aedd95786757
Parents: 1686269
Author: Bryan Call <bc...@apache.org>
Authored: Wed Aug 15 13:37:09 2012 -0700
Committer: Bryan Call <bc...@apache.org>
Committed: Wed Aug 15 13:37:09 2012 -0700

----------------------------------------------------------------------
 iocore/eventsystem/UnixEventProcessor.cc |   31 +++++++++++++++++++++---
 mgmt/RecordsConfig.cc                    |    2 +
 2 files changed, 29 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/025cd279/iocore/eventsystem/UnixEventProcessor.cc
----------------------------------------------------------------------
diff --git a/iocore/eventsystem/UnixEventProcessor.cc b/iocore/eventsystem/UnixEventProcessor.cc
index a3b5a7b..7030d15 100644
--- a/iocore/eventsystem/UnixEventProcessor.cc
+++ b/iocore/eventsystem/UnixEventProcessor.cc
@@ -22,8 +22,9 @@
  */
 
 #include "P_EventSystem.h"      /* MAGIC_EDITING_TAG */
-
-
+#include <sched.h>
+#include <hwloc.h>
+#include "ink_defs.h"
 
 EventType
 EventProcessor::spawn_event_threads(int n_threads, const char* et_name)
@@ -93,11 +94,33 @@ EventProcessor::start(int n_event_threads)
     t->set_event_type((EventType) ET_CALL);
   }
   n_threads_for_type[ET_CALL] = n_event_threads;
+
+#if TS_USE_HWLOC
+  int affinity = 0;
+  REC_ReadConfigInteger(affinity, "proxy.config.exec_thread.affinity");
+  cpu_set_t cpuset;
+  const hwloc_topology_t *topology = ink_get_topology();
+  int cu = hwloc_get_nbobjs_by_type(*topology, HWLOC_OBJ_CORE);
+  int pu = hwloc_get_nbobjs_by_type(*topology, HWLOC_OBJ_PU);
+  int num_cpus = cu;
+  Debug("iocore_thread", "cu: %d pu: %d affinity: %d", cu, pu, affinity);
+#endif
+
   for (i = first_thread; i < n_ethreads; i++) {
     snprintf(thr_name, MAX_THREAD_NAME_LENGTH, "[ET_NET %d]", i);
-    all_ethreads[i]->start(thr_name);
+    ink_thread tid = all_ethreads[i]->start(thr_name);
+    (void)tid;
+
+#if TS_USE_HWLOC
+    if (affinity == 1) {
+      CPU_ZERO(&cpuset);
+      int cpu = (i - 1) % num_cpus;
+      CPU_SET(cpu, &cpuset);
+      Debug("iocore_thread", "setaffinity tid: %lu, net thread: %d, cpu: %d", tid, i, cpu);
+      assert(pthread_setaffinity_np(tid, sizeof(cpu_set_t), &cpuset) == 0);
+    }
+#endif
   }
-
   Debug("iocore_thread", "Created event thread group id %d with %d threads", ET_CALL, n_event_threads);
   return 0;
 }

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/025cd279/mgmt/RecordsConfig.cc
----------------------------------------------------------------------
diff --git a/mgmt/RecordsConfig.cc b/mgmt/RecordsConfig.cc
index e9e7ba3..41212da 100644
--- a/mgmt/RecordsConfig.cc
+++ b/mgmt/RecordsConfig.cc
@@ -130,6 +130,8 @@ RecordElement RecordsConfig[] = {
   ,
   {RECT_CONFIG, "proxy.config.exec_thread.limit", RECD_INT, "2", RECU_RESTART_TS, RR_NULL, RECC_INT, "[1-1024]", RECA_READ_ONLY}
   ,
+  {RECT_CONFIG, "proxy.config.exec_thread.affinity", RECD_INT, "0", RECU_RESTART_TS, RR_NULL, RECC_INT, "[0-1]", RECA_READ_ONLY}
+  ,
   {RECT_CONFIG, "proxy.config.accept_threads", RECD_INT, "1", RECU_RESTART_TS, RR_NULL, RECC_INT, "[0-1]", RECA_READ_ONLY}
   ,
   {RECT_CONFIG, "proxy.config.task_threads", RECD_INT, "2", RECU_RESTART_TS, RR_NULL, RECC_INT, "[0-99999]", RECA_READ_ONLY}