X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=io_u.c;h=46d9e0b7f86a8d21f592cb473edba6eb126d99d9;hp=1e60eee5ccee03f20126a825ff9ad4989661c7cf;hb=6de43c1b6bb1027b551927f92385867d46c18b30;hpb=5ec10eaad3b09875b91e19a20bbdfa06f2117562 diff --git a/io_u.c b/io_u.c index 1e60eee5..46d9e0b7 100644 --- a/io_u.c +++ b/io_u.c @@ -130,7 +130,7 @@ static int get_next_rand_offset(struct thread_data *td, struct fio_file *f, /* * if we are not maintaining a random map, we are done. */ - if (td->o.norandommap) + if (!file_randommap(td, f)) return 0; /* @@ -243,7 +243,7 @@ static unsigned int get_next_buflen(struct thread_data *td, struct io_u *io_u) static void set_rwmix_bytes(struct thread_data *td) { - unsigned long long rbytes; + unsigned long issues; unsigned int diff; /* @@ -251,11 +251,11 @@ static void set_rwmix_bytes(struct thread_data *td) * buffered writes may issue a lot quicker than they complete, * whereas reads do not. */ - rbytes = td->io_bytes[td->rwmix_ddir] - td->rwmix_bytes; + issues = td->io_issues[td->rwmix_ddir] - td->rwmix_issues; diff = td->o.rwmix[td->rwmix_ddir ^ 1]; - td->rwmix_bytes = td->io_bytes[td->rwmix_ddir] - + (rbytes * ((100 - diff)) / diff); + td->rwmix_issues = td->io_issues[td->rwmix_ddir] + + (issues * ((100 - diff)) / diff); } static inline enum fio_ddir get_rand_ddir(struct thread_data *td) @@ -279,25 +279,10 @@ static inline enum fio_ddir get_rand_ddir(struct thread_data *td) static enum fio_ddir get_rw_ddir(struct thread_data *td) { if (td_rw(td)) { - struct timeval now; - unsigned long elapsed; - unsigned int cycle; - - fio_gettime(&now, NULL); - elapsed = mtime_since_now(&td->rwmix_switch); - - /* - * if this is the first cycle, make it shorter - */ - cycle = td->o.rwmixcycle; - if (!td->rwmix_bytes) - cycle /= 10; - /* * Check if it's time to seed a new data direction. */ - if (elapsed >= cycle || - td->io_bytes[td->rwmix_ddir] >= td->rwmix_bytes) { + if (td->io_issues[td->rwmix_ddir] >= td->rwmix_issues) { unsigned long long max_bytes; enum fio_ddir ddir; @@ -310,11 +295,9 @@ static enum fio_ddir get_rw_ddir(struct thread_data *td) max_bytes = td->this_io_bytes[ddir]; if (max_bytes >= (td->o.size * td->o.rwmix[ddir] / 100)) { - if (!td->rw_end_set[ddir]) { + if (!td->rw_end_set[ddir]) td->rw_end_set[ddir] = 1; - memcpy(&td->rw_end[ddir], &now, - sizeof(now)); - } + ddir ^= 1; } @@ -322,7 +305,6 @@ static enum fio_ddir get_rw_ddir(struct thread_data *td) set_rwmix_bytes(td); td->rwmix_ddir = ddir; - memcpy(&td->rwmix_switch, &now, sizeof(now)); } return td->rwmix_ddir; } else if (td_read(td)) @@ -416,7 +398,7 @@ static int fill_io_u(struct thread_data *td, struct io_u *io_u) /* * mark entry before potentially trimming io_u */ - if (td_random(td) && !td->o.norandommap) + if (td_random(td) && file_randommap(td, io_u->file)) mark_random_map(td, io_u); /*