Adding a command line option that allows trace logs to be created in multiple subdire...
authorIsaac Dooley <idooley@isaacdooley.com>
Fri, 23 Apr 2010 05:13:00 +0000 (01:13 -0400)
committerIsaac Dooley <idooley@isaacdooley.com>
Fri, 23 Apr 2010 05:13:00 +0000 (01:13 -0400)
src/ck-perf/trace-common.C
src/ck-perf/trace-common.h
src/ck-perf/trace-projections.C
src/ck-perf/trace-projections.h

index f80c550a24eb059a16cb2cabda6dfc715b87de04..a6dd0dcc8a0a2cc1389c217dc20280a678ab3ee6 100644 (file)
 */
 /*@{*/
 
-#include <stdlib.h>
-#if defined(_WIN32) && !defined(__CYGWIN__)
-#include <direct.h>
-#define CHDIR _chdir
-#define GETCWD _getcwd
-#define PATHSEP '\\'
-#define PATHSEPSTR "\\"
-#else
-#include <unistd.h>
-#define CHDIR chdir
-#define GETCWD getcwd
-#define PATHSEP '/'
-#define PATHSEPSTR "/"
-#endif
-
 // cannot include charm++.h because trace-common.o is part of libconv-core.a
 #include "charm.h"
 #include "middle.h"
index 884ca11a6b4e08a2a277cf16013bceb148ccc03d..275c63e30d5bec7d366875f4e819572dfb709ba7 100644 (file)
 #ifndef __TRACE_COMMON_H__
 #define __TRACE_COMMON_H__
 
+
+#include <stdlib.h>
+#if defined(_WIN32) && !defined(__CYGWIN__)
+#include <direct.h>
+#define CHDIR _chdir
+#define GETCWD _getcwd
+#define PATHSEP '\\'
+#define PATHSEPSTR "\\"
+#else
+#include <unistd.h>
+#define CHDIR chdir
+#define GETCWD getcwd
+#define PATHSEP '/'
+#define PATHSEPSTR "/"
+#endif
+
+
 #define  CREATION           1
 #define  BEGIN_PROCESSING   2
 #define  END_PROCESSING     3
index eda872b38fc031a6e9ffbc1fe245068d468dc283..f786ab1d1aba412d3ec317caba193103dc6eb214 100644 (file)
@@ -292,17 +292,33 @@ void LogPool::createFile(const char *fix)
   if (fileCreated) {
     return;
   }
+
+  char* filenameLastPart = strrchr(pgmname, PATHSEP) + 1; // Last occurrence of path separator
+  char *pathPlusFilePrefix = new char[1024];
+
+  if(nSubdirs > 0){
+    int sd = CkMyPe() % nSubdirs;
+    char *subdir = new char[1024];
+    sprintf(subdir, "%s.projdir.%d", pgmname, sd);
+    CmiMkdir(subdir);
+    sprintf(pathPlusFilePrefix, "%s%c%s%s", subdir, PATHSEP, filenameLastPart, fix);
+    delete[] subdir;
+  } else {
+    sprintf(pathPlusFilePrefix, "%s%s", pgmname, fix);
+  }
+
   char pestr[10];
   sprintf(pestr, "%d", CkMyPe());
 #if CMK_PROJECTIONS_USE_ZLIB
   int len;
   if(compressed)
-    len = strlen(pgmname)+strlen(fix)+strlen(".logold")+strlen(pestr)+strlen(".gz")+3;
+    len = strlen(pathPlusFilePrefix)+strlen(".logold")+strlen(pestr)+strlen(".gz")+3;
   else
-    len = strlen(pgmname)+strlen(fix)+strlen(".logold")+strlen(pestr)+3;
+    len = strlen(pathPlusFilePrefix)+strlen(".logold")+strlen(pestr)+3;
 #else
-  int len = strlen(pgmname)+strlen(fix)+strlen(".logold")+strlen(pestr)+3;
+  int len = strlen(pathPlusFilePrefix)+strlen(".logold")+strlen(pestr)+3;
 #endif
+
   if (nonDeltaLog) {
     fname = new char[len];
   }
@@ -312,40 +328,41 @@ void LogPool::createFile(const char *fix)
 #if CMK_PROJECTIONS_USE_ZLIB
   if(compressed) {
     if (deltaLog && nonDeltaLog) {
-      sprintf(fname, "%s%s.%s.logold.gz", pgmname, fix, pestr);
-      sprintf(dfname, "%s%s.%s.log.gz", pgmname, fix, pestr);
+      sprintf(fname, "%s.%s.logold.gz",  pathPlusFilePrefix, pestr);
+      sprintf(dfname, "%s.%s.log.gz", pathPlusFilePrefix, pestr);
     } else {
       if (nonDeltaLog) {
-       sprintf(fname, "%s%s.%s.log.gz", pgmname, fix, pestr);
+       sprintf(fname, "%s.%s.log.gz", pathPlusFilePrefix,pestr);
       } else {
-       sprintf(dfname, "%s%s.%s.log.gz", pgmname, fix, pestr);
+       sprintf(dfname, "%s.%s.log.gz", pathPlusFilePrefix, pestr);
       }
     }
   } else {
     if (deltaLog && nonDeltaLog) {
-      sprintf(fname, "%s%s.%s.logold", pgmname, fix, pestr);
-      sprintf(dfname, "%s%s.%s.log", pgmname, fix, pestr);
+      sprintf(fname, "%s.%s.logold", pathPlusFilePrefix, pestr);
+      sprintf(dfname, "%s.%s.log", pathPlusFilePrefix, pestr);
     } else {
       if (nonDeltaLog) {
-       sprintf(fname, "%s%s.%s.log", pgmname, fix, pestr);
+       sprintf(fname, "%s.%s.log", pathPlusFilePrefix, pestr);
       } else {
-       sprintf(dfname, "%s%s.%s.log", pgmname, fix, pestr);
+       sprintf(dfname, "%s.%s.log", pathPlusFilePrefix, pestr);
       }
     }
   }
 #else
   if (deltaLog && nonDeltaLog) {
-    sprintf(fname, "%s%s.%s.logold", pgmname, fix, pestr);
-    sprintf(dfname, "%s%s.%s.log", pgmname, fix, pestr);
+    sprintf(fname, "%s.%s.logold", pathPlusFilePrefix, pestr);
+    sprintf(dfname, "%s.%s.log", pathPlusFilePrefix, pestr);
   } else {
     if (nonDeltaLog) {
-      sprintf(fname, "%s%s.%s.log", pgmname, fix, pestr);
+      sprintf(fname, "%s.%s.log", pathPlusFilePrefix, pestr);
     } else {
-      sprintf(dfname, "%s%s.%s.log", pgmname, fix, pestr);
+      sprintf(dfname, "%s.%s.log", pathPlusFilePrefix, pestr);
     }
   }
 #endif
   fileCreated = true;
+  delete[] pathPlusFilePrefix;
   openLog("w+");
   CLOSE_LOG 
 }
@@ -971,6 +988,11 @@ TraceProjections::TraceProjections(char **argv):
   int binary = 
     CmiGetArgFlagDesc(argv,"+binary-trace",
                      "Write log files in binary format");
+
+  CmiInt8 nSubdirs = 0;
+  CmiGetArgLongDesc(argv,"+trace-subdirs", &nSubdirs, "Number of subdirectories into which traces will be written");
+
+
 #if CMK_PROJECTIONS_USE_ZLIB
   int compressed = CmiGetArgFlagDesc(argv,"+gz-trace","Write log files pre-compressed with gzip");
 #else
@@ -993,6 +1015,7 @@ TraceProjections::TraceProjections(char **argv):
                                  "Generate Delta encoded and simple timestamped log files");
 
   _logPool = new LogPool(CkpvAccess(traceRoot));
+  _logPool->setNumSubdirs(nSubdirs);
   _logPool->setBinary(binary);
 #if CMK_PROJECTIONS_USE_ZLIB
   _logPool->setCompressed(compressed);
index 258643bff22a56261f49e8a344133a6f57300780..93ab8a0337d59c5c9a3854f2dc87582a111737a2 100644 (file)
@@ -263,6 +263,7 @@ class LogPool {
     char *dfname;
     char *pgmname;
     int binary;
+    int nSubdirs;
 #if CMK_PROJECTIONS_USE_ZLIB
     gzFile deltazfp;
     gzFile zfp;
@@ -287,6 +288,7 @@ class LogPool {
     LogPool(char *pgm);
     ~LogPool();
     void setBinary(int b) { binary = b; }
+    void setNumSubdirs(int n) { nSubdirs = n; }
 #if CMK_PROJECTIONS_USE_ZLIB
     void setCompressed(int c) { compressed = c; }
 #endif