X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=log.c;h=6c7c4d6b2680546663eeac7d179b2e11917b7997;hp=0614b277c1e9de3752b977c284aa2531f9581049;hb=8de8f047bd025f12d23cfc3fc1793434c6d8ff94;hpb=bb5d7d0b5bde867690590aaa61d77307d773107f;ds=sidebyside diff --git a/log.c b/log.c index 0614b277..6c7c4d6b 100644 --- a/log.c +++ b/log.c @@ -43,16 +43,33 @@ void prune_io_piece_log(struct thread_data *td) */ void log_io_piece(struct thread_data *td, struct io_u *io_u) { - struct rb_node **p = &td->io_hist_tree.rb_node; - struct rb_node *parent = NULL; + struct rb_node **p, *parent; struct io_piece *ipo, *__ipo; ipo = malloc(sizeof(struct io_piece)); - RB_CLEAR_NODE(&ipo->rb_node); ipo->file = io_u->file; ipo->offset = io_u->offset; ipo->len = io_u->buflen; + /* + * We don't need to sort the entries, if: + * + * Sequential writes, or + * Random writes that lay out the file as it goes along + * + * For both these cases, just reading back data in the order we + * wrote it out is the fastest. + */ + if (!td_random(td) || !td->o.overwrite) { + INIT_LIST_HEAD(&ipo->list); + list_add_tail(&ipo->list, &td->io_hist_list); + return; + } + + RB_CLEAR_NODE(&ipo->rb_node); + p = &td->io_hist_tree.rb_node; + parent = NULL; + /* * Sort the entry into the verification list */