int submit_tasks(struct work_queue *q, int input_size, int run_time, int output_size, int count ) { static int ntasks=0; char output_file[128]; char command[256]; char gen_input_cmd[256]; /* Note that bs=1m and similar are not portable across various implementations of dd, so we spell it out as bs=1048576 */ sprintf(gen_input_cmd, "dd if=/dev/zero of=input.0 bs=1048576 count=%d",input_size); system(gen_input_cmd); int i; for(i=0;i<count;i++) { sprintf(output_file, "output.%d",ntasks++); sprintf(command, "dd if=/dev/zero of=outfile bs=1048576 count=%d; sleep %d", output_size, run_time ); struct work_queue_task *t = work_queue_task_create(command); work_queue_task_specify_file(t, "input.0", "infile", WORK_QUEUE_INPUT, WORK_QUEUE_CACHE); work_queue_task_specify_file(t, output_file, "outfile", WORK_QUEUE_OUTPUT, WORK_QUEUE_NOCACHE); work_queue_task_specify_cores(t,1); work_queue_submit(q, t); } return 1; }
static void work_queue_task_specify_resources(struct work_queue_task *t, struct rmsummary *resources) { if(resources->cores > -1) work_queue_task_specify_cores(t, resources->cores); if(resources->resident_memory > -1) work_queue_task_specify_memory(t, resources->resident_memory); if(resources->workdir_footprint > -1) work_queue_task_specify_disk(t, resources->workdir_footprint); }