Recent changes (master)
The following changes since commit 66b182f90c3f08dcbd0592ce70cb350ca5ac0cc0:
smalloc: cleanup firstfree() (2019-07-31 15:29:48 -0600)
are available in the Git repository at:
git://git.kernel.dk/fio.git master
for you to fetch changes up to f2d6de5d997b039cebac9c34912871baa5e12d49:
nbd: Document the NBD-specific uri parameter (2019-08-02 11:05:28 -0600)
----------------------------------------------------------------
Jens Axboe (1):
parse: bump max value pairs supported from 24 to 32
Richard W.M. Jones (2):
engines: Add Network Block Device (NBD) support using libnbd.
nbd: Document the NBD-specific uri parameter
HOWTO | 11 ++ Makefile | 6 + configure | 27 ++++ engines/nbd.c | 368 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ examples/nbd.fio | 35 ++++++ fio.1 | 19 +++ optgroup.c | 4 + optgroup.h | 2 + options.c | 3 + parse.h | 2 +- 10 files changed, 476 insertions(+), 1 deletion(-) create mode 100644 engines/nbd.c create mode 100644 examples/nbd.fio
---
Diff of recent changes:
HOWTO +11 -0
@@ -1998,6 +1998,8 @@ I/O engine requests for IME. FIO will then decide when to commit these requests. **libiscsi** Read and write iscsi lun with libiscsi. + **nbd** + Read and write a Network Block Device (NBD). I/O engine specific parameters ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -2299,6 +2301,15 @@ with the caveat that when used on the command line, they must come after the turns on verbose logging from libcurl, 2 additionally enables HTTP IO tracing. Default is **0** +.. option:: uri=str : [nbd] + + Specify the NBD URI of the server to test. The string + is a standard NBD URI + (see https://github.com/NetworkBlockDevice/nbd/tree/master/doc). + Example URIs: nbd://localhost:10809 + nbd+unix:///?socket=/tmp/socket + nbds://tlshost/exportname + I/O depth ~~~~~~~~~
Makefile +6 -0
@@ -65,6 +65,12 @@ ifdef CONFIG_LIBISCSI SOURCE += engines/libiscsi.c endif +ifdef CONFIG_LIBNBD + CFLAGS += $(LIBNBD_CFLAGS) + LIBS += $(LIBNBD_LIBS) + SOURCE += engines/nbd.c +endif + ifdef CONFIG_64BIT CFLAGS += -DBITS_PER_LONG=64 endif
configure +27 -0
@@ -149,6 +149,7 @@ disable_pmem="no" disable_native="no" march_set="no" libiscsi="no" +libnbd="no" prefix=/usr/local # parse options
@@ -207,6 +208,8 @@ for opt do ;; --enable-libiscsi) libiscsi="yes" ;; + --enable-libnbd) libnbd="yes" + ;; --disable-tcmalloc) disable_tcmalloc="yes" ;; --help)
@@ -245,6 +248,7 @@ if test "$show_help" = "yes" ; then echo "--disable-native Don't build for native host" echo "--with-ime= Install path for DDN's Infinite Memory Engine" echo "--enable-libiscsi Enable iscsi support" + echo "--enable-libnbd Enable libnbd (NBD engine) support" echo "--disable-tcmalloc Disable tcmalloc support" exit $exit_val fi
@@ -2014,6 +2018,23 @@ if test "$libiscsi" = "yes" ; then fi print_config "iscsi engine" "$libiscsi" +########################################## +# Check if we have libnbd (for NBD support). +minimum_libnbd=0.9.6 +if test "$libnbd" = "yes" ; then + if $(pkg-config --atleast-version=$minimum_libnbd libnbd); then + libnbd="yes" + libnbd_cflags=$(pkg-config --cflags libnbd) + libnbd_libs=$(pkg-config --libs libnbd) + else + if test "$libnbd" = "yes" ; then + echo "libnbd" "Install libnbd >= $minimum_libnbd" + fi + libnbd="no" + fi +fi +print_config "NBD engine" "$libnbd" + ########################################## # Check if we have lex/yacc available yacc="no"
@@ -2698,6 +2719,12 @@ if test "$libiscsi" = "yes" ; then echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak fi +if test "$libnbd" = "yes" ; then + output_sym "CONFIG_LIBNBD" + echo "CONFIG_LIBNBD=m" >> $config_host_mak + echo "LIBNBD_CFLAGS=$libnbd_cflags" >> $config_host_mak + echo "LIBNBD_LIBS=$libnbd_libs" >> $config_host_mak +fi cat > $TMPC << EOF int main(int argc, char **argv) {
engines/nbd.c new file +368 -0
368 lines not on this page · raw message
examples/nbd.fio new file +35 -0
@@ -0,0 +1,35 @@ +# To use fio to test nbdkit: +# +# nbdkit -U - memory size=256M --run 'export unixsocket; fio examples/nbd.fio' +# +# To use fio to test qemu-nbd: +# +# rm -f /tmp/disk.img /tmp/socket +# truncate -s 256M /tmp/disk.img +# export unixsocket=/tmp/socket +# qemu-nbd -t -k $unixsocket -f raw /tmp/disk.img & +# fio examples/nbd.fio +# killall qemu-nbd + +[global] +ioengine=nbd +uri=nbd+unix:///?socket=${unixsocket} +# Starting from nbdkit 1.14 the following will work: +#uri=${uri} +rw=randrw +time_based +runtime=60 +group_reporting +iodepth=64 + +[job0] +offset=0 + +[job1] +offset=064m + +[job2] +offset=128m + +[job3] +offset=192m
fio.1 +19 -0
@@ -1756,6 +1756,9 @@ FIO will then decide when to commit these requests. .TP .B libiscsi Read and write iscsi lun with libiscsi. +.TP +.B nbd +Synchronous read and write a Network Block Device (NBD). .SS "I/O engine specific parameters" In addition, there are some parameters which are only valid when a specific \fBioengine\fR is in use. These are used identically to normal parameters,
@@ -2019,6 +2022,22 @@ blocksize=8k will write 16 sectors with each command. fio will still generate 8k of data for each command butonly the first 512 bytes will be used and transferred to the device. The writefua option is ignored with this selection. +.RE +.RE +.TP +.BI (nbd)uri \fR=\fPstr +Specify the NBD URI of the server to test. +The string is a standard NBD URI (see +\fIhttps://github.com/NetworkBlockDevice/nbd/tree/master/doc\fR). +Example URIs: +.RS +.RS +.TP +\fInbd://localhost:10809\fR +.TP +\fInbd+unix:///?socket=/tmp/socket\fR +.TP +\fInbds://tlshost/exportname\fR .SS "I/O depth" .TP
optgroup.c +4 -0
@@ -169,6 +169,10 @@ static const struct opt_group fio_opt_cat_groups[] = { .name = "libhdfs I/O engine", /* libhdfs */ .mask = FIO_OPT_G_HDFS, }, + { + .name = "NBD I/O engine", /* NBD */ + .mask = FIO_OPT_G_NBD, + }, { .name = NULL, },
optgroup.h +2 -0
@@ -63,6 +63,7 @@ enum opt_category_group { __FIO_OPT_G_SG, __FIO_OPT_G_MMAP, __FIO_OPT_G_ISCSI, + __FIO_OPT_G_NBD, __FIO_OPT_G_NR, FIO_OPT_G_RATE = (1ULL << __FIO_OPT_G_RATE),
@@ -102,6 +103,7 @@ enum opt_category_group {FIO_OPT_G_MMAP = (1ULL << __FIO_OPT_G_MMAP),FIO_OPT_G_INVALID = (1ULL << __FIO_OPT_G_NR),FIO_OPT_G_ISCSI = (1ULL << __FIO_OPT_G_ISCSI), + FIO_OPT_G_NBD = (1ULL << __FIO_OPT_G_NBD), };extern const struct opt_group *opt_group_from_mask (uint64_t *mask);
options.c +3 -0
@@ -1899,6 +1899,9 @@ struct fio_option fio_options[FIO_MAX_OPTS] = { .help = "HTTP (WebDAV/S3) IO engine", },#endif + { .ival = "nbd", + .help ="Network Block Device (NBD) IO engine" + }, }, }, {
parse.h +1 -1
@@ -38,7 +38,7 @@ struct value_pair { };#define OPT_LEN_MAX 8192 -#define PARSE_MAX_VP 24 +#define PARSE_MAX_VP 32/* * Option define