Browse Source

HPCC-9254 Dynamic timeActivities for Roxie - to reduce get_cycles_now() overhead

Signed-off-by: Mark Kelly <mark.kelly@lexisnexis.com>
Mark Kelly 11 years ago
parent
commit
d0362028c2
6 changed files with 143 additions and 123 deletions
  1. 3 1
      roxie/ccd/ccd.hpp
  2. 17 4
      roxie/ccd/ccdcontext.cpp
  3. 2 1
      roxie/ccd/ccdcontext.hpp
  4. 2 2
      roxie/ccd/ccdmain.cpp
  5. 117 113
      roxie/ccd/ccdserver.cpp
  6. 2 2
      roxie/ccd/ccdstate.cpp

+ 3 - 1
roxie/ccd/ccd.hpp

@@ -373,7 +373,7 @@ extern unsigned preabortKeyedJoinsThreshold;
 extern unsigned preabortIndexReadsThreshold;
 extern bool traceStartStop;
 extern bool traceServerSideCache;
-extern bool timeActivities;
+extern bool defaultTimeActivities;
 extern unsigned watchActivityId;
 extern unsigned testSlaveFailure;
 extern unsigned dafilesrvLookupTimeout;
@@ -999,6 +999,7 @@ class SlaveContextLogger : public StringContextLogger
     bool traceActivityTimes;
     bool debuggerActive;
     bool checkingHeap;
+    bool timeActivities;
     IpAddress ip;
     StringAttr wuid;
 public:
@@ -1009,6 +1010,7 @@ public:
     inline bool queryTraceActivityTimes() const { return traceActivityTimes; }
     inline bool queryDebuggerActive() const { return debuggerActive; }
     inline bool queryCheckingHeap() const { return checkingHeap; }
+    inline bool queryTimeActivities() const { return timeActivities; }
     inline void setDebuggerActive(bool _active) { debuggerActive = _active; }
     inline const StatsCollector &queryStats() const 
     {

+ 17 - 4
roxie/ccd/ccdcontext.cpp

@@ -992,6 +992,7 @@ protected:
     unsigned ctxPrefetchProjectPreload;
     bool traceActivityTimes;
     bool checkingHeap;
+    bool timeActivities;
 
     Owned<IConstWorkUnit> workUnit;
     Owned<IRoxieDaliHelper> daliHelperLink;
@@ -1057,7 +1058,7 @@ protected:
 
 public:
     IMPLEMENT_IINTERFACE;
-    CSlaveContext(const IQueryFactory *_factory, const ContextLogger &_logctx, unsigned _timeLimit, memsize_t _memoryLimit, IRoxieQueryPacket *_packet, bool _traceActivityTimes, bool _debuggerActive, bool _checkingHeap)
+    CSlaveContext(const IQueryFactory *_factory, const ContextLogger &_logctx, unsigned _timeLimit, memsize_t _memoryLimit, IRoxieQueryPacket *_packet, bool _traceActivityTimes, bool _debuggerActive, bool _checkingHeap, bool _timeActivities=defaultTimeActivities)
         : factory(_factory), logctx(_logctx)
     {
         if (_packet)
@@ -1087,6 +1088,7 @@ public:
             probeManager.setown(createDebugManager(debugContext, "slaveDebugger"));
         }
         checkingHeap = _checkingHeap;
+        timeActivities = _timeActivities;
 
         aborted = false;
         exceptionLogged = false;
@@ -1228,7 +1230,7 @@ public:
         }
     }
 
-    virtual bool queryTimeActivities() const
+    virtual bool queryTraceActivityTimes() const
     {
         return traceActivityTimes;
     }
@@ -1238,6 +1240,11 @@ public:
         return checkingHeap;
     }
 
+    virtual bool queryTimeActivities() const
+    {
+        return timeActivities;
+    }
+
     virtual void checkAbort()
     {
         // MORE - really should try to apply limits at slave end too
@@ -2341,7 +2348,7 @@ protected:
 
 IRoxieSlaveContext *createSlaveContext(const IQueryFactory *_factory, const SlaveContextLogger &_logctx, unsigned _timeLimit, memsize_t _memoryLimit, IRoxieQueryPacket *packet)
 {
-    return new CSlaveContext(_factory, _logctx, _timeLimit, _memoryLimit, packet, _logctx.queryTraceActivityTimes(), _logctx.queryDebuggerActive(), _logctx.queryCheckingHeap());
+    return new CSlaveContext(_factory, _logctx, _timeLimit, _memoryLimit, packet, _logctx.queryTraceActivityTimes(), _logctx.queryDebuggerActive(), _logctx.queryCheckingHeap(), _logctx.queryTimeActivities());
 }
 
 class CRoxieServerDebugContext : extends CBaseServerDebugContext
@@ -2697,8 +2704,14 @@ public:
         ctxFetchPreload = context->getPropInt("_FetchPreload", defaultFetchPreload);
         ctxPrefetchProjectPreload = context->getPropInt("_PrefetchProjectPreload", defaultPrefetchProjectPreload);
 
-        traceActivityTimes = context->getPropBool("_TraceActivityTimes", false) || context->getPropBool("@timing", false);
         checkingHeap = context->getPropBool("_CheckingHeap", defaultCheckingHeap) || context->getPropBool("@checkingHeap", defaultCheckingHeap);
+
+        traceActivityTimes = context->getPropBool("_TraceActivityTimes", false) || context->getPropBool("@timing", false);
+
+        timeActivities = context->getPropBool("@timeActivities", defaultTimeActivities);
+
+        if (traceActivityTimes && !timeActivities)
+            timeActivities = true;
     }
 
     virtual roxiemem::IRowManager &queryRowManager()

+ 2 - 1
roxie/ccd/ccdcontext.hpp

@@ -64,8 +64,9 @@ interface IRoxieSlaveContext : extends IRoxieContextLogger
     virtual IActivityGraph * getLibraryGraph(const LibraryCallFactoryExtra &extra, IRoxieServerActivity *parentActivity) = 0;
     virtual void noteProcessed(const IRoxieContextLogger &_activityContext, const IRoxieServerActivity *activity, unsigned _idx, unsigned _processed, unsigned __int64 _totalCycles, unsigned __int64 _localCycles) const = 0;
     virtual IProbeManager *queryProbeManager() const = 0;
-    virtual bool queryTimeActivities() const = 0;
+    virtual bool queryTraceActivityTimes() const = 0;
     virtual bool queryCheckingHeap() const = 0;
+    virtual bool queryTimeActivities() const = 0;
     virtual IDebuggableContext *queryDebugContext() const = 0;
     virtual void printResults(IXmlWriter *output, const char *name, unsigned sequence) = 0;
     virtual void setWUState(WUState state) = 0;

+ 2 - 2
roxie/ccd/ccdmain.cpp

@@ -71,7 +71,7 @@ unsigned maxLockAttempts = 5;
 bool pretendAllOpt = false;
 bool traceStartStop = false;
 bool traceServerSideCache = false;
-bool timeActivities = true;
+bool defaultTimeActivities = true;
 unsigned watchActivityId = 0;
 unsigned testSlaveFailure = 0;
 unsigned restarts = 0;
@@ -735,7 +735,7 @@ int STARTQUERY_API start_query(int argc, const char *argv[])
 
         traceStartStop = topology->getPropBool("@traceStartStop", false);
         traceServerSideCache = topology->getPropBool("@traceServerSideCache", false);
-        timeActivities = topology->getPropBool("@timeActivities", true);
+        defaultTimeActivities = topology->getPropBool("@timeActivities", true);
         clientCert.certificate.set(topology->queryProp("@certificateFileName"));
         clientCert.privateKey.set(topology->queryProp("@privateKeyFileName"));
         clientCert.passphrase.set(topology->queryProp("@passphrase"));

File diff suppressed because it is too large
+ 117 - 113
roxie/ccd/ccdserver.cpp


+ 2 - 2
roxie/ccd/ccdstate.cpp

@@ -2316,8 +2316,8 @@ private:
             }
             else if (stricmp(queryName, "control:timeActivities")==0)
             {
-                timeActivities = control->getPropBool("@val", true);
-                topology->setPropInt("@timeActivities", timeActivities);
+                defaultTimeActivities = control->getPropBool("@val", true);
+                topology->setPropInt("@timeActivities", defaultTimeActivities);
             }
             else if (stricmp(queryName, "control:timings")==0)
             {