#!/bin/bash trap 'killall -9 parallel-dd' INT tmpdir=$1 usage="USAGE: parallel-dd TMPDIR\n" [ -z $tmpdir ] && printf "$usage" && exit mkdir $tmpdir size=12K serial_dd() { local thread=$1 mkdir -p ${tmpdir}/$thread # create 10000 files per thread (hence total of 1 million files) for count in {1..10000} do local uuidfile=`uuidgen` local part1=`expr substr $uuidfile 1 2` local part2=`expr substr $uuidfile 3 2` echo $((time (mkdir -p ${tmpdir}/$part1/$part2; dd if=/dev/zero of=${tmpdir}/$part1/$part2/$uuidfile bs=${size} count=1 oflag=direct conv=fdatasync ) 2>&1 ) | grep real | sed -e 's/real//' | tr -d '\t') done } parallel_dd() { for i in {1..100} do serial_dd $i & pids[${i}]=$! done for pid in ${pids[*]}; do wait $pid done echo -n "Total time: " } for milCount in {1..30} do echo ---------- ((time parallel_dd) 2>&1) echo Finished run ${milCount} done