maui/contrib/jobinit/randjob.c

177 lines
3.8 KiB
C
Raw Normal View History

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#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() */