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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/opihi/pcontrol/CheckSystem.c

    r4705 r4762  
    11# include "pcontrol.h"
    22
     3static Npass = 0;
     4
    35int CheckSystem () {
    46
    5   CheckBusyJobs();
    6   CheckDoneJobs();
    7   CheckDoneHosts();
    8   CheckIdleHosts();
    9   CheckDownHosts();
    10 
    11   /** add in different timescales for heartbeat? **/
    12   CheckLiveHosts();
    13 
    14   return (TRUE);
    15 }
    16 
    17 int CheckBusyJobs () {
    18 
     7  /* we want to give each block a maximum allowed time */
     8  CheckIdleHosts(0.020); /* submit a new job */
     9
     10  CheckBusyJobs(0.020);  /* get job status */
     11  CheckDoneJobs(0.020);  /* harvest job stdout/stderr */
     12
     13  CheckDoneHosts(0.020); /* reset the host */
     14  CheckDownHosts(0.100); /* launch the host */
     15
     16  /* most tests require about 2ms per host. 
     17     CheckDoneJobs must depend on the size of the output buffer */
     18
     19  /* this is a waste of cycles: no need to do this every loop */
     20  if (Npass > 20) {
     21    CheckLiveHosts(0.040);
     22    Npass = 0;
     23  } else {
     24    Npass ++;
     25  }
     26
     27  if (0) {
     28    Stack *stack;
     29    int Nidle, Ndown, Nbusy;
     30    stack = GetHostStack (PCONTROL_HOST_IDLE);
     31    Nidle = stack[0].Nobject;
     32    stack = GetHostStack (PCONTROL_HOST_DOWN);
     33    Ndown = stack[0].Nobject;
     34    stack = GetHostStack (PCONTROL_HOST_BUSY);
     35    Nbusy = stack[0].Nobject;
     36    fprintf (stderr, "busy, idle, down: %2d %2d %2d\n", Nbusy, Nidle, Ndown);
     37  }
     38
     39  return (TRUE);
     40}
     41
     42int CheckBusyJobs (float MaxDelay) {
     43
     44  struct timeval start, stop;
    1945  int i, Nobject;
    2046  Stack *stack;
    2147  Job   *job;
     48  float dtime;
    2249
    2350  stack = GetJobStack (PCONTROL_JOB_BUSY);
    2451  Nobject = stack[0].Nobject;
    2552
    26   for (i = 0; i < Nobject; i++) {
     53  /* always allow at least one test */
     54  gettimeofday (&start, (void *) NULL);
     55  dtime = 0.0;
     56  for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) {
    2757    job = GetStack (stack, STACK_TOP);
    2858    CheckBusyJob (job);
    29   }
    30   return (TRUE);
    31 }
    32 
    33 int CheckDoneJobs () {
    34 
     59    gettimeofday (&stop, (void *) NULL);
     60    dtime = DTIME (stop, start);
     61  }
     62  if (0 && (Nobject > 0)) fprintf (stderr, "checked %d of %d jobs\n", i, Nobject);
     63  return (TRUE);
     64}
     65
     66int CheckDoneJobs (float MaxDelay) {
     67
     68  struct timeval start, stop;
    3569  int i, Nobject;
    3670  Stack *stack;
    3771  Job   *job;
     72  float dtime;
    3873
    3974  stack = GetJobStack (PCONTROL_JOB_DONE);
    4075  Nobject = stack[0].Nobject;
    4176
    42   for (i = 0; i < Nobject; i++) {
     77  /* always allow at least one test */
     78  gettimeofday (&start, (void *) NULL);
     79  dtime = 0.0;
     80  for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) {
    4381    job = GetStack (stack, STACK_TOP);
    4482    CheckDoneJob (job);
    45   }
    46   return (TRUE);
    47 }
    48 
    49 int CheckDoneHosts () {
    50 
    51   int i, Nobject;
    52   Stack *stack;
    53   Host  *host;
     83    gettimeofday (&stop, (void *) NULL);
     84    dtime = DTIME (stop, start);
     85  }
     86  if (0 && (Nobject > 0)) fprintf (stderr, "checked %d of %d jobs\n", i, Nobject);
     87  return (TRUE);
     88}
     89
     90int CheckDoneHosts (float MaxDelay) {
     91
     92  struct timeval start, stop;
     93  int i, Nobject;
     94  Stack *stack;
     95  Host  *host;
     96  float dtime;
    5497
    5598  stack = GetHostStack (PCONTROL_HOST_DONE);
    5699  Nobject = stack[0].Nobject;
    57100
    58   for (i = 0; i < Nobject; i++) {
     101  /* always allow at least one test */
     102  gettimeofday (&start, (void *) NULL);
     103  dtime = 0.0;
     104  for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) {
    59105    host = GetStack (stack, STACK_TOP);
    60106    CheckDoneHost (host);
    61   }
    62   return (TRUE);
    63 }
    64 
    65 /* this is just a heartbeat check */
    66 int CheckLiveHosts () {
    67 
    68   int i, Nobject;
    69   Stack *stack;
    70   Host  *host;
    71 
    72   stack = GetHostStack (PCONTROL_HOST_IDLE);
    73   Nobject = stack[0].Nobject;
    74 
    75   for (i = 0; i < Nobject; i++) {
    76     host = GetStack (stack, STACK_TOP);
    77     CheckHost (host);
    78   }
    79 
    80   stack = GetHostStack (PCONTROL_HOST_BUSY);
    81   Nobject = stack[0].Nobject;
    82 
    83   for (i = 0; i < Nobject; i++) {
    84     host = GetStack (stack, STACK_TOP);
    85     CheckHost (host);
    86   }
    87   return (TRUE);
    88 }
    89 
    90 int CheckDownHosts () {
    91 
    92   int i, Nobject;
    93   Stack *stack;
    94   Host  *host;
    95   struct timeval now;
    96   float delta;
    97 
    98   gettimeofday (&now, (void *) NULL);
     107    gettimeofday (&stop, (void *) NULL);
     108    dtime = DTIME (stop, start);
     109  }
     110  if (0) fprintf (stderr, "checked %d hosts\n", i);
     111  return (TRUE);
     112}
     113
     114int CheckDownHosts (float MaxDelay) {
     115
     116  int i, Nobject;
     117  Stack *stack;
     118  Host  *host;
     119  struct timeval start, stop;
     120  float dtime;
    99121
    100122  stack = GetHostStack (PCONTROL_HOST_DOWN);
    101123  Nobject = stack[0].Nobject;
    102124
    103   for (i = 0; i < Nobject; i++) {
    104     host = GetStack (stack, STACK_TOP);
    105     delta = DTIME (host[0].nexttry, now);
    106     if (delta > 0) {
     125  /* always allow at least one test */
     126  gettimeofday (&start, (void *) NULL);
     127  dtime = 0.0;
     128  for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) {
     129    host = GetStack (stack, STACK_TOP);
     130    dtime = DTIME (host[0].nexttry, start);
     131    if (dtime > 0) {
    107132      PutHost (host, PCONTROL_HOST_DOWN, STACK_BOTTOM);
    108133    } else {
    109134      StartHost (host);
    110135    }
    111   }
    112   return (TRUE);
    113 }
    114 
    115 int CheckIdleHosts () {
    116 
    117   int i, Nobject;
    118   Stack *stack;
    119   Host  *host;
     136    gettimeofday (&stop, (void *) NULL);
     137    dtime = DTIME (stop, start);
     138  }
     139  if (0) fprintf (stderr, "checked %d hosts\n", i);
     140  return (TRUE);
     141}
     142
     143int CheckIdleHosts (float MaxDelay) {
     144
     145  struct timeval start, stop;
     146  int i, Nobject;
     147  Stack *stack;
     148  Host  *host;
     149  float dtime;
    120150
    121151  /* check if there are any pending jobs, otherwise skip step */
     
    126156  Nobject = stack[0].Nobject;
    127157
    128   for (i = 0; i < Nobject; i++) {
     158  /* always allow at least one test */
     159  gettimeofday (&start, (void *) NULL);
     160  dtime = 0.0;
     161  for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) {
    129162    host = GetStack (stack, STACK_TOP);
    130163    CheckIdleHost (host);
    131   }
    132   return (TRUE);
    133 }
     164    gettimeofday (&stop, (void *) NULL);
     165    dtime = DTIME (stop, start);
     166  }
     167  if (0) fprintf (stderr, "checked %d hosts\n", i);
     168  return (TRUE);
     169}
     170
     171/* this is just a heartbeat check */
     172int CheckLiveHosts (float MaxDelay) {
     173
     174  struct timeval start, stop;
     175  int i, Nobject;
     176  Stack *stack;
     177  Host  *host;
     178  float dtime;
     179
     180  stack = GetHostStack (PCONTROL_HOST_IDLE);
     181  Nobject = stack[0].Nobject;
     182
     183  gettimeofday (&start, (void *) NULL);
     184
     185  dtime = 0.0;
     186  for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) {
     187    host = GetStack (stack, STACK_TOP);
     188    CheckHost (host);
     189    gettimeofday (&stop, (void *) NULL);
     190    dtime = DTIME (stop, start);
     191  }
     192  if (0) fprintf (stderr, "checked %d idle hosts\n", i);
     193
     194  stack = GetHostStack (PCONTROL_HOST_BUSY);
     195  Nobject = stack[0].Nobject;
     196
     197  dtime = 0.0;
     198  for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) {
     199    host = GetStack (stack, STACK_TOP);
     200    CheckHost (host);
     201    gettimeofday (&stop, (void *) NULL);
     202    dtime = DTIME (stop, start);
     203  }
     204  if (0) fprintf (stderr, "checked %d busy hosts\n", i);
     205  return (TRUE);
     206}
     207
     208/*
     209
     210  gettimeofday (&stop, (void *) NULL);
     211  dtime = DTIME (stop, start);
     212  if (VerboseMode()) fprintf (stderr, "check 4: %f seconds\n", dtime);
     213
     214  gettimeofday (&start, (void *) NULL);
     215*/
     216
     217/** All of the CheckFooBar entries cycle though their respective queues, popping from the top and
     218    pushing to the bottom.  if we stop before the loop is done there is no tendancy for bias because
     219    we continue where we left off next round **/
Note: See TracChangeset for help on using the changeset viewer.