]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
-S option for shared mem name extention is added. Allows many users to run EBs on...
authorhadaq <hadaq>
Tue, 3 Jun 2008 16:31:26 +0000 (16:31 +0000)
committerhadaq <hadaq>
Tue, 3 Jun 2008 16:31:26 +0000 (16:31 +0000)
hadaq/evtbuild.c
hadaq/netmem.c

index 140b3b976f83da54608b92d18865984830c6b16f..eb38ee8527d27d3e0a14c0bfd0612a5781b8fed3 100644 (file)
@@ -1,5 +1,5 @@
 static char *rcsId =
-  "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/evtbuild.c,v 6.85 2008-06-03 14:26:53 hadaq Exp $";
+  "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/evtbuild.c,v 6.86 2008-06-03 16:31:26 hadaq Exp $";
 
 
 #define _POSIX_C_SOURCE 199309L
@@ -104,6 +104,8 @@ typedef struct TheArgsS
   char lustrePath[PARAM_MAX_VALUE_LEN];
   unsigned short buffStat;
   unsigned short epicsCtrl;
+
+  char shmname[PARAM_MAX_VALUE_LEN];
 } TheArgs;
 
 typedef struct TheStatsS
@@ -180,11 +182,12 @@ static void usage (const char *progName)
   syslog (LOG_ERR, "Usage: [-m nrOfMsgs] [-f slowCtrlFile ...]");
   syslog (LOG_ERR, "Usage: [-o outPath] [-d null|tape|file|stdout]");
   syslog (LOG_ERR, "Usage: [-q queueSize] [-r runNumber]");
+  syslog (LOG_ERR, "Usage: [--shmname shmem_name] extention of shared memory name to be opened");
   syslog (LOG_ERR, "Usage: [-a (agent)] [-p priority] [-I evtId]");
   syslog (LOG_ERR, "Usage: [-v debug|info|notice|warning|err|alert|crit|emerg]");
   syslog (LOG_ERR, "Usage: [--norpc]");
   syslog (LOG_ERR, "Usage: [--filesize maximum_size_of_output_file[in MB]]");
-  syslog (LOG_ERR, "Usage: [--resdownscale resdownscale_factor] downscale factor for the res events");
+  syslog (LOG_ERR, "Usage: [--resdownscale downscale_factor] downscale factor for the res events");
   syslog (LOG_ERR, "Usage: [--resnumevents evt_num] maximum number of events in a resfile");
   syslog (LOG_ERR, "Usage: [--respath path] path for the res directory");
   syslog (LOG_ERR, "Usage: [--secsizelimit max_size] maximum size of second directory with the mirrored data [in MB]");
@@ -216,6 +219,9 @@ static void argsDump (TheArgs * my)
   syslog (LOG_DEBUG, "verbosity: %s", my->verbosity);
   syslog (LOG_DEBUG, "evtId: %ld", my->evtId);
   syslog (LOG_DEBUG, "maxFileSz: %ld", my->maxFileSz);
+  if( strcmp( my->shmname, "" ) != 0 ) {
+      syslog (LOG_DEBUG, "shmem name: %s", my->shmname);
+  }
   if (my->resdownscale != 0) {
       syslog (LOG_DEBUG, "resdownscale: %ld", my->resdownscale);
       syslog (LOG_DEBUG, "resnumevents: %ld", my->resnumevents);
@@ -250,6 +256,7 @@ static void argsDefault (TheArgs * my)
   strcpy (my->outPath, "");
   strcpy (my->outDev, "null");
   strcpy (my->expId, "xx");
+  strcpy (my->shmname, "");
   my->priority = 0;
   my->isStandalone = 1;
   my->queueSize = 4 * 1024 * 1024UL;
@@ -298,10 +305,11 @@ static int argsFromCL (TheArgs * my, int argc, char *argv[])
        {"buffstat",     0, 0, 'b'},
        {"epicsctrl",    0, 0, 'E'},
        {"lustre",       1, 0, 'L'},
+       {"shmname",      1, 0, 'S'},
        {0, 0, 0, 0}
       };
       i = getopt_long (argc, argv,
-                    "am:f:r:o:d:q:p:v:x:I:tz:e:n:h:w:tz:e:n:Hs:l:R:bEL:",
+                    "am:f:r:o:d:q:p:v:x:I:tz:e:n:h:w:tz:e:n:Hs:l:R:bEL:S:",
                     long_options, &option_index);
       if (i == -1)
        break;
@@ -365,10 +373,13 @@ static int argsFromCL (TheArgs * my, int argc, char *argv[])
          strcpy (my->sec_path, optarg);
          break;
        case 'R':
-         strcpy (my->rfioRemotePath, optarg);
+         strcpy( my->rfioRemotePath, optarg );
          break;
        case 'L':
-         strcpy (my->lustrePath, optarg);
+         strcpy( my->lustrePath, optarg );
+         break;
+       case 'S':
+         strcpy( my->shmname, optarg );
          break;
        case 'b':
          my->buffStat = 1;
@@ -575,8 +586,8 @@ static void add2Stat( TheArgs * theArgs, TheStats * my, float interval, ShmTrans
   t_0 = t;
 }
 
-static void statsBufferDump (TheArgs * theArgs, TheStats * my, float interval, 
-                            HadTuQueue **htuq, ShmTrans **shmtr)
+static void statsBufferDump (TheArgs *theArgs, TheStats *my, float interval, 
+                            HadTuQueue **htuq, ShmTrans **shmtr, char *progName)
 {
   static unsigned long lastEC2;
   static unsigned long lastBW2;
@@ -706,7 +717,9 @@ static void statsBufferDump (TheArgs * theArgs, TheStats * my, float interval,
        printTime();
 
        unsigned long runId2print;
-       Worker_getStatistic( "daq_evtbuild", "runId", &runId2print);
+       char buf[_POSIX_PATH_MAX];
+       sprintf( buf, "%s%s", progName, theArgs->shmname );
+       Worker_getStatistic( buf, "runId", &runId2print);
        printf("ioc: RUN Id = %lu\n", runId2print);
       }
     }
@@ -1582,12 +1595,18 @@ int main (int argc, char *argv[])
   theArgs->expId[1] = tolower (theArgs->expId[1]);
   theArgs->expId[2] = '\0';
 
-  if (NULL == (worker = Worker_initBegin (argv[0], sigHandler, theArgs->priority,
-                        theArgs->isStandalone))) {
+  /*   Create a name for a worker's shared memory segment
+   *   which consists of a program name and a base name provided by user 
+   */
+  char buf[_POSIX_PATH_MAX];
+  sprintf( buf, "%s%s", argv[0], theArgs->shmname );
+
+  if (NULL == (worker = Worker_initBegin (buf, sigHandler, theArgs->priority, 
+                                         theArgs->isStandalone))) {
       syslog (LOG_ERR, "%s, %d: %s", __FILE__, __LINE__, strerror (errno));
       exit (EXIT_FAILURE);
   }
-
+      
   if (theArgs->no_rpc) 
       syslog (LOG_WARNING, "DISABLE of online service");
   else 
@@ -1605,7 +1624,9 @@ int main (int argc, char *argv[])
       shmTrans = malloc (sizeof (ShmTrans *));
       hadTuQueue = malloc (sizeof (HadTuQueue *));
 
-      shmTrans[0] = ShmTrans_create ("subevtqueue", 2 * theArgs->queueSize);
+      sprintf( buf, "subevtqueue%s", theArgs->shmname );
+      shmTrans[0] = ShmTrans_create( buf, 2 * theArgs->queueSize );
+
       hadTuQueue[0] = NULL;
       theArgs->nrOfMsgs = 1;
   }
@@ -1616,7 +1637,8 @@ int main (int argc, char *argv[])
       for (i = 0; i < theArgs->nrOfMsgs; i++) {
          char buf[_POSIX_PATH_MAX];
 
-         sprintf (buf, "netqueue%d", i);
+         /* use shared mem name from CL if given */
+         sprintf (buf, "netqueue%s%d", theArgs->shmname, i);
 
          if( theArgs->queueSize > 0 ) {
            /* The queueSize is given in CL.  */
@@ -1690,7 +1712,7 @@ int main (int argc, char *argv[])
       int tagError = 0;
 
       add2Stat( theArgs, theStats, 1, shmTrans );
-      statsBufferDump( theArgs, theStats, 1, hadTuQueue, shmTrans );
+      statsBufferDump( theArgs, theStats, 1, hadTuQueue, shmTrans, argv[0] );
       statsDump (theArgs, theStats, 1);
 
       if (*theStats->bytesWritten == 0)
index 715c29e183a6e3a778dc090583fb2733da3f40a9..46dbd429cb00b712dddeb8d017d0e6972dbf54b9 100644 (file)
@@ -1,4 +1,4 @@
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/netmem.c,v 6.32 2008-05-28 14:57:04 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/netmem.c,v 6.33 2008-06-03 16:31:56 hadaq Exp $";
 
 
 #define _POSIX_C_SOURCE 199309L
@@ -29,17 +29,18 @@ typedef struct TheArgsS {
        unsigned long isStandalone;
        unsigned long priority;
        unsigned long queueSize;
-        long varQSize[MAXINPATH];
+        unsigned long varQSize[MAXINPATH];
         int varQSizeCnt;
        char verbosity[PARAM_MAX_VALUE_LEN];
-        unsigned int buffStat;           
+        unsigned int buffStat;        
+        char shmname[PARAM_MAX_VALUE_LEN];
 } TheArgs;
 
 typedef struct TheStatsS
 {
   unsigned long *netmemBuff[MAXINPATH];
   unsigned long *nrOfMsgs;
-  unsigned long *recvBytesPS[MAXINPATH];
+  unsigned long *recvBytesRate[MAXINPATH];
 } TheStats;
 
 static jmp_buf terminateJmp;
@@ -52,7 +53,8 @@ void sigHandler(int sig)
 static void usage(const char *progName)
 {
        syslog(LOG_ERR, "Usage: %s -i inPath [-i inPath] -m nrOfMsgs [-p priority]", progName);
-       syslog (LOG_ERR, "[-b] show fill levels of buffers]");
+       syslog( LOG_ERR, "[-b] show fill levels of buffers]" );
+       syslog( LOG_ERR, "[-S shmem_name] extention of a shared memory name to be used" );
 }
 
 static void argsDump(TheArgs *my)
@@ -67,6 +69,9 @@ static void argsDump(TheArgs *my)
        syslog(LOG_DEBUG, "isStandalone: %d", my->isStandalone);
        syslog(LOG_DEBUG, "queueSize: %d", my->queueSize);
        syslog(LOG_DEBUG, "verbosity: %s", my->verbosity);
+        if( strcmp( my->shmname, "" ) != 0 ) {
+                syslog (LOG_DEBUG, "shmem name: %s", my->shmname);
+       }
 }
 
 static void argsDefault(TheArgs *my)
@@ -87,6 +92,7 @@ static void argsDefault(TheArgs *my)
                my->varQSize[i] = 1 * 1024 * 1024;
        }
        my->buffStat = 0;
+        strcpy (my->shmname, "");
 }
 
 static int argsFromCL(TheArgs *my, int argc, char *argv[])
@@ -99,7 +105,7 @@ static int argsFromCL(TheArgs *my, int argc, char *argv[])
        inPathCntFromParam = my->inPathCnt;
        my->inPathCnt = 0;
 
-       while ((i = getopt(argc, argv, "ai:m:q:p:v:b")) != -1) {
+       while ((i = getopt(argc, argv, "ai:m:q:p:v:bS:")) != -1) {
                switch (i) {
                case 'm':
                        my->nrOfMsgs = atoi(optarg);
@@ -122,6 +128,9 @@ static int argsFromCL(TheArgs *my, int argc, char *argv[])
                case 'b':
                        my->buffStat = 1;
                        break;
+               case 'S':
+                       strcpy(my->shmname, optarg);
+                       break;
                default:
                        return -1;
                        break;
@@ -217,7 +226,7 @@ static void add2Stat( TheArgs * theArgs, TheStats * my, float interval, ShmTrans
       (*my->netmemBuff[i]) = fillLevel;
 
       /* Add more statistic for recv bytes per second */
-      (*my->recvBytesPS[i]) = *nettr[i]->bytesReceived - lastBytesRecv[i];
+      (*my->recvBytesRate[i]) = *nettr[i]->bytesReceived - lastBytesRecv[i];
       lastBytesRecv[i] = *nettr[i]->bytesReceived;
       
     }
@@ -438,7 +447,10 @@ int main(int argc, char *argv[])
        hadTu = malloc(theArgs->nrOfMsgs * sizeof(void *));
        hadTuSize = malloc(theArgs->nrOfMsgs * sizeof(size_t));
 
-       if (NULL == (worker = Worker_initBegin(argv[0], sigHandler, theArgs->priority, theArgs->isStandalone))) {
+       char buf[_POSIX_PATH_MAX];
+       sprintf( buf, "%s%s", argv[0], theArgs->shmname );
+
+       if (NULL == (worker = Worker_initBegin(buf, sigHandler, theArgs->priority, theArgs->isStandalone))) {
                syslog(LOG_ERR, "%s, %d: %s", __FILE__, __LINE__, strerror(errno));
                exit(EXIT_FAILURE);
        }
@@ -450,7 +462,9 @@ int main(int argc, char *argv[])
                        syslog(LOG_ERR, "%s, %d: %s", __FILE__, __LINE__, strerror(errno));
                        exit(EXIT_FAILURE);
                }
-               sprintf(buf, "netqueue%d", i);
+
+               /* use shared mem name from CL if given */
+               sprintf(buf, "netqueue%s%d", theArgs->shmname, i);
 
                if( theArgs->queueSize > 0 ){
                  /* if the queueSize is given in CL */
@@ -495,8 +509,8 @@ int main(int argc, char *argv[])
          sprintf( buf, "netmemBuff%d", i );
          theStats->netmemBuff[i] = Worker_addStatistic( worker, buf );
 
-         sprintf( buf, "bytesReceivedPS%d", i );
-         theStats->recvBytesPS[i] = Worker_addStatistic( worker, buf );
+         sprintf( buf, "bytesReceivedRate%d", i );
+         theStats->recvBytesRate[i] = Worker_addStatistic( worker, buf );
        }
 
        theStats->nrOfMsgs = Worker_addStatistic( worker, "nrOfMsgs" );