projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
android: add support for NDK sharedmem
[fio.git]
/
iolog.c
diff --git
a/iolog.c
b/iolog.c
index b72dcf9791cfa242ceace8b4080a03934e9fa554..cf264916a9ecd83f7b3079bd186573441dba65fb 100644
(file)
--- a/
iolog.c
+++ b/
iolog.c
@@
-19,6
+19,7
@@
#include "smalloc.h"
#include "blktrace.h"
#include "pshared.h"
#include "smalloc.h"
#include "blktrace.h"
#include "pshared.h"
+#include "lib/roundup.h"
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
@@
-173,6
+174,7
@@
int read_iolog_get(struct thread_data *td, struct io_u *io_u)
io_u->ddir = ipo->ddir;
if (ipo->ddir != DDIR_WAIT) {
io_u->offset = ipo->offset;
io_u->ddir = ipo->ddir;
if (ipo->ddir != DDIR_WAIT) {
io_u->offset = ipo->offset;
+ io_u->verify_offset = ipo->offset;
io_u->buflen = ipo->len;
io_u->file = td->files[ipo->fileno];
get_file(io_u->file);
io_u->buflen = ipo->len;
io_u->file = td->files[ipo->fileno];
get_file(io_u->file);
@@
-342,6
+344,9
@@
void trim_io_piece(const struct io_u *io_u)
void write_iolog_close(struct thread_data *td)
{
void write_iolog_close(struct thread_data *td)
{
+ if (!td->iolog_f)
+ return;
+
fflush(td->iolog_f);
fclose(td->iolog_f);
free(td->iolog_buf);
fflush(td->iolog_f);
fclose(td->iolog_f);
free(td->iolog_buf);
@@
-602,12
+607,11
@@
static int open_socket(const char *path)
/*
* open iolog, check version, and call appropriate parser
*/
/*
* open iolog, check version, and call appropriate parser
*/
-static bool init_iolog_read(struct thread_data *td)
+static bool init_iolog_read(struct thread_data *td
, char *fname
)
{
{
- char buffer[256], *p
, *fname
;
+ char buffer[256], *p;
FILE *f = NULL;
FILE *f = NULL;
- fname = get_name_by_idx(td->o.read_iolog_file, td->subjob_number);
dprint(FD_IO, "iolog: name=%s\n", fname);
if (is_socket(fname)) {
dprint(FD_IO, "iolog: name=%s\n", fname);
if (is_socket(fname)) {
@@
-616,6
+620,8
@@
static bool init_iolog_read(struct thread_data *td)
fd = open_socket(fname);
if (fd >= 0)
f = fdopen(fd, "r");
fd = open_socket(fname);
if (fd >= 0)
f = fdopen(fd, "r");
+ } else if (!strcmp(fname, "-")) {
+ f = stdin;
} else
f = fopen(fname, "r");
} else
f = fopen(fname, "r");
@@
-694,15
+700,16
@@
bool init_iolog(struct thread_data *td)
if (td->o.read_iolog_file) {
int need_swap;
if (td->o.read_iolog_file) {
int need_swap;
+ char * fname = get_name_by_idx(td->o.read_iolog_file, td->subjob_number);
/*
* Check if it's a blktrace file and load that if possible.
* Otherwise assume it's a normal log file and load that.
*/
/*
* Check if it's a blktrace file and load that if possible.
* Otherwise assume it's a normal log file and load that.
*/
- if (is_blktrace(
td->o.read_iolog_fil
e, &need_swap))
- ret = load_blktrace(td,
td->o.read_iolog_fil
e, need_swap);
+ if (is_blktrace(
fnam
e, &need_swap))
+ ret = load_blktrace(td,
fnam
e, need_swap);
else
else
- ret = init_iolog_read(td);
+ ret = init_iolog_read(td
, fname
);
} else if (td->o.write_iolog_file)
ret = init_iolog_write(td);
else
} else if (td->o.write_iolog_file)
ret = init_iolog_write(td);
else
@@
-745,10
+752,13
@@
void setup_log(struct io_log **log, struct log_params *p,
}
if (l->td && l->td->o.io_submit_mode != IO_MODE_OFFLOAD) {
}
if (l->td && l->td->o.io_submit_mode != IO_MODE_OFFLOAD) {
+ unsigned int def_samples = DEF_LOG_ENTRIES;
struct io_logs *__p;
__p = calloc(1, sizeof(*l->pending));
struct io_logs *__p;
__p = calloc(1, sizeof(*l->pending));
- __p->max_samples = DEF_LOG_ENTRIES;
+ if (l->td->o.iodepth > DEF_LOG_ENTRIES)
+ def_samples = roundup_pow2(l->td->o.iodepth);
+ __p->max_samples = def_samples;
__p->log = calloc(__p->max_samples, log_entry_sz(l));
l->pending = __p;
}
__p->log = calloc(__p->max_samples, log_entry_sz(l));
l->pending = __p;
}
@@
-896,18
+906,18
@@
void flush_samples(FILE *f, void *samples, uint64_t sample_size)
s = __get_sample(samples, log_offset, i);
if (!log_offset) {
s = __get_sample(samples, log_offset, i);
if (!log_offset) {
- fprintf(f, "%lu, %" PRId64 ", %u, %llu\n",
+ fprintf(f, "%lu, %" PRId64 ", %u, %llu
, %u
\n",
(unsigned long) s->time,
s->data.val,
(unsigned long) s->time,
s->data.val,
- io_sample_ddir(s), (unsigned long long) s->bs);
+ io_sample_ddir(s), (unsigned long long) s->bs
, s->priority_bit
);
} else {
struct io_sample_offset *so = (void *) s;
} else {
struct io_sample_offset *so = (void *) s;
- fprintf(f, "%lu, %" PRId64 ", %u, %llu, %llu\n",
+ fprintf(f, "%lu, %" PRId64 ", %u, %llu, %llu
, %u
\n",
(unsigned long) s->time,
s->data.val,
io_sample_ddir(s), (unsigned long long) s->bs,
(unsigned long) s->time,
s->data.val,
io_sample_ddir(s), (unsigned long long) s->bs,
- (unsigned long long) so->offset);
+ (unsigned long long) so->offset
, s->priority_bit
);
}
}
}
}
}
}