Table of Contents

Notes

Changes in this version from the one before (ISC22) include:

Pre-requisites

Build Paths

These instructions assume the following paths. For simplicity, you can set these variables to the actual locations where you have/want these installed.

After setting these variables, most of the scripts can be "copy-pasted".

MY_DAOS_INSTALL_PATH=${HOME}/install/daos
MY_IO500_PATH=${HOME}/io500

Clone and Build IO-500

Clone the IO-500 repo

git clone https://github.com/IO500/io500.git -b io500-sc22 "${MY_IO500_PATH}" &&
cd "${MY_IO500_PATH}"

Edit prepare.sh to:

Assuming MY_DAOS_INSTALL_PATH is set, you can run:

( Note: for the SC22 version of IO500, line 9 of this patch has been changed to the new SC22 version)

cat << EOF > io500_prepare.patch
diff --git a/prepare.sh b/prepare.sh
index e38cae6..54dbba5 100755
--- a/prepare.sh
+++ b/prepare.sh
@@ -8,7 +8,7 @@ echo It will output OK at the end if builds succeed
 echo

 IOR_HASH=06fc08e147600f4e5896a5b9b2bf8f1c4a79121f
-PFIND_HASH=62c3a7e31
+PFIND_HASH=dfs_find

 INSTALL_DIR=\$PWD
 BIN=\$INSTALL_DIR/bin
@@ -59,7 +59,7 @@ function get_ior {

 function get_pfind {
   echo "Preparing parallel find"
-  git_co https://github.com/VI4IO/pfind.git pfind \$PFIND_HASH
+  git_co https://github.com/mchaarawi/pfind pfind \$PFIND_HASH
 }

 function get_schema_tools {
@@ -73,7 +73,7 @@ function build_ior {
   pushd "\$BUILD"/ior
   ./bootstrap
   # Add here extra flags
-  ./configure --prefix="\$INSTALL_DIR"
+  ./configure --prefix="\$INSTALL_DIR" --with-daos=\${MY_DAOS_INSTALL_PATH}
   cd src
   \$MAKE clean
   \$MAKE install
EOF

git apply io500_prepare.patch

Update the Makefile with correct paths

The Makefile needs to be updated to use the actual install location of DAOS. you can run:

cat << EOF > io500_Makefile.patch
diff --git a/Makefile b/Makefile
index ee5cee9..d8fc0e4 100644
--- a/Makefile
+++ b/Makefile
@@ -1,10 +1,12 @@
 CC = mpicc
 CFLAGS += -std=gnu99 -Wall -Wempty-body -Werror -Wstrict-prototypes -Werror=maybe-uninitialized -Warray-bounds
+CFLAGS += -I\${MY_DAOS_INSTALL_PATH}/include

 IORCFLAGS = \$(shell grep CFLAGS ./build/ior/src/build.conf | cut -d "=" -f 2-)
 CFLAGS += -g3 -lefence -I./include/ -I./src/ -I./build/pfind/src/ -I./build/ior/src/
 IORLIBS = \$(shell grep LDFLAGS ./build/ior/src/build.conf | cut -d "=" -f 2-)
 LDFLAGS += -lm \$(IORCFLAGS) \$(IORLIBS) # -lgpfs # may need some additional flags as provided to IOR
+LDFLAGS += -L\${MY_DAOS_INSTALL_PATH}/lib64 -ldaos -ldaos_common -ldfs -lgurt -luuid
 
 VERSION_GIT=\$(shell git describe --always --abbrev=12)
 VERSION_TREE=\$(shell git diff src | wc -l | sed -e 's/   *//g' -e 's/^0//' | sed "s/\([0-9]\)/-\1/")
EOF

git apply io500_Makefile.patch

Run the prepare.sh script

${MY_IO500_PATH}/prepare.sh


Run IO-500

Setup the config file

A sample config-full.ini file for reference: https://github.com/mchaarawi/io500/blob/main/config-full-isc22.ini

If you want to download this:

wget https://raw.githubusercontent.com/mchaarawi/io500/ini_files/config-full-isc22.ini

you need to change the result dir:

https://github.com/mchaarawi/io500/blob/ini_files/config-full-isc22.ini#L4

to point to a directory where the results will be stored. This directory is required to be accessible from rank 0 of the io-500 application. So it can be either:

  1. A shared filesystem (example: an NFS, dfuse, lustre fs) accessible from the first node in the hostfile where rank 0 is running.

  2. A local file system (/tmp/results) on the first node in the hostfile where rank 0 is running.

After the run is complete, the result files are all stored under this directory.

When running at first, set a short stonewall (5 seconds) to just verify everything runs fine.

For [find] the nprocs setting under that should be the same or less than the number of processes you want to run with the entire workflow (in io500.sh).

Create DAOS pool, container with type POSIX

For documentation on creating pools, see https://docs.daos.io/latest/admin/pool_operations/.

For documentation on creating containers, see https://docs.daos.io/latest/user/container/.

For example:

dmg pool create -z 100G --label io500_pool
daos container create --type POSIX --pool io500_pool --label=io500_cont

Set the pool and cont environment variables

export DAOS_POOL=io500_pool
export DAOS_CONT=io500_cont

Note that when using Intel MPI, some extra environment variables are required as detailed on:

https://docs.daos.io/v2.0/user/mpi-io/?h=intel+mpi#intel-mpi

Substitute variables in the config file

This will replace $DAOS_POOL, $DAOS_CONT with their actual values.

envsubst < config-full-isc22.ini > temp.ini

Run the io500 in one of two ways:

Results

The tarball generated at the end (whether ran the binary or with the script) with the results can be submitted to the io500 committee for consideration.