Recent changes (master)
The following changes since commit dcf6ad384149ee0b3f91c5a8127160cc291f7157:
Merge branch 'fio-man-page' of https://github.com/bvanassche/fio (2018-08-13 21:05:33 -0600)
are available in the git repository at:
git://git.kernel.dk/fio.git master
for you to fetch changes up to 875e8d6fa4d443068eb1c48a29f5367e454d2a37:
Merge branch 'wip-http-engine' of https://github.com/l-mb/fio (2018-08-14 10:09:47 -0600)
----------------------------------------------------------------
Jens Axboe (1):
Merge branch 'wip-http-engine' of https://github.com/l-mb/fio
Lars Marowsky-Bree (1):
engines/http: Add support for WebDAV and S3
HOWTO | 50 +++++ Makefile | 3 + configure | 34 +++ engines/http.c | 558 +++++++++++++++++++++++++++++++++++++++++++++++ examples/http-s3.fio | 34 +++ examples/http-webdav.fio | 26 +++ fio.1 | 40 ++++ optgroup.h | 2 + options.c | 5 + 9 files changed, 752 insertions(+) create mode 100644 engines/http.c create mode 100644 examples/http-s3.fio create mode 100644 examples/http-webdav.fio
---
Diff of recent changes:
HOWTO +50 -0
@@ -1835,6 +1835,15 @@ I/O engine (RBD) via librbd without the need to use the kernel rbd driver. This ioengine defines engine specific options. + **http** + I/O engine supporting GET/PUT requests over HTTP(S) with libcurl to + a WebDAV or S3 endpoint. This ioengine defines engine specific options. + + This engine only supports direct IO of iodepth=1; you need to scale this + via numjobs. blocksize defines the size of the objects to be created. + + TRIM is translated to object deletion. + **gfapi** Using GlusterFS libgfapi sync interface to direct access to GlusterFS volumes without having to go through FUSE. This ioengine
@@ -2115,6 +2124,47 @@ with the caveat that when used on the command line, they must come after the transferred to the device. The writefua option is ignored with this selection. +.. option:: http_host=str : [http] + + Hostname to connect to. For S3, this could be the bucket hostname. + Default is **localhost** + +.. option:: http_user=str : [http] + + Username for HTTP authentication. + +.. option:: http_pass=str : [http] + + Password for HTTP authentication. + +.. option:: https=bool : [http] + + Enable HTTPS instead of http. Default is **0** + +.. option:: http_s3=bool : [http] + + Enable S3 specific HTTP headers such as authenticating requests + with AWS Signature Version 4. Default is **0** + +.. option:: http_s3_region=str : [http] + + The S3 region/zone string. + Default is **us-east-1** + +.. option:: http_s3_key=str : [http] + + The S3 secret key. + +.. option:: http_s3_keyid=str : [http] + + The S3 key/access id. + +.. option:: http_verbose=int : [http] + + Enable verbose requests from libcurl. Useful for debugging. 1 + turns on verbose logging from libcurl, 2 additionally enables + HTTP IO tracing. Default is **0** + I/O depth ~~~~~~~~~
Makefile +3 -0
@@ -101,6 +101,9 @@ endif ifdef CONFIG_RBD SOURCE += engines/rbd.c endif +ifdef CONFIG_HTTP + SOURCE += engines/http.c +endif SOURCE += oslib/asprintf.c ifndef CONFIG_STRSEP SOURCE += oslib/strsep.c
configure +34 -0
@@ -181,6 +181,8 @@ for opt do ;; --disable-rbd) disable_rbd="yes" ;; + --disable-http) disable_http="yes" + ;; --disable-gfapi) disable_gfapi="yes" ;; --enable-libhdfs) libhdfs="yes"
@@ -1567,6 +1569,35 @@ fi print_config "IPv6 helpers" "$ipv6" ########################################## +# check for http +if test "$http" != "yes" ; then + http="no" +fi +cat > $TMPC << EOF +#include <curl/curl.h> +#include <openssl/hmac.h> + +int main(int argc, char **argv) +{ + CURL *curl; + HMAC_CTX *ctx; + + curl = curl_easy_init(); + curl_easy_cleanup(curl); + + ctx = HMAC_CTX_new(); + HMAC_CTX_reset(ctx); + HMAC_CTX_free(ctx); + return 0; +} +EOF +if test "$disable_http" != "yes" && compile_prog "" "-lcurl -lssl -lcrypto" "curl"; then + LIBS="-lcurl -lssl -lcrypto $LIBS" + http="yes" +fi +print_config "http engine" "$http" + +########################################## # check for rados if test "$rados" != "yes" ; then rados="no"
@@ -2346,6 +2377,9 @@ fi if test "$ipv6" = "yes" ; then output_sym "CONFIG_IPV6" fi +if test "$http" = "yes" ; then + output_sym "CONFIG_HTTP" +fi if test "$rados" = "yes" ; then output_sym "CONFIG_RADOS" fi
engines/http.c new file +558 -0
558 lines not on this page · raw message
examples/http-s3.fio new file +34 -0
@@ -0,0 +1,34 @@ +# Example test for the HTTP engine's S3 support against Amazon AWS. +# Obviously, you have to adjust the S3 credentials; for this example, +# they're passed in via the environment. +# + +[global] +ioengine=http +name=test +direct=1 +filename=/larsmb-fio-test/object +http_verbose=0 +https=1 +http_s3=1 +http_s3_key=${S3_KEY} +http_s3_keyid=${S3_ID} +http_host=s3.eu-central-1.amazonaws.com +http_s3_region=eu-central-1 +group_reporting + +# With verify, this both writes and reads the object +[create] +rw=write +bs=4k +size=64k +io_size=4k +verify=sha256 + +[trim] +stonewall +rw=trim +bs=4k +size=64k +io_size=4k +
examples/http-webdav.fio new file +26 -0
@@ -0,0 +1,26 @@ +[global] +ioengine=http +rw=randwrite +name=test +direct=1 +http_verbose=0 +http_s3=0 +https=0 +http_host=localhost +filename_format=/dav/bucket.$jobnum +group_reporting +bs=64k +size=1M + +[create] +numjobs=16 +rw=randwrite +io_size=10M +verify=sha256 + +# This will delete all created objects again +[trim] +stonewall +numjobs=16 +rw=trim +io_size=1M
fio.1 +40 -0
@@ -1608,6 +1608,15 @@ I/O engine supporting direct access to Ceph Rados Block Devices (RBD) via librbd without the need to use the kernel rbd driver. This ioengine defines engine specific options. .TP +.B http +I/O engine supporting GET/PUT requests over HTTP(S) with libcurl to +a WebDAV or S3 endpoint. This ioengine defines engine specific options. + +This engine only supports direct IO of iodepth=1; you need to scale this +via numjobs. blocksize defines the size of the objects to be created. + +TRIM is translated to object deletion. +.TP .B gfapi Using GlusterFS libgfapi sync interface to direct access to GlusterFS volumes without having to go through FUSE. This ioengine
@@ -1810,6 +1819,37 @@ by default. Poll store instead of waiting for completion. Usually this provides better throughput at cost of higher(up to 100%) CPU utilization. .TP +.BI (http)http_host \fR=\fPstr +Hostname to connect to. For S3, this could be the bucket name. Default +is \fBlocalhost\fR +.TP +.BI (http)http_user \fR=\fPstr +Username for HTTP authentication. +.TP +.BI (http)http_pass \fR=\fPstr +Password for HTTP authentication. +.TP +.BI (http)https \fR=\fPbool +Whether to use HTTPS instead of plain HTTP. Default is \fB0\fR. +.TP +.BI (http)http_s3 \fR=\fPbool +Include S3 specific HTTP headers such as authenticating requests with +AWS Signature Version 4. Default is \fB0\fR. +.TP +.BI (http)http_s3_region \fR=\fPstr +The S3 region/zone to include in the request. Default is \fBus-east-1\fR. +.TP +.BI (http)http_s3_key \fR=\fPstr +The S3 secret key. +.TP +.BI (http)http_s3_keyid \fR=\fPstr +The S3 key/access id. +.TP +.BI (http)http_verbose \fR=\fPint +Enable verbose requests from libcurl. Useful for debugging. 1 turns on +verbose logging from libcurl, 2 additionally enables HTTP IO tracing. +Default is \fB0\fR +.TP .BI (mtd)skip_bad \fR=\fPbool Skip operations against known bad blocks. .TP
optgroup.h +2 -0
@@ -56,6 +56,7 @@ enum opt_category_group { __FIO_OPT_G_ACT, __FIO_OPT_G_LATPROF, __FIO_OPT_G_RBD, + __FIO_OPT_G_HTTP, __FIO_OPT_G_GFAPI, __FIO_OPT_G_MTD, __FIO_OPT_G_HDFS,
@@ -91,6 +92,7 @@ enum opt_category_group {FIO_OPT_G_ACT = (1ULL << __FIO_OPT_G_ACT),FIO_OPT_G_LATPROF = (1ULL << __FIO_OPT_G_LATPROF),FIO_OPT_G_RBD = (1ULL << __FIO_OPT_G_RBD), +FIO_OPT_G_HTTP = (1ULL << __FIO_OPT_G_HTTP),FIO_OPT_G_GFAPI = (1ULL << __FIO_OPT_G_GFAPI),FIO_OPT_G_MTD = (1ULL << __FIO_OPT_G_MTD), FIO_OPT_G_HDFS = (1ULL << __FIO_OPT_G_HDFS),
options.c +5 -0
@@ -1863,6 +1863,11 @@ struct fio_option fio_options[FIO_MAX_OPTS] = { .help = "PMDK libpmem based IO engine", },#endif +#ifdef CONFIG_HTTP + { .ival = "http", + .help = "HTTP (WebDAV/S3) IO engine", + }, +#endif }, }, {