Skip to content
Permalink
Browse files

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 <ve.ar91@gmail.com>
  • Loading branch information
vh4x authored and vear91 committed Jun 27, 2016
1 parent 1eb467f commit a4c4c3460bd556cdb0aadc71d006556530144d01
Showing with 49 additions and 0 deletions.
  1. +33 −0 configure
  2. +16 −0 engines/rbd.c
@@ -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 <rbd/librbd.h>
#include <zipkin_c.h>
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
@@ -9,12 +9,16 @@

#include "../fio.h"
#include "../optgroup.h"
#ifdef CONFIG_RBD_BLKIN
#include <zipkin_c.h>
#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");

0 comments on commit a4c4c34

Please sign in to comment.
You can’t perform that action at this time.