Changeset 11293


Ignore:
Timestamp:
07/08/11 15:35:12 (13 years ago)
Author:
tbretz
Message:
Updated statistics.
Location:
trunk/FACT++/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/FACT++/src/EventBuilder.c

    r11282 r11293  
    7171 int gp_runStat ;
    7272 int gw_runStat ;
     73
     74 int gi_memStat = +1 ;
     75
    7376 int32_t gi_myRun ;
    7477
     
    307310
    308311   if ( gj.usdMem + needmem + headmem > g_maxMem) {
    309         snprintf(str,MXSTR,"no memory left to keep event %d",evID) ;
    310         factOut(kError,882, str ) ;
     312        gj.maxMem = gj.usdMem + needmem + headmem ;
     313        if (gi_memStat>0 ) {
     314           gi_memStat = -99 ;
     315           snprintf(str,MXSTR,"no memory left to keep event %d",evID) ;
     316           factOut(kError,882, str ) ;
     317        }
    311318        return -11 ;
    312319   }
     
    353360   if (gj.usdMem > gj.maxMem ) gj.maxMem = gj.usdMem ;
    354361
     362   gj.rateNew++ ;
     363
    355364   //register event in 'active list (reading)'
    356365
     
    360369   evtIdx[i] = evtCtrl.lastPtr ;
    361370
    362    gj.readEvt++ ;           //#events read
    363    gj.evtBuf++ ;
    364 
    365371
    366372snprintf(str,MXSTR,"%5d start new evt  %8d %8d %2d",evID,i,evtCtrl.lastPtr,0);
     
    368374   evtCtrl.lastPtr++ ;
    369375   if (evtCtrl.lastPtr == MAX_EVT*MAX_RUN ) evtCtrl.lastPtr = 0;
    370 
    371376
    372377   gi.evtGet++ ;
     
    426431
    427432   gj.usdMem = gj.usdMem - freemem - headmem;
    428    gj.evtBuf-- ;
     433
     434   if (gi_memStat < 0 ) {
     435      if (gj.usdMem <= 0.75 * gj.maxMem ) gi_memStat = +1 ;
     436   }
     437
    429438
    430439   return 0 ;
     
    479488  int actBoards = 0, minLen ;
    480489  int32_t jrd ;
    481   int64_t stat[9] ;
    482490  int boardId, roi,drs,px,src,pixS,pixH,pixC,pixR,tmS ;
    483   uint qtot = 0, qread = 0, qconn = 0 ;
    484491
    485492  int goodhed = 0 ;
     
    524531
    525532  resetEvtStat();
    526   gj.usdMem = gj.maxMem = 0 ;
    527   gj.evtBuf = 0 ;
     533  gj.usdMem = gj.maxMem = gj.xxxMem = 0 ;
     534  gj.totMem = g_maxMem ;
     535  gj.bufNew = gj.bufEvt = 0 ;
     536  gj.evtSkip= gj.evtWrite = gj.evtErr = 0 ;
    528537
    529538  for (k=0; k<NBOARDS; k++) {
    530539     gi_NumConnect[k]=0;
    531540     gi.numConn[k]   =0;
     541     gj.numConn[k]   =0;
     542     gj.errConn[k]   =0;
     543     gj.rateBytes[k] =0;
     544     gj.totBytes[k]  =0;
    532545  }
    533546
     
    564577    gi_runStat = g_runStat;
    565578    gj.readStat= g_runStat;
    566     gj.totMem  = g_maxMem ;
    567579//  if (gi.totMem < 50000000 ) gi.totMem = 500000000 ;
    568580
     
    575587          gi_NumConnect[ b ] = 0 ;                  //must close all connections
    576588          gi.numConn[ b ] = 0;
     589          gj.numConn[ b ] = 0;
    577590          if (            sockDef[b] == 0) s0= 0 ;  //sockets to be defined and opened   
    578591          else if (g_port[b].sockDef == 0) s0=-1 ;  //sockets to be destroyed
     
    626639          gi_NumConnect[ b ]++ ;
    627640          gi.numConn[ b ]++ ;
     641          gj.numConn[ b ]++ ;
    628642          snprintf(str,MXSTR,"+++connect %d %d",b,gi.numConn[ b ]);
    629643          factOut(kInfo,-1, str ) ;
     
    637651
    638652          if (jrd >0 ) {
    639              qread+=jrd ;
    640653             debugStream(i,&rd[i].rBuf->B[ rd[i].bufPos],jrd) ;
    641654          }
     
    648661             gi_NumConnect[ b ]-- ;
    649662             gi.numConn[ b ]-- ;
     663             gj.numConn[ b ]-- ;
    650664
    651665          } else if ( jrd<0 ) {           //did not read anything
     
    660674
    661675        gi.gotByte[ b ] += jrd ;
     676        gj.rateBytes[b] += jrd ;
    662677
    663678        if ( rd[i].bufTyp <0 ) { // we are skipping this board ...
     
    690705             if (evID < 0) {
    691706                xwait.tv_sec = 0;
    692                 xwait.tv_nsec= 20000000 ;  // sleep for ~20 msec
     707                xwait.tv_nsec= 10000000 ;  // sleep for ~10 msec
    693708                nanosleep( &xwait , NULL ) ;
    694709                goto EndBuf1 ; //hope there is free space next round
     
    834849    gi.numRead[ numok ] ++ ;
    835850
    836     int qwait=0, qdel=0, qskip=0 ;
    837851    g_actTime = time(NULL) ;
    838852    if ( g_actTime > gi_SecTime ) {
     
    846860       if ( kd < 0 ) kd+= (MAX_EVT*MAX_RUN) ;
    847861
     862       gj.bufNew = gj.bufEvt = 0 ;
    848863       int k1=evtCtrl.frstPtr;
    849864       for ( k=k1; k<(k1+kd); k++ ) {
    850865          int k0 = k % (MAX_EVT*MAX_RUN) ;
    851866//would be better to use bitmaps for evtStat (allow '&' instead of multi-if)
     867
    852868          if (evtCtrl.evtStat[k0] > 0
    853869           && evtCtrl.evtStat[k0] < 90 ) {
    854 
    855            qwait++;
    856 
    857            if( evtCtrl.pcTime[k0] < g_actTime-10 ) {
    858              int id =evtCtrl.evtBuf[k0] ;
    859              snprintf(str,MXSTR,"%5d skip short evt %8d %8d %2d",mBuffer[id].evNum,evtCtrl.evtBuf[k0],k0 ,evtCtrl.evtStat[k0]);
    860              factOut(kWarn,601, str ) ;
    861              evtCtrl.evtStat[k0] = 91 ;      //timeout for incomplete events
    862              gi.evtSkp++ ;
    863              gi.evtTot++ ;   
    864              gj.skipEvt++;
    865              qskip++;
    866            }
    867 
    868 
     870             gj.bufNew++ ;   //incomplete event in Buffer
     871
     872             if ( evtCtrl.pcTime[k0] < g_actTime-10 ) {
     873                int id =evtCtrl.evtBuf[k0] ;
     874                snprintf(str,MXSTR,"%5d skip short evt %8d %8d %2d",mBuffer[id].evNum,evtCtrl.evtBuf[k0],k0 ,evtCtrl.evtStat[k0]);
     875                factOut(kWarn,601, str ) ;
     876                evtCtrl.evtStat[k0] = 91 ;      //timeout for incomplete events
     877                gi.evtSkp++ ;
     878                gi.evtTot++ ;   
     879                gj.evtSkip++;
     880             }
    869881          } else if (evtCtrl.evtStat[k0] >= 900 ) {
    870882
     
    874886              mBufFree(id) ;               //event written--> free memory
    875887              evtCtrl.evtStat[k0] = -1;
    876               qdel++;
    877               qtot++;
     888              gj.evtWrite++ ;
     889              gj.rateWrite++ ;
     890          } else if (evtCtrl.evtStat[k0] >= 900 ) {
     891             gj.bufEvt++ ;   //complete event in Buffer
    878892          }
    879893
     
    883897       }
    884898
    885 qconn=0 ;
    886 int ib ;
    887 for (ib=0; ib<NBOARDS; ib++) qconn+=gi_NumConnect[ib] ;
    888         stat[0]= qwait;
    889         stat[1]= qskip;
    890         stat[2]= qdel ;
    891         stat[3]= qtot ;
    892         stat[4]= gj.usdMem ;
    893         stat[5]= qread;
    894         stat[6]= qconn;
    895 
    896 qread=0 ;
     899
    897900       gj.deltaT = 1000 ;   //temporary, must be improved
     901
     902       int b;
     903       for ( b=0; b<NBOARDS; b++) gj.totBytes[k] +=gj.rateBytes[b] ;
     904       gj.totMem  = g_maxMem ;
     905       if (gj.maxMem >= gj.xxxMem) gj.xxxMem = gj.maxMem ;
    898906
    899907       factStat(gj);
    900908       factStatNew(gi) ;
    901909
    902        gj.readEvt = gj.procEvt = gj.writEvt = gj.skipEvt = 0 ;
     910       gj.rateNew = gj.rateWrite = 0 ;
     911       for ( b=0; b<NBOARDS; b++) gj.rateBytes[k] =0 ;
    903912    }
    904913
     
    948957       gi_NumConnect[ i/7 ]-- ;
    949958       gi.numConn[ i/7 ]-- ;
     959       gj.numConn[ i/7 ]-- ;
    950960    }
    951961 }
     
    10741084
    10751085           int i=eventCheck(mBuffer[id].FADhead,mBuffer[id].fEvent) ;
    1076            gj.procEvt++ ;
     1086//         gj.procEvt++ ;
    10771087           gi.procTot++ ;
    10781088           numProc++ ;
     
    12591269                 snprintf(str,MXSTR,"%5d successfully wrote for run %d id %5d",ievt,irun,k0);
    12601270                 factOut(kDebug,504, str ) ;
    1261                  gj.writEvt++ ;
     1271//               gj.writEvt++ ;
    12621272              } else {
    12631273                 snprintf(str,MXSTR,"W error writing event for run %d",irun) ;
     
    14071417   }
    14081418
    1409    gj.evtBuf  =
    1410    gj.readEvt =
    1411    gj.procEvt =
    1412    gj.writEvt =
    1413    gj.skipEvt = 0 ;
    14141419
    14151420//start all threads (more to come) when we are allowed to ....
  • trunk/FACT++/src/FAD.h

    r11273 r11293  
    7979uint16_t roi;
    8080uint16_t filling;
    81 uint16_t adc_data[];
     81 int16_t adc_data[];
    8282} __attribute__((__packed__)) PCHANNEL;
    8383
     
    287287   int32_t  writStat ;          //write thread
    288288
    289   //info about some rates
     289  //info about (current state of) the buffer
     290   int32_t  bufNew ;            //# incomplete events in buffer
     291   int32_t  bufEvt ;            //# complete events in buffer
     292   uint64_t totMem;             //# Bytes available in Buffer
     293   uint64_t usdMem;             //# Bytes currently used
     294   uint64_t xxxMem;             //max # Bytes ever used  **
     295   uint64_t maxMem;             //max # Bytes used during past cycle
     296
     297  //counters
     298   int32_t  evtSkip ;           //# incomplete Events skipped (timeout)
     299   int32_t  evtWrite ;          //# Events written (or flushed if noWrite)
     300   int32_t  evtErr ;            //# Events with errors
     301
     302  //rates
    290303   int32_t  deltaT ;            //time in milli-seconds for rates
    291    int32_t  readEvt ;           //#events read
    292    int32_t  procEvt ;           //#events processed
    293    int32_t  writEvt ;           //#events written
    294    int32_t  skipEvt ;           //#events skipped
    295 
    296   //some info about current state of event buffer (snapspot)
    297     int32_t evtBuf;             //#Events currently waiting in Buffer
    298    uint64_t totMem;             //#Bytes available in Buffer
    299    uint64_t usdMem;             //#Bytes currently used
    300    uint64_t maxMem;             //max #Bytes used during past Second
     304   int32_t  rateNew ;           //#New start events recieved
     305   int32_t  rateWrite ;         //#Complete events written (or flushed)
     306
     307  //connections
     308   int8_t   numConn[NBOARDS] ;  //#connections per board (at the moment)
     309   int32_t  errConn[NBOARDS] ;  //#I/O errors per board (counter)
     310   int32_t  rateBytes[NBOARDS]; //#Bytes read this cycle  **
     311   int64_t  totBytes[NBOARDS];  //#Bytes read (counter)
     312
     313
     314  // ** // if counter and rates exist, do only update the rates in
     315  // ** // real time;
     316  // ** // counters will be updated only once per cycle based on rates
    301317
    302318}  __attribute__((__packed__)) GUI_STAT ;         //EventBuilder Status
Note: See TracChangeset for help on using the changeset viewer.