#!/bin/bash export nwif=eth0 bandwidth=1e9 remotedir="$PWD" provision=false asynclist="sync async" modelist="listener waitset" sizelist="0 20 50 100 200 500 1000 2000 5000 10000 20000 50000 100000 200000 500000 1000000" timeout=30 loopback=true resultdir="latency-result" usage () { cat >&2 <$cfg < 17 $nwif $loopback 65500B 4000B 500kB \${async:-0} 3s config EOF if [ ! -x bin/ddsperf ] ; then echo "bin/ddsperf not found on the local machine" >&2 exit 1 fi [ -d $resultdir ] || { echo "output directory $resultdir doesn't exist" >&2 ; exit 1 ; } if $provision ; then echo "provisioning ..." for r in $pubremote "$@" ; do ssh $r mkdir -p $remotedir $remotedir/bin $remotedir/lib scp lib/libddsc.so.0 $r:$remotedir/lib scp bin/ddsperf $r:$remotedir/bin done fi topic=KS [ -z "$sizelist" ] && topic=OU export CYCLONEDDS_URI=file://$PWD/$cfg for r in "$@" ; do scp $cfg $r:$remotedir || { echo "failed to copy $cfg to $remote:$PWD" >&2 ; exit 1 ; } done for async_mode in $asynclist ; do case "$async_mode" in sync) async=0 ;; async) async=1 ;; *) echo "$async_mode: invalid setting for ASYNC" >&2 ; continue ;; esac export async for sub_mode in $modelist ; do echo "======== ASYNC $async MODE $sub_mode =========" cat > run-pong.tmp < /dev/null & echo \$! EOF killpongs="" for r in "$@" ; do scp run-pong.tmp $r:$remotedir rpongpid=`ssh $r ". $remotedir/run-pong.tmp"` killpongs="$killpongs ssh $r kill -9 $rpongpid &" done outdir=$resultdir/$async_mode-$sub_mode mkdir $outdir touch $outdir/ping.log tail -f $outdir/ping.log & xpid=$! for size in ${sizelist:-0} ; do echo "size $size" bin/ddsperf -d $nwif:$bandwidth -c -D $timeout -T $topic ping size $size $sub_mode >> $outdir/ping.log sleep 5 done eval $killpongs sleep 1 kill $xpid wait done done