From a4c4c3460bd556cdb0aadc71d006556530144d01 Mon Sep 17 00:00:00 2001 From: vears91 Date: Mon, 27 Jun 2016 16:38:34 +0300 Subject: [PATCH] Add support for blkin tracing in rbd engine Add configure support to disable or enable fio rbd engine with blkin, and use rbd_aio_write_traced and rbd_aio_read_traced to pass the trace information to librbd if fio was compiled with blkin. Signed-off-by: Victor Araujo --- configure | 33 +++++++++++++++++++++++++++++++++ engines/rbd.c | 16 ++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/configure b/configure index 5f6bca3b..93c37200 100755 --- a/configure +++ b/configure @@ -166,6 +166,8 @@ for opt do ;; --disable-rbd) disable_rbd="yes" ;; + --disable-rbd-blkin) disable_rbd_blkin="yes" + ;; --disable-gfapi) disable_gfapi="yes" ;; --enable-libhdfs) libhdfs="yes" @@ -1333,6 +1335,34 @@ fi echo "rbd_invalidate_cache $rbd_inval" fi +########################################## +# check for blkin +rbd_blkin="no" +cat > $TMPC << EOF +#include +#include + +int main(int argc, char **argv) +{ + int r; + struct blkin_trace_info t_info; + blkin_init_trace_info(&t_info); + rbd_completion_t completion; + rbd_image_t image; + uint64_t off; + size_t len; + const char *buf; + r = rbd_aio_write_traced(image, off, len, buf, completion, &t_info); + return 0; +} +EOF +if test "$disable_rbd" != "yes" && test "$disable_rbd_blkin" != "yes" \ + && compile_prog "" "-lrbd -lrados -lblkin" "rbd_blkin"; then + LIBS="-lblkin $LIBS" + rbd_blkin="yes" +fi +echo "rbd blkin tracing $rbd_blkin" + ########################################## # Check whether we have setvbuf setvbuf="no" @@ -1778,6 +1808,9 @@ fi if test "$rbd_inval" = "yes" ; then output_sym "CONFIG_RBD_INVAL" fi +if test "$rbd_blkin" = "yes" ; then + output_sym "CONFIG_RBD_BLKIN" +fi if test "$setvbuf" = "yes" ; then output_sym "CONFIG_SETVBUF" fi diff --git a/engines/rbd.c b/engines/rbd.c index 87ed360f..552e5c57 100644 --- a/engines/rbd.c +++ b/engines/rbd.c @@ -9,12 +9,16 @@ #include "../fio.h" #include "../optgroup.h" +#ifdef CONFIG_RBD_BLKIN +#include +#endif struct fio_rbd_iou { struct io_u *io_u; rbd_completion_t completion; int io_seen; int io_complete; + struct blkin_trace_info info; }; struct rbd_data { @@ -378,16 +382,28 @@ static int fio_rbd_queue(struct thread_data *td, struct io_u *io_u) } if (io_u->ddir == DDIR_WRITE) { +#ifdef CONFIG_RBD_BLKIN + blkin_init_trace_info(&fri->info); + r = rbd_aio_write_traced(rbd->image, io_u->offset, io_u->xfer_buflen, + io_u->xfer_buf, fri->completion, &fri->info); +#else r = rbd_aio_write(rbd->image, io_u->offset, io_u->xfer_buflen, io_u->xfer_buf, fri->completion); +#endif if (r < 0) { log_err("rbd_aio_write failed.\n"); goto failed_comp; } } else if (io_u->ddir == DDIR_READ) { +#ifdef CONFIG_RBD_BLKIN + blkin_init_trace_info(&fri->info); + r = rbd_aio_read_traced(rbd->image, io_u->offset, io_u->xfer_buflen, + io_u->xfer_buf, fri->completion, &fri->info); +#else r = rbd_aio_read(rbd->image, io_u->offset, io_u->xfer_buflen, io_u->xfer_buf, fri->completion); +#endif if (r < 0) { log_err("rbd_aio_read failed.\n"); -- 2.25.1