#define DEF_CREATE_FSYNC (1)
#define DEF_LOOPS (1)
#define DEF_VERIFY (0)
+#define DEF_STONEWALL (0)
#define ALIGN(buf) (char *) (((unsigned long) (buf) + MASK) & ~(MASK))
unsigned int sync_io;
unsigned int mem_type;
unsigned int verify;
+ unsigned int stonewall;
cpu_set_t cpumask;
struct drand48_data bsrange_state;
td->create_fsync = def_thread.create_fsync;
td->loops = def_thread.loops;
td->verify = def_thread.verify;
+ td->stonewall = def_thread.stonewall;
memcpy(&td->cpumask, &def_thread.cpumask, sizeof(td->cpumask));
return td;
fgetpos(f, &off);
continue;
}
+ if (!strncmp(p, "stonewall", 9)) {
+ td->stonewall = 1;
+ fgetpos(f, &off);
+ continue;
+ }
printf("Client%d: bad option %s\n",td->thread_number,p);
}
fsetpos(f, &off);
struct timeval genesis;
struct thread_data *td;
unsigned long spent;
- int i, todo, nr_running, m_rate, t_rate;
+ int i, todo, nr_running, m_rate, t_rate, nr_started;
printf("Starting %d threads\n", thread_number);
fflush(stdout);
todo = thread_number;
nr_running = 0;
+ nr_started = 0;
m_rate = t_rate = 0;
for (i = 0; i < thread_number; i++) {
continue;
}
+ if (td->stonewall && (nr_started || nr_running))
+ continue;
+
td_set_runstate(td, TD_CREATED);
check_str_update(td, nr_running, t_rate, m_rate);
sem_init(&startup_sem, 1, 1);
todo--;
+ nr_started++;
if (fork())
sem_wait(&startup_sem);
td_set_runstate(td, TD_RUNNING);
nr_running++;
+ nr_started--;
m_rate += td->ratemin;
t_rate += td->rate;
check_str_update(td, nr_running, t_rate, m_rate);
def_thread.create_fsync = DEF_CREATE_FSYNC;
def_thread.loops = DEF_LOOPS;
def_thread.verify = DEF_VERIFY;
+ def_thread.stonewall = DEF_STONEWALL;
i = parse_options(argc, argv);