Recent changes (master)
Subsystems (2)
The following changes since commit 9ee669faa39003c2317e5df892314bcfcee069e3:
configure: avoid pkg-config usage for http engine (2018-08-16 18:58:27 +0200)
are available in the git repository at:
git://git.kernel.dk/fio.git master
for you to fetch changes up to c44d2c6e97245bf68a57f9860a1c92c7bc065f82:
Move steady state unit test to t/ (2018-08-17 19:39:07 -0600)
----------------------------------------------------------------
Ga��tan Bossu (1):
Add support for DDN's Infinite Memory Engine
Jens Axboe (7):
Merge branch 'master' of https://github.com/kelleymh/fio
Merge branch 'ime-support' of https://github.com/DDNStorage/fio-public into ddn-ime engines/ime: various code and style cleanups
Sync man page with fio for IME
Merge branch 'ddn-ime'
Merge branch 'master' of https://github.com/kelleymh/fio
Move steady state unit test to t/
Michael Kelley (3):
Reimplement axmap_next_free() to prevent distribution skew Add tests specifically for axmap_next_free() Remove unused code in lib/axmap.c
Tomohiro Kusumi (1):
http: fix compile-time warnings
HOWTO | 16 +
Makefile | 3 +
configure | 29 ++
engines/http.c | 4 +-
engines/ime.c | 899 +++++++++++++++++++++++++++++++++
examples/ime.fio | 51 ++
fio.1 | 14 +
lib/axmap.c | 189 ++++---
lib/axmap.h | 1 -
options.c | 11 +
t/axmap.c | 162 +++++-
{unit_tests => t}/steadystate_tests.py | 0
12 files changed, 1272 insertions(+), 107 deletions(-)
create mode 100644 engines/ime.c
create mode 100644 examples/ime.fio
rename {unit_tests => t}/steadystate_tests.py (100%)---
Diff of recent changes:
HOWTO +16 -0
@@ -1901,6 +1901,22 @@ I/O engine mounted with DAX on a persistent memory device through the PMDK libpmem library. + **ime_psync** + Synchronous read and write using DDN's Infinite Memory Engine (IME). + This engine is very basic and issues calls to IME whenever an IO is + queued. + + **ime_psyncv** + Synchronous read and write using DDN's Infinite Memory Engine (IME). + This engine uses iovecs and will try to stack as much IOs as possible + (if the IOs are "contiguous" and the IO depth is not exceeded) + before issuing a call to IME. + + **ime_aio** + Asynchronous read and write using DDN's Infinite Memory Engine (IME). + This engine will try to stack as much IOs as possible by creating + requests for IME. FIO will then decide when to commit these requests. + I/O engine specific parameters ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Makefile +3 -0
@@ -145,6 +145,9 @@ endif ifdef CONFIG_LIBPMEM SOURCE += engines/libpmem.c endif +ifdef CONFIG_IME + SOURCE += engines/ime.c +endif ifeq ($(CONFIG_TARGET_OS), Linux) SOURCE += diskutil.c fifo.c blktrace.c cgroup.c trim.c engines/sg.c \
configure +29 -0
@@ -202,6 +202,8 @@ for opt do ;; --disable-native) disable_native="yes" ;; + --with-ime=*) ime_path="$optarg" + ;; --help) show_help="yes" ;;
@@ -233,6 +235,7 @@ if test "$show_help" = "yes" ; then echo "--disable-optimizations Don't enable compiler optimizations" echo "--enable-cuda Enable GPUDirect RDMA support" echo "--disable-native Don't build for native host" + echo "--with-ime= Install path for DDN's Infinite Memory Engine" exit $exit_val fi
@@ -1963,6 +1966,29 @@ print_config "PMDK dev-dax engine" "$devdax" print_config "PMDK libpmem engine" "$pmem" ########################################## +# Check whether we support DDN's IME +if test "$libime" != "yes" ; then + libime="no" +fi +cat > $TMPC << EOF +#include <ime_native.h> +int main(int argc, char **argv) +{ + int rc; + ime_native_init(); + rc = ime_native_finalize(); + return 0; +} +EOF +if compile_prog "-I${ime_path}/include" "-L${ime_path}/lib -lim_client" "libime"; then + libime="yes" + CFLAGS="-I${ime_path}/include $CFLAGS" + LDFLAGS="-Wl,-rpath ${ime_path}/lib -L${ime_path}/lib $LDFLAGS" + LIBS="-lim_client $LIBS" +fi +print_config "DDN's Infinite Memory Engine" "$libime" + +########################################## # Check if we have lex/yacc available yacc="no" yacc_is_bison="no"
@@ -2455,6 +2481,9 @@ fi if test "$pmem" = "yes" ; then output_sym "CONFIG_LIBPMEM" fi +if test "$libime" = "yes" ; then + output_sym "CONFIG_IME" +fi if test "$arith" = "yes" ; then output_sym "CONFIG_ARITHMETIC" if test "$yacc_is_bison" = "yes" ; then
engines/http.c +2 -2
@@ -546,7 +546,7 @@ static enum fio_q_status fio_http_queue(struct thread_data *td, }else if (io_u->ddir ==DDIR_TRIM ) {curl_easy_setopt (http->curl,CURLOPT_HTTPGET ,1L );curl_easy_setopt (http->curl,CURLOPT_CUSTOMREQUEST ,"DELETE" ); -curl_easy_setopt (http->curl,CURLOPT_INFILESIZE_LARGE ,0 ); +curl_easy_setopt (http->curl,CURLOPT_INFILESIZE_LARGE , (curl_off_t )0 );curl_easy_setopt (http->curl,CURLOPT_READDATA ,NULL );curl_easy_setopt (http->curl,CURLOPT_WRITEDATA ,NULL ); res =curl_easy_perform (http->curl);
@@ -608,7 +608,7 @@ static int fio_http_setup(struct thread_data *td) }curl_easy_setopt (http->curl,CURLOPT_READFUNCTION , _http_read);curl_easy_setopt (http->curl,CURLOPT_WRITEFUNCTION , _http_write); -curl_easy_setopt (http->curl,CURLOPT_SEEKFUNCTION , _http_seek); +curl_easy_setopt (http->curl,CURLOPT_SEEKFUNCTION , &_http_seek);if (o->user && o->pass) {curl_easy_setopt (http->curl,CURLOPT_USERNAME , o->user);curl_easy_setopt (http->curl,CURLOPT_PASSWORD , o->pass);
engines/ime.c new file +899 -0
899 lines not on this page · raw message
examples/ime.fio new file +51 -0
52 lines not on this page · raw message
fio.1 +14 -0
@@ -1673,6 +1673,20 @@ done other than creating the file. Read and write using mmap I/O to a file on a filesystem mounted with DAX on a persistent memory device through the PMDK libpmem library. +.TP +.B ime_psync +Synchronous read and write using DDN's Infinite Memory Engine (IME). This +engine is very basic and issues calls to IME whenever an IO is queued. +.TP +.B ime_psyncv +Synchronous read and write using DDN's Infinite Memory Engine (IME). This +engine uses iovecs and will try to stack as much IOs as possible (if the IOs +are "contiguous" and the IO depth is not exceeded) before issuing a call to IME. +.TP +.B ime_aio +Asynchronous read and write using DDN's Infinite Memory Engine (IME). This +engine will try to stack as much IOs as possible by creating requests for IME. +FIO will then decide when to commit these requests. .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,
lib/axmap.c +91 -98
247 lines not on this page · raw message
lib/axmap.h +0 -1
@@ -8,7 +8,6 @@ struct axmap;struct axmap *axmap_new (unsigned long nr_bits);void axmap_free (struct axmap *bm); -void axmap_clear (struct axmap *axmap,uint64_t bit_nr);void axmap_set (struct axmap *axmap,uint64_t bit_nr);unsigned int axmap_set_nr (struct axmap *axmap,uint64_t bit_nr,unsigned int nr_bits);bool axmap_isset (struct axmap *axmap,uint64_t bit_nr);
options.c +11 -0
@@ -1845,6 +1845,17 @@ struct fio_option fio_options[FIO_MAX_OPTS] = { },#endif +#ifdef CONFIG_IME + { .ival = "ime_psync", + .help = "DDN's IME synchronous IO engine", + }, + { .ival = "ime_psyncv", + .help = "DDN's IME synchronous IO engine using iovecs", + }, + { .ival = "ime_aio", + .help = "DDN's IME asynchronous IO engine", + }, +#endif #ifdef CONFIG_LINUX_DEVDAX { .ival = "dev-dax", .help = "DAX Device based IO engine",
t/axmap.c +156 -6
188 lines not on this page · raw message
t/steadystate_tests.py new file +226 -0
226 lines not on this page · raw message
unit_tests/steadystate_tests.py deleted +0 -226
226 lines not on this page · raw message