#include #include #include #define __MDPROC72 struct { char *Name; int JobCount; double PFrac; int Duration; } JobDesc[] = { { "A", 75, 0.03125, 267 }, /* A */ { "B", 9, 0.06250, 322 }, /* B */ { "C", 3, 0.50000, 534 }, /* C */ { "D", 3, 0.25000, 616 }, /* D */ { "E", 3, 0.50000, 315 }, /* E */ { "F", 9, 0.06250, 1846 }, /* F */ { "G", 6, 0.12500, 1334 }, /* G */ { "H", 6, 0.15820, 1067 }, /* H */ { "I", 24, 0.03125, 1432 }, /* I */ { "J", 24, 0.06250, 725 }, /* J */ { "K", 15, 0.09570, 487 }, /* K */ { "L", 36, 0.12500, 366 }, /* L */ { "M", 15, 0.25000, 187 }, /* M */ /* { "A", 2, 1.00000, 100 }, */ { 0, 0, 0 }}; /* NOTE: submit 'Z' jobs at +00:24:00 and +02:00:00 */ int main( int argc, char **argv) { int jindex; int index; int dindex; int JobCount; int JobList[1000]; int SubmitTime; int SysSize; time_t StartTime; time_t Now; SysSize = atoi(argv[1]); /* populate list of potential jobs */ jindex = 0; for (dindex = 0;JobDesc[dindex].JobCount > 0;dindex++) { for (index = 0;index < JobDesc[dindex].JobCount;index++) { JobList[jindex++] = dindex; } } /* END for (dindex) */ JobCount = jindex; jindex = 0; #if !defined(__LIVE) printf("# workload trace for %d processor ESP test\n", SysSize); #endif /* !__LIVE */ time(&StartTime); SubmitTime = 1; while (jindex < JobCount) { index = (int)((double)JobCount * rand() / (RAND_MAX + 1.0)); if (JobList[index] == -1) continue; #if !defined(__LIVE) /* NOTE: staggered job submission no longer required */ /* if (jindex > (JobCount * 2 / 3)) SubmitTime = 20 * 60; else if (jindex > (JobCount / 3)) SubmitTime = 10 * 60; else SubmitTime = 1; */ printf("job%s%03d 1 %d userA groupB %d Completed [batch:1] %d %d %d %d [NONE] [NONE] [NONE] >= 0 >= 0 [NONE] 1 1 0 0 0 accountC [NONE] [NONE] 0 0.0 DEFAULT 1 0 0 0 0 0 X 0 [NONE] [NONE] [NONE] [NONE] [NONE]\n", JobDesc[JobList[index]].Name, jindex, (int)(JobDesc[JobList[index]].PFrac * SysSize), JobDesc[JobList[index]].Duration, SubmitTime, SubmitTime, SubmitTime, SubmitTime + JobDesc[JobList[index]].Duration); #else time(&Now); if (((jindex >= (int)(JobCount * 2 / 3)) && ((Now - StartTime) < 1200)) || ((jindex >= (int)(JobCount * 1 / 3)) && ((Now - StartTime) < 600))) { sleep(1); continue; } /* NOTE: add submission queue info */ sprintf(SubmitCommand,"/usr/local/bin/qsub -l nodes=%d,walltime=%d %c", JobDesc[JobList[index]].ProcCount, JobDesc[JobList[index]].Duration, 'A' + JobList[index] - 1); system(SubmitCommand); #endif /* !defined(__LIVE) */ JobList[index] = -1; jindex++; } /* END while (jindex) */ #if !defined(__LIVE) /* submit Z jobs */ printf("jobZ%03d 1 %d userA groupB %d Completed [super:1] %d %d %d %d [NONE] [NONE] [NONE] >= 0 >= 0 [NONE] 1 1 0 0 0 accountC [NONE] [NONE] 0 0.0 DEFAULT 1 0 0 0 0 0 X 0 [NONE] [NONE] [NONE] [NONE] [NONE]\n", jindex, SysSize, 100, SubmitTime + 2400, SubmitTime + 2400, SubmitTime + 2400, SubmitTime + 2400 + 100); jindex++; printf("jobZ%03d 1 %d userA groupB %d Completed [super:1] %d %d %d %d [NONE] [NONE] [NONE] >= 0 >= 0 [NONE] 1 1 0 0 0 accountC [NONE] [NONE] 0 0.0 DEFAULT 1 0 0 0 0 0 X 0 [NONE] [NONE] [NONE] [NONE] [NONE]\n", jindex, SysSize, 100, SubmitTime + 7200, SubmitTime + 7200, SubmitTime + 7200, SubmitTime + 7200 + 100); #else sleep(2400); /* submit Z0 at 00:40:00 */ /* NYI */ sleep(4800); /* submit Z1 at 02:00:00 */ /* NYI */ #endif exit(0); } /* END main() */