diff --git a/README b/README index 45ab03b0cddc60fe5d540af25acec670ec607079..f9980794d5029763c4e20743cfa3f2e5b6ffc85c 100644 --- a/README +++ b/README @@ -1,22 +1 @@ -Running the benchmark ---------------------- - - 1. Make sure 'elbencho' is in PATH. - - 2. sbatch -N <1 up to whatever> hdd.batch <test directory on filesystem> - sbatch -N <1 up to whatever> flash.batch <test directory on filesystem> - - -TODOs ------ - - - Define the metadata tests. - - - Add flags to make elbencho use whatever entropy we want for - compression, as suggested by hx. - - - We agreed on making block size for the streaming HDD test choosable - by the vendor. Make it an argument instead of hard-coding 1M. - - - Discuss if it is OK to hard-code thread count. Right now it is hard-coded - to 16. +Write instructions here, with and without Slurm! diff --git a/flash.batch b/flash.batch deleted file mode 100644 index 86c98f68904a598b5a048edc48cf1f7427e56482..0000000000000000000000000000000000000000 --- a/flash.batch +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh -#SBATCH -J arrh-storage-benchmark-flash - -usage() { - echo >&2 "Usage: sbatch [-N NUMNODES] flash.batch DIRECTORY" - echo >&2 "Run benchmark creating, writing, and reading files in DIRECTORY" - exit 2 -} - -if [ $# -ne 1 ] -then usage -fi - -NUMTHREADS=16 - -srun --ntasks-per-node=1 --cpus-per-task="$NUMTHREADS" \ - elbencho --service --foreground > /dev/null & - -sleep 5 # wait for services to start - -# -# Random 4K write/read -# -echo 'flash.batch: Random 4K write/read' -elbencho --hosts "$(scontrol show hostnames | tr '\n' ',')" "$1" \ - -w -r -t "$NUMTHREADS" -s 4G -b 4K -n 0 -F --rand --rotatehosts=1 - -# -# Metadata (creat/stat/unlink) -# -echo 'flash.batch: Metadata' -# to be written - -elbencho --hosts "$(scontrol show hostnames | tr '\n' ',')" \ - --quit diff --git a/hdd.batch b/hdd.batch deleted file mode 100644 index 7891b6c5505cecc69c7d90feaa742255a12ec2ca..0000000000000000000000000000000000000000 --- a/hdd.batch +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh -#SBATCH -J arrh-storage-benchmark-hdd - -usage() { - echo >&2 "Usage: sbatch [-N NUMNODES] hdd.batch DIRECTORY" - echo >&2 "Run benchmark creating, writing, and reading files in DIRECTORY" - exit 2 -} - -if [ $# -ne 1 ] -then usage -fi - -NUMTHREADS=16 - -srun --ntasks-per-node=1 --cpus-per-task="$NUMTHREADS" \ - elbencho --service --foreground > /dev/null & - -sleep 5 # wait for services to start - -# -# Sequential write/read -# -echo 'hdd.batch: Sequential write/read' -elbencho --hosts "$(scontrol show hostnames | tr '\n' ',')" "$1" \ - -w -r -t "$NUMTHREADS" -s 4G -b 1M -n 0 -F --rotatehosts=1 - -# -# Metadata (creat/stat/unlink) -# -echo 'hdd.batch: Metadata' -# to be written - -elbencho --hosts "$(scontrol show hostnames | tr '\n' ',')" \ - --quit diff --git a/storage-benchmark.sbatch b/storage-benchmark.sbatch new file mode 100644 index 0000000000000000000000000000000000000000..616237e53e0035276e630bc376182e47434b1680 --- /dev/null +++ b/storage-benchmark.sbatch @@ -0,0 +1,84 @@ +#!/bin/sh +#SBATCH -J arrh-storage-benchmark + +usage() { + echo "Usage: sbatch -N <number of nodes> --cpus-per-task=<threads per node> storage-benchmark.sbatch [ stream <blocksize> | iops | meta ] <directory>" + exit 2 +} + +info() { + echo "storage-benchmark.sbatch:" "$@" +} + +## +## Argument handling +## + +MODE=$1 +if [ "$MODE" = stream ] +then + BLOCKSIZE=$2 + shift +elif [ "$MODE" = iops ] || [ "$MODE" = meta ] +then : +else usage +fi + +DIRECTORY=$2 +if [ -z "$DIRECTORY" ] +then usage +fi + +NNODES=$SLURM_NNODES +THREADS=$SLURM_CPUS_PER_TASK +HOSTS=$(scontrol show hostnames | tr '\n' ',') + +info "Mode: $MODE" +if [ "$BLOCKSIZE" ] +then info "Block size: $BLOCKSIZE" +fi +info "Number of nodes: $NNODES" +info "Threads per node: $THREADS" +elbencho --version + +## +## The benchmark +## + +info "Starting service on all nodes" +srun --ntasks-per-node=1 elbencho --service --foreground > /dev/null & +sleep 5 # wait for services to start + +info "Starting storage benchmark" +echo + +if [ "$MODE" = stream ] +then + + # 1024 GiB per node + SIZE=$((1 * 1024 * 1024 * 1024 / THREADS)) + elbencho --hosts "$HOSTS" --rotatehosts=1 -t "$THREADS" \ + -w -r -s "$SIZE"K -b "$BLOCKSIZE" -n 0 -F "$DIRECTORY" + +elif [ "$MODE" = iops ] +then + + # 128 GiB per node + SIZE=$((128 * 1024 * 1024 / THREADS)) + elbencho --hosts "$HOSTS" --rotatehosts=1 -t "$THREADS" \ + -w -r -s "$SIZE"K -b 4K -n 0 -F --rand "$DIRECTORY" + +elif [ "$MODE" = meta ] +then + + # 10M files per node + FILES=$((10000000 / THREADS)) + elbencho --hosts "$HOSTS" --rotatehosts=1 -t "$THREADS" \ + -d -w --stat -F -N "$FILES" -D "$DIRECTORY" + +fi + +echo +info "Benchmark done" + +elbencho --hosts "$HOSTS" --quit