projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Use #!/usr/bin/env to allow for interpreters in different directories.
[fio.git]
/
backend.c
diff --git
a/backend.c
b/backend.c
index 8d16fe289c7ea814e63965e2a0da979766e26c51..00a23db6ecd1dfa6caaf98124605653bd2c85c97 100644
(file)
--- a/
backend.c
+++ b/
backend.c
@@
-642,6
+642,7
@@
static uint64_t do_io(struct thread_data *td)
uint64_t bytes_done[DDIR_RWDIR_CNT] = { 0, 0, 0 };
unsigned int i;
int ret = 0;
uint64_t bytes_done[DDIR_RWDIR_CNT] = { 0, 0, 0 };
unsigned int i;
int ret = 0;
+ uint64_t bytes_issued = 0;
if (in_ramp_time(td))
td_set_runstate(td, TD_RAMP);
if (in_ramp_time(td))
td_set_runstate(td, TD_RAMP);
@@
-675,6
+676,9
@@
static uint64_t do_io(struct thread_data *td)
if (flow_threshold_exceeded(td))
continue;
if (flow_threshold_exceeded(td))
continue;
+ if (bytes_issued >= (uint64_t) td->o.size)
+ break;
+
io_u = get_io_u(td);
if (!io_u)
break;
io_u = get_io_u(td);
if (!io_u)
break;
@@
-708,6
+712,7
@@
static uint64_t do_io(struct thread_data *td)
int bytes = io_u->xfer_buflen - io_u->resid;
struct fio_file *f = io_u->file;
int bytes = io_u->xfer_buflen - io_u->resid;
struct fio_file *f = io_u->file;
+ bytes_issued += bytes;
/*
* zero read, fail
*/
/*
* zero read, fail
*/
@@
-738,6
+743,7
@@
sync_done:
ret = io_u_sync_complete(td, io_u, bytes_done);
if (ret < 0)
break;
ret = io_u_sync_complete(td, io_u, bytes_done);
if (ret < 0)
break;
+ bytes_issued += io_u->xfer_buflen;
}
break;
case FIO_Q_QUEUED:
}
break;
case FIO_Q_QUEUED:
@@
-748,6
+754,7
@@
sync_done:
*/
if (td->io_ops->commit == NULL)
io_u_queued(td, io_u);
*/
if (td->io_ops->commit == NULL)
io_u_queued(td, io_u);
+ bytes_issued += io_u->xfer_buflen;
break;
case FIO_Q_BUSY:
requeue_io_u(td, &io_u);
break;
case FIO_Q_BUSY:
requeue_io_u(td, &io_u);
@@
-1086,14
+1093,15
@@
static int keep_running(struct thread_data *td)
return 0;
}
return 0;
}
-static int exec_string(
const char *string
)
+static int exec_string(
struct thread_options *o, const char *string, const char *mode
)
{
{
- int ret, newlen = strlen(string) +
1 + 8
;
+ int ret, newlen = strlen(string) +
strlen(o->name) + strlen(mode) + 9 + 1
;
char *str;
str = malloc(newlen);
char *str;
str = malloc(newlen);
- sprintf(str, "
sh -c %s", string
);
+ sprintf(str, "
%s &> %s.%s.txt", string, o->name, mode
);
+ log_info("%s : Saving output of %s in %s.%s.txt\n",o->name, mode, o->name, mode);
ret = system(str);
if (ret == -1)
log_err("fio: exec of cmd <%s> failed\n", str);
ret = system(str);
if (ret == -1)
log_err("fio: exec of cmd <%s> failed\n", str);
@@
-1121,6
+1129,11
@@
static void *thread_main(void *data)
} else
td->pid = gettid();
} else
td->pid = gettid();
+ /*
+ * fio_time_init() may not have been called yet if running as a server
+ */
+ fio_time_init();
+
fio_local_clock_init(o->use_thread);
dprint(FD_PROCESS, "jobs pid=%d started\n", (int) td->pid);
fio_local_clock_init(o->use_thread);
dprint(FD_PROCESS, "jobs pid=%d started\n", (int) td->pid);
@@
-1274,7
+1287,7
@@
static void *thread_main(void *data)
if (init_random_map(td))
goto err;
if (init_random_map(td))
goto err;
- if (o->exec_prerun && exec_string(o
->exec_prerun
))
+ if (o->exec_prerun && exec_string(o
, o->exec_prerun, (const char *)"prerun"
))
goto err;
if (o->pre_read) {
goto err;
if (o->pre_read) {
@@
-1397,7
+1410,7
@@
static void *thread_main(void *data)
fio_mutex_up(writeout_mutex);
if (o->exec_postrun)
fio_mutex_up(writeout_mutex);
if (o->exec_postrun)
- exec_string(o
->exec_postrun
);
+ exec_string(o
, o->exec_postrun, (const char *)"postrun"
);
if (exitall_on_terminate)
fio_terminate_threads(td->groupid);
if (exitall_on_terminate)
fio_terminate_threads(td->groupid);
@@
-1582,7
+1595,7
@@
static void run_threads(void)
if (fio_gtod_offload && fio_start_gtod_thread())
return;
if (fio_gtod_offload && fio_start_gtod_thread())
return;
-
+
fio_idle_prof_init();
set_sig_handlers();
fio_idle_prof_init();
set_sig_handlers();