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