Recent changes (master)
The following changes since commit 13aa415afc8d0a2ad0de2d6c17d6bca2d16f00c7:
gettime: get rid of the (unecessary) 10x scaling factor (2015-11-20 17:26:37 -0700)
are available in the git repository at:
git://git.kernel.dk/fio.git master
for you to fetch changes up to 4b157ac6446364e5eecdcdbf75fc1a814489a343:
A few min/max cleanups (2015-11-23 15:04:56 -0700)
----------------------------------------------------------------
Jens Axboe (3):
io_u: properly split buffer prep for compression
options: set 'refill_buffers' for compress_percentage != 0 A few min/max cleanups
backend.c | 2 +- init.c | 13 +++++++++---- io_u.c | 24 +++++++++++++----------- log.c | 3 +-- minmax.h | 5 +++++ 5 files changed, 29 insertions(+), 18 deletions(-)
---
Diff of recent changes:
backend.c +1 -1
@@ -448,7 +448,7 @@ static int wait_for_completions(struct thread_data *td, struct timeval *time)* if the queue is full, we MUST reap at least 1 event */ min_evts =min (td->o.iodepth_batch_complete_min, td->cur_depth); -if ((full && !min_evts) || !td->o.iodepth_batch_complete_min) +if ((full && !min_evts) || !td->o.iodepth_batch_complete_min) min_evts =1 ; if (time && (__should_check_rate(td, DDIR_READ) ||
init.c +9 -4
@@ -737,11 +737,16 @@ static int fixup_options(struct thread_data *td)/* * For fully compressible data, just zero them at init time. -* It's faster than repeatedly filling it. +* It's faster than repeatedly filling it. For non-zero +* compression, we should have refill_buffers set. Set it, unless +* the job file already changed it. */ -if (td->o.compress_percentage ==100 ) { - td->o.zero_buffers =1 ; - td->o.compress_percentage =0 ; +if (o->compress_percentage) { +if (o->compress_percentage ==100 ) { + o->zero_buffers =1 ; + o->compress_percentage =0 ; + }else if (!fio_option_is_set (o, refill_buffers)) + o->refill_buffers =1 ; }/*
io_u.c +13 -11
@@ -13,6 +13,7 @@#include "lib/axmap.h" #include "err.h" #include "lib/pow2.h" +#include "minmax.h" struct io_completion_data {int nr;/* input */
@@ -1919,6 +1920,7 @@ void fill_io_buffer(struct thread_data *td, void *buf, unsigned int min_write,unsigned int perc = td->o.compress_percentage;struct frand_state *rs;unsigned int left = max_bs; +unsigned int this_write; do { rs = get_buf_state(td);
@@ -1926,20 +1928,20 @@ void fill_io_buffer(struct thread_data *td, void *buf, unsigned int min_write, min_write =min (min_write, left);if (perc) { -unsigned int seg = min_write; + this_write =min_not_zero (min_write, + td->o.compress_chunk); - seg =min (min_write, td->o.compress_chunk); -if (!seg) - seg = min_write; - -fill_random_buf_percentage (rs, buf, perc, seg, - min_write, o->buffer_pattern, - o->buffer_pattern_bytes); - }else +fill_random_buf_percentage (rs, buf, perc, + this_write, this_write, + o->buffer_pattern, + o->buffer_pattern_bytes); + }else {fill_random_buf (rs, buf, min_write); + this_write = min_write; + } - buf += min_write; - left -= min_write; + buf += this_write; + left -= this_write;save_buf_state (td, rs); }while (left); }else if (o->buffer_pattern_bytes)
log.c +1 -2
@@ -59,9 +59,8 @@ size_t __log_buf(struct buf_output *buf, const char *format, ...)va_start (args, format); len =vsnprintf (buffer,sizeof (buffer), format, args);va_end (args); - len =min (len,sizeof (buffer) -1 ); -return buf_output_add (buf, buffer, len); +return buf_output_add (buf, buffer,min (len,sizeof (buffer) -1 )); }int log_info_flush (void )
minmax.h +5 -0
@@ -17,4 +17,9 @@ _x > _y ? _x : _y; })#endif +#define min_not_zero (x, y) ({ \ + typeof(x) __x = (x); \ + typeof(y) __y = (y); \ + __x == 0 ? __y : ((__y == 0) ? __x : min(__x, __y)); }) +#endif