Skip to content

Instantly share code, notes, and snippets.

@krishnasrinivas
Created March 18, 2021 16:54
Show Gist options
  • Save krishnasrinivas/e2035c2af6d3936fdcae6f233b483b79 to your computer and use it in GitHub Desktop.
Save krishnasrinivas/e2035c2af6d3936fdcae6f233b483b79 to your computer and use it in GitHub Desktop.
#!/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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment