int nbench_line_count = 0;
static int timelimit = 600;
+static int warmup;
static char *loadfile;
#define ival(s) strtol(s, NULL, 0)
const char *p;
BOOL correct = True;
- nb_setup(cli, client);
+ nb_setup(cli, client, warmup);
asprintf(&cname, "client%d", client);
again:
while (fgets(line, sizeof(line)-1, f)) {
NTSTATUS status;
+ double t = end_timer();
+
+ if (warmup && t >= warmup) {
+ warmup = 0;
+ nb_warmup_done();
+ start_timer();
+ }
if (end_timer() >= timelimit) {
goto done;
/* run a test that simulates an approximate netbench client load */
BOOL torture_nbench(int dummy)
{
- double t;
BOOL correct = True;
extern int torture_nprocs;
struct cli_state *cli;
timelimit = atoi(p);
}
+ warmup = timelimit / 20;
+
loadfile = lp_parm_string(-1, "torture", "loadfile");
if (!loadfile || !*loadfile) {
loadfile = "client.txt";
return False;
}
- nb_setup(cli, -1);
+ nb_setup(cli, -1, warmup);
nb_deltree("\\clients");
nbio_shmem(torture_nprocs);
- printf("Running for %d seconds with load '%s'\n", timelimit, loadfile);
+ printf("Running for %d seconds with load '%s' and warmup %d secs\n",
+ timelimit, loadfile, warmup);
signal(SIGALRM, SIGNAL_CAST nb_alarm);
alarm(1);
- t = torture_create_procs(run_netbench, &correct);
+ torture_create_procs(run_netbench, &correct);
alarm(0);
printf("\nThroughput %g MB/sec\n",
- 1.0e-6 * nbio_total() / t);
+ 1.0e-6 * nbio_total() / timelimit);
return correct;
}
static int nbio_id;
static int nprocs;
static BOOL bypass_io;
+static int warmup;
static struct {
int fd;
return total;
}
+void nb_warmup_done(void)
+{
+ children[nbio_id].bytes_out = 0;
+ children[nbio_id].bytes_in = 0;
+}
+
+
void nb_alarm(void)
{
int i;
t = end_timer();
- printf("%4d %8d %.2f MB/sec t=%.0f \r",
+ printf("%4d %8d %.2f MB/sec time %.0f sec \r",
num_clients, lines/nprocs,
1.0e-6 * nbio_total() / t,
- t);
+ t - warmup);
+
+ if (warmup && t >= warmup) {
+ start_timer();
+ warmup = 0;
+ }
signal(SIGALRM, nb_alarm);
alarm(1);
static struct cli_state *c;
-void nb_setup(struct cli_state *cli, int id)
+void nb_setup(struct cli_state *cli, int id, int warmupt)
{
+ warmup = warmupt;
nbio_id = id;
c = cli;
start_timer();
children[nbio_id].bytes_out += ret_size;
}
-
void nb_write(int handle, int offset, int size, int ret_size, NTSTATUS status)
{
union smb_write io;