Skip to content

Commit

Permalink
Merge pull request #352 from mchaarawi/mschaara/dfs_3.3
Browse files Browse the repository at this point in the history
Mschaara/dfs 3.3
  • Loading branch information
JulianKunkel committed Jun 3, 2022
2 parents d0fa972 + 9bfc640 commit 1825d19
Show file tree
Hide file tree
Showing 7 changed files with 129 additions and 670 deletions.
75 changes: 18 additions & 57 deletions README_DAOS
Original file line number Diff line number Diff line change
Expand Up @@ -4,55 +4,13 @@ Building
The DAOS library must be installed on the system.

./bootstrap
./configure --prefix=iorInstallDir --with-daos=DIR --with-cart=DIR

One must specify "--with-daos=/path/to/daos/install and --with-cart". When that
is specified the DAOS and DFS driver will be built.

The DAOS driver uses the DAOS API to open a container (or create it if it
doesn't exist first) then create an array object in that container (file) and
read/write to the array object using the daos Array API. The DAOS driver works
with IOR only (no mdtest support yet). The file name used by IOR (passed by -o
option) is hashed to an object ID that is used as the array oid.
./configure --prefix=iorInstallDir --with-daos=DIR

The DFS (DAOS File System) driver creates an encapsulated namespace and emulates
the POSIX driver using the DFS API directly on top of DAOS. The DFS driver works
with both IOR and mdtest.

Running with DAOS API
---------------------

ior -a DAOS [ior_options] [daos_options]

In the IOR options, the file name should be specified as a container uuid using
"-o <container_uuid>". If the "-E" option is given, then this UUID shall denote
an existing container created by a "matching" IOR run. Otherwise, IOR will
create a new container with this UUID. In the latter case, one may use
uuidgen(1) to generate the UUID of the new container.

The DAOS options include:

Required Options:
--daos.pool <pool_uuid>: pool uuid to connect to (has to be created beforehand)
--daos.svcl <pool_svcl>: pool svcl list (: separated)
--daos.cont <cont_uuid>: container for the IOR files/objects (can use `uuidgen`)

Optional Options:
--daos.group <group_name>: group name of servers with the pool
--daos.chunk_size <chunk_size>: Chunk size of the array object controlling striping over DKEYs
--daos.destroy flag to destory the container on finalize
--daos.oclass <object_class>: specific object class for array object

Examples that should work include:

- "ior -a DAOS -w -W -o file_name --daos.pool <pool_uuid> --daos.svcl <svc_ranks>\
--daos.cont <cont_uuid>"

- "ior -a DAOS -w -W -r -R -o file_name -b 1g -t 4m \
--daos.pool <pool_uuid> --daos.svcl <svc_ranks> --daos.cont <cont_uuid>\
--daos.chunk_size 1024 --daos.oclass R2"

Running with DFS API
Running
---------------------

ior -a DFS [ior_options] [dfs_options]
Expand All @@ -64,23 +22,26 @@ Required Options:
--dfs.cont <co_uuid>: container uuid that will hold the encapsulated namespace

Optional Options:
--dfs.group <group_name>: group name of servers with the pool
--dfs.chunk_size <chunk_size>: Chunk size of the files
--dfs.destroy flag to destory the container on finalize
--dfs.oclass <object_class>: specific object class for files

In the IOR options, the file name should be specified on the root dir directly
since ior does not create directories and the DFS container representing the
encapsulated namespace is not the same as the system namespace the user is
executing from.
--dfs.group <group_name>: group name of servers with the pool (default: daos_server)
--dfs.chunk_size <chunk_size>: Chunk size of the files (default: 1MiB)
--dfs.destroy: flag to destroy the container on finalize (default: no)
--dfs.oclass <object_class>: specific object class for files (default: SX)
--dfs.dir_oclass <object_class>: specific object class for directories (default: SX)
--dfs.prefix <path>: absolute path to account for DFS files/dirs before the cont root

If prefix is not set, in the IOR options, the file name should be specified on
the root dir directly since ior does not create directories and the DFS
container representing the encapsulated namespace is not the same as the system
namespace the user is executing from.

Examples that should work include:
- "ior -a DFS -w -W -o /test1 --dfs.pool <pool_uuid> --dfs.svcl <svc_ranks> --dfs.cont <co_uuid>"
- "ior -a DFS -w -W -r -R -o /test2 -b 1g -t 4m -C --dfs.pool <pool_uuid> --dfs.svcl <svc_ranks> --dfs.cont <co_uuid>"
- "ior -a DFS -w -r -o /test3 -b 8g -t 1m -C --dfs.pool <pool_uuid> --dfs.svcl <svc_ranks> --dfs.cont <co_uuid>"

Running mdtest, the user needs to specify a directory with -d where the test
tree will be created. Some examples:
- "mdtest -a DFS -n 100 -F -D -d /bla --dfs.pool <pool_uuid> --dfs.svcl <svc_ranks> --dfs.cont <co_uuid>"
- "mdtest -a DFS -n 1000 -F -C -d /bla --dfs.pool <pool_uuid> --dfs.svcl <svc_ranks> --dfs.cont <co_uuid>"
- "mdtest -a DFS -I 10 -z 5 -b 2 -L -d /bla --dfs.pool <pool_uuid> --dfs.svcl <svc_ranks> --dfs.cont <co_uuid>"
tree will be created (set '/' if writing to the root of the DFS container). Some
examples:
- "mdtest -a DFS -n 100 -F -D -d / --dfs.pool <pool_uuid> --dfs.svcl <svc_ranks> --dfs.cont <co_uuid>"
- "mdtest -a DFS -n 1000 -F -C -d / --dfs.pool <pool_uuid> --dfs.svcl <svc_ranks> --dfs.cont <co_uuid>"
- "mdtest -a DFS -I 10 -z 5 -b 2 -L -d / --dfs.pool <pool_uuid> --dfs.svcl <svc_ranks> --dfs.cont <co_uuid>"
27 changes: 6 additions & 21 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -211,40 +211,25 @@ AM_COND_IF([USE_CEPHFS_AIORI],[
AC_DEFINE([USE_CEPHFS_AIORI], [], [Build CEPHFS backend AIORI])
])

# DAOS Backends (DAOS and DFS) IO support require DAOS and CART/GURT
AC_ARG_WITH([cart],
[AS_HELP_STRING([--with-cart],
[support IO with DAOS backends @<:@default=no@:>@])],
[], [with_cart=no])

AS_IF([test "x$with_cart" != xno], [
CART="yes"
LDFLAGS="$LDFLAGS -L$with_cart/lib64 -Wl,--enable-new-dtags -Wl,-rpath=$with_cart/lib64"
LDFLAGS="$LDFLAGS -L$with_cart/lib -Wl,--enable-new-dtags -Wl,-rpath=$with_cart/lib"
CPPFLAGS="$CPPFLAGS -I$with_cart/include/"
AC_CHECK_HEADERS(gurt/common.h,, [unset CART])
AC_CHECK_LIB([gurt], [d_hash_murmur64],, [unset CART])
])

# DAOS-FS Backend (DFS)
AC_ARG_WITH([daos],
[AS_HELP_STRING([--with-daos],
[support IO with DAOS backends @<:@default=no@:>@])],
[support IO with DAOS backend @<:@default=no@:>@])],
[], [with_daos=no])

AS_IF([test "x$with_daos" != xno], [
DAOS="yes"
LDFLAGS="$LDFLAGS -L$with_daos/lib64 -Wl,--enable-new-dtags -Wl,-rpath=$with_daos/lib64"
CPPFLAGS="$CPPFLAGS -I$with_daos/include"
AC_CHECK_HEADERS(daos_types.h,, [unset DAOS])
AC_CHECK_HEADERS(gurt/common.h,, [unset DAOS])
AC_CHECK_HEADERS(daos.h,, [unset DAOS])
AC_CHECK_LIB([gurt], [d_hash_murmur64],, [unset DAOS])
AC_CHECK_LIB([uuid], [uuid_generate],, [unset DAOS])
AC_CHECK_LIB([daos_common], [daos_sgl_init],, [unset DAOS])
AC_CHECK_LIB([daos], [daos_init],, [unset DAOS])
AC_CHECK_LIB([dfs], [dfs_mkdir],, [unset DAOS])
])

AM_CONDITIONAL([USE_DAOS_AIORI], [test x$DAOS = xyes])
AM_COND_IF([USE_DAOS_AIORI],[
AC_DEFINE([USE_DAOS_AIORI], [], [Build DAOS backends AIORI])
AC_DEFINE([USE_DAOS_AIORI], [], [Build DAOS-FS backend AIORI])
])

# Gfarm support
Expand Down
3 changes: 2 additions & 1 deletion src/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,8 @@ endif


if USE_DAOS_AIORI
extraSOURCES += aiori-DAOS.c aiori-DFS.c
extraSOURCES += aiori-DFS.c
extraLDADD += -lgurt -ldaos_common -ldaos -ldfs -luuid
endif

if USE_GFARM_AIORI
Expand Down

0 comments on commit 1825d19

Please sign in to comment.