From b7bdef6eac1da78f97372ba27959f4bd5ec1beec Mon Sep 17 00:00:00 2001
From: Jan David Mol <mol@astron.nl>
Date: Tue, 24 Jul 2012 14:52:13 +0000
Subject: [PATCH] Task #3446: Performance tuning for 40 Gbit/s over 2 CEP2
 routers

---
 RTCP/IONProc/src/CommandServer.cc      | 6 ++++++
 RTCP/IONProc/src/ControlPhase3Cores.cc | 6 ++++++
 RTCP/IONProc/src/Delays.cc             | 5 +++++
 RTCP/IONProc/src/InputThread.cc        | 2 +-
 RTCP/IONProc/src/Job.cc                | 5 +++++
 RTCP/IONProc/src/LogThread.cc          | 1 +
 RTCP/IONProc/src/OutputThread.cc       | 3 ++-
 RTCP/IONProc/src/OutputThread.h        | 2 +-
 RTCP/IONProc/src/PLCClient.cc          | 9 ++++++++-
 RTCP/IONProc/src/SSH.cc                | 7 +++++++
 RTCP/IONProc/src/StreamMultiplexer.cc  | 5 +++++
 11 files changed, 47 insertions(+), 4 deletions(-)

diff --git a/RTCP/IONProc/src/CommandServer.cc b/RTCP/IONProc/src/CommandServer.cc
index 8252afe3fa3..99f8cd61e41 100644
--- a/RTCP/IONProc/src/CommandServer.cc
+++ b/RTCP/IONProc/src/CommandServer.cc
@@ -27,6 +27,7 @@
 #include <GlobalVars.h>
 #include <Job.h>
 #include <JobQueue.h>
+#include <Scheduling.h>
 #include <Stream/SocketStream.h>
 
 #include <string>
@@ -77,6 +78,11 @@ void CommandServer::handleCommand(const std::string &command)
 
 void CommandServer::commandMaster()
 {
+#if defined HAVE_BGP_ION
+  //doNotRunOnCore0();
+  runOnCore0();
+#endif
+
   std::vector<SmartPtr<MultiplexedStream> > ionStreams(nrPsets);
 
   for (unsigned ion = 1; ion < nrPsets; ion ++)
diff --git a/RTCP/IONProc/src/ControlPhase3Cores.cc b/RTCP/IONProc/src/ControlPhase3Cores.cc
index 88c231c5276..088169558a6 100644
--- a/RTCP/IONProc/src/ControlPhase3Cores.cc
+++ b/RTCP/IONProc/src/ControlPhase3Cores.cc
@@ -26,6 +26,7 @@
 //# Includes
 #include <ControlPhase3Cores.h>
 #include <Interface/CN_Command.h>
+#include <Scheduling.h>
 
 #include <boost/format.hpp>
 using boost::format;
@@ -84,6 +85,11 @@ void ControlPhase3Cores::addIterations(unsigned count)
 
 void ControlPhase3Cores::mainLoop()
 {
+#if defined HAVE_BGP_ION
+  //doNotRunOnCore0();
+  runOnCore0();
+#endif
+
   unsigned block			= itsFirstBlock;
   unsigned nrPhaseThreeComputeCores	= itsPhaseThreeStreams.size();
   unsigned currentPhaseThreeComputeCore = block % nrPhaseThreeComputeCores;
diff --git a/RTCP/IONProc/src/Delays.cc b/RTCP/IONProc/src/Delays.cc
index 4ba7a9332f6..67fcd3a54f1 100644
--- a/RTCP/IONProc/src/Delays.cc
+++ b/RTCP/IONProc/src/Delays.cc
@@ -24,6 +24,7 @@
 #include <lofar_config.h>
 
 #include <Delays.h>
+#include <Scheduling.h>
 #include <Common/LofarLogger.h>
 #include <Common/PrettyUnits.h>
 #include <Interface/Exceptions.h>
@@ -132,6 +133,10 @@ void Delays::init()
 
 void Delays::mainLoop()
 {
+#if defined HAVE_BGP_ION
+  doNotRunOnCore0();
+#endif
+
   LOG_DEBUG("Delay compensation thread running");
 
   init();
diff --git a/RTCP/IONProc/src/InputThread.cc b/RTCP/IONProc/src/InputThread.cc
index 1939b95a202..b87e2ae3120 100644
--- a/RTCP/IONProc/src/InputThread.cc
+++ b/RTCP/IONProc/src/InputThread.cc
@@ -75,7 +75,7 @@ template <typename SAMPLE_TYPE> InputThread<SAMPLE_TYPE>::~InputThread()
 template <typename SAMPLE_TYPE> void InputThread<SAMPLE_TYPE>::mainLoop()
 {
 #if 1 && defined HAVE_BGP_ION
-  if (itsArgs.threadID == 0)
+  if (0 && itsArgs.threadID == 0)
     runOnCore0();
   else
     doNotRunOnCore0();
diff --git a/RTCP/IONProc/src/Job.cc b/RTCP/IONProc/src/Job.cc
index f2e92648347..e87f9fe65eb 100644
--- a/RTCP/IONProc/src/Job.cc
+++ b/RTCP/IONProc/src/Job.cc
@@ -30,6 +30,7 @@
 #include <Interface/RSPTimeStamp.h>
 #include <InputSection.h>
 #include <ION_Allocator.h>
+#include <Scheduling.h>
 #include <GlobalVars.h>
 #include <Job.h>
 #include <OutputSection.h>
@@ -378,6 +379,10 @@ void Job::claimResources()
 
 void Job::jobThread()
 {
+#if defined HAVE_BGP_ION
+  doNotRunOnCore0();
+#endif
+
   if (myPsetNumber == 0 || itsHasPhaseOne || itsHasPhaseTwo || itsHasPhaseThree) {
     createCNstreams();
     createIONstreams();
diff --git a/RTCP/IONProc/src/LogThread.cc b/RTCP/IONProc/src/LogThread.cc
index fa4a780d48e..4b3a123f33b 100644
--- a/RTCP/IONProc/src/LogThread.cc
+++ b/RTCP/IONProc/src/LogThread.cc
@@ -137,6 +137,7 @@ void LogThread::writeCPUstats(std::stringstream &str)
 void LogThread::mainLoop()
 {
 #if defined HAVE_BGP_ION
+  //doNotRunOnCore0();
   runOnCore0();
   readCPUstats(previousLoad);
   gettimeofday(&previousTimeval,0);
diff --git a/RTCP/IONProc/src/OutputThread.cc b/RTCP/IONProc/src/OutputThread.cc
index c4cc4857b2a..79bf6bb8ffa 100644
--- a/RTCP/IONProc/src/OutputThread.cc
+++ b/RTCP/IONProc/src/OutputThread.cc
@@ -59,7 +59,8 @@ void OutputThread::mainLoop()
 {
 #if defined HAVE_BGP_ION
   doNotRunOnCore0();
-  nice(19);
+  //nice(19);
+  //runOnCore0();
 #endif
 
   try {
diff --git a/RTCP/IONProc/src/OutputThread.h b/RTCP/IONProc/src/OutputThread.h
index 1ab352ca6f6..2a31fadab2a 100644
--- a/RTCP/IONProc/src/OutputThread.h
+++ b/RTCP/IONProc/src/OutputThread.h
@@ -46,7 +46,7 @@ class OutputThread
 
     void                    start();
 
-    static const unsigned   maxSendQueueSize = 3; // use 2 if you run out of memory, but test carefully to avoid data loss
+    static const unsigned   maxSendQueueSize = 5; // use 2 if you run out of memory, but test carefully to avoid data loss
 
     Queue<SmartPtr<StreamableData> > itsFreeQueue, itsSendQueue;
 
diff --git a/RTCP/IONProc/src/PLCClient.cc b/RTCP/IONProc/src/PLCClient.cc
index 15d3cd45882..52045b44a08 100644
--- a/RTCP/IONProc/src/PLCClient.cc
+++ b/RTCP/IONProc/src/PLCClient.cc
@@ -24,6 +24,7 @@
 #include <lofar_config.h>
 
 #include <PLCClient.h>
+#include <Scheduling.h>
 #include <Common/DataConvert.h>
 #include <Common/DataFormat.h>
 #include <Interface/Exceptions.h>
@@ -353,7 +354,13 @@ void PLCClient::recvCmd( PCCmd &cmd, string &options ) const
 // inner control structure (PLC message handling):
 //   LCS/ACC/PLC/src/ProcControlServer.cc
 
-void PLCClient::mainLoop() {
+void PLCClient::mainLoop()
+{
+#if defined HAVE_BGP_ION
+  //doNotRunOnCore0();
+  runOnCore0();
+#endif
+
   bool running = false;
   bool pausing = false;
 
diff --git a/RTCP/IONProc/src/SSH.cc b/RTCP/IONProc/src/SSH.cc
index f95556d47f9..600e4c6f65a 100644
--- a/RTCP/IONProc/src/SSH.cc
+++ b/RTCP/IONProc/src/SSH.cc
@@ -34,6 +34,7 @@
 #include <vector>
 
 #ifdef HAVE_LIBSSH2
+#include <Scheduling.h>
 #include <sstream>
 #include <sys/select.h>
 #include <Common/lofar_string.h>
@@ -203,6 +204,12 @@ bool SSHconnection::waitsocket( FileDescriptorBasedStream &sock )
 
 void SSHconnection::commThread()
 {
+#if defined HAVE_BGP_ION
+  //doNotRunOnCore0();
+  runOnCore0();
+  //nice(19);
+#endif
+
   SocketStream sock( itsHostName, 22, SocketStream::TCP, SocketStream::Client );
 
   LOG_DEBUG_STR( itsLogPrefix << "Connected" );
diff --git a/RTCP/IONProc/src/StreamMultiplexer.cc b/RTCP/IONProc/src/StreamMultiplexer.cc
index a68b41974b7..b17ff5c5dd4 100644
--- a/RTCP/IONProc/src/StreamMultiplexer.cc
+++ b/RTCP/IONProc/src/StreamMultiplexer.cc
@@ -23,6 +23,7 @@
 #include <lofar_config.h>
 
 #include <StreamMultiplexer.h>
+#include <Scheduling.h>
 #include <Common/Thread/Cancellation.h>
 #include <Common/LofarLogger.h>
 
@@ -113,6 +114,10 @@ void StreamMultiplexer::registerChannel(MultiplexedStream *stream, unsigned chan
 
 void StreamMultiplexer::receiveThread()
 {
+#if defined HAVE_BGP_ION
+  doNotRunOnCore0();
+#endif
+
   while (1) {
     RequestMsg msg;
 
-- 
GitLab