IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Aug 13, 2005, 10:30:13 AM (21 years ago)
Author:
eugene
Message:

working on speed issues

Location:
trunk/Ohana/src/opihi/pantasks
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/opihi/pantasks/CheckController.c

    r4714 r4762  
    33int CheckController () {
    44
     5  float dtime;
     6  struct timeval start, stop;
    57  char *p, *q;
    68  int i, Njobs, status, JobID;
    79  Job *job;
    810  IOBuffer buffer;
     11
     12  gettimeofday (&start, (void *) NULL);
    913
    1014  /* get the list of completed jobs (exit / crash), update the job status */
     
    3236  }
    3337
     38  gettimeofday (&stop, (void *) NULL);
     39  dtime = DTIME (stop, start);
     40  if (VerboseMode()) fprintf (stderr, "check stack %f\n", dtime);
     41  gettimeofday (&start, (void *) NULL);
     42
    3443  p = buffer.buffer;
    35   for (i = 0; i < Njobs; i++) {
     44  for (i = 0; (i < Njobs) && !TestElapsedCheck(); i++) {
    3645    q = strchr (p, '\n');
    3746    if (q == NULL) {
     
    5059    CheckControllerJob (job);
    5160  }
    52  
     61  gettimeofday (&stop, (void *) NULL);
     62  dtime = DTIME (stop, start);
     63  if (VerboseMode()) fprintf (stderr, "check %d jobs %f\n", i, dtime);
     64
     65  if (TestElapsedCheck()) return (TRUE);
     66
    5367  /*** check CRASH jobs ***/
    5468  FlushIOBuffer (&buffer);
     
    7286
    7387  p = buffer.buffer;
    74   for (i = 0; i < Njobs; i++) {
     88  for (i = 0; (i < Njobs) && !TestElapsedCheck(); i++) {
    7589    q = strchr (p, '\n');
    7690    if (q == NULL) {
  • trunk/Ohana/src/opihi/pantasks/CheckJobs.c

    r4705 r4762  
    8383    /* reset polling clock */
    8484    SetTaskTimer (&job[0].last);
     85    if (TestElapsedCheck()) return (TRUE);
    8586  }
    8687  return (TRUE);
  • trunk/Ohana/src/opihi/pantasks/CheckSystem.c

    r4714 r4762  
    11# include "psched.h"
     2
     3# define MAX_DELAY 0.1
     4struct timeval start;
     5static int Ncheck = 0;
    26
    37int CheckSystem () {
    48
    5   /* need to make a timeout: if this process lasts too long,
    6      we should return so the user can get input in.  this cannot
    7      just be a return, because we need to hit each of the elements
    8      eventually
    9   */
    10   struct timeval start, stop;
    11   double dtime;
    12  
    139  gettimeofday (&start, (void *) NULL);
    14   CheckTasks ();
     10
     11  if (Ncheck < 5) {
     12    CheckTasks ();
     13    CheckJobs ();
     14    Ncheck ++;
     15  } else {
     16    CheckController ();
     17    CheckControllerOutput ();
     18    Ncheck = 0;
     19  }
     20  return (TRUE);
     21}
     22
     23int TestElapsedCheck () {
     24
     25  struct timeval stop;
     26  float dtime;
     27
    1528  gettimeofday (&stop, (void *) NULL);
    1629  dtime = DTIME (stop, start);
    17   if (VerboseMode()) fprintf (stderr, "check 1: %f seconds\n", dtime);
     30  if (dtime > MAX_DELAY) return (TRUE);
     31  return (FALSE);
     32}
    1833
    19   gettimeofday (&start, (void *) NULL);
    20   CheckJobs ();
    21   gettimeofday (&stop, (void *) NULL);
    22   dtime = DTIME (stop, start);
    23   if (VerboseMode()) fprintf (stderr, "check 2: %f seconds\n", dtime);
    24 
    25   gettimeofday (&start, (void *) NULL);
    26   CheckController ();
    27   gettimeofday (&stop, (void *) NULL);
    28   dtime = DTIME (stop, start);
    29   if (VerboseMode()) fprintf (stderr, "check 3: %f seconds\n", dtime);
    30 
    31   gettimeofday (&start, (void *) NULL);
    32   CheckControllerOutput ();
    33   gettimeofday (&stop, (void *) NULL);
    34   dtime = DTIME (stop, start);
    35   if (VerboseMode()) fprintf (stderr, "check 4: %f seconds\n", dtime);
    36 
    37   return (TRUE);
    38 }
     34  /* do we really need to check the controller on every call?
     35     or perhaps alternate?
     36  */
  • trunk/Ohana/src/opihi/pantasks/CheckTasks.c

    r4697 r4762  
    3333    gettimeofday (&task[0].last, (void *) NULL);
    3434    task[0].Njobs ++;
     35
     36    if (TestElapsedCheck()) return (TRUE);
    3537  }
    3638  return (TRUE);
  • trunk/Ohana/src/opihi/pantasks/ControllerOps.c

    r4714 r4762  
    11# include "psched.h"
    22/* adding a new host can delay controller up to a second or so */
    3 # define CONTROLLER_TIMEOUT 200
     3# define CONTROLLER_TIMEOUT 500
    44# define CONNECT_TIMEOUT 300
    55
     
    1818/* check job / get output if done */
    1919int CheckControllerJob (Job *job) {
    20 
     20  struct timeval start, stop;
     21  float dtime;
     22
     23  gettimeofday (&start, (void *) NULL);
    2124  CheckControllerJobStatus (job);
     25  gettimeofday (&stop, (void *) NULL);
     26  dtime = DTIME (stop, start);
     27  if (VerboseMode()) fprintf (stderr, "check job status %f\n", dtime);
    2228
    2329  if ((job[0].state == JOB_EXIT) || (job[0].state == JOB_CRASH)) {
     30    gettimeofday (&start, (void *) NULL);
    2431    GetJobOutput ("stdout", job[0].pid, &job[0].stdout, job[0].stdout_size);
     32    gettimeofday (&stop, (void *) NULL);
     33    dtime = DTIME (stop, start);
     34    if (VerboseMode()) fprintf (stderr, "get stdout %f\n", dtime);
     35
    2536    GetJobOutput ("stderr", job[0].pid, &job[0].stderr, job[0].stderr_size);
    2637    DeleteControllerJob (job);
     
    97108  int i, status, Nstart;
    98109  char *line;
     110  struct timespec request, remain;
     111
     112  /* avoid blocking on waitpid, test every 100 usec, up to 50 msec */
     113  request.tv_sec = 0;
     114  request.tv_nsec = 100000;
    99115
    100116  /* flush any earlier messages */
     
    117133      line = memstr (buffer[0].buffer, CONTROLLER_PROMPT, buffer[0].Nbuffer);
    118134    }
    119     if (status == -1) usleep (10000);
     135    if (status == -1) nanosleep (&request, &remain);
    120136  }
    121137  if (status ==  0) return (CONTROLLER_DOWN);
     
    256272
    257273  /* try to get evidence connection is alive - wait upto a few seconds */
     274  /* connection is likely slow; don't bother with nanosleep here */
    258275  p = NULL;
    259276  status = -1;
     
    300317int ControllerCommand (char *cmd, char *response, IOBuffer *buffer) {
    301318
    302   int i;
    303   int status;
     319  int i, status;
    304320  char *line;
     321  struct timespec request, remain;
     322
     323  /* avoid blocking on waitpid, test every 100 usec, up to 50 msec */
     324  request.tv_sec = 0;
     325  request.tv_nsec = 100000;
    305326
    306327  ReadtoIOBuffer (buffer, stdout_cntl);
     
    323344    status = ReadtoIOBuffer (buffer, stdout_cntl);
    324345    line = memstr (buffer[0].buffer, response, buffer[0].Nbuffer);
    325     if (status == -1) usleep (10000);
     346    if (status == -1) nanosleep (&request, &remain);
    326347  }
    327348  if (status ==  0) {
     
    341362    bzero (buffer[0].buffer + buffer[0].Nbuffer, buffer[0].Nalloc - buffer[0].Nbuffer);
    342363  }
    343   if (VerboseMode()) fprintf (stderr, "message received\n");
     364  if (VerboseMode()) fprintf (stderr, "message received, %d cycles\n", i);
    344365  return (TRUE);
    345366}
  • trunk/Ohana/src/opihi/pantasks/controller_output.c

    r4693 r4762  
    88  }
    99
     10  CheckControllerOutput ();
    1011  PrintControllerOutput ();
    1112  return (TRUE);
Note: See TracChangeset for help on using the changeset viewer.